使用Python分析好友性别比例及好友位置

最近看了一篇文章,利用Python分析好友的性别比例和位置构成,蛮有意思,思路非常简单,通过itchat包将微信里friends的数据导出来,从中选出性别信息,利用matplotlib画成饼状图。同样,从中选出位置的省份信息,生成csv文件,就可以利用现成的一些数据可视化的网站帮你展示。

需要用到的第三方库有:matplotlib、itchat、 collections 、csv

登录微信,取出friends的数据

itchat.auto_login(hotReload=True)
friends = itchat.get_friends(update=True)

分析性别比例

由于friends第一个数据(0)为当前用户,因此从1开始记录数据,用map将friends中sex数据导出,其中使用了lambda匿名函数器将sex选择出来。导出sex函数后,要统计性别的个数,使用collections.Counter计数,再使用item转化为可遍历的元组。最后就可以使用matplotlib画图了。

代码如下:

def analyseSex(friends):
    # 将friends中的Sex信息抽取出来,map返回的是迭代器,转化为list格式
    sexs = list(map(lambda x:x['Sex'],friends[1:]))
    # item返回(键,值)元组,第一维为键,第二维为值,即个数
    # 取性别个数变为列表
    counts = list(map(lambda x:x[1],c.Counter(sexs).items()))
    # 设置标签
    labels = ['未知','男性','女性']
    # 设置标签颜色
    colors = ['red','yellowgreen','lightskyblue']
    plt.figure(figsize=(8,5), dpi=80)
    # 设置为仅显示一个分区,不设置的话,图可能是椭圆的
    plt.axes(aspect=1)
    plt.pie(counts, #性别统计结果
            labels=labels, #性别展示标签
            colors=colors, #饼图区域配色
            labeldistance = 1.1, #标签距离圆点距离
            autopct = '%3.1f%%', #饼图区域文本格式
            shadow = False, #饼图是否显示阴影
            startangle = 90, #饼图起始角度
            pctdistance = 0.6 #饼图区域文本距离圆点距离
    )
    # 图例显示
    plt.legend(loc='upper right',)
    plt.title(u'%s的微信好友性别组成' %(friends[0]['NickName']))
    plt.show()

使用Python分析好友性别比例及好友位置_第1张图片

分析好友位置

这里将friends的姓名、省份写入csv文件,然后使用BDP进行分析

使用DictWriter以字典的形式将每个微信好友的姓名和省份信息写进csv的每行,注意:写入每行之前要先定义数据头,就是数据属性名

代码:

def analyseLocation(friends):
    # 定义数据头
    headers = ['NickName','Province']
    with open('location.csv','w',encoding='utf-8',newline='',) as csvFile:
        # DictWriter以字典的形式写入内容
        # 设置写入格式
        writer = csv.DictWriter(csvFile, headers)
        #  writeheader()实现添加文件头(数据名)
        writer.writeheader()
        for friend in friends[1:]:
            # 定义一个字典
            row = {}
            # 按属性写入
            row['NickName'] = friend['NickName']
            row['Province'] = friend['Province']
            # 将每个字典写入为一行
            writer.writerow(row)

在BDP网站的将生成的csv文件上传

使用Python分析好友性别比例及好友位置_第2张图片

使用Python分析好友性别比例及好友位置_第3张图片

按照提示,不停点击下一步,直至上传成功。


选择新建图片,格式选择为“微信运营分析”

维度添加省份,数值添加名字


在“筛选器”筛选省份,去掉国外的和空白的

使用Python分析好友性别比例及好友位置_第4张图片

设置格式

使用Python分析好友性别比例及好友位置_第5张图片

最后生成位置图像

使用Python分析好友性别比例及好友位置_第6张图片

最后就大功告成了,赶紧分析一波自己的微信好友吧。

附上完整的代码框架

import matplotlib.pyplot as plt
import itchat
import collections as c
import csv
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

def analyseSex(friends)

def analyseLocation(friends)

if __name__ == '__main__':
    itchat.auto_login(hotReload=True)
    friends = itchat.get_friends(update=True)
    analyseSex(friends)
    analyseLocation(friends)

参考:

https://zhuanlan.zhihu.com/p/34378997?utm_source=wechat_session&utm_medium=social&from=singlemessage

你可能感兴趣的:(每天学一点好玩的Python)