python+pyecharts实现微信好友分析及可视化

  • 1. 准备及介绍
  • 2. itchat获取微信好友列表
  • 3. 分词及生成词云
    • 3.1 jieba分词
    • 3.2 生成词云
  • 4. pyecharts生成好友性别饼图
  • 5. pyecharts生成好友分布图
    • 5.1 微信好友省份分布图
    • 5.2 微信好友城市分布图
  • 6. 问题及解决

1. 准备及介绍

主要库的安装如下(其余省略):

  1. itchat,开源的微信个人号接口,用来获取微信的联系人列表,安装命令如下:

    pip install itchat
    
  2. 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
    

本文的主要目的如下:

  1. 获取当前用户好友列表中每个好友的备注名、性别、所属省份、城市以及个性签名
  2. 根据个性签名生成词云
  3. 根据好友性别生成好友性别柱状图
  4. 根据好友所属省份、城市分布生成微信好友分布图

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. 问题及解决

  1. 报错:cannot import name ‘Map’ from ‘pyecharts’
    解决:pyecharts更新到V1版本之后,Map等包位于pyecharts.charts下,改为:

    from pyecharts.charts import Map
    
  2. 在生成微信好友城市分布图时,没有报错,但是地图上没有显示出数据。
    解决:好友信息中的城市是不加”市“的,比如”太原“,但是构造Map的时候所需要的参数是包含“市”的,比如”太原市“,所以需要在所有城市名后面补上”市“字。

itchat+pyecharts实现微信好友分析及可视化相关推荐

  1. 真小白|一步步教你用Python抓取微信好友分析

    前言 前段时间公司里有个同事发了张图片在群上,是他所有微信好友头像拼成的一张大图,我看着挺有意思,就想自己也搞一下,然后百度了下怎么抓取微信好友之类的--一搜全是用Python抓取的,之前就听说过Py ...

  2. 【Python有趣打卡】利用pandas完成数据分析项目(二)——爬微信好友+分析

    今天依然是跟着罗罗攀学习数据分析,原创:罗罗攀(公众号:luoluopan1) Python有趣|数据可视化那些事(二) 今天主要是学习pyecharts(http://pyecharts.org/# ...

  3. 初出茅庐-----微信好友分析与微信机器人

    初出茅庐-----微信好友分析与微信机器人 一.微信好友分析 1.简介 对微信的好友进行分析,统计好友的人数,省市的分布,并排序,并统计好友签名用词的特点.用pyechart图像显示,并存为网页文件. ...

  4. python爬取微信好友信息_python itchat 爬取微信好友信息

    「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空 三张图分别是「微信好友头像拼接图」.「性别统计图」.「个性签名统计图」 「微信好友头像拼接图」 「性别统计 ...

  5. python 实现微信好友分析

    文章目录 wechat analsys 环境搭建 实现的功能 微信好友信息导出 微信好友性别分析 微信好友城市分布 微信好友地图分布 微信好友个性签名情感分析 微信好友头像照片墙 是否识好友识别 自动 ...

  6. python itchat 爬取微信好友信息

    原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚 ...

  7. 微信好友所在城市可视化分析

    上次是对微信好友的性别进行了统计分析,接下来将要对其位置分布做可视化显示,看看我的好友所在城市分布有何规律- 从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运 ...

  8. 用 Python 基于 pyecharts 对微信好友进行分析

    参考博客在这里:https://blog.csdn.net/yaoyefengchen/article/details/79427475 Echarts 已经更新到了 ver.4 版本,原文用的是网页 ...

  9. python微信好友分析源代码_搞事情了 | 教你用Python分析微信好友信息(内附完整代码)...

    本文经授权转载至公众号 Python 知识圈 未经授权 严禁二次转载 阅读文本大概需要 5 分钟 技术群里一位读者微信私聊我,问我能不能统计下微信好友信息并以文件形式保存.其实,以前也写过类似的文章, ...

最新文章

  1. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
  2. 一元操作符和使用Number()方法的区别
  3. CXF WebService整合Spring
  4. 基于Swoole开发PHP扩展
  5. view 注册服务器,view服务器ip地址
  6. SAP UI5 应用开发教程之四十七 - 如何自定义 SAP UI5 字符串类型输入字段的校验逻辑
  7. 前后端分离使用 Token 登录解决方案
  8. python apscheduler 动态_基于Flask-APScheduler实现添加动态定时任务
  9. 一个函数要使用另一个函数中的数据
  10. 标准模板库(STL)之 queue 列传
  11. thinkphp html里使用c u,原来C可以这么用 Thinkphp C
  12. linux下删除带特殊符号的文件
  13. codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy(转)
  14. 你也可以找到好工作(二)
  15. MySQL分库分表总结及面试案例
  16. 访问其他计算机被拒绝,对端口com1的访问被拒绝的解决方案
  17. WIFI-WPA破解
  18. 【论文笔记】A survey on security and privacy of federated learning(综述)
  19. 手机海豚模拟器怎么添加游戏_人偶战斗模拟器2手机版下载,人偶战斗模拟器2手机版安卓游戏 v1.2...
  20. 在 sys.servers 中找不到服务器 ‘xxxxxx‘。请验证指定的服务器名称是否正确。

热门文章

  1. Chrome插件Proxy SwitchyOmega
  2. 个人所得税税率下调:公转私个税从20%降至1%
  3. js实现在线DES加密解密(支持各种工作模式,填充模式)
  4. 6S辐射传输模式使用例子
  5. linux ftp下载geo,利用GEOquery下载GEO文件的各种方法
  6. 基于确定性最大似然算法 DML 的 DoA 估计,用牛顿法实现(附 MATLAB 源码)
  7. 由VMware卸载引出CCleaner
  8. 【JS继承】JS继承之构造函数继承
  9. 陈数揍渣男惩小三 《男闺蜜》《歌手》周末大战
  10. 小米手机的android版本,小米4的手机系统是什么?小米4能升级安卓4.3吗?