《社交网站的数据挖掘与分析》前言
与其说网络是一项技术创新,不如说它是一项社会创新。我设计的是一种社会效应 (帮助人们一起工作),而不是一种高科技玩具。网络的终极目标是支持 并改进 现实世界中存在的各种各样的“网”,我们有家庭“网”、协会“网”和公司“网”,我们 会亲远疏近。
——Tim Berners-Lee,《Weaving the Web 》(Harper)
是否要阅读本书
如果你有编程基础,并且对通过社交网络进行数据挖掘和分析来洞察身边的机会感 兴趣的话,你就选对书了。在短短几页介绍之后,我们就会开始动手编写代码。
然而,坦率地说,你对本书最主要的抱怨可能就是所有的章节都太短了。遗憾的是,当你试图抓住每天变化并且有大量机会的空间时,情况总是这 样。也就是说,我非常赞同“80-20法则”(http://en.wikipedia.org/wiki/Pareto_principle),而且我坚信本书在践行“用80%的可用时间来探讨最有趣的20%的内容”方面,这是个合理的尝试。
虽然本书篇幅有限,但是它涵盖了很多内容。总的来说,本书堪称广博而非精深,虽然当前的时机非常适合就此主题进行更深入的探讨,但是本书对这些有 趣的挖掘和分析技术的深入程度比较有限。本书的编排风格,既适合你通读全书来全面了解社交网络数据方面的入门知识,也适合你根据自己的兴趣来挑选 感兴趣的章节来阅读。也就是说,每一章的设计都很短小且相对独立,但是,我在每章内容材料的编排上还是精心安排了前后顺序的,这样,你在阅读全书 时才会感到顺畅。
在过去的几年中,Facebook、Twitter和LinkedIn这类社交网站,已经从时尚变为主流,现在已经成为全球现象。在2010年第 一季度,广受欢迎的社交网站Facebook已经超过Google,成为人们最经常访问的网站注1,这也证实了人们网络消费方式的明确转变。依此 事实断言“网络现在已经成为社会文化现象而不再是研究和信息的工具”可能为时尚早;然而,这一数据的确可以表明,社交网站正在以搜索引擎所不具备 的方式,大规模地满足了人类的一些基本诉求。社交网络确实正在改变我们的网络生活注2,它们能够让技术给我们呈现出最好的 (有时是最坏的)一面。社交网络的爆发只是现实世界和网络世界之间的差距不断缩小的一种方式。总的来说,本书的每一章都将社交网站与数据挖掘、分析和可视 化技术的内容组织在一起,来回答以下问题:
- 谁与谁相识,他们共同的朋友是谁?
- 某人与其他人多久联系一次?
- 人与人之间的交流在多大程度上是对称的?网络中最沉默/最健谈的人是谁?
- 网络中最具影响力/人气最高的人是谁?
- 人们正在聊什么(而且它有趣吗)?
要回答这些问题,通常都会涉及两人或更多的人,并且需要找出他们之间存在关系的上下文。回答这些问题所涉及的工作只是开始,更复杂的分析过程还在 后面,但是你必须找个地方下手,因为社交网络API和开源工具包都很容易掌握。
笼统来说,本书把社交网站注3看成是由人、活动、事件、概念等组成的一幅“图”。Google和Facebook这些行业领袖已经开始逐渐推广以 “图”为中心(graph-centric)的理念,而不再强调以“网络”为中心的说法了,因为它们在同时推广以“图”为基础的API。事实 上,Tim Berners-Lee建议,也许他应该使用巨大全球图(Giant Global Graph,GGG)(http://dig.csail.mit.edu/breadcrumbs/node/215)来代替万维网(World Wide Web,WWW),因为“网”和“图”可以在定义互联网的拓扑结构的上下文中任意互换。虽然Tim Berners-Lee最初的设想能否实现仍有待观察,但是我们所熟知的网络正在因社交数据而变得越来越丰富。我们回顾过去的几年时,最明显的变化就是: 由一个固有的语义网创建的第二级和第三级影响是实现真正的语义网的必要条件。两者之间的差距也变得越来越小了。
还是不要阅读本书
从零开始构建自己的自然语言处理器、探究可视化图库的典型用法,以及任何与构建相关的最新技术这类活动,都不属于本书的范围。如果你想了解以上任 何内容而购买本书的话,你一定会很失望。然而,并不能仅仅因为“在区区几百页中进行文本分析或记录匹配既不真实,也无法体现我们的最佳技术”,就 认为本书无法让你找到疑难问题的合理解决方案,无法将这些方案应用于社交网站,在此过程中并无乐趣可言。当然,这也并不妨碍你在这些诱人的研究领 域中培养积极的兴趣。
本书的篇幅有限,只能给你开开胃,最多也就是能培养起你在数据处理方面的兴趣,并不能赋予你开天辟地的神奇力量。也许现如今这样的提醒显得有点多此一举,但是我还是要强调一点(非常重要的一点):本书所述内容,通常都假定你已经连接到了互联网。本书并不适合 在你度假远行时随身携带,因为其中包含很多有超链接的参考内容,而且所有的代码示例都通过超链接直接与GitHub相 连,GitHub(http://github.com)是一个非常社交化的Git(http://git-scm.com)存储库,它一直保持 可用的最新示例代码。这种做法希望社交编码能加强志同道合的读者之间的协作,例如,有的人想一起扩展示例,也有人想一起探索有趣的问题。但愿大家 能够对资源进行分叉、扩展以及改进——能结识一些志趣相投的新朋友的话更好。像API文档这种现成的资源也可以通过超链接来方便地获取,并且我们 认为你更习惯使用在线内容,而不是那些注定会过期的印刷文字。
注意: 与本书配套的bug修复源代码的官方GitHub存储库是http://github.com/ptwobrussell/Mining-the- Social-Web。本书的官方Twitter账号是@SocialWebMining。
如果你需要一本能让你在sharded MySQL聚类这样的分布式计算平台或者是诸如Hadoop或Redis这样的NoSQL(http://en.wikipedia.org/wiki /NoSQL)技术上快速进步的参考书的话,我们并不推荐本书。我们确实使用了一些非常规的存储技术,如CouchDB(http: //couchdb.apache.org)和Redis(http: //code.google.com/p/redis),但它们都是在一台 机器上运行的,因为这样就能很好地解决眼前的问题了。然而,如果你兴趣强烈且需要水平扩展性的话,它并不能真正连续不断地将示例移植到分布式技术 中。我强烈建议你首先要掌握好基础知识,并且要保证代码首先能在一个相对简单的环境中运行,然后再将其移植到一个更复杂的分布式系统中,这样,一 旦数据访问不再是在本地时,你就可以依此对算法进行较大的调整以保持其高性能。如果你想要这么做的话,Dumbo(http://github.com/klbostee/dumbo/wiki)是用于研究的很好选择。
请继续关注本书的 Twitter账号(@SocialWebMining)来获取有关Dumbo的扩展示例。虽然我们会尽量遵守运营管理相关网站的条款并领会其精神,但是你可能会对从社交网站所获得的数据进行加工,本书对于这些做法的法律后果并没有提供 任何意见。有些无奈的是,许多最流行的社交网站的授权许可条款禁止在它们提供的平台之外使用这些数据,但目前来说,这种做法是意料之中的事。大部 分社交网站就像是带围墙的花园,但是从他们的立场(以及他们的投资者的立场)来说,这些公司提供的很多价值目前依赖于控制平台和保护他们用户的隐 私;这种平衡很难维持,而且短期内不可能有较大的改观。最后的小提示是:本书略微倾向于*nix环境注4,因为有些可视化的内容可能会给Windows用户带来些小麻烦。然而,一旦出现这类问题,建议 采用合理的替代方案或临时性方案,例如启动VirtualBox(http://www.virtualbox.org)在Linux环境中运行 示例。幸运的是,并不经常发生这种情况,当出现这些问题时,你可以忽略相应的章节继续阅读,这并不会影响你阅读的乐趣。
工具和先决条件
本书唯一的先决条件就是你需要主动地学习一些Python知识,并且做好了亲自动手处理社交数据的准备。本书的任何技术或者示例都不需要太多数据 分析、高性能运算、分布式系统、机器学习或者任何其他特别的背景知识。一些示例可能会涉及你以前没有使用过的结构,如线程池 (http://en.wikipedia.org/wiki/Thread_pool_pattern),但不必担心——我们使用Python 编程。Python直观的语法、优秀的数据处理生态系统软件包和核心数据结构(实际上是JSON)(http://www.json.org), 使它成为一种优秀的教学工具,虽然功能强大却很容易使用。在其他情况下,如处理自然语言时,我们会使用一些处理高级事务的包,但是我们将会从应用 程序设计者的角度来使用这些技术。由于在其他编程语言中也很可能存在非常相似的绑定,因此如果你愿意的话,这应该是移植代码示例的必备练习套 路。(但愿这可以在GitHub中用得上!)除了上面的介绍之外,本书没有过多纠结于使用Python的利弊,因为它是非常适合该项工作的工具。 如果你是编程新手或者从来没有见过Python语法,那么你只要保证没有跳过前几页内容即可。如果你正在寻找可靠的介绍资料,网上有很多不错的文 档,Python的官方教程(http://docs.python.org/tutorial)就是很好的起点。
本书试图从各种可视化工具和工具包中,有选择性地介绍一系列有用的可视化工具,既有电子表格类的消费类产品,也有 Graphviz(http://www.graphviz.org)类的工业产品,还有Protovis(http: //vis.stanford.edu/protovis)这种尖端的HTML5(http://en.wikipedia.org/wiki /HTML5)技术。每一章都会适当地介绍一些新的可视化技术,但我们会尽量顺其自然,让它讲得通。你会对从这些工具中构建轻量级原型的想法感到 满意的。也就是说,本书的大部分可视化内容只是现成的示例或者只是对API项目做了很小的改动,所以只要肯学,你就能做到。
本书约定
下面是本书关于印刷字体方面的一些约定:
- 斜体(Italic)
用于电子信箱、URL、文件名、路径名以及用于强调第一次介绍的新的术语。 - 等宽字体(Constant width)
用于文件内容以及命令输出,来表示模块、方法、语句以及命令。 - 等宽粗体(Constant width bold)
用于程序代码段,来显示应该由用户输入的命令或文字,有时则用于强调程序代码的一部分。 - 等宽斜体(Constant width italic)
用于程序代码段中可替换的部分以及一些注释。 - <等宽字体>(<Constant width>)
表示应该以真实程序代码取代的语法单元。 - 注意: 表示和附近文字相关的技巧、建议或一般性注释。
- 警告: 表示和附近文字相关的警告和注意事项。
代码示例的使用
各章中大多数编号的示例都可以从GitHub(https://github.com/ptwobrussell/Mining-the- social-web)上下载——它是本书的官方代码库。我们鼓励你持续关注这个库,以便获得最新的修正了bug的代码,以及由作者和其他社交编 码社区编写的更多示例。
本书旨在帮助你完成你的工作。一般来说,可以在程序和文档中使用本书的代码。如果你复制了代码的关键部分,那么你就需要联系我们获得许可。例如, 利用本书的几段代码编写程序是不需要许可的。售卖或出版O’Reilly书中示例的CD-ROM确实需要我们的许可。引用本书回答问题以及引用示 例代码不需要我们的许可。将本书的大量示例代码用于你的产品文档中需要许可。
如果你在参考文献中提到我们,我们会非常感激,但我们也并不强求。参考文献通常包括标题、作者、出版社和ISBN。例如:“《Mining the Social Web》by Matthew A Russell. ©2011 Matthew Russell,978-1-449-38834-8。”
如果你认为你对代码示例的使用已经超出以上的许可范围,我们很欢迎你通过permissions@oreilly.com联系我们。
联系我们
有关本书的任何建议和疑问,可以与下面的出版社联系:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们会在本书的网页中列出勘误表、示例和其他信息。可以通过http://oreilly.com/catalog/9781449388438 /访问该页面。读者可以通过Get Satisfaction(http://getsatisfaction.com/oreilly)向作者和出版社申请常见的帮助。
读者也可能通过GitHub上的问题追踪系统(http://github.com/ptwobrussell/Mining-the- Social-Web/issues),对示例代码以及本书的任何其他内容归档分类。
要评论或询问本书的技术问题,请发送邮件到:
bookquestions@oreilly.com
有关我们的书籍、会议、资源中心以及O’Reilly网络,可以访问我们的网站:
http://www.oreilly.com
http://www.oreilly.com.cn