编程学习网 > 编程语言 > Python > Python itchat模块分析微信好友数据教程
2023
07-31

Python itchat模块分析微信好友数据教程

关于用python分析微信好友数据这件事,很久之前就想写了。几年前微信网页版还没有停服的时候,使用itchat来分析数据,非常方便。后来网页版微信关闭了,这个模块就用不了。当时也找了一些别的方法,比如wechat robot之类的方案,用起来有点麻烦。最近看到itchat更新了,有一个itchat-uos的版本,针对的是桌面版的微信,于是简单拉了一下自己的数据,过程分享出来。

核心的包是itchat。安装的话,使用命令pip install itchat-uos. 其他的模块,还有matplotlib画图模块,画词云图模块wordcloud和jieba。多说无益,代码见。
import itchat
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
import jieba
import re
itchat.auto_login(hotReload=True)
# itchat.auto_login()
itchat.dump_login_status()
we_friend = itchat.get_friends(update=True)
print(we_friend)
print(we_friend[0])
执行上面的程序,就会出现一个二维码,用自己的微信扫码登录一下。第7行就是每次登录都要扫码,第6行写法就是登录后一段时间内再次运行程序不用再次扫码登录。第10行和第11行打印一下数据,有个直观的认识。当然还可以加上print(type(we_friend)),看一下数据类型。
we_friend是一个列表,包含了所有好友的数据。其中第一个数据,we_friend[0]是自己的信息。不过第一个自己的数据不是特别全,可以参考看看后面好友的数据。列了3个数据,个性签名,昵称,性别如下:
'Signature': '愿神明偏爱,一切从欢',
 'NickName': 'Whale Fall',
 'Sex': 1
俗话说得好,男女搭配,干活不累。微信好友的男女比例可以看出一个人的生活圈子是怎样的,我们就来拉一拉数据。
male = 0
female = 0
other = 0
for fri_info in we_friend:
    if fri_info['Sex'] == 1:
        male = male+1
    elif fri_info['Sex'] == 2:
        female = female+1
    else:
        other += 1
print(male,female,other)
初始值都定义为0,‘Sex’为1的话是男性,2是女性,剩下的是其他的。前面一个for循环遍历整个列表。最后print打印一下,我的数据是477,347,47。比例用个饼图画一下,结果如下:

怎么样,惊不惊喜,意不意外,居然不是清一色的男性。作为一个码农,这个比例已经很不简单了。(很多女性是找我买螃蟹的客户哈,手动狗头保命一波)

简单的例子可以看到,第一步用itchat获取数据,后面就是数据处理,数据分析的工作了,再加上画图词云图等方式,更直观的表示出来。

每次我们添加一个新的好友的时候,最先看到的总是昵称,头像还有个性签名,然后可能是朋友圈以及朋友圈封面。每个人心里都有一团火,路过的人只看到了烟。让我们一起看看,我的朋友们飘的是什么烟。

import re    #此处需要re过滤数据
sign_li = []
rule = re.compile("1f\d+\w*|[<>/=]")    # 定义正则规则
with open('Signature.txt','w',encoding='utf-8') as f:
    for fri_info in we_friend:
        signature = fri_info['Signature']
        if signature:
            sign_deal = signature.replace('\n', '').replace('\t', '').replace(' ', '').replace("span", "").replace("class", "").replace("emoji", "")
            sign = rule.sub("", sign_deal)
            sign_li.append(sign)
            f.write(sign+'\n')
            # print(sign)
正则表达式的规则找的网上的,感谢前辈们的总结,这个规则可以过滤掉一些表情以及显示不出来的特殊字符。(表情也是很重要的一部分啦,这里先去掉)执行完上面的代码后,就可以看到Signature.txt,文件内容是过滤过的好友个性签名。
接下来就是使用jieba分词功能,想要效果更好一点的话,可以多过滤几遍,把常用的中文停词去掉。
comment_txt = ''
for li in sign_li:
    # comment_txt += ' '.join(jieba.cut(li, cut_all=False))
    comment_txt += ' '.join(jieba.cut(li))

back_img = plt.imread('boji.jpeg')
cloud = WordCloud(font_path='SimHei.ttf',  # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
                  background_color="black",  # 背景颜色
                  max_words=500,  # 词云显示的最大词数
                  mask=back_img,  # 设置背景图片
                  max_font_size=64,  # 字体最大值
                  min_font_size=2,
                  random_state=42,
                  width=360, height=591, margin=2, 
                  )
wc = cloud.generate(comment_txt)
image_colors = ImageColorGenerator(back_img)
plt.figure("wordc")
plt.imshow(wc.recolor(color_func=image_colors))
wc.to_file('66.png')
第3行和第4行是jieba的不同的分词模式,可以分别试试,看看分出来的效果。第6行是读背景图片,最好找线条轮廓对比度比较清楚的图片。一个轮廓好点的图片就成功了一半,爱丽丝的图片是用的比较多的,但我不喜欢,强行拿波吉的图片来当背景。第7行,显示中文的话,需要填入中文字体路径,一般是
font_path=r"C:\Windows\Fonts\simhei.ttf"
第9-14行就是一些自定义参数,当然还有很多可以设置,会对结果的样式效果产生影响。看一看画出来的结果。
这一张里面英文的字符比较丑,分词没过滤掉,不过大体轮廓还是看得出来是绿色的波吉的

这一张最大最小字体设置的相差不大

这一张换了个黑色的背景。

看下来就是,认真做事,好好生活,爱自己爱别人,时间,生活,努力,赚钱之类的。愿大家,都能美梦成真。(路漫漫其修远兮这句话被4个朋友引用了,这里因为已经分成词了就看不到了,按句子输出的话,这句话频率比较高)
除了个性签名,性别之外,还可以分析地区等其他数据。也有那种自动回复消息的机器人。

今天的介绍就到这里,想要知道自己微信好友男女比例,城市分布,个性签名这些情况的,可以自己试试这些代码。

以上就是Python itchat模块分析微信好友数据教程的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取