与其说网络是一项技术创新,不如说它是一项社交创举。
我设计它意在延伸社交性,帮助大家一起工作,而不是为了制造一种高科技玩具。网络的终极目标是支持并改进现实世界的网络化生存。现实世界中,我们会组成家庭、组织协会、组建公司。现实世界中,我们会跨越空间的樊篱建立信任;我们亦会近在咫尺却心生芥蒂。
——Tim Berners-Lee(万维网之父),《编织万维网》(原书由哈珀·柯林斯出版集团出版)
Matthew A. Russell的说明
自本书第2版出版以来,整个世界发生了很多变化。我经历和学习了许多新事物,技术也以惊人的速度不断发展,社交网络本身已经成熟到一定程度,以至于政府现在正在制定有关如何收集、共享和使用数据的法律政策。
我非常确定当下是本书更新的最佳时刻。但我深知撰写本书新版以更新并扩展内容所需的工作量是巨大的,自己的日程安排可能无法满足。我知道是时候找一位合著者,满足对挖掘社交网站数据充满好奇的下一拨企业家、技术人员和骇客的需要。我花了一年多的时间终于找到合适的合著者,他既对这一主题有着共同的热情,又拥有更新本书所需的技能和决心。
我都不知该如何表达对合著者Mikhail Klassen本人和他对本书无与伦比的贡献的感谢了。他做了大量的工作。在后面的章节中,你将看到他在让代码与时俱进,让其运行时环境变得易于访问等方面所做的贡献,他还贡献了全新的一章内容。除此之外,他编辑和润色了整个书稿,吸引企业家、技术人员和骇客掀起了一股了解社交网站数据挖掘的热潮。
读者必读
本书经过精心设计,为特定的目标受众提供一段难以忘怀的学习体验。那些影响心情的电子邮件、糟糕的书评或者其他误导,可能让你对本书的范围和目的产生不必要的误解。为了避免这些混乱,该前言的余下内容试图帮助你了解该书的目标受众。作为一位非常繁忙的职场人士,我们认为时间是最宝贵的财富。尽管我们经常遭遇失败,但是当我们走出这种困境时,我们真的尽力向我们的同行致敬。这个前言是我们试图向你(读者)致敬,我们的致敬方式是清楚地阐释该书能否满足你的期望。
管理你的期望
首先,本书假设你希望学习如何挖掘来自流行社交网络资源中的数据,避免在运行示例代码时遇到技术问题,并且在该过程中获得很多乐趣。尽管你阅读本书仅仅可能是为了了解社交网站数据挖掘可能做什么事情,但你应该知道本书的写作风格。本书的组织结构让你可以跟随本书尝试许多练习,并且一旦完成了一些安装开发环境的简单步骤就能进入数据挖掘者的行列。如果你以前编写过程序,你应该会发现运行这些示例代码是相对轻松的。如果你以前从未编程过但认为自己的技术领悟能力还可以,那么我敢说本书可作为你一次难忘旅程的出发点,它将以你从未想象到的方式扩展你的思想。
为了充分享受本书以及它所提供的内容,你需要对挖掘流行社交网站(如Twitter、Facebook、LinkedIn和Instagram等)存储的各种数据很感兴趣。你需要主动安装Docker,利用它运行本书的虚拟机体验并且在Jupyter Notebook上实践本书的示例代码。Jupyter Notebook是一个奇妙的基于网络的工具,每一章的示例代码都基于它。执行这些代码通常和在键盘上按一些键一样容易,因为所有的代码都是以友好的用户接口呈现的。
本书将会教你一些你乐于学习的事物,并且向你的工具箱中加入一些独立的工具,但是可能更加重要的是,它将会为你讲述一个故事并且在途中给你带来快乐。这是一个与社交网站相关的数据科学的故事,它向你展示这些网站中堆积的数据以及一些你能够使用这些数据做到的事。
如果你要从头到尾阅读本书,你会注意到这个故事是按照章节顺序展开的。尽管每一章会大体遵循一个容易理解的模式介绍一种社交网站,教你如何使用它的API获取数据,并且介绍一些分析数据的技术,但是该书讲述的更完整故事的复杂度是逐渐增加的。本书的前几章将花一些时间介绍基本概念,然而后面的章会在前几章的基础上系统地介绍一系列挖掘社交网站的工具和技术,你可以将其应用到生活的其他方面。
一些社交网站最近几年已经从流行转变到主流再转变到家喻户晓,改变着我们在线上和线下的生活方式,它能够让技术给我们呈现出最好的(有时是最坏的)一面。总的来说,本书的每一章都将社交网站与数据挖掘、分析和可视化技术的内容组织在一起来探索数据,并且回答以下典型的问题:
谁与谁相识,哪些人是他们社交网络中共有的。
特定人群之间交流的频率有多高。
哪一个社交网络关系为特定的领域产生了最大的价值。
在网络世界里,地理位置是如何影响你的社会关系的。
谁是某个社交网络里最有影响力的人(最流行的人)。
. 人们在谈论些什么(这些没有价值)。
基于人们在数字世界使用的人类语言,人们感兴趣的是什么。
这些基本问题的答案经常会产生一些有价值的见解并且为企业家、社会科学家以及其他急于理解一个问题空间并且寻找解决方案的实践者展现(有时是盈利的)机会。从零开始构建一个一站式杀手级应用程序(killer app)来回答这些问题,探索远远超出经典可视化库的用法,以及构建任何最先进的东西等活动不在本书的范围之内。如果你购买本书是为了做这些事情,那么你真的会非常失望。然而,本书提供了回答这些问题的基本构造单元并且能够为你构建杀手级应用程序或进行学术研究提供助力。自己浏览几章看看,本书涵盖了大量的必备知识。
需要特别注意的一件事是API不断变化。社交媒体存在的时间并不是很久,即使是当今看来最成熟的平台也仍在适应人们的使用方式,并面临着对安全和隐私的新威胁。因此,我们的代码与其平台的接口(API)也可能会发生变化,这意味着本书提供的代码示例将来可能无法正常工作。我们尝试创建对一般用途和应用程序开发人员有用的现实示例,因此其中一些示例将需要提交应用程序以供审核和批准。虽然我们会尽力对这类内容予以标注,但API的服务条款可能随时更改。不过,只要你的应用遵守服务条款,它就有可能获得批准,因此值得你付出努力。
以Python为中心的技术
本书中的所有示例代码利用了Python语言的优势。Python直观的语法、迷人的包生态系统,可以最小化API访问和数据操作的复杂性。实际上是JSON(http://bit.ly/1a1kFaF)的核心数据结构使它成为一个出色的教学工具,它不仅强大而且非常容易启动和运行。如果这还不足以让Python既成为一个伟大的教学选择又成为挖掘社交网络的选择,那么可以借助Jupyter Notebook(http://bit.ly/2LOhGvt)这个强大、交互式的代码解释器,它在你的Web浏览器中提供了一个类似笔记(notebook)的用户体验并且将代码执行、代码输出、文本、数学排版、绘图以及更多的功能结合起来。我们很难想到用户体验更好的学习环境,因为它将提供示例代码的麻烦最小化了,你作为读者就可以跟着它一起执行代码而不会遇到任何麻烦。图P-1提供了一个Jupyter Notebook体验的图示,它显示了书中每一章Notebook的仪表盘展示。图P-2显示了其中一个Notebook的视图。
图P-1:Jupyter Notebook概览,其中为Notebook的仪表盘展示
图P-2:“Chapter 1 - Mining Twitter”Notebook
书中的每一章都对应一个附带示例代码的Jupyter Notebook。这使得学习代码、修改bug、按照自己的目的进行自定义成为一种乐趣。如果你编写过一些程序但是却从来没有看到过Python语法,提前浏览几页一定是你需要的。可以在线获得优秀的文档,如果你正在寻找一个权威的Python编程语言的介绍,那么官方的Python教程(http://bit.ly/1a1kDj8)是很好的起点。本书第3版的Python源代码彻底升级为使用Python 3.6编写。
Jupyter Notebook无疑是很好用的,但是如果你刚开始接触Python编程,那么仅仅建议你跟随网上的说明配置你的开发环境可能会适得其反(甚至可能是无理的)。为了使你尽可能愉快地体验本书,本书提供了一站式虚拟机体验,它包含Jupyter Notebook并预装了你跟随本书示例所需的其他所有依赖。你需要做的就是遵循一些简单的步骤,大约花费15分钟就可以运行源代码了。如果你有编程背景,你可以配置自己的开发环境,但是我们希望能说服你:虚拟机体验是更好的出发点。
更多关于本书虚拟机体验的详细信息见附录A。附录C同样值得你注意:它提供了一些Jupyter Notebook的提示以及本书源代码中使用的常见Python编程惯用法。
无论你是一位Python新手还是高手,本书最新修复bug的源代码以及附带的用于构建虚拟机的脚本可在GitHub(http://bit.ly/Mining-the-Social-Web-3E)上获得。GitHub是一个社交Git(http://bit.ly/16mhOep)仓库,它始终反映最新可用的示例代码。我们希望社交编程将会增强那些想要一起工作的志同道合者之间的合作,便于他们扩充示例和不断修改感兴趣的问题。希望你会派生(fork)、扩充(extend)并且改进(improve)这些源代码,甚至可能会在这个过程中认识和熟悉一些新朋友。
官方GitHub库http://bit.ly/Mining-the-Social-Web-3E包含本书最新最大程度修复bug的源代码。
第3版的具体改进
如前所述,第3版由我和Mikhail Klassen合著。
技术日新月异,社交媒体平台也随之而变。很显然,本书的更新将会反映正在发生的所有变化。第一个最明显的变化是将代码从Python 2.7升级到Python 3.0以后的新版本。尽管仍然有Python 2.7的老用户,但迁移到Python 3具有很多优点。优点之一便是更好地支持Unicode编码。在处理社交媒体数据(通常包括表情符号和其他语种的文本)时,对Unicode编码的良好支持至关重要。
在对用户隐私日益关注的气氛中,社交媒体平台正在更改其API来更好地保护用户信息,通常通过限制第三方应用程序(甚至包括经过审查和批准的应用程序)对其平台数据的访问程度来进行。
由于数据访问限制发生了更改,因此本书较早版本中的某些代码示例将无法运行。在这些情况下,我们在它们的约束范围内创建了新示例,但仍然揭示了一些有趣的现象。
还有些时候,社交媒体平台更改API的方式彻底导致本书中的代码示例失效,但仍然可以用另外的方式访问到相同的数据。我们通过花时间阅读每个平台的开发者文档,使用新的API重新编写了第2版的代码示例。
第3版所做的最大更改可能是增加了有关“挖掘Instagram”的一章(第3章)。Instagram是一个非常受欢迎的平台,我们认为不能错过它。这也使我们有机会展示一些对图像数据进行数据挖掘的有效技术,特别是深度学习算法的应用。该主题很容易变得极端专业化,但是我们以一种易于理解的方式介绍了基础知识,然后应用功能强大的计算机视觉API完成了繁重的工作。最终结果是,只需编写几行Python代码,你就拥有了一个可以查看发布到Instagram上的照片,并告诉你其中内容的系统。
另一个重大变化来自第5章。这一章经过大篇幅改写,从原本只是挖掘Google+重组为挖掘一般文本文件。该章的基础理论保持未变,但内容上可以更明确地泛化为任何返回人类语言数据的API响应。
我们还做出了其他一些技术决策,有些读者不一定能够理解。在有关挖掘邮箱的那一章(第7章),第2版采用了MongoDB。MongoDB是一种数据库类型,用于存储和查询电子邮件数据。这种类型的系统很有用,但是除非你在Docker容器中运行本书的代码,否则,安装数据库系统会消耗一些额外的精力。另外,我们在第2章中期望介绍更多关于如何使用pandas库的示例。该库已迅速成为数据科学家工具箱中最重要的工具之一,因为它使表格数据的操作变得如此容易,所以我们决定把它放在一本以数据挖掘为主题的书中。不过,我们同时保留了第9章中有关MongoDB的示例,并且如果你使用Docker容器,那么这对你来说只是小菜一碟。
最后,我们删除了原来的第9章(挖掘语义网)。这一章最初是作为2010年第1版的一部分起草的,考虑到社交网络的总体发展方向,其总体作用在将近十年之后看起来存疑。
我们始终欢迎建设性的反馈意见,我们很乐意以书评、发给@SocialWebMining(http://bit.ly/1a1kHzq)的推文或发表在本书Facebook涂鸦墙(http://on.fb.me/1a1kHPQ)的评论等方式看到你们的反馈。本书的官方网站和博客http://MiningTheSocialWeb.com会长期扩展本书内容。
数据挖掘的伦理问题
在撰写本书的时候,《通用数据保护条例》(General Data Protection Regulation,GDPR)的规定刚刚在欧盟完全生效。该条例规定了公司必须如何保护欧盟公民和居民的隐私,从而使用户对其数据有更多的控制权。由于世界各地的公司都在欧洲开展业务,因此几乎所有公司都被迫更改其使用条款和隐私政策,否则将面临处罚。GDPR为隐私设置了新的全球基准,即使世界各地的公司不一定都在欧洲开展业务,也有望对它们产生积极影响。
本书第3版的出版正值人们更加关注数据的伦理问题和用户隐私问题。在世界各地,数据代理公司正在收集、整理和转售互联网用户的数据:他们的消费者行为、偏好、政治倾向、邮政编码、收入、年龄等。有时,在某些辖区内,此活动是完全合法的。只要有足够的此类数据,就可以通过高度针对性的营销语、界面设计或误导性信息来利用人的心理影响具体行为。
本书是关于如何从社交媒体和网站中挖掘数据并从中获得乐趣的。作为作者,我们充分意识到了这一讽刺性。我们还知道,合法的东西未必是符合道德的。数据挖掘本身就是使用特定技术进行实践的集合,这些技术本身在道德上是中立的。数据挖掘可以呈现很多有用的使用方式。Mikhail Klassen经常提到的一个例子是联合国全球脉动(UN Global Pulse)的工作,这是联合国利用大数据造福全世界的一项举措。例如,通过使用社交媒体数据,可以衡量人们对发展计划(如疫苗接种项目)或一个国家的政治进程的情绪。通过分析Twitter数据,可能可以更快地应对诸如流行病或自然灾害之类的新兴危机。
这类例子不一定从人道主义出发。数据挖掘正以激动人心的方式用于开发个性化的学习技术,一些初创公司在努力把它商业化于教育和培训行业。在其他领域,数据挖掘用于预测疾病的大流行、发现新药物或确定哪些基因可能与特定疾病有关,或者何时对发动机进行预防性维护。通过负责任地使用数据并尊重用户隐私,我们按照符合伦理的方式使用数据挖掘是可能的,同时仍可获利并开创惊人的事业。
目前,少数的科技公司拥有有关人们日常生活的海量数据。它们承受着越来越大的社会压力和政府监管,要求其负责任地使用此数据。值得称赞的是,许多公司正在更新其策略及API。通过阅读本书,你将更好地了解第三方开发者(例如你自己)可以从这些平台获取什么样的数据,并且你将学习许多用于将数据转化为知识的工具。我们也希望你对技术会被怎样滥用有更多的了解。作为一个知情的公民,你应该拥护政府制定合理的法律来保护每个人的隐私。
本书约定
本书使用了大量的超链接,这使得它非常适合以PDF等电子格式进行阅读,可以直接从O’Reilly购买电子书。从O’Reilly购买电子书也会确保你在新版本可用时获得自动更新。我们使用bit.ly服务将链接缩短了,这有利于阅读纸质书的读者。所有的超链接都被仔细检查过。
本书使用了下列排版约定:
楷体
表示新术语。
斜体(Italic)
表示URL、Email地址、文件名和文件扩展名。
等宽字体(Constant width)
表示程序列表、程序元素,例如变量或函数名、数据库、数据类型、环境变量、声明和关键词。
等宽粗体(Constant width bold)
表示命令或其他用户可以逐字输入的文本。同时也偶尔在代码列表中用来表示强调。
等宽斜体(Constant width italic)
表示应该以用户提供的值或上下文提供的值替换的文本。
这个图标表示一般性注释。
这个图标表示提示或建议。
这个图标表示警告或注意事项。
示例代码
本书最新的示例代码在GitHub的http://bit.ly/Mining-the-Social-Web-3E维护,这是本书的官方代码库。我们鼓励你关注这个库以便获得最新的修复bug的代码,以及由作者和其他社交编程社区编写的更多示例。如果你阅读的是纸质版,很可能书中的代码示例不是最新的,但是只要你使用本书的GitHub库,你总会获得修复bug的最新示例代码。如果你利用了本书的虚拟机体验,那么你已经获得了最新的源代码,但是如果你选择使用自己的开发环境,请确保直接从GitHub库下载源代码压缩包。
请将关于示例代码的问题记录到GitHub库的问题追踪系统而不是O’Reilly目录的勘误追踪系统中。GitHub上源代码的问题被解决时,更新会被发布回本书的手稿,然后定期地作为电子书更新提供给读者。
一般来说,你可以在程序和文档中使用本书的代码。你不需要联系我们以获得许可,除非你复制了代码的关键部分。例如,利用本书的几段代码编写程序是不需要许可的,售卖或出版O’Reilly书中示例的CD-ROM确实需要我们的许可。引用本书回答问题以及引用示例代码不需要我们的许可。将本书的大量示例代码用于你的产品文档中需要许可。
根据代码发行的OSS许可,我们需要署名权。署名通常包括标题、作者、出版商和ISBN。例如:
Mining the Social Web, 3rd Edition, by Matthew A. Russell and Mikhail Klassen.Copyright 2018 Matthew A. Russell and Mikhail Klassen, 978-1-491-98504-5
如果你认为你对代码示例的使用已经超出以上的许可范围,我们欢迎你通过permissions@oreilly.com联系我们。
O’Reilly在线学习平台(O’Reilly Online Learning)
近40年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和创新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量教材和视频资源。有关的更多信息,请访问http://oreilly.com。
联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
本书配套网站http://bit.ly/mining-social-web-3e上列出了与代码无关的勘误表以及其他信息。
任何关于示例代码的勘误可以作为工单(ticket)通过GitHub的问题追踪系统在如下地址提交:
http://github.com/ptwobrussell/Mining-the-Social-Web/issues
要询问技术问题或对本书提出建议,请发送电子邮件至bookquestions@oreilly.com。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站:http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
如果不是与O’Reilly Media公司的Susan Conant会面,我(Mikhail Klassen)不会有幸参与本书的写作。她看到了我具有与Matthew Russell合作本书第3版的潜力。我很高兴能够从事此项目。O’Reilly的编辑团队非常专业,我要感谢Tim McGovern、Ally MacDonald和Alicia Young。与本书计划相关的是O’Reilly制作的一系列视频讲座,所以我也要感谢与我合作此事的团队:David Cates、Peter Ong、Adam Ritz和Amanda Porter。
我参与此项目占据了晚上和周末时间,这意味着我无法陪伴家人。因此我感谢妻子Sheila对我的理解。
第2版致谢
我(Matthew A. Russell)要重申本书第1版说过的话,编写一本书意味着做出很多牺牲。你远离家人和朋友的时间(多数为漫长的晚间和周末时光)是相当宝贵且无法倒流的。你真的需要一定的精神支持才能在保持良好关系的同时渡过难关。再次感谢对我非常有耐心的朋友和家人,他们真的无法再容忍我写另一本书,并且可能认为我有某种痴迷于熬夜工作和周末加班的慢性疾病。如果你能找到治疗痴迷写书这一病症的康复诊所,我保证我会去给自己做个检查。
每个项目都需要一个伟大的项目经理。我的编辑Mary Treseler让我很佩服,能与她以及她优秀的团队合作出版本书,让我很高兴。编写一本技术书籍是一项漫长而充满压力的事业,至少可以说,能与这么多专业人士一起工作是一次了不起的经历。正是在他们的帮助下,我才能顺利通过这个令人筋疲力尽的旅程,并出版一部精致打磨的、让你乐于分享于世的好书。Kristen Brown、Rachel Monaghan和Rachel Head真真切切地把我的付出提升到了一个全新的专业水准。
针对本书,才华出众的编辑人员和技术专家所给出的详细反馈也令我惊叹不已。这些反馈涵盖从非常技术化的建议到软件工程方面的Python最佳实践,再到从读者角度来看如何最大限度地满足目标受众。它们远远超出了我的预期。如果不是这些同行给出的宝贵评议意见,本书很难达到目前的质量。特别向Abe Music、Nicholas Mayne、Robert P. J. Day、Ram Narasimhan、Jason Yee和Kevin Makice致谢,他们针对草稿给出了非常详细的评议意见。他们的意见大大提升了本书的质量,而我唯一的遗憾是我们没有机会在这个过程中更密切地合作。还要感谢Tate Eskew向我介绍Vagrant,这一工具为本书建立了一个易于使用和易于维护的虚拟机体验环境。
我还要感谢许多值得称道的Digital Reasoning同事,我们多年来畅谈有关数据挖掘和计算机科学的主题,与他们的谈话帮助我形成了我的专业思维。我很荣幸成为这样有天分与能力的团队的一员。特别感谢Tim Estes和Rob Metcalf,他们一直支持我从事类似写书这样耗时的项目(在Digital Reasoning公司的职责之外)。
最后,感谢每一位读者和本书代码的使用者,他们在本书第1版的整个生命周期里提供了建设性的反馈意见。虽然你们的名字多到无法在此列出,但你们的反馈意见已经在塑造第2版的过程中发挥了不可估量的作用。我希望第2版能符合你们的期望,并可以位列你愿意推荐给朋友或同事的有用书单之中。
第1版致谢
毫不夸张地说,编写一本技术书籍需要做出很多牺牲。在家里,我牺牲了与妻子Baseeret和女儿Lindsay Belle相处的很多时间,这比我敢于承认的时间还要多。虽然我的抱负是有朝一日能在一定程度上征服世界(这只是暂时的,坦白说,我正在尽力摆脱这种状态),但是我还是要对你们的爱表示感谢。
我深信你所做的一切决定最终都会影响到你的一生(尤其是你的职业生涯),但是谁也不可能孤独前行,我们要懂得感恩。撰写本书时,我真的很庆幸能与世界上最聪明的一帮人合作,其中包括像Mike Loukides这样聪明的技术编辑,以及O’Reilly这样极富天赋的制作团队,还有帮助我完成本书的很多热心的评阅人。我要特别感谢Abe Music、Pete Warden、Tantek Celik、J. Chris Anderson、Salvatore Sanfilippo、Robert Newson、DJ Patil、Chimezie Ogbuji、Tim Golden、Brian Curtin、Raffi Krikorian、Jeff Hammerbacher、Nick Ducoff和Cameron Marlowe对本书所用资料的评阅或者对本书提出的有见地的建议,所有这些都帮助本书提升了质量。在此我也要感谢Tim O’Reilly的慷慨帮助,他允许我研究他的Twitter和Google+上的数据——这些内容必定会为相关章节增趣不少。我不可能一一介绍曾经直接或间接地帮助过我或者帮助过本书出版的人,在此一并表示感谢。
最后,要感谢你选择本书。如果你在阅读本书,至少你有可能会愿意购买一本。如果你真的购买了本书,虽然我尽了最大努力,但你还是会发现本书中的一些疏漏之处。然而,我坚信,虽然疏漏在所难免,但本书定会让你觉得值得花上几个晚上或几周的时间来细细研读,而且最终你也的确会有所收获。