很多类似的书一开始会介绍具体的社交网络api,弱化架构设计等等,但在这里我们先来看几个例子,这些例子能说明采集和分析社交网站的数据是多么容易。这章的主要目的是想让你去思考一些问题,而这些问题在后几章会有详细的讨论。首先我们得准备我们的开发环境然后快速收集和分析一些Twitter的数据。
安装Python开发环境
本书中的示例代码都是用Python写的,所以如果你已经安装了Python和easy_install,你肯定已经知道了怎么用它了,你可以跳过接下来的几小节。如果你还没安装Python,你可能还不是一个Python程序员,但是不用担心,很快你就是了,呵呵。安装Python的开发环境很容易学会,所有平台的用户都能在http://www.python.org/download/找到对应的链接去下载和安装Pyhon,我非常建议windows的用户下载安装ActivePython和easy_install(笔者网络无法访问python官方网站,所以activepyhon是在这下的http://www.onlinedown.net/sof/176278.htm),ActivePython可以在window命令行中自动添加Python(我们以后称他为终端),easy_install我们过会再讨论。这本书的实例和测试都是在最新发布的Python2.7中实现的.但在相关的升级版本中也能运行的很好。在写这本书的时候,Python2还是Python社区使用的主流版本。我建议你还是使用这个版本,当然如果你确信你能在Python3中找到你需要的所有相关内容,你也愿意调试因为版本不同带来的一些问题,那你可以用Python3。
Python安装好后,你就能够在终端里打入Python命令执行了,跟着Example1-1试试吧
另外一个你想要在手上的工具是easy_install,他很类似于Linux系统里的包管理工具。easy_install可以让你很轻松的安装Python包,而不需要手动下载,编译,安装等等。
你可以从http://pypi.python.org/pypi/setuptools下载最新的版本(actionPython自带,可以不下),对于不同的平台都有具体的说明。总而言之,类linux系统用户要sudo easy_install,从而使下载的模块能写入Python全局安装目录。如果一个windows用户已经采纳了使用ActivePython的建议,那他已经安装了easy_install,因为easy_install包含在activePython里。
warm:Windows用户可以从“Installing easy_install...could be easier”这篇博文里面受益颇多,这篇博文讨论了一些你可能在运行easy_install会遭遇的关于编译c代码的问题。
当你已经配置好easy_install之后,你应该可以运行以下的代码去安装NetworkX了,NetworkX是我们贯穿整本书使用的图形建立和分析包,观察一下类似的输出
虽然书中的例子都是用了easy_install,但Python社区用Pip的人也在慢慢增多,这是你另外一个需要知道的工具,当然基本上任何包都能通过easy_install安装
NetworkX安装后,你可能想从命令行导入他,让他正确的工作,但是有时有些包会令你很惊讶,例如,我猜想会出现下面的情况:
不论ImportError什么时候发生,他都意味着找不到包。在这个例子中,networkx模块已经安装了,但却缺少一个依赖项numpy,这是一个高度优化的收集工具。通常,可以用easy_install的另外一个调用来解决这个问题,和先前一样,只要先关闭命令行,再在终端上输入easy _install numpy安装依赖项。
现在 numpy已经安装了,你可以打开一个新的命令行,导入networkx,然后用他建立图形,像Example1-2写的那样
现在,你已经安装了一些主要的Python开发工具,准备去做一些有趣的任务吧。如果这部分的绝大多数内容你都已经学习过了,那在你继续往下看之前你可以先去看一下Python的在线官方文档
收集与处理Twitter数据
关于Twitter你应该已经非常了解了,那是一个实时的、高度社会化的微博服务。他可以允许你贴出140或更少字符的简短消息。这些消息被称为tweets。不像facebook和linkedin这些双向联络的社交网络,Twitter是一个不对称的朋友和跟随者的网络。如果你有一个twitter账号,你可以关注你朋友,你朋友也可以关注你。当然你也可以选择关注所有关注你的人,但这基本上不会发生,因为你想你的微博只包括那些你感兴趣的内容。从twitter巨大的用户数量、被用于在市场营销和作为一种传输层用于第三方消息服务的出现可以看出,twitter是一种很重要的现象。twitter提供了大量的api。即使你没有注册也能使用许多api。通过这些api建立和挖掘你自己的社交网络是很有趣的。让我们花一些时间去浏览下Twitter慷慨的服务条件,api文档和api使用规则。这些允许你在做任何大负荷的开发之前用Twitter数据合理的做一些你想做的事情。本书余下部分假设你有了一个twitter账号并且有足够的朋友和粉丝。
tip:这本书的官方Twitter账号是@socialWebMining.
使用Twitter API
一个名为Twitter的包整合了Twitter的网络api,我们可以通过按照规范用easy_install安装它。
这个包也包含了实用的命令行和交互程序。所以在安装了这个包之后你可以在命令行中简单地输入twitter可以得到他的用法,我们会使用一些例子来说明它的使用,但是应该注意的是通过在终端上输入pydoc命令你可以浏览这些使用文档。类linux用户可以简单地键入pydoc twitte.Twitter去查看twitter的类文档,windows用户需要键入python -mpydoc twitter.Twitter才能查看。如果你发现经常去查看某些模块的文档,你可以选择给pydoc传入-w参数,这样他将以网页形式输出,你可以保存,或者保存进收藏夹。需要知道的是在模型或者类上键入pydoc命令打印出的是内置文档,这和在命令行中用help命令是一样的,试着去看看在命令行中键入help(twitter.Twitter)输出的信息。
好的,没有任何麻烦的,通过twitter的查询api让我们看下有用的动态信息从而找出人们正在谈论什么。让我们打开命令行然后初始化一个查询。试着键入Example1-3的代码,再继续之前用help命令去解决尽可能多的你碰到的问题
你很可能会奇怪,使用twitter模型的模式是很简单的也是可知的:首先使用基本的URL初始化一个Twitter类,然后在这个类上执行方法,这些方法相当于一些Url内容。例如twitter——search()初始化一个Http调用Get http://search.twitter.com/trends.json 你也可以在浏览器上输入这个链接得到相同的结果。作为先前命令行章节的深入章节,这章最初在星期六的晚上开始起草,所以SNL(周六晚生活,一个展现美国氛围的著名喜剧)出现在了我的列表里,现在可以是一个最好的时间去把Twitter的Api文档保存进收藏夹,因为你马上就会很频繁的引用他。
鉴于SNL是今天的主流,,我们接下来通过使用查询方面的api抓取一些查询结果,从这些查询结果中得到包含文本的tweets然后用一种易读的json结构输出。正像Example 1-4 所示
这段代码获取和存储查询关键字为SNL的5页连续结果,每页有100条记录。他等价于把http://search.twitter.com/search.json&q=SNL&rpp=100&page=1执行为一个循环。在静止api和twitter模型中的复杂映射使我们能简单的写一些python代码就能和服务器交互。执行完这个查询,查询结果列表包含5个对象,每个对象有100的结果。为了方便查看,你可以使用python2.6提供的json包以一种易读的方式打印出来。像1-5所示
应当注意的是字2010年之后,查询结果里的from_user_id字段和微博作者的实际twitter id是不一致的,详细请看Twitter Api Issue#214。对于这章中的实例代码这个问题毫无大碍,但是当你想自己创新时这是很重要的。
第五章会详解介绍查询api,现在要知道的是返回的结果中tweet是很重要的,我们可以用以下方法抽出500个tweet到一个列表中。实例1-6
使用两个列表表达式,通过缩进来展示了后面内容的执行,可以看出他比一个嵌套循环要简单。
列表表达式在这书中将使用的非常频繁,如果我们把代码写在一行上,他可以看上去有点摸不着头脑,我们把它作为一种嵌套循环就简单了。
在这个例子中tweets的结果等价于先定义一个空的tweets列表,然后在上面提到的那个嵌套循环内执行tweets.append(r[\'text\'])。查看python的官方说明“Data Structures section”可以得到详细说明。列表表达式是非常强大地,因为他以一种直观的和简介的语法产生比嵌套循环更大量的操作。
词频分析与词汇多样性
对于无结构文本,测量词汇多样性算是一种最直观的研究方法。简而言之,词汇多样性即特殊字符的数量除以所有字符总量的一个表达式,它本身也是一种基本的也是重要的度量。他能像1-17一样计算。