数据挖掘工人 2012-02-19
关于本书:【互动网】【卓越网】【当当网】【京东网】【豆瓣网】
(原书名:Mining the Social Web,2011年Jolt生产效率大奖获奖图书)
与其说网络是一项技术创新,不如说它是一项社会创新。我设计的是一种社会效应(帮助人们一起工作),而不是一种高科技玩具。网络的终极目标是支持并改进现实世界中存在的各种各样的“网”,我们有家庭“网”、协会“网”和公司“网”,我们会亲远疏近。——Tim Berners-Lee ,《Weaving the Web》(Harper)
如果你有编程基础,并且对通过社交网络进行数据挖掘和分析来洞察身边的机会感兴趣的话,你就选对书了。在短短几页介绍之后,我们就会开始动手编写代码。然而,坦率地说,你对本书最主要的抱怨可能就是所有的章节都太短了。遗憾的是,当你试图抓住每天变化并且有大量机会的空间时,情况总是这样。也就是说,我非常赞同“80-20 法则”(http://en.wikipedia.org/wiki/Pareto_principle),而且我坚信本书在践行“用80% 的可用时间来探讨最有趣的20% 的内容”方面,这是个合理的尝试。
虽然本书篇幅有限,但是它涵盖了很多内容。总的来说,本书堪称广博而非精深,虽然当前的时机非常适合就此主题进行更深入的探讨,但是本书对这些有趣的挖掘和分析技术的深入程度比较有限。本书的编排风格,既适合你通读全书来全面了解社交网络数据方面的入门知识,也适合你根据自己的兴趣来挑选感兴趣的章节来阅读。也就是说,每一章的设计都很短小且相对独立,但是,我在每章内容材料的编排上还是精心安排了前后顺序的,这样,你在阅读全书时才会感到顺畅。
在过去的几年中,Facebook、Twitter和LinkedIn这类社交网站,已经从时尚变为主流,现在已经成为全球现象。在2010年第一季度,广受欢迎的社交网站Facebook已经超过Google,成为人们最经常访问的网站,这也证实了人们网络消费方式的明确转变。依此事实断言“网络现在已经成为社会文化现象而不再是研究和信息的工具”可能为时尚早;然而,这一数据的确可以表明,社交网站正在以搜索引擎所不具备的方式,大规模地满足了人类的一些基本诉求。社交网络确实正在改变我们的网络生活,它们能够让技术给我们呈现出最好的(有时是最坏的)一面。社交网络的爆发只是现实世界和网络世界之间的差距不断缩小的一种方式。总的来说,本书的每一章都将社交网站与数据挖掘、分析和可视化技术的内容组织在一起,来回答以下问题:要回答这些问题,通常都会涉及两人或更多的人,并且需要找出他们之间存在关系的上下文。回答这些问题所涉及的工作只是开始,更复杂的分析过程还在后面,但是你必须找个地方下手,因为社交网络API 和开源工具包都很容易掌握。 笼统来说,本书把社交网站看成是由人、活动、事件、概念等组成的一幅“图”。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。
如果你需要一本能让你在shardedMySQL聚类这样的分布式计算平台或者是诸如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 环境,因为有些可视化的内容可能会给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 项目做了很小的改动,所以只要肯学,你就能做到。
至少可以说,编写一本技术书需要作出很多牺牲。首先,在家里,我放弃了与妻子Baseeret 和女儿Lindsay Belle 相处的很多时间,这比我乐于承认的时间还要多。虽然我的抱负是有朝一日能在一定程度上征服世界(这只是暂时的,坦白说,我正在尽力摆脱这种状态),但是我还是要对你们的爱表示感激。
我深信你所做的一切决定最终都会影响到你的一生(尤其是你的职业生涯),但是谁也不可能孤独前行,我们要懂得感恩。撰写本书时,我真的很庆幸能与世界上最聪明的一帮人合作,其中包括像MikeLoukides这样聪明的技术编辑,以及O'Reilly这样极富天赋的制作团队,还有帮助我完成本书的很多热心的审阅者。我要特别感谢AbeMusic、PeteWarden、TantekCelik、J.ChrisAnderson、SalvatoreSanfilippo、RobertNewson、DJPatil、ChimezieOgbuji、TimGolden、BrianCurtin、RaffiKrikorian、JeffHammerbacher、NickDucoff和CameronMarlowe对本书所用材料的审查或者对本书提出的有见地的建议,所有这些都最终体现在了本书的品质中。在此我也要感谢TimO'Reilly的热心,他允许我将他的一些Twitter和GoogleBuzz数据在第4、5、7章中进行了仔细的研究;这些内容肯定为这些章节增趣不少。我不可能一一介绍曾经直接或间接地帮助过我或者帮助过本书出版的人,在此一并表示感谢。
最后,要感谢你阅读这本书,你也许会买一本留作纪念。虽然我已尽了我最大的努力,但你还是会发现本书存在的一些疏漏之处;然而,我坚信,虽然疏漏在所难免,但本书定会让你觉得值得你花上几个晚上或几周的时间来细细研读它,而且最终你也的确会有所收获。作者简介:
目录:
前言1
第1章绪论:Twitter数据的处理9
Python开发工具的安装9
Twitter数据的收集和处理11
小结24
第2章微格式:语义标记和常识碰撞26
XFN和朋友27
使用XFN来探讨社交关系29
地理坐标:兴趣爱好的共同主线37
(以健康的名义)对菜谱进行交叉分析41
对餐厅评论的搜集43
小结45
第3章邮箱:虽然老套却很好用47
mbox:Unix的入门级邮箱48
mbox+CouchDB=随意的Email分析54
将对话线程化到一起70
使用SIMILETimeline将邮件“事件”可视化79
分析你自己的邮件数据82
小结84
第4章Twitter:朋友、关注者和Setwise操作85
REST风格的和OAuth-CladdedAPI86
干练而中肯的数据采集器90
友谊图的构建108
小结116
第5章Twitter:tweet,所有的tweet,只有tweet118
笔PK剑:和tweetPK机枪(?!?)118
对tweet的分析(每次一个实体)121
并置潜在的社交网站(或#JustinBieberVS#TeaParty)144
对大量tweet的可视化155
小结163
第6章LinkedIn:为了乐趣(和利润?)将职业网络聚类164
聚类的动机165
按职位将联系人聚类167
获取补充个人信息183
从地理上聚类网络188
小结192
第7章GoogleBuzz:TF-IDF、余弦相似性和搭配194
Buzz=Twitter+博客(???)195
使用NLTK处理数据198
文本挖掘的基本原则201
查找相似文档208
在二元语法中发Buzz215
利用Gmail221
在中断之前试着创建一个搜索引擎……225
小结226
第8章博客及其他:自然语言处理(等)228
NLP:帕累托式介绍228
使用NLTK的典型NLP管线231
使用NLTK检测博客中的句子234
对文件的总结237
以实体为中心的分析:对数据的深层了解245
小结256
第9章Facebook:一体化的奇迹257
利用社交网络数据258
对Facebook数据的可视化274
小结294
第10章语义网:简短的讨论296
发展中的变革296
人不可能只靠事实生活297
期望301