“python是个好语言”——鲁迅
准备材料
想要分析微信好友,首先你需要这个:itchat。看名字就知道是用来专门分析微信的模块。没有的话可以先pip安装一下:
pip install itchat
说到可视化,你可能想到用到matplotlib,但是Echarts提供了一个更炫酷的可视化方法。Echarts是百度开发的开源数据可视化的前端插件,之前我一直用这个做学术网络的可视化(比如国际学术合作网络图):
但是Echarts只能用于前端,对于处理动态数据来说并不是很友好,所以我们使用pyecharts,通过python更加简便地绘图。
pip install pyecharts
微信登录
由于itchat已经将所需的功能封装好,所以相关操作十分简便。首先,需要登录你的微信,并获取微信好友列表:
import itchat
from pyecharts import Pie
from pyecharts import Map
# 设置微信自动登录
itchat.auto_login(hotReload=True)
itchat.dump_login_status()
# 获取微信好友
we_friend = itchat.get_friends(update=True)
之后会跳出一个二维码,你需要通过扫码来登录。下面是登录成功之后显示的信息。
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 你的微信昵称
看看我微信好友中妹子的比例
man = 0
woman = 0
other = 0
for person in we_friend[1:]:
s = person['Sex']
if s == 1:
man += 1
elif s == 2:
woman += 1
else:
other += 1
# print(person['NickName'], person['RemarkName'])
attr = ['男','女','其他']
value = [man, woman, other]
pie = Pie('性别饼图')
pie.add('', attr, value, is_label_show=True)
pie.render('./html/性别Pie.html')
好友列表是一个封装好的字典列表数据,你可以通过遍历+键值对访问的方式来查看好友的所有具体信息。试着输出一下,可以看具体有用户名,所在地,啦啦啦啦一大堆属性。我们只看Sex属性并绘制饼图。
dict_keys(['MemberList', 'UserName', 'City', 'DisplayName', 'PYQuanPin', 'RemarkPYInitial', 'Province', 'KeyWord', 'RemarkName', 'PYInitial', 'EncryChatRoomId', 'Alias', 'Signature', 'NickName', 'RemarkPYQuanPin', 'HeadImgUrl', 'UniFriend', 'Sex', 'AppAccountFlag', 'VerifyFlag', 'ChatRoomId', 'HideInputBarFlag', 'AttrStatus', 'SnsFlag', 'MemberCount', 'OwnerUin', 'ContactFlag', 'Uin', 'StarFriend', 'Statues', 'WebWxPluginSwitch', 'HeadImgFlag'])
上述代码执行完毕之后会生成一个html文件,在浏览器端打开它:
emmm果然程序员女性微信好友较少一些,除去七大姑八大姨就更少了o(╥﹏╥)o
至于那几个性别是其他的,都是什么鬼。你当然可以通过查找来看看到底谁的性别是其他的,但是为了隐私这部分我就不挂上去了…
看看我的好友们来自祖国哪里
provinces_dict = {}
city_dict = {}
for person in we_friend[1:]:
province = person['Province']
city = person['City']
if province == '' or city == '':
continue
# 用ASCII的方式去除外国地名
if ord(province[0]) in range(65,123) or ord(city[0]) in range(65,123):
continue
if province in provinces_dict.keys():
provinces_dict[province] += 1
else:
provinces_dict[province] = 1
if city in city_dict.keys():
city_dict[city] += 1
else:
city_dict[city] = 1
provinces = []
p_value = []
cities = []
c_value = []
provinces = list(provinces_dict.keys())
for key in provinces_dict.keys():
p_value.append(provinces_dict[key])
map = Map('微信好友省份分布', width = 1200,height = 600)
map.add('', provinces, p_value, maptype='china',
visual_range=[0, 64],
is_visualmap = True,
visual_text_color = '#000',
is_label_show = True)
map.render('./html/微信好友省份分布.html')
因为家在吉林省,所以来自吉林的就多啦。
以上只是一些基础的操作,数据分析与可视化是一个非常好玩的过程,大家也可以继续研究~