itchat+pyecharts实现微信好友分析及可视化
python+pyecharts实现微信好友分析及可视化
- 1. 准备及介绍
- 2. itchat获取微信好友列表
- 3. 分词及生成词云
- 3.1 jieba分词
- 3.2 生成词云
- 4. pyecharts生成好友性别饼图
- 5. pyecharts生成好友分布图
- 5.1 微信好友省份分布图
- 5.2 微信好友城市分布图
- 6. 问题及解决
1. 准备及介绍
主要库的安装如下(其余省略):
itchat,开源的微信个人号接口,用来获取微信的联系人列表,安装命令如下:
pip install itchat
pyecharts,由百度开源的数据可视化,目前已更新到V1版本,之前的0.5.x 版本将不再进行维护。安装命令如下(后三个为地图包):
pip install pyecharts -U pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg
本文的主要目的如下:
- 获取当前用户好友列表中每个好友的备注名、性别、所属省份、城市以及个性签名
- 根据个性签名生成词云
- 根据好友性别生成好友性别柱状图
- 根据好友所属省份、城市分布生成微信好友分布图
2. itchat获取微信好友列表
通过itchart的get_friends()函数可以获取当前微信号好友列表的所有好友信息(运行过程中需要扫码登录),包括好友备注、性别、个性签名等信息,代码实现如下:
import itchat
import pandas as pditchat.auto_login(hotReload=True) # 扫码登录微信
friends = itchat.get_friends(update=True) # 获取联系人信息remark_name = [] # 备注
sex = [] # 性别
province = [] # 省份
city = [] # 城市
signature = [] # 个性签名# 提取数据
for x in friends:remark_name.append(x['RemarkName'])sex.append(x['Sex'])if x['Province'] == '':x['Province'] = '无'province.append(x['Province'])if x['City'] == '':x['City'] = '无'city.append(x['City'])if x['Signature'] == '':x['Signature'] = '无'signature.append(x['Signature'])# 转化为Series类型,并组合为DataFrame
series_rem = pd.Series(remark_name, name='remarkname')
series_sex = pd.Series(sex, name='sex')
series_pro = pd.Series(province, name='province')
series_cit = pd.Series(city, name='city')
series_sig = pd.Series(signature, name='signature')
friends_info = pd.concat([series_rem, series_sex, series_pro, series_cit, series_sig], axis=1)# 将数据保存为csv文件
friends_info.to_csv('friends_info.csv', header=0)
3. 分词及生成词云
3.1 jieba分词
通过jieba对提取的个性签名进行分词,并剔除其中的停用词:
import pandas as pd
import jieba# 读取csv文件
names = ['remarkname', 'sex', 'province', 'city', 'signature']
df = pd.read_csv('friends_info.csv', names=names)
# 提取个性签名
text = ';'.join(df['signature'])
# 读取停用词
stopwords = open('stopwords.txt').read().split('\n')
# 去除停用词
result = jieba.cut(text, cut_all=True)
clean_result = list(filter(lambda x: x not in stopwords, result))
3.2 生成词云
使用WordCloud生成词云,其中,字号越大则代表改词出现的频率越高:
# 生成词云
font_path = 'simfang.ttf' # 字体库,显示中文
words = ';'.join(clean_result)
wordcloud = WordCloud(background_color="white", width=1000, height=860, font_path=font_path).generate(words)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
运行结果如下:
4. pyecharts生成好友性别饼图
在提取到的数据中,性别(Sex字段)是用数字来表示的,0表示不明,1表示男性,2表示女性。我们通过DataFrame的groupby()函数按照性别进行分组,统计每个性别的人数,并通过pyecharts绘制柱形图:
# 按性别分组:0为不明、1为男、2为女
grouped = df['sex'].groupby(df['sex'])
data = []
sex_result = grouped.count()
for x in sex_result:data.append(x)
# 绘制饼图
pie = (Pie().add("", [list(z) for z in zip(['不明', '男', '女'], data)]).set_colors(['blue', 'purple', 'red']).set_global_opts(title_opts=opts.TitleOpts(title="微信好友性别比例"))
)
pie.render('display_sex.html')
运行结果如下:
5. pyecharts生成好友分布图
5.1 微信好友省份分布图
通过Geo()生成地理坐标系图,显示微信好友的省份分布:
# 统计每个省份的人数
data_province = {}
province_df = df['province']
for x in province_df:if x == '无' or ('A' <= x[0] <= 'Z'):continueif x in data_province.keys():data_province[x] = data_province[x] + 1else:data_province[x] = 1
geo = (Geo().add_schema(maptype='china').add("", [list(z) for z in zip(data_province.keys(), data_province.values())]).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True),title_opts=opts.TitleOpts(title="微信好友省份分布"))
)
geo.render('display_province.html')
运行结果如下,地理信息图上不同颜色的点代表不同的人数:
5.2 微信好友城市分布图
选择好友最多的城市(以山西为例),通过Map()类绘制山西省内的好友分布情况:
# 统计江苏各地区的好友分布
df_sx = df[df['province'] == '山西']['city']
data_city = {}
for x in df_sx:if x == '无':continueif x in data_city.keys():data_city[x] = data_city[x] + 1else:data_city[x] = 1
new_keys = []
# 需要在城市名后面加上市
for x in data_city.keys():new_keys.append(x + '市')
print(new_keys)
map = (Map().add("", [list(z) for z in zip(new_keys, data_city.values())], '山西').set_global_opts(title_opts=opts.TitleOpts(title="微信好友城市分布"),visualmap_opts=opts.VisualMapOpts(),)
)
map.render('display_city.html')
运行结果如下:
6. 问题及解决
报错:cannot import name ‘Map’ from ‘pyecharts’
解决:pyecharts更新到V1版本之后,Map等包位于pyecharts.charts下,改为:from pyecharts.charts import Map
在生成微信好友城市分布图时,没有报错,但是地图上没有显示出数据。
解决:好友信息中的城市是不加”市“的,比如”太原“,但是构造Map的时候所需要的参数是包含“市”的,比如”太原市“,所以需要在所有城市名后面补上”市“字。
itchat+pyecharts实现微信好友分析及可视化相关推荐
- 真小白|一步步教你用Python抓取微信好友分析
前言 前段时间公司里有个同事发了张图片在群上,是他所有微信好友头像拼成的一张大图,我看着挺有意思,就想自己也搞一下,然后百度了下怎么抓取微信好友之类的--一搜全是用Python抓取的,之前就听说过Py ...
- 【Python有趣打卡】利用pandas完成数据分析项目(二)——爬微信好友+分析
今天依然是跟着罗罗攀学习数据分析,原创:罗罗攀(公众号:luoluopan1) Python有趣|数据可视化那些事(二) 今天主要是学习pyecharts(http://pyecharts.org/# ...
- 初出茅庐-----微信好友分析与微信机器人
初出茅庐-----微信好友分析与微信机器人 一.微信好友分析 1.简介 对微信的好友进行分析,统计好友的人数,省市的分布,并排序,并统计好友签名用词的特点.用pyechart图像显示,并存为网页文件. ...
- python爬取微信好友信息_python itchat 爬取微信好友信息
「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空 三张图分别是「微信好友头像拼接图」.「性别统计图」.「个性签名统计图」 「微信好友头像拼接图」 「性别统计 ...
- python 实现微信好友分析
文章目录 wechat analsys 环境搭建 实现的功能 微信好友信息导出 微信好友性别分析 微信好友城市分布 微信好友地图分布 微信好友个性签名情感分析 微信好友头像照片墙 是否识好友识别 自动 ...
- python itchat 爬取微信好友信息
原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚 ...
- 微信好友所在城市可视化分析
上次是对微信好友的性别进行了统计分析,接下来将要对其位置分布做可视化显示,看看我的好友所在城市分布有何规律- 从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运 ...
- 用 Python 基于 pyecharts 对微信好友进行分析
参考博客在这里:https://blog.csdn.net/yaoyefengchen/article/details/79427475 Echarts 已经更新到了 ver.4 版本,原文用的是网页 ...
- python微信好友分析源代码_搞事情了 | 教你用Python分析微信好友信息(内附完整代码)...
本文经授权转载至公众号 Python 知识圈 未经授权 严禁二次转载 阅读文本大概需要 5 分钟 技术群里一位读者微信私聊我,问我能不能统计下微信好友信息并以文件形式保存.其实,以前也写过类似的文章, ...
最新文章
- # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
- 一元操作符和使用Number()方法的区别
- CXF WebService整合Spring
- 基于Swoole开发PHP扩展
- view 注册服务器,view服务器ip地址
- SAP UI5 应用开发教程之四十七 - 如何自定义 SAP UI5 字符串类型输入字段的校验逻辑
- 前后端分离使用 Token 登录解决方案
- python apscheduler 动态_基于Flask-APScheduler实现添加动态定时任务
- 一个函数要使用另一个函数中的数据
- 标准模板库(STL)之 queue 列传
- thinkphp html里使用c u,原来C可以这么用 Thinkphp C
- linux下删除带特殊符号的文件
- codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy(转)
- 你也可以找到好工作(二)
- MySQL分库分表总结及面试案例
- 访问其他计算机被拒绝,对端口com1的访问被拒绝的解决方案
- WIFI-WPA破解
- 【论文笔记】A survey on security and privacy of federated learning(综述)
- 手机海豚模拟器怎么添加游戏_人偶战斗模拟器2手机版下载,人偶战斗模拟器2手机版安卓游戏 v1.2...
- 在 sys.servers 中找不到服务器 ‘xxxxxx‘。请验证指定的服务器名称是否正确。
热门文章
- Chrome插件Proxy SwitchyOmega
- 个人所得税税率下调:公转私个税从20%降至1%
- js实现在线DES加密解密(支持各种工作模式,填充模式)
- 6S辐射传输模式使用例子
- linux ftp下载geo,利用GEOquery下载GEO文件的各种方法
- 基于确定性最大似然算法 DML 的 DoA 估计,用牛顿法实现(附 MATLAB 源码)
- 由VMware卸载引出CCleaner
- 【JS继承】JS继承之构造函数继承
- 陈数揍渣男惩小三 《男闺蜜》《歌手》周末大战
- 小米手机的android版本,小米4的手机系统是什么?小米4能升级安卓4.3吗?