用Python进行网络爬虫和数据分析的初次尝试(一)


某天突然起了兴致,想知道国内每个成员有多少粉,但不知道应该怎么做。各个应援会论坛的用户数?很多粉也去其它成岩的应援论坛,不靠谱。各个贴吧会员数?这只能说明某个成员是否出名,并且也有和应援论坛相同的弊端。最好的方法是在一个中立(无成员倾向的)论坛进行统计。于是我想起了AKB48中国官方俱乐部的论坛满足了要求,并且个人信息中自带推し成员的统计。



基本过程

  1.  用python脚本抓会员信息的网页,提取网页中的用户信息,包括一推二推成员等,将这些数据保存为文件。
  2.  通过用户信息剔除广告用户和不经常登陆的用户。
  3.  然后使用pandas库进行统计分析,输出数据,并使用matplotlib绘制图表。
本项目的代码文件可以看 Gist,也可以下载 这个压缩包。压缩包中包含了抓取到的数据内容(Gist中不包含),直接运行analyze.py可以获得本文中用到的数据和图片。

剔除用户数据的方法

通过对用户的 1. 注册时间与最后登录时间之差(a) 2.积分(b) 3.论坛通货 AK币(c) 三个方面对用户进行评分,剔除掉评分少于2的用户数据。

  • 注册时间与最后登录时间之差大于7天,记 a = 1,否则记 a = 0
  • 积分: b = log(积分 + 1) * 0.5
  • 通货: c = log(AK币 + 1) / 20 ) * 0.1
  • 如果用户只有发帖没有回帖 认为是广告帐号 直接剔除

推し成员和粉丝性别的数据分析


在最终没有被剔除的12772条用户数据中,性别填写为男性的有2881条,女性的有1181条。取这4062条数据中填写了一推或二推的数据,分别统计每个成员的一推二推男女粉丝数量,以总粉丝数量降序取前20名。最终绘制如下两幅图。


用Python进行网络爬虫和数据分析的初次尝试(一)_第1张图片
图1 用户性别比例

用Python进行网络爬虫和数据分析的初次尝试(一)_第2张图片

图2 推し成员关于性别的条形图


此外,为了判断出最男生、女生受欢迎的成员,使用如下方法计算成员的性别得分:

1. 先计算全部用户性别比例 R

    R = 男用户数/女用户数

2. 分别计算各个成员的等效男女粉丝数。 

    等效男粉丝数 = 一推男性数 + 二推男性数 * 0.5   记为 f

    等效女粉丝数 = 一推女性数 + 二推女性数 * 0.5   记为 m

3. 计算各个成员的等效粉丝性别比例。 

    r = f / m 

4. 计算性别得分。

    s = r / R

    如果 s < 1 性别得分 = - (1 / s - 1)  否则 性别得分 =  s - 1

这样得出的性别得分既消除了成员总粉丝数的影响,又消除了本身用户数据中男女数量不同的影响,并且函数上是一个对称的。



得出的结果:

男生更加喜欢的成员 佐藤亜美菜、 横山由依、 指原莉乃、柏木由紀、河西智美

女生更加喜欢的成员 宮澤佐江、高橋みなみ、松井珠理奈、大島優子、小嶋陽菜、前田敦子



推し成员和粉丝年龄的数据分析


在最终没有被剔除的12772条用户数据中,填写了生日的有3534条。将用户年龄分为 ~18 19~22 22~26 26~ 四段,其分布如下:

  ~18     532 人

19~22    1322 人

22~26    1187 人

26~       493 人


用Python进行网络爬虫和数据分析的初次尝试(一)_第3张图片
图3 用户年龄比例

分别统计每个成员每个年龄段的一推二推粉丝数量,以总粉丝数量降序取前20名,最终绘制如下图。


用Python进行网络爬虫和数据分析的初次尝试(一)_第4张图片

图4 推し成员关于年龄的条形图


经验总结

  1. 最好还是将抓下来的网页保存为文件,这样抓完之后即使有什么想要的其他信息可以直接从文件中提取。
  2. 有可能会因为网络问题导致网页无法抓取,因此最好要有重试逻辑。
  3. 剔除用户的时候,很靠谱的一个方法是使用用户组。但是这次因为抓数据的时候没有抓这个字段,就比较坑了。

你可能感兴趣的:(Python)