制作微信词云和统计图

最近微信的词云和统计图貌似很火,所以也想试着做一个。看看个性签名绘制出来是一个什么效果。绘制出来以后感觉还是蛮不错的,一个点看不出什么来,点来成面给人的感觉就很全面了,想到了苏轼的题西林壁。

横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。

Idea

总体思路是先把微信的性别数据和个性签名都爬到本地,然后用matplotlib生成图片。个性签名用jieba分解,然后用wordcloud生成词云。

爬数据

python里微信模块有一个很好用的包,itchat。itchat帮助文档
itchat.get_friends() 这个函数就可以获取到自己好友的相关信息,这些信息是一个 json 数据格式,类型是一个list,里面每一个类型,如性别、个性签名等都是字典的形式,非常方便。用一段代码来说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def get_sex(friends):
male = 0
female = 0
other = 0
dict_sex = dict()
for i in friends[1:]:
dict_sex = i['Sex']
if dict_sex == 1:
male += 1
elif dict_sex == 2:
female += 1
else:
other += 1
total = len(friends[1:])
print u'男同学人数:', male
print u'女同学人数:', female
print u'未设置性别人数:', other
print u'总人数:', total
a1 = (float(male) / total * 100)
a2 = (float(female) / total * 100)
a3 = (float(other) / total * 100)
print u'男同学: %.2f%%' % a1
print u'女同学: %.2f%%' % a2
print u'未设置性别: %.2f%%' % a3

enter image description here

执行成功大概是这个样子~

制作统计图

matplotlib本身并不支持中文,如果想要以中文的形式展现的话,需要进行一些配置。临时生效的太麻烦,索性就设置永久生效吧,先下载好Microsoft YaHei这个字体,百度即可。

  1. 定位matplotlibrc文件(python_install_dir\Lib\site-packages\matplotlib\mpl-data目录下)

  2. matplotlibrc文件部分内容如下:

    font.family :sans-serif #默认情况下,该字段为关闭状态。去掉注释即可。

    font.sans-serif : Microsoft YaHei , Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif #添加”Microsoft YaHei”

  3. 重建字体索引列表

    from matplotlib.font_manager import _rebuild
    rebuild()

这样的话就可以支持中文了,接下来我们试着生成一个统计图~

1
2
3
4
5
6
7
8
9
plt.rc('font', family=['Microsoft YaHei'])
dict_sex = {u'男同学': male, u'女同学': female, u'未设置性别': other}
for i in dict_sex.keys():
plt.bar(i, dict_sex[i])
plt.legend()
plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.title(u'微信朋友概览')
plt.show()

enter image description here

是不是很棒~

分词并制作词云

python的库用一些ide还是比较好解决的,但是编码就很烦人了。制作过程中被编码问题困住了好久,最终的解决方案是统一用codecs来处理。最终的效果是这样的~
全部的代码放在了github上,喜欢的朋友可以点个星,emmm。
https://github.com/Who1sCarl/wechat
enter image description here

enter image description here

文章作者: Carl Star
文章链接: http://carlstar.club/2018/07/15/制作微信词云和统计图/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo