zoukankan      html  css  js  c++  java
  • [置顶] Python 使用itchat 对微信好友数据进行简单分析

    人生苦短,我用Python!
    Python 热度一直很高,我感觉这就是得益于拥有大量的包资源,极大的方便了开发人员的需求。

    最近在一个微信公众号上看到一个调用微信 API 可以对微信好友进行简单数据分析的一个包 itchat 感觉挺好用的,就简单尝试了一下。

    首先统计一下微信好友的男女比例:

    #coding:utf-8
    import itchat
    # 先登录
    itchat.login()
    # 获取好友列表
    friends = itchat.get_friends(update=True)[0:]
    # 初始化计数器,有男有女,当然,有些人是不填的
    male = female = other = 0
    # 遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算# 1表示男性,2女性
    for i in friends[1:]:
        sex = i["Sex"]
        if sex == 1:
            male += 1
        elif sex == 2:
            female += 1
        else:
            other += 1
            # 总数算上,好计算比例啊~
            total = len(friends[1:])
            # 好了,打印结果
    
    print (u"男性好友:%.2f%%" % (float(male) / total * 100))
    print (u"女性好友:%.2f%%" % (float(female) / total * 100))
    print (u"其他:%.2f%%" % (float(other) / total * 100))
    
    
    # 使用echarts,加上这段
    from echarts import Echart, Legend, Pie
    chart = Echart(u'%s的微信好友性别比例' % (friends[0]['NickName']), 'from WeChat')
    chart.use(Pie('WeChat',[{'value': male, 'name': u'男性 %.2f%%' % (float(male) / total * 100)},{'value': female, 'name': u'女性 %.2f%%' % (float(female) / total * 100)},{'value': other, 'name': u'其他 %.2f%%' % (float(other) / total * 100)}],radius=["50%", "70%"]))
    chart.use(Legend(["male", "female", "other"]))
    del chart.json["xAxis"]
    del chart.json["yAxis"]
    chart.plot()
    chart.save("/Library","phones")

    效果如图:(不知道为什么还有那么多 其他。。。)
    这里写图片描述

    然后抓取所有好友的个性签名,看看其中的高频词汇:

    # coding:utf-8
    import itchat
    import re
    itchat.login()
    friends = itchat.get_friends(update=True)[0:]
    tList = []
    for i in friends:
        signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")
        rep = re.compile("1fd.+")
        signature = rep.sub("", signature)
        tList.append(signature)
        # 拼接字符串
        text = "".join(tList)
    # jieba分词
    import jieba
    wordlist_jieba = jieba.cut(text, cut_all=True)
    wl_space_split = " ".join(wordlist_jieba)
    # wordcloud词云
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud, ImageColorGenerator
    import os
    import numpy as np
    import PIL.Image as Image
    d= os.path.dirname(__file__)
    alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))
    my_wordcloud = WordCloud(background_color="white", max_words=2000,mask=alice_coloring,max_font_size=40, random_state=42,font_path='/Users/sebastian/Library/Fonts/Arial Unicode.ttf').generate(wl_space_split)
    image_colors = ImageColorGenerator(alice_coloring)
    plt.imshow(my_wordcloud.recolor(color_func=image_colors))
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    # 保存图片 并发送到手机
    my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))
    itchat.send_image("wechat_cloud.png", 'filehelper')

    效果如图:
    这里写图片描述

    以上参考Python开发者微信公众号中的教程!

  • 相关阅读:
    According to TLD or attribute directive in tag file, attribute end does not accept any expressions
    Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
    sql注入漏洞
    Servlet—简单的管理系统
    ServletContext与网站计数器
    VS2010+ICE3.5运行官方demo报错----std::bad_alloc
    java 使用相对路径读取文件
    shell编程 if 注意事项
    Ubuntu12.04下eclipse提示框黑色背景色的修改方法
    解决Ubuntu环境变量错误导致无法正常登录
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232088.html
Copyright © 2011-2022 走看看