当前位置: 首页 > news >正文

微信朋友圈数据挖掘

登录微信

import itchat
# 二维码登陆
itchat.auto_login()
'''
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 xxxxxx
'''

获取好友信息

friends = itchat.get_friends(update=True)

属性列表

keys = friends[0].keys()
print(keys)
'''
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', 'IsOwner'])
'''

用 pandas 处理朋友信息

import pandas as pd

num_friends = len(friends[:])
raw = { key:[friends[i].get(key) for i in range(num_friends)] for key in keys }
# 转化成 pandas 的 dataframe 格式
data = pd.DataFrame(raw)
cat = ['NickName','Sex','City','Signature']
data[cat].tail(10)

在这里插入图片描述

统计朋友性别比例

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']

num_male = np.sum(1==data['Sex'])
num_female = np.sum(2==data['Sex'])
num_other = np.sum(0==data['Sex'])

size=[num_male, num_female, num_other]
colors = ['red', 'yellow', 'blue']
labels=["男","女", "其它"]
explode = (0.1,0,0)

plt.pie(size,
        explode=explode, 
        labels=labels, 
        colors=colors,
        autopct='%.2f%%',
        shadow=True,
        startangle=90)

plt.axis('equal')
plt.legend()
plt.suptitle("微信好友性别统计图")
plt.show()

在这里插入图片描述

好友地理分布

province = data['Province']
province_distribution = {}
for item in province:
    if re.search('[a-zA]',item) or len(item)==0:  # 删除英文地名以及空值
        continue
    elif not province_distribution.__contains__(item):
        province_distribution[item] = 1
    else:
        province_distribution[item] += 1

print(province_distribution)
'''
{'吉林': 3, '江西': 17, '北京': 110, '上海': 7, '浙江': 7, '广东': 16, '河北': 2, '重庆': 1, '安徽': 1, '湖北': 5, '江苏': 7, '天津': 3, '四川': 6, '山西': 1, '辽宁': 1, '黑龙江': 1, '陕西': 4, '河南': 3, '山东': 3, '湖南': 3, '内蒙古': 1, '宁夏': 1, '云南': 1}
'''

使用 pyecharts 可视化

from pyecharts.charts import Map
map = Map()
map.add("", [(k,v) for k,v in zip(province_distribution.keys(), province_distribution.values())])
map.set_global_opts(
          title_opts = opts.TitleOpts(title="好友分布"),
          visualmap_opts = opts.VisualMapOpts(max_=200))

map.render(path="好友分布.html")

在这里插入图片描述
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

制作朋友个性签名的词云

import re
import jieba
from wordcloud import WordCloud,ImageColorGenerator

# 搜集朋友的个性签名,滤掉非常规字符
sigs = []
for f in friends:
    Signature = f['Signature'].strip().replace('span','').replace('class','').replace('emoji','')
    Signature = re.compile('1f\d+\w*|[<>/=]').sub('',Signature)
    sigs.append(Signature)

# 使用 jieba 分词
text = ' '.join(sigs)
wordlist = jieba.cut(text,cut_all=False)
word_space_split = ' '.join(wordlist)

# 生成词云
WC = WordCloud(background_color='white',
               max_words=2000,
               max_font_size=100,
               font_path="C:/Windows/Fonts//STFANGSO.ttf", # 设置字体类型,防止中文乱码
               random_state=42,
               scale = 8)  # 设置生成图片的清晰度
WC.generate(word_space_split)

plt.figure(figsize=(20,15))
plt.imshow(WC)
plt.axis("off")
plt.show()

在这里插入图片描述

相关文章:

  • Microsoft SQL Server事务日志的应用
  • 微信自动回复天气预报
  • linux下巧用tail命令 创建自解压tar文件
  • itchat 同时实现自动回复和定时任务
  • 恢复SQL2005误删除的数据
  • 国家地区标准代码(国际域名缩写)
  • 提高你的调试代码的效率
  • python 代码计时
  • 如何处理创建DB2工具目录数据库的时候遇到的SQL1005N错误?
  • pandas 查找数据
  • SUN发布JavaFX...
  • ConceptNet
  • 如何制作倒影
  • pyecharts 标记指定经纬度
  • Photoshop制作倒影字
  • [译]Python中的类属性与实例属性的区别
  • Android交互
  • Android框架之Volley
  • Babel配置的不完全指南
  • const let
  • Fastjson的基本使用方法大全
  • FineReport中如何实现自动滚屏效果
  • 阿里研究院入选中国企业智库系统影响力榜
  • 动态规划入门(以爬楼梯为例)
  • 回顾 Swift 多平台移植进度 #2
  • 盘点那些不知名却常用的 Git 操作
  • 运行时添加log4j2的appender
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #100天计划# 2013年9月29日
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四) Graphivz 颜色选择
  • (四)库存超卖案例实战——优化redis分布式锁
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET DataGridView数据绑定说明
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 使窗口永不获得焦点
  • .NET4.0并行计算技术基础(1)
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ IO.File ] FileSystemWatcher
  • [1]-基于图搜索的路径规划基础