用Python进行网络爬虫和数据分析的初次尝试(一)
2014-05-28 14:35
721 查看
某天突然起了兴致,想知道国内每个成员有多少粉,但不知道应该怎么做。各个应援会论坛的用户数?很多粉也去其它成岩的应援论坛,不靠谱。各个贴吧会员数?这只能说明某个成员是否出名,并且也有和应援论坛相同的弊端。最好的方法是在一个中立(无成员倾向的)论坛进行统计。于是我想起了AKB48中国官方俱乐部的论坛满足了要求,并且个人信息中自带推し成员的统计。
通过用户信息剔除广告用户和不经常登陆的用户。
然后使用pandas库进行统计分析,输出数据,并使用matplotlib绘制图表。
本项目的代码文件可以看Gist,也可以下载这个压缩包。压缩包中包含了抓取到的数据内容(Gist中不包含),直接运行analyze.py可以获得本文中用到的数据和图片。
注册时间与最后登录时间之差大于7天,记 a = 1,否则记 a = 0
积分: b = log(积分 + 1) * 0.5
通货: c = log(AK币 + 1) / 20 ) * 0.1
如果用户只有发帖没有回帖 认为是广告帐号 直接剔除
图1 用户性别比例
图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
这样得出的性别得分既消除了成员总粉丝数的影响,又消除了本身用户数据中男女数量不同的影响,并且函数上是一个对称的。
得出的结果:
男生更加喜欢的成员 佐藤亜美菜、 横山由依、 指原莉乃、柏木由紀、河西智美
女生更加喜欢的成员 宮澤佐江、高橋みなみ、松井珠理奈、大島優子、小嶋陽菜、前田敦子
~18 532 人
19~22 1322 人
22~26 1187 人
26~ 493 人
图3 用户年龄比例
分别统计每个成员每个年龄段的一推二推粉丝数量,以总粉丝数量降序取前20名,最终绘制如下图。
图4 推し成员关于年龄的条形图
有可能会因为网络问题导致网页无法抓取,因此最好要有重试逻辑。
剔除用户的时候,很靠谱的一个方法是使用用户组。但是这次因为抓数据的时候没有抓这个字段,就比较坑了。
基本过程
用python脚本抓会员信息的网页,提取网页中的用户信息,包括一推二推成员等,将这些数据保存为文件。通过用户信息剔除广告用户和不经常登陆的用户。
然后使用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名。最终绘制如下两幅图。图1 用户性别比例
图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 人
图3 用户年龄比例
分别统计每个成员每个年龄段的一推二推粉丝数量,以总粉丝数量降序取前20名,最终绘制如下图。
图4 推し成员关于年龄的条形图
经验总结
最好还是将抓下来的网页保存为文件,这样抓完之后即使有什么想要的其他信息可以直接从文件中提取。有可能会因为网络问题导致网页无法抓取,因此最好要有重试逻辑。
剔除用户的时候,很靠谱的一个方法是使用用户组。但是这次因为抓数据的时候没有抓这个字段,就比较坑了。
相关文章推荐
- [python和大数据-1]利用爬虫登录知乎进行BFS搜索抓取用户信息本地mysql分析【PART1】
- python爬虫(1)利用BeautifulSoup进行网络数据采集
- 采用python的pyquery引擎做网页爬虫,进行数据分析
- 大数据实战课程第一季Python基础和网络爬虫数据分析
- Python实现微信公众号爬虫进行数据分析
- 《网络爬虫-Python和数据分析》数据库建库建表问题
- Python爬虫(二)——对开封市58同城出租房数据进行分析
- 利用 Python 进行数据分析(二)尝试处理一份 JSON 数据并生成条形图
- 基于Python实现微信公众号爬虫进行数据分析
- 基于Python实现微信公众号爬虫进行数据分析
- 大数据实战课程第一季Python基础和网络爬虫数据分析
- Python网络爬虫实战:根据天猫胸罩销售数据分析中国女性胸部大小分布
- 利用Python进行数据分析--数据聚合与分组运算
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(4) .
- 【python网络编程】新浪爬虫:关键词搜索爬取微博数据
- 【Python数据分析】简单爬虫 爬取知乎神回复
- 使用python进行数据分析
- 利用Python进行数据分析--数据加载、存储与文件格式
- 网络抓包以及进行简单数据分析
- python网络编程之数据传输UDP实例分析