最近研究了一下itchat和matplotlib,目前实现了对微信好友头像、性别、区域、个性签名的采集及展示。
本文就来详细介绍一下这个库的用法和一些核心逻辑实现。
1.微信登录
- 三行代码实现登录,为了避免我们频繁扫描二维码登录,这里我们加入
hotReload=True
- 好友信息获取
这里的we_friend
是好友的信息的列表,每一个好友字典的 key 如下表
key | 备注 |
---|---|
UserName | 微信系统内的用户编码标识 |
NickName | 好友昵称 |
Sex | 性别 |
Province | 省份 |
City | 城市 |
HeadImgUrl | 微信系统内的头像URL |
RemarkName | 好友的备注名 |
Signature | 个性签名 |
有了key对应的值,我们就好处理了。
2.好友性别
这里顺便提一下:如果sex=1则代表男性,sex=2代表女性
统计出男生、女生的以及总人数后,占比自然而然就出来了,为了更好的展示男女比例,我们以饼图展示。
- 绘制饼图
作为一个码农、程序猿,还能有这么多女性好友实属不易啊。敏感的我,看了这个比例深深地感觉到了不安,(此图女朋友不可见)另外,怎么还有一些未知生物的存在…
友情提醒:matplotlib中文乱码这个问题一直存在,这里记录下如何解决matplotlib中文乱码
-
准备好想要使用的中文字体,这里我用的是SimHei,附下载地址:中文字体下载
-
找到matplotlib的文件位置
-
进入上方打印的路径
-
把刚才下载的字体文件解压放入
/usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/fonts/ttf
目录 -
返回上级目录,修改matplotlibrc文件,取消相关注释,并在
font.serif
加入刚才下载的字体
- 删除matplotlib缓存。
3.微信好友头像
这里其实看过我之前文章的应该知道,其实头像的拼接主要分为两部分
- 1.采集所有好友头像保存本地,
- 2.对所有头像进行拼接
密集恐惧症患者请忽略!!!
4.微信好友地区分布
获取区域及城市
由于城市太多,我们取好友数量排名前十的城市及区域进行展示,感兴趣的可以稍微改下代码,就可以展示所有区域人数。
排序这里我用了Python的sorted()
函数,列表的每个元素都为二维元组,key
参数传入了一个lambda函数
,其x就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了sorted()
函数利用哪一个元素进行排列。而reverse
决定是正序还是倒序,默认为False。
- 区域、城市柱形图展示,由于思路代码是一致的,所以这里只展示区域的代码
通过柱形图展示,可以清晰看到我的好友主要分布在河南和上海,借此不难推测出我的工作地址以及户籍所在地。
5.微信好友个性签名情感分析及词云图展示
这里使用了常用的中文分词库jieba
,词云图的背景采用了萌萌哒小猪佩奇(´๑•_•๑)
- 分词
- 制作词云图
最初,只想做一个简单的词云图,但是看到这个词云图中梦想、努力、专注、尊重、希望这个几个词以后,感觉到我的好友生活态度还是蛮积极向上的,就想不如再做一个简单的情感分析,说干就干。
从图中可以看出,正向情感要远远多于负向情感的数据,积极乐观的人往往都在一个圈子,果然是物以类聚,人以群分啊。