内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

用Python对微信好友进行分析

2018-04-16 17:30 出处:清屏网 人气: 评论(0

用了微信几年了,微信号有也不少了,但是真正了解自己的好友吗?好友最多的城市是哪个?好友男女比例是多少?好友签名都是什么?今天我们来充分了解自己的微信好友。

运行平台:Windows

Python版本:Python3.6

IDE:Sublime Text

其他工具:Chrome浏览器

1、准备工作

1.1 库介绍

只有登录微信才能获取到微信好友的信息,本文采用 wxpy 该第三方库进行微信的登录以及信息的获取。

wxpy在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。

wxpy一些常见的场景:

  • 控制路由器、智能家居等具有开放接口的玩意儿
  • 运行脚本时自动把日志发送到你的微信
  • 加群主为好友,自动拉进群中
  • 跨号或跨群转发消息
  • 自动陪人聊天
  • 逗人玩

总而言之,可用来实现各种微信个人号的自动化操作。

1.2 wxpy库安装

wxpy 支持 Python 3.4-3.6,以及 2.7 版本

将下方命令中的 “pip” 替换为 “pip3” 或 “pip2”,可确保安装到对应的 Python 版本中

  1. 从 PYPI 官方源下载安装 (在国内可能比较慢或不稳定):
pip install -U wxpy
  1. 从豆瓣 PYPI 镜像源下载安装 ( 推荐国内用户选用 ):
pip install -U wxpy -i "https://pypi.doubanio.com/simple/"

1.3 登录微信

wxpy中有一个 机器人对象 ,机器人 Bot 对象可被理解为一个 Web 微信客户端。 Bot 在初始化时便会执行登陆操作,需要手机扫描登陆。

通过机器人对象 Botchats() , friends()groups() , mps() 方法, 可分别获取到当前机器人的 所有 聊天对象好友群聊 ,以及 公众号列表

本文主要通过 friends() 获取到所有好友信息,然后进行数据的处理。

from wxpy import *

# 初始化机器人,扫码登陆
bot = Bot()

# 获取所有好友
my_friends = bot.friends()
print(type(my_friends))

以下为输出消息:

Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Loading the contact, this may take a little while.
<Login successfully as 王强  >
<class 'wxpy.api.chats.chats.Chats'>

wxpy.api.chats.chats.Chats 对象是多个聊天对象的合集,可用于搜索或统计,可以搜索和统计的信息包括 sex (性别)、 province (省份)、 city (城市)和 signature (个性签名)等。

2、微信好友男女比例

2.1 数据统计

使用一个字典 sex_dict 来统计好友中男性和女性的数量。

# 使用一个字典统计好友男性和女性的数量
sex_dict = {'male': 0, 'female': 0}

for friend in my_friends:
    # 统计性别
    if friend.sex == 1:
        sex_dict['male'] += 1
    elif friend.sex == 2:
        sex_dict['female'] += 1

print(sex_dict)

以下为输出结果:

{'male': 255, 'female': 104}

2.2 数据呈现

本文采用 ECharts饼图 进行数据的呈现,打开链接 http://echarts.baidu.com/echarts2/doc/example/pie1.html,可以看到如下内容:

1、echarts饼图原始内容

从图中可以看到左侧为数据,右侧为呈现的数据图,其他的形式的图也是这种左右结构。看一下左边的数据:

option = {
    title : {
        text: '某站点用户访问来源',
        subtext: '纯属虚构',
        x:'center'
    },
    tooltip : {
        trigger: 'item',
        formatter: "{a} <br/>{b} : {c} ({d}%)"
    },
    legend: {
        orient : 'vertical',
        x : 'left',
        data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
    },
    toolbox: {
        show : true,
        feature : {
            mark : {show: true},
            dataView : {show: true, readOnly: false},
            magicType : {
                show: true, 
                type: ['pie', 'funnel'],
                option: {
                    funnel: {
                        x: '25%',
                        width: '50%',
                        funnelAlign: 'left',
                        max: 1548
                    }
                }
            },
            restore : {show: true},
            saveAsImage : {show: true}
        }
    },
    calculable : true,
    series : [
        {
            name:'访问来源',
            type:'pie',
            radius : '55%',
            center: ['50%', '60%'],
            data:[
                {value:335, name:'直接访问'},
                {value:310, name:'邮件营销'},
                {value:234, name:'联盟广告'},
                {value:135, name:'视频广告'},
                {value:1548, name:'搜索引擎'}
            ]
        }
    ]
};

可以看到 option = 后面的大括号里是 JSON 格式的数据,接下来分析一下各项数据:

  • title:标题
    • text:标题内容
    • subtext:子标题
    • x:标题位置
  • tooltip:提示,将鼠标放到饼状图上就可以看到提示
  • legend:图例
    • orient:方向
    • x:图例位置
    • data:图例内容
  • toolbox:工具箱,在饼状图右上方横向排列的图标
    • mark:辅助线开关
    • dataView:数据视图,点击可以查看饼状图数据
    • magicType:饼图(pie)切换和漏斗图(funnel)切换
    • restore:还原
    • saveAsImage:保存为图片
  • calculable:暂时不知道它有什么用
  • series:主要数据
    • data:呈现的数据

其它类型的图数据格式类似,后面不再详细分析。只需要修改 data 、l egend->dataseries->data 即可,修改后的数据为:

option = {
    title : {
        text: '微信好友性别比例',
        subtext: '真实数据',
        x:'center'
    },
    tooltip : {
        trigger: 'item',
        formatter: "{a} <br/>{b} : {c} ({d}%)"
    },
    legend: {
        orient : 'vertical',
        x : 'left',
        data:['男性','女性']
    },
    toolbox: {
        show : true,
        feature : {
            mark : {show: true},
            dataView : {show: true, readOnly: false},
            magicType : {
                show: true, 
                type: ['pie', 'funnel'],
                option: {
                    funnel: {
                        x: '25%',
                        width: '50%',
                        funnelAlign: 'left',
                        max: 1548
                    }
                }
            },
            restore : {show: true},
            saveAsImage : {show: true}
        }
    },
    calculable : true,
    series : [
        {
            name:'访问来源',
            type:'pie',
            radius : '55%',
            center: ['50%', '60%'],
            data:[
                {value:255, name:'男性'},
                {value:104, name:'女性'}
            ]
        }
    ]
};

数据修改完成后,点击页面中绿色的 刷新 按钮,可以得到饼图如下(可以根据自己的喜好修改主题):

2、好友性别比例

将鼠标放到饼图上可以看到详细数据:

3、好友性别比例查看数据

3、微信好友全国分布图

3.1 数据统计

# 使用一个字典统计各省好友数量
province_dict = {'北京': 0, '上海': 0, '天津': 0, '重庆': 0,
    '河北': 0, '山西': 0, '吉林': 0, '辽宁': 0, '黑龙江': 0,
    '陕西': 0, '甘肃': 0, '青海': 0, '山东': 0, '福建': 0,
    '浙江': 0, '台湾': 0, '河南': 0, '湖北': 0, '湖南': 0,
    '江西': 0, '江苏': 0, '安徽': 0, '广东': 0, '海南': 0,
    '四川': 0, '贵州': 0, '云南': 0,
    '内蒙古': 0, '新疆': 0, '宁夏': 0, '广西': 0, '西藏': 0,
    '香港': 0, '澳门': 0}

# 统计省份
for friend in my_friends:
    if friend.province in province_dict.keys():
        province_dict[friend.province] += 1

# 为了方便数据的呈现,生成JSON Array格式数据
data = []
for key, value in province_dict.items():
    data.append({'name': key, 'value': value})

print(data)

以下为输出结果:

[{'name': '北京', 'value': 91}, {'name': '上海', 'value': 12}, {'name': '天津', 'value': 15}, {'name': '重庆', 'value': 1}, {'name': '河北', 'value': 53}, {'name': '山西', 'value': 2}, {'name': '吉林', 'value': 1}, {'name': '辽宁', 'value': 1}, {'name': '黑龙江', 'value': 2}, {'name': '陕西', 'value': 3}, {'name': '甘肃', 'value': 0}, {'name': '青海', 'value': 0}, {'name': '山东', 'value': 7}, {'name': '福建', 'value': 3}, {'name': '浙江', 'value': 4}, {'name': '台湾', 'value': 0}, {'name': '河南', 'value': 1}, {'name': '湖北', 'value': 4}, {'name': '湖南', 'value': 4}, {'name': '江西', 'value': 4}, {'name': '江苏', 'value': 9}, {'name': '安徽', 'value': 2}, {'name': '广东', 'value': 63}, {'name': '海南', 'value': 0}, {'name': '四川', 'value': 2}, {'name': '贵州', 'value': 0}, {'name': '云南', 'value': 1}, {'name': '内蒙古', 'value': 0}, {'name': '新疆', 'value': 2}, {'name': '宁夏', 'value': 0}, {'name': '广西', 'value': 1}, {'name': '西藏', 'value': 0}, {'name': '香港', 'value': 0}, {'name': '澳门', 'value': 0}]

可以看出,好友最多的省份为 北京 。那么问题来了:为什么要把数据重组成这种格式?因为ECharts的地图需要这种格式的数据。

3.2 数据呈现

采用 ECharts地图 来进行好友分布的数据呈现。打开该网址,将左侧数据修改为:

```json

option = {

title : {

text: '微信好友全国分布图',

subtext: '真实数据',

x:'center'

},

tooltip : {

trigger: 'item'

},

legend: {

orient: 'vertical',

x:'left',

data:['好友数量']

},

dataRange: {

min: 0,

max: 100,

x: 'left',

y: 'bottom',

text:['高','低'], // 文本,默认为数值文本

calculable : true

},

toolbox: {

show: true,

orient : 'vertical',

x: 'right',

y: 'center',

feature : {

mark : {show: true},

dataView : {show: true, readOnly: false},

restore : {show: true},

saveAsImage : {show: true}

}


分享给小伙伴们:
本文标签: Python微信

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号