个人兴趣爱好,通过python对微信朋友圈进行了分析,主要对微信好友进行提取,对好友地区分布,签名等进行可视化

需要安装包如下:

pip3 install itchat
pip3 install pandas
pip3 install echarts-countries-pypkg
pip3 install echarts-china-provinces-pypkg
pip3 install echarts-china-cities-pypkg
pip3 install pyecharts
pip3 install jieba
pip3 install wordcloud
pip3 install numpy

获取微信圈好友信息

import itchat
​
# 按照key得到相关list
def get_attr(friends, key):return list(map(lambda user: user.get(key), friends))
​
​
def get_friends():itchat.auto_login(hotReload=True)friends = itchat.get_friends()users = dict(province=get_attr(friends, "Province"),city=get_attr(friends, "City"),nickname=get_attr(friends, "NickName"),sex=get_attr(friends, "Sex"),signature=get_attr(friends, "Signature"),remarkname=get_attr(friends, "RemarkName"),pyquanpin=get_attr(friends, "PYQuanPin"),displayname=get_attr(friends, "DisplayName"),isowner=get_attr(friends, "IsOwner"))return users
itchat.auto_login(hotReload=True)

登录微信圈好友,hotReload参数表示短时间
内不需要扫码可登陆(在项目下生成itchat.pkl文件),执行上述代码,弹出登录二维码,只需要拿出手机—>扫码登录即可。处理后数据为一个dict

数据分析

好友性别

先来看下朋友圈好友性别比例

import numpy
import pandas as pd
from pyecharts import Pie, Map, Style, Page, Bar
​
def sex_stats(users):df = pd.DataFrame(users)sex_arr = df.groupby(['sex'], as_index=True)['sex'].count()data = dict(zip(list(sex_arr.index), list(sex_arr)))data['不告诉你'] = data.pop(0)data['帅哥'] = data.pop(1)data['美女'] = data.pop(2)return data.keys(), data.values()
​
def create_charts():users = get_friends()
​page = Page()style = Style(width=1100, height=600)style_middle = Style(width=900, height=500)data = sex_stats(users)attr, value = datachart = Pie('微信性别')  # title_pos='center'chart.add('', attr, value, center=[50, 50],radius=[30, 70], is_label_show=True, legend_orient='horizontal', legend_pos='center',legend_top='bottom', is_area_show=True)page.add(chart)page.render()

pandas 为数据分析工具,类似数据库中的表。df.groupby(['sex'], as_index=True)['sex'].count() 按性别统计好友数,Pie为环形图类。一共好友190个,帅哥占比57.37,美女38.42,本人屌丝程序员一枚,所有帅哥比较多

省份分布

再来看看各省份好友分布情况

  def prov_stats(users):prv = pd.DataFrame(users)prv_cnt = prv.groupby('province', as_index=True)['province'].count().sort_values()attr = list(map(lambda x: x if x != '' else '未知', list(prv_cnt.index)))return attr, list(prv_cnt)  def create_charts():​def create_charts():users = get_friends()​data = prov_stats(users)attr, value = datachart = Map('中国地图', **style.init_style)chart.add('', attr, value, is_label_show=True, is_visualmap=True, visual_text_color='#000')page.add(chart)chart = Bar('柱状图', **style_middle.init_style)chart.add('', attr, value, is_stack=True, is_convert=True, label_pos='inside', is_legend_show=True,is_label_show=True)page.add(chart)page.render()

得到各省份好友分布图,主要集中在广东和湖北,工作生活一直在广东。广东好友112个,那么接下来看看广东省主要分布在哪些市

广东省分布

 def gd_stats(users):df = pd.DataFrame(users)data = df.query('province == "广东"')res = data.groupby('city', as_index=True)['city'].count().sort_values()attr = list(map(lambda x: '%s市' % x if x != '' else '未知', list(res.index)))return attr, list(res)def create_charts():users = get_friends()​data = gd_stats(users)attr, value = datachart = Map('广东', **style.init_style)chart.add('', attr, value, maptype='广东', is_label_show=True, is_visualmap=True, visual_text_color='#000')page.add(chart)​chart = Bar('柱状图', **style_middle.init_style)chart.add('', attr, value, is_stack=True, is_convert=True, label_pos='inside', is_label_show=True)page.add(chart)​page.render()

广东省主要分布在珠海、深圳、广州珠三角,因为笔者先后在深圳、珠海工作过

签名词云

先用jieba库对个性签名进行分词def jieba_cut(users):signature = users['signature']words = ''.join(signature)res_list = jieba.cut(words, cut_all=True)return res_list
再用WordCloud生成词云def create_wc(words_list):res_path = os.path.abspath('./resource')​words = ' '.join(words_list)​back_pic = numpy.array(Image.open("%s/china1.png" % res_path))​stopwords = set(STOPWORDS)stopwords = stopwords.union(set(['class','span','emoji','emoji','emoji1f388','emoji1f604']))​​wc = WordCloud(background_color="white", margin=0,font_path='%s/hanyiqihei.ttf' % res_path,mask=back_pic,max_font_size=70,stopwords=stopwords).generate(words)​# image_colors = ImageColorGenerator(back_pic)​plt.imshow(wc)​# plt.imshow(wc.recolor(color_func=image_colors))​plt.axis('off')plt.show()

分析时发现有些无用词语['class','span','emoji','emoji','emoji1f388','emoji1f604']需要排除,加入停词set。笔者的背景图片和字体放在项目 './resource' 下,注意:font_path必须设置,否则生成为乱码,back_pic为背景图片形状

通过图片可以看到最大词汇为世界、自己、生活,说明朋友还是比较正能量

至此,对朋友圈好友进行了大概分析

源码地址:https://github.com/TreasureGitHub/weixin_fenxi

执行代码,用微信扫一扫吧,少年!

Python数据 分析微信朋友圈相关推荐

  1. python数据挖掘分析微信朋友圈(调用itchat库)

    参考https://blog.csdn.net/qinyuanpei/article/details/79360703,基于python3.6实现微信朋友圈性别.地区.个性签名.头像四个维度的分析. ...

  2. 利用python深度分析微信朋友圈好友

    最近看了wxpy这个包,感觉还不错,分析一下微信的好友. 分析的目的: 1.看看好友的性别占比.地域分布 2.分析好友的个性签名 3.对好友的签名进行情感分析 环境:python 3.6 需要的包wx ...

  3. 实战:大数据营销 微信朋友圈广告

    朋友圈广告可以进行自助投放与服务商代理投放,微信广告的官网上也有比较详尽的介绍,在此就不赘述了.接下来我会就朋友圈广告的形式.定向和一些案例来具体地对一些投放问题进行讲解. 目前,朋友圈广告有5种广告 ...

  4. python抓取微信朋友圈动态_2018最全如何利用Python网络爬虫抓取微信朋友圈的动态...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  5. Python爬取微信朋友圈 ! 让屏蔽你的女神无处可躲 ?

    接下来,我们将实现微信朋友圈的爬取. 如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为数据都是被加密的.而 Appium 不同,Appium 作 ...

  6. python 爬取微信朋友圈的一些信息

    一.工具:使用python 3.6 自带的编辑器IDEL,在命令行可以正常运行. 二.此程序用到的一些库和包: (1)itchat:itchat是一个开源的微信个人号接口,可以登录微信账号:点击打开链 ...

  7. python微信朋友圈刷图_10分钟用Python做个微信朋友圈抽奖九宫格

    最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 哈哈,笑出猪叫!这个玩法利用了朋友圈发长图会显示中间局部的设定,搞笑之余也为朋友圈广告营销贡献了新思路. 制作图的过程也不复杂,长图对应部分设计好 ...

  8. 分析微信朋友圈王者荣耀battle记录

    有朋友说看不懂,我做成表格. 统计每个时段battle次数.峰值在中午12点和晚上10点之后,凌晨也大有人在,我是正常人.顺手多分析了几张.你会知道谁有朋友,谁哪天休,谁平生不修善果,只爱杀人放火.谁 ...

  9. Python爬虫爬取微信朋友圈

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...

最新文章

  1. 深度学习“三部曲”重磅资源、python、DL理论、工程实战全覆盖(附免费下载)...
  2. mac环境下安装Gradle及配置
  3. ElasticSearch 深入理解 三:集群部署设计
  4. 文巾解题 面试题 01.01. 判定字符是否唯一
  5. 为什么python这么火_Python为什么这么火?你了解多少呢?
  6. Mysql_mysql 性能分析及explain用法
  7. Android Studio(5)--创建 Android 库
  8. 获得Local IP Address (C++实现)
  9. c语言 关键字符,c语言关键字有哪些 c语言关键字解释
  10. 关于form提交后展示遮罩及显示进度条gif问题
  11. 240万!动漫人脸数据集AnimeCeleb
  12. 【无机纳米材料科研制图——OriginLab 0208】Origin拟合SERS拉曼光谱
  13. mysql 联合主键_mysql的联合主键与复合主键区别
  14. 揭示未来方向:2018中国TMT行业“领秀榜”盛典直击
  15. 2023年节假日数据放假补班数据json
  16. pr文字模板 12个独特设计全屏标题动画pr动态文字模板
  17. SpringCloud重试机制配置
  18. C++ 大作业 记账本
  19. python爬取猫眼top100电影,经典永远是经典
  20. flutter实现一个下拉菜单【基于PopupMenuButton】

热门文章

  1. 微信群发消息的三种操作,原来多群群发消息可以这样做
  2. 03-鸢尾花分类问题(120个样本的实验)
  3. ArcGIS基础:要素转点、要素折点转点与面转线
  4. springboot项目配置视图解析器无效的问题
  5. App Store 审核必备
  6. 用Matlab生成Ornstein-Uhlenbeck过程
  7. 【系统分析师】操作系统
  8. Unity 回合制战斗系统(中级篇)-血条和伤害数值
  9. qemu-img命令
  10. 设计模式之访问者模式(Vistor)