16.3 爬虫数据分析
16.3.1 爬虫数据分析工具
上节编写了知乎用户爬虫,下面简单演示使用数据分析工具整理、分析爬取到的数据。
要分析数据,首先要选择数据分析工具。本书主要介绍用 Python 编写爬虫,而 Python 在数据分析方面具有非常强大的第三方工具和包,本节将使用 pandas 这个数据分析包,对上节知乎爬虫爬取到的数据作简单分析。
pandas 在处理能够直接读入内存数据方面具有非常强大的能力,正逐渐成为各行业数据处理常用的工具之一。爬虫爬取的数据特点就是不规整、比较杂乱,pandas 在处理这种不规整的数据方面,有着无与伦比的优势。这里就利用 pandas 简单演示一下对爬取数据的预处理和简单分析。当然,我们完全可以继续使用机器学习或者深度学习框架,更深入地挖掘所爬取数据的价值。这里使用 Anaconda 这个 Python 发行版本,这是 Python 数据分析师经常使用的 Python 发行版本,它会安装包括 numpy、pandas、ipython 等在内的一百多种数据分析包和工具。可以从官网下载与系统对应的 Anaconda 安装包。
安装完成后,Windows 系统可以在计算机的安装程序里面找到 Anaconda Prompt(也可以使用搜索直接搜索出来),单击打开后进入希望运行程序的目录,然后输入 ipython notebook,结果如图 16-4 所示。

图 16-4 启动 ipython notebook
系统会在浏览器中打开一个页面,单击页面右上角的 new 键,然后选择 python,新建一个 notebook python 文件,如图 16-5 所示。

图 16-5 新建一个 notebook python 文件
这样进入了代码编辑页面(见图 16-6),我们可以在这个页面里读取并分析爬取到的数据。

图 16-6 代码编辑页面
16.3.2 知乎用户数据加载
导入 pandas 和绘图库 matplotlib,在第一行中输入如下内容。
import pandas as pd %matplotlib inline import matplotlib.pyplot as plt
这里%matplotlib inline 是一个魔术命令,目的是让绘图直接显示在页面中。按 Shift+Enter 组合键,就可以执行这行代码,如图 16-7 所示。

图 16-7 导入 pandas 和绘图库 matplotlib
如果执行代码时前面有*符号,代表代码正在执行,稍等一下就可以了。
下面分析使用上节知乎爬虫爬取到的数据。经过在一台计算机上两天的爬取,爬取到了 106255 条用户数据,我们就以这些数据为分析样本。先用 pandas 读取这些数据,如数据保存在 MongoDB 中,可以使用如下代码读取。
import pymongo
client = pymongo.MongoClient('localhost',27017)
db = client['db']
zhihu_info = db['zhihu_collection']
#加载数据到 Pandas 中
data = pd.DataFrame(list(zhihu_info.find()))如果用 Scrapy 的快捷保存方式保存在 csv 文件,可直接使用 pandas.read_csv 方法读取。
data=pd.read_csv('爬虫文件路径/zhihu.csv') 数据加载进来后,可以直接查看 data,如图 16-8 所示。

图 16-8 查看读入的数据
这里执行 data.columns,可以看到数据包含的列,从上面可以看到数据有 106255 行、5 列,下节将简要分析这些数据。
16.3.3 爬虫数据简单分析
本节简单分析已经加载的爬虫数据。
上节查看 data 会发现有些 detail 列和 intro 列的数据是缺失值,这里直接用空字符串填充这些缺失值。
data.fillna('', inplace=True)现在数据中关注的人数和粉丝数都是字符串类型,需要将这些数据转换为 Int 类型。不过在转换之前,需要把科学计数的逗号删除掉,我们用字符串的 replace 方法将逗号替换为空字符串,再用 astype 方法改变其类型。
data['followers'] = data['followers'].str.replace(',', '')
data['followers'] = data['followers'].astype('int32')
data['following'] = data['following'].str.replace(',', '')
data['following'] = data['following'].astype('int32') 如图 16-9 所示,全部样本用户的粉丝数(followers)平均约为 1533 人,而关注的人数(following)平均为 136 人。虽然知道了平均值,但我们想知道用户粉丝数(followers)和关注的人数(following)的数量分布情况。这里离散化粉丝数(followers)并分组计算每组的大小,然后绘制柱状图,如图 16-10 所示。

图 16-9 数据统计信息

图 16-10 粉丝数分布情况
从图中很明显能看出来,超过一半的知乎用户粉丝数在 0~10 人之间,而粉丝数超过 10 万人的很少。查看一下,粉丝数超过 10 万人的具体人数,样本中仅有 267 人,如图 16-11 所示。

图 16-11 粉丝数超过 10 万人的人数
用户关注的人数分布情况如图 16-12 所示。

图 16-12 用户关注的人数分布情况
可以看到大部分知乎用户关注的人数在 50 人以下,绝大部分都在 500 人以下,但也有少数用户能关注 5000 人以上。
下面关注知乎用户从事的职业。由于有的用户在一句话介绍中标明自己的职业或职务情况,有的在个人资料中标明了职业或从事行业情况,这里把 detail 列和 intro 列合并起来,作为个人信息,进行分析。
data['intro'] = data['intro'] + data['detail']
合并的个人信息中包含“互联网”的人数,毕竟知乎是从互联网行业开始积攒用户的,如图 16-13 所示。

图 16-13 个人信息包含互联网的人数
显示有 6848 人,不是很多,这是因为有相当一部分用户并没有标明自己的职业或从事的行业,另外还有一些人可能标明的是计算机或者程序员等这样的职业称呼。这里把相关的关键词都包含进来看看人数,如图 16-14 所示。

图 16-14 从事互联网相关的人数
数量增加到 10000 人以上,说明数据中明确有 10000 多人标明了从事计算机相关的工作或学习方向,占总样本的十分之一。如果觉得这不算多,可以看看标明其他几个行业的人数,如图 16-15 所示。

图 16-15 标明其他行业的人数统计
由图 16-15 可知,知乎用户中从事教育相关行业的人数也不少,从这些数据也可以看出知乎用户中高学历、高收入行业的人占比相当大。
从事计算机相关工作的这些用户,与其他用户相比,在知乎上可能更受关注、粉丝更多,下面验证一下,如图 16-16 所示。

图 16-16 是否从事计算机相关行业粉丝数对比
可以看到,在介绍中标明从事计算机相关行业的知乎用户的平均粉丝为 3292 人,而其他用户平均粉丝数为 1305 人,这一定程度上说明从事计算机相关行业的用户在知乎上更受关注。
下面关注知乎上的“大 V”,也就是粉丝数超过 100000 人的知乎用户。
由图 16-17 可知,粉丝数超过 100000 人的“大 V”在我们的数据中有 267 人,这其中明确标明从事计算机相关行业的有 60 人。另外,担任 CEO、创始人、总经理、总监、合伙人的“大 V”有 32 人,超过十分之一。

图 16-17 “大 V”人数统计
我们想知道“大 V”(粉丝数超 100000 人的用户)关注的人数和普通用户关注的人数差别大不大,一般我们印象中的“大 V”好像不太喜欢关注别人。下面验证一下,如图 16-18 所示。
由图 16-18 可知,“大 V”平均关注的人数比普通用户更多!看来要想成为“大 V”,多关注别人是一个努力的方向。

图 16-18 “大 V”和普通用户关注的人数对比
最后,看一下“大 V”中高管的粉丝数分布情况,如图 16-19 所示。

图 16-19 “大 V”中高管的粉丝数分布情况
可以看到标明职位为公司高管的知乎“大 V”,平均粉丝数为 234836 人,但通过直方图查看粉丝数分布情况,会发现粉丝数超过 50 万人的仅仅有 4 人。
这里简单做了爬虫数据的分析演示,如果要更深入地挖掘知乎用户数据,还需要重新编写爬虫,以爬取更多的用户信息和数据,这就作为练习留给读者自己去探索吧。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论