微信的秘密-python可视化微信好友信息

记得2016年第一次开通微信的时候,我以及周围的大多数人还是重度的QQ用户,当时只是跟风开通了一下,也没觉得会改变什么。没想到才两年过去,我已经忘记了QQ的存在,每天起来第一件事就是查看微信,睡觉前也必然要看一下朋友圈有什么好玩有意义的事情,不得不说腾讯的产品策略绝对是一流的。那么我们能用python对微信做些什么呢?
还好微信官方有一个比较冷门的python库-itchat,这是微信提供的一个借口,我们可以借由它来实现对微信信息的提取,本文要做的是提取微信好友信息并对个性签名进行可视化处理。
首先安装我们所需要的库:

pip install itchat
pip install matplotlib.pyplot    #用于生成2D图
pip install jieba  #用于中文分词
pip install wordcloud   #用于词云生成

第一步:提取好友信息:
调用itchat,通过扫码登陆网页微信获取返回的好友信息,代码如下:

def get_data():
	itchat.auto_login()   #调用登陆模块
	friends=itchat.get_friends(update=True)  #获取好友信息
	return friends

运行程序扫描生成的二维码登陆微信姐可以看到所有的好友信息,涉及隐私,这里就不放图了。
第二步:通过对返回的信息分析发现,每一行为一个好友的完整信息,用‘,’隔开顺序依次为:昵称,备注名,性别(1为男,2为女,0为不确定(什么鬼阿),省份,城市,个性签名,星标,特殊好友权限),这里定义一个函数将获取的数据存储到列表中,代码如下:

def prase_data(data):
	friends=[]
	for item in data[1:]:
		friend={
		'NickName':item['NickName'],                           #昵称
		'RemarkName':item['RemarkName'],                   #备注名
		'Sex':item['Sex'],#性别
		'Province':item['Province'],#省份
		'City':item['City'],#城市
		'Signature':item['Signature'].replace('\n',' ').replace(' ',' '),	#处理换行问题
		'StarFriend':item['StarFriend'],#星标朋友
		'ContactFlag':item['ContactFlag']	#好友权限
		}
		friends.append(friend)
	return friends

第三步:再定义一个函数将获取的列表保存为.txt文件,代码如下:

def save_to_txt():
	
	friends=prase_data(get_data())
	for item in friends:
		with open ('jjdfriend.txt','a',encoding='utf-')as f:
			f.write('%s,%s,%d,%s,%s,%s,%d,%d\n'%(
			item['NickName'],item['RemarkName'],item['Sex'],
			item['Province'],item['City'],item['Signature'],
			item['StarFriend'],item['ContactFlag']))

第四步:接下来是最重要的部分,获取个性签名并生成词云,安装好所需要的库文件之后,代码如下:

from wordcloud import WordCloud,STOPWORDS
import matplotlib.pyplot as plt
import jieba

signs=[]
with open ('fkdfriend.txt','r',encoding='utf-8')as f:
	rows=f.readlines()
	for row in rows:
		sign=row.split(',')[5]
		if sign!="":
			signs.append(sign)
			
split=jieba.cut(str(signs))#分词
words=' '.join(split)#以空格连接
stopwords=STOPWORDS.copy()#设置屏蔽词
stopwords.add('span')
stopwords.add('class')
stopwords.add('emoji1f334')
stopwords.add('emoji1f388')
stopwords.add('emoji1f33a')
stopwords.add('emoji1f33c')
stopwords.add('emoji1f3633')

bg_image=plt.imread('ground.jpg')
wordcloud = WordCloud(mask=bg_image,background_color='white',scale=1.5,stopwords=stopwords).generate(words)
#image_colors=ImageColorGenerator(bg_image)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
wordcloud.to_file('word.jpg')

生成的图片如下:在这里插入图片描述
问题来了,为什么生成的是乱码,查询资料后发现wordcloud是默认不支持中文的,所以我们需要进行一些操作,首先找到系统中的字体文件夹:位置为:C:\Windows\Font,打开后里有这些字体:
在这里插入图片描述
这里我选择了微软雅黑字体,接下来需要将字体文件复制到系统安装wordcloud位置,路径如下:C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-packages\wordcloud,将选择字体粘贴到文件夹内,如下图:
在这里插入图片描述
并且修改上面一句代码为:

wordcloud = WordCloud(mask=bg_image,background_color='white',font_path='msyhbd.ttc',scale=1.5,stopwords=stopwords).generate(words)#增加中文字体

运行成功,效果如下:

在这里插入图片描述
通过词云,你或许会恍然大悟,原来你们这样的人啊。是啊,在现在这个社会,我们似乎更像是一个行走的数据包,而且几乎每时每刻都在产生新数据,有很多人对大数据时代感到恐惧,认为隐私会被滥用之类。但事实上,每一次新技术的出现伊始都会有这样的声音,但我相信技术是无罪的,有问题的只是一部分人而已,并且这样的人无论什么时代都会存在,所以让我们敞开胸怀,拥抱这个美好的大数据时代。
当然,微信好友中能处理的信息还有很多,比如性别分布,地理位置都很有分析价值,有兴趣的可以尝试,这里推荐一个百度开源的python可视化库-pyecharts,这个库可以很大程度上替代matplotlib,pygal以及Geo。好了,就啰嗦这么多。

备注:本文中涉及的jieba库所用到的分词技术看起来好像是一个很神奇的东西,原来我也这么认为,但直到看来吴军先生的《数学之美》一书,发现它的解决依旧是使用了很常见的数学模型-马尔科夫链,感兴趣的可以阅读这一部分内容。

猜你喜欢

转载自blog.csdn.net/weixin_42672765/article/details/83957606