最近看到许多词云的数据分析效果,通过词云可以方便地看出哪些词汇出现的频率,于是想着通过Python弄了一个分析自己微信好友的个性签名。 先来看效果:
可以很直观地看出来还是'努力'出现的频率比较多啊,九零后确实不容易啊!
如何实现呢,直接上python代码:
import itchat
import re
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from scipy.misc import imread # 这是一个处理图像的函数
sign_list=[]
itchat.auto_login(hotReload=True)
itchat.send(u'Hello,world','filehelper')
friends = itchat.get_friends(update=True)[0:]
print('开始获取微信好友个性签名.....')
for i in friends:
signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "") #过滤掉表情
#rep = re.compile("< =.+/>")
rep = re.compile("[^\u4e00-\u9fa5^]")
nickName=i["NickName"]
signature = rep.sub("", signature)
sign_list.append(signature)
text=''.join(sign_list)
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = ' '.join(wordlist_jieba)
back_color = imread('./mao.jpg')
# 词云
my_wordcloud = WordCloud(
background_color='white', # 背景颜色
max_words=2000, # 最大词数
mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略
max_font_size=100, # 显示字体的最大值
font_path='C:/Windows/Fonts/simfang.ttf', # 指定字体文件 解决显示口字型乱码问题,
random_state=42, # 为每个词返回一个PIL颜色
)
# 用wl_space_split生成词云
my_wordcloud.generate(wl_space_split)
# 基于彩色图像 生成响应的色彩
image_colors = ImageColorGenerator(back_color)
# 显示图片
# plt.imshow(my_wordcloud)
# 关闭坐标轴
# plt.axis('off')
# 绘制词云
plt.figure()
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.axis('off')
# 保存图片
my_wordcloud.to_file('ciyun.png')
代码主要使用了itchat,matplotlib,ImageColorGenerator模块等,这几个模块都需要自己pip install
一下。主要是分为两步骤,第一步登入微信,获取微信好友信息,提炼签名并过滤掉一些非主流签名,例如带有表情,第二步则是利用ImageColorGenerator模块来生成图片。
如果你仔细观察图片,会发现其轮廓像一只猫,怎么实现呢?准备一张猫的背景图片就可以啦
是不是觉得很有趣呢,自己也去实现一个吧,例如分析一下今年两会政府工作报告出现频率高的词汇!