前言
每天都在使用微信,在移动互联网到来之时,腾讯内部组建了三支团队,同时开发同样的产品————微信,最后是广州做邮箱出身的团队赢了,杀入了移动互联网这片红海。
微信第一次出现在我们面前的时候,是在 2011 年,那时候更多人是使用 QQ ,对微信没什么好感,直到附近的人
,摇一摇
这些约炮功能的出现,让人们爱不释手,如果说这是资本原罪,那么朋友圈
这个功能的出现,着实满足了用户内心深处的窥探欲望,再到公众号的出现,微信已经牛的一批了。
我的微信好友中,有些朋友是熟悉的,有些朋友是不太熟悉的,比如看了我的文章或 blog 添加的我,不过没关系,在茫茫人海中相遇便是缘。那么我在想,把我的微信好友的数据用 Python 爬取下来,分析一下,应该会很有趣。
微信有个网页版的登录,那么可以从这里入手,有个牛逼的itchat模块,两行代码,就能让我们登录并且获取好友信息了:
1 2 3
| itchat.auto_login(hotReload=True) friends = itchat.get_friends(update=True)
|
当我扫码登录完之后呢,就可以获取到我的好友数据了:
我微信好友中的性别比例
在返回的数据中,有一个叫做 Sex 的字段,就是性别,简单的分析可以知道 0未知 1男 2女
,将所有好友中的性别数据提取出来,接着使用 matplotlib 画个饼图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sexs = list(map(lambda x:x['Sex'],friends[1:])) counts = Counter(sexs).items() counts = sorted(counts, key=lambda x:x[0], reverse=False) counts = list(map(lambda x:x[1],counts))
labels = ['未知','小哥哥','小姐姐'] colors = ['yellowgreen','darkslateblue','orangered'] plt.figure(figsize=(8,5), dpi=80) plt.axes(aspect=1) plt.pie(counts, labels=labels, colors=colors, labeldistance = 1.1, autopct = '%3.1f%%', shadow = False, startangle = 90, pctdistance = 0.6 ) plt.legend(loc='upper right',) plt.title(u'%s的微信好友性别比例' % friends[0]['NickName']) plt.show()
|
得出结果:
挖槽,小哥哥那么多,我的妹纸们呢?女神呢?
不过想想,我的微信好友大多是程序员/破涕为笑,也就平复下心情了,妹纸快加我微信啊,让我的饼图好看一些 - -
我微信好友中的态度
微信有个个性签名
的东西,每个人会把自己的座右铭,或者喜欢的话语写上,试着来分析一下我的好友中用到最多的词是什么,把语句进行结巴分词,然后搞一张云词出来,应该不错。
在获取到好友的数据中,有个 signature
的字段,就是好友的个签了,有些朋友会加上一些表情什么的,先把它们过滤掉,然后再使用 SnowNLP 分析,通过结巴分词分析完就可以用 wordcloud 生成云图了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| def analyseSignature(friends): signatures = '' emotions = []
for friend in friends: signature = friend['Signature'] if (signature != None): signature = signature.strip().replace('span', '').replace('class', '').replace('emoji', '') signature = re.sub(r'1f(\d.+)', '', signature)
if (len(signature) > 0): nlp = SnowNLP(signature) emotions.append(nlp.sentiments) signatures += ' '.join(jieba.analyse.extract_tags(signature, 5))
back_coloring = np.array(Image.open('baseketball.jpg')) wordcloud = WordCloud( ... )
wordcloud.generate(signatures) plt.imshow(wordcloud) plt.axis("off") plt.show() wordcloud.to_file('signatures.jpg')
|
生成结果:
可以看得出来,我的朋友们还是挺正能量,努力,坚持,生活,人生是出现的比较多的词。多跟正能量的人在一起,互相传递能量,挺好。
我微信好友中的情感
SnowNLP 可以获取 sentiments,我理解为情绪值,从0到1,值越高说明越正能量,可以通过这个值,画一个图,看看我微信好友们的情感是怎么样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| count_good = len(list(filter(lambda x: x > 0.66, emotions))) count_normal = len(list(filter(lambda x: x >= 0.33 and x <= 0.66, emotions))) count_bad = len(list(filter(lambda x: x < 0.33, emotions))) labels = [u'负能量', u'中性', u'正能量满满'] values = (count_bad, count_normal, count_good) plt.rcParams['font.sans-serif'] = ['simHei'] plt.rcParams['axes.unicode_minus'] = False plt.xlabel(u'情感判断') plt.ylabel(u'频数') plt.xticks(range(3), labels) plt.legend(loc='upper right', ) plt.bar(range(3), values, color='rgb') plt.title(u'%s的微信好友签名信息情感分析' % friends[0]['NickName']) plt.show()
|
结果:
可以看到,负能量的人还是少数的,大多都正能量满满,我喜欢。
我微信好友都住在哪里
在返回的微信好友数据中,有一个 Province 字段,用来说明用户所处的省份,那么用这个字段,就可以统计出,我的微信好友在哪里,把这些数据统计出来,然后显示在中国地图上,应该会很直观,这里我使用到了 pyecharts 模块来进行地图可视化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def analyseLocation(friends): keys = [] values = [] province = list(map(lambda x: x['Province'], friends[1:]))
for i in set(province): keys.append(i) values.append(province.count(i))
maps = Map("中国地图", '中国地图', width=1200, height=600) maps.add("", keys, values, visual_range=[0, 50], maptype='china', is_visualmap=True, visual_text_color='#000') maps.show_config() maps.render(path="localtion.html")
|
结果如下:
哇塞!我的好友快要遍布整个中国了,就差新疆,青海,宁夏,天津和宝岛台湾了,以后我是不是就不用学习数理化也可以走遍中国都不怕了哈哈哈!
ok~ 我主要从微信好友的性别,态度,情感和位置进行了分析,除了觉得我的微信好友中女生比较少之外,其它都挺不错的,继续努力,希望以后我的朋友们越来越牛逼!
ps:如果你也想分析下你的微信好友,想要获取源码的话可以在公众号后台发送「微信」获取。
相关
- python3入门基础有趣的教程
- Python爬虫基础:爬取妹子图片并保存到本地
- python 爬虫应该学习什么知识点?
- python 爬取当当网最受欢迎的500本书
在公众号「帅彬老仙」发送「帅书」领取我写的技术电子书,转载请注明出处:
wistbean