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开发者微信公众号中的教程!

  • 相关阅读:
    MATLAB中的并行计算
    CVPR 2012 Highlights from Andrej Karpathy
    在.NET客户端程序中使用多线程
    AlcheMo
    笑笑
    字体模糊的解决办法 Windows Mobile
    打开windows mobile的输入模式
    XHTML MP 基础(手机网站开发基础技术)
    U盘修复资料
    历史上最昂贵的8大IT工程失误和教训
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232088.html
Copyright © 2011-2022 走看看