微信好友性别分布与签名分析词云图

35 篇文章 1 订阅
14 篇文章 0 订阅

介绍

  • 我们知道,python有很多支持的第三方库,有些库广泛用于数据分析,例如numpypandas,而用于方方面面的第三方库里面,一个比较有趣的库是itchat

  • itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。
    使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人

  • itchat可以用来做自动回复聊天机器人,并且还可以自动添加好友等等,本次我们只获取好友信息并对其进行分析。

实现

  • 这次我要讲的是利用itchat库来获取好友信息,并主要对其性别和个性签名进行分析。

  • Ps:主要是因为我的微信好友不多,然后好友城市等信息比较少,就没继续写了,暗示加波微信。

  • 下面是效果图:(好像暴露了什么,emm女性好友少了点,可能解释了我为什么单身)
    效果图

现在我们开始来实现它把。

  • 环境
    Windows10、Anaconda(Python的IDE)、相关的库(itchat、jieba、WordCloud)

  • 如果没有安装Anaconda的请参考我的这篇文章Windows10下安装Anaconda3(64位)详细过程

  • 首先我们打开Jupyter Notebook来新建一个文件,然后输入以下代码来导入库:

    import itchat  #提供微信接口的库 
    import jieba.analyse  #结巴分词(中文分词) 
    import codecs  #编码格式用到的 
    from wordcloud import WordCloud #词云库 
    from scipy.misc import imread #读取图片的库 
    import matplotlib.pyplot as plt #画图的库 
    import matplotlib.font_manager as fm #加载中文字体的库
    myfont=fm.FontProperties(fname='C:\Windows\msyh.ttc')
    
  • 调用itchat的方法来获取好友的信息:

    #登陆方法   hotReload参数设置成True的话第二次登陆只需要在手机上同意登陆就行了,而不需要再次扫码登陆
    itchat.auto_login(hotReload=True)
    #爬取自己好友相关信息,返回一个json格式的信息
    friends=itchat.get_friends(update=True)[0:]
    itchat.logout() #退出登录
    
  • 观察结构
    这里写图片描述

  • 定义一个方法,用来解析各个变量

    #解析数据包括好友昵称  备注 性别 省份 城市 个人简介 点赞数
    def get_var(var):
        variable=[]
        for friend in friends:
            value=friend[var]
            if value=='':
                value='无'
            variable.append(value)
        return variable
    
  • 调用函数得到各个变量,并转换成字典的格式

    NickName=get_var('NickName')#昵称
    RemarkName=get_var('RemarkName')#备注名称
    Sex=get_var('Sex')#性别
    Province=get_var('Province')#省
    City=get_var('City')#市
    Signature=get_var('Signature')#个性签名
    AttrStatus=get_var('AttrStatus')#点赞数
    data={'NickName':NickName,'RemarkName':RemarkName,'Sex':Sex,'Province':Province,'City':City,'Signature':Signature,'AttrStatus':AttrStatus}
    
  • 将数据写入文件

    with codecs.open("WeiXin.json","w",encoding='utf-8') as f:
        f.write(str(data))
    
  • 分析自己好友的性别比例

    #初始化计数器
    male=female=other=0
    #第一个是自己所以是datas[1:]
    for sex in data['Sex'][1:]:
        if sex==1:
            male+=1
        elif sex==2:
            female+=1
        else:
            other+=1
    #计算朋友总数
    total=male+female+other
    male=float(male)/total*100
    female=float(female)/total*100
    other=float(other)/total*100
    
    #打印出自己的好友的性别比例
    print("男性好友:%.2f%%"%(male))
    print("女性好友:%.2f%%"%(female))
    print("不明性别好友:%.2f%%"%(other))
    

    这里写图片描述

  • 将数据转化为柱状图,更直观的表现数据的特征

    index=[0,1,2] #索引
    values=[male,female,other]#值
    fig,ax=plt.subplots()
    #导入简体中文字体,才能正确的显示中文
    plt.title('性别分布',fontproperties=myfont)
    a=ax.bar(0,male,color='r')
    b=ax.bar(1,female,color='g')
    c=ax.bar(2,other,color='b')
    plt.xticks(index,['男','女','未知'],fontproperties=myfont)
    
    #添加数据标签
    for x in a+b+c:
        h=x.get_height()
        ax.text(x.get_x()+x.get_width()/2,h,'%.2f%%'%h,ha='center',va='bottom')
    plt.show()
    

    这里写图片描述

  • 将好友的个性签名先通过结巴分词分割,分词后在用wordcloud画出词云图

    #TODO个性签名词云图
    siglist=''
    for Signature in data['Signature']:
        #将签名中的一些不正常的字符去掉
        Signature=Signature.replace('span','').replace('\r\n','').replace('emoji','')
        Signature=Signature.replace('class','').replace('"','').replace('无','').replace('< = 1f61e>','')
        Signature=Signature.replace('< = 1f60c>','').replace('</>','').replace('< = 1f388>','')
        Signature=Signature.replace('\u3000','').replace('< = 1f4de>️','').replace('< = 1f343>','').replace('< = 2601>','')
        #结巴分词切割签名
        siglist += ' '.join(jieba.analyse.extract_tags(Signature,5))
    
    #读取背景图片
    backgroud_Image = imread('1.png')
    #设置词云样式 创建WordCloud对象
    wc = WordCloud(font_path=r'C:\Windows\msyh.ttc',background_color='white',max_words=2000,mask=backgroud_Image)
    #将词汇导入
    wc.generate(siglist)
    #将结果存储到图片中
    wc.to_file('test2.png')
    
    # 显示词云图  
    plt.figure(figsize=(15,15))
    plt.imshow(wc,interpolation='bilinear')  
    # 是否显示x轴、y轴下标  
    plt.axis('off')  
    plt.show()  
    

    这里写图片描述

附:素材下载链接

总结:

这里我们首先用itchat的方法获得了好友的相关信息,然后对信息进行处理,通过计算或者切割来完成我们的目的,得到性别分布图和好友签名词云图。
当然itchat的功能不只这么一点,下次我会写一个在服务器上面部署微信自动聊天机器人的博客,欢迎大家交流

至此我们就大功告成了

我的个人博客网站是:www.coderyyn.cn
上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子
欢迎大家一起交流学习

转载请注明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值