python 一键登录微信分析好友性别 地址 生成结果
# -*- coding:utf- -*- """
author:Mr Yang
data://
""" import itchat
import matplotlib.pyplot as plt
import matplotlib
import os
import re
import numpy as np
from PIL import Image
from wordcloud.wordcloud import WordCloud class WeiXinAnalyze():
def __init__(self):
self.sex_dict = {}
self.city_dict = {}
self.self_nickname = ''
self.wordList = []
self.save_path = 'result' def wx_login(self):
"""微信登录及数据统计方法"""
itchat.login()
data = itchat.get_friends(update=True)
self.self_nickname = data[]['NickName'] # 获取此微信昵称
for item in data:
sex = item.get('Sex') # 性别
province = item.get('Province') # 省份
city = item.get('City') # 城市
if sex or sex == :
if sex not in self.sex_dict:
self.sex_dict[sex] =
else:
self.sex_dict[sex] +=
if province and city:
address = '-'.join([province, city])
if address not in self.city_dict:
self.city_dict[address] =
else:
self.city_dict[address] += if item["Signature"]:
signature = re.sub(r'<span.*</span>', '', item["Signature"]).strip().replace('\n', '')
self.wordList.append(signature)
if not os.path.exists(self.save_path):
os.mkdir(self.save_path) def get_sex_info(self):
"""分析性别方法"""
sex_dict = {}
sex_dict['男'], sex_dict['女'], sex_dict['其它'] = self.sex_dict.pop(), self.sex_dict.pop(), self.sex_dict.pop()
# 数据准备
data = sex_dict.items()
labels = [i[] for i in data]
nums = [i[] for i in data]
# 使用Matplotlib画出饼图
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 使用指定的汉字字体类型(此处为黑体)
plt.title('微信好友性别统计({})'.format(self.self_nickname))
plt.pie(x=nums, labels=labels, autopct='%1.2f%%')
plt.savefig(os.path.join(self.save_path,'wx_sex_data.png')) def get_address_info(self):
"""分析地址方法"""
data = self.city_dict.items()
sort_data = sorted(data, key=lambda i: i[], reverse=True)[:]
x = [i[] for i in sort_data]
y = [i[] for i in sort_data]
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
fig, ax = plt.subplots()
rects = ax.barh(x, y, color='greenyellow', align="center")
ax.set_yticks(x) # 设置标度的位置
ax.set_yticklabels(x) # 设置纵坐标的每一个刻度的属性值
ax.invert_yaxis() # 反转标度值
ax.set_xlabel('人数(位)') # 设置横坐标的单位
ax.set_title('微信好友所在城市统计({})'.format(self.self_nickname)) # 设定图片的标题
for rect, y, num in zip(rects, x, y):
x = rect.get_width()
plt.text(x + 0.05, y, "%d" % int(num))
plt.savefig(os.path.join(self.save_path,'wx_address_data.png')) def wx_ciyun(self):
"""微信词云方法"""
text = " ".join(self.wordList)
# 获取当前文件的执行路径
src_dir = os.getcwd()
# 生成词云形状的图片地址
imagePath = os.path.join(src_dir , "timg.jpg")
# 生成词云字体地址(防止中文乱码)
font = os.path.join(src_dir ,"SimHei.ttf")
# 生成的词云图地址
resultPath = os.path.join(self.save_path,'wx_ciyun.png')
# 开始生成图片
bg = np.array(Image.open(imagePath))
wc = WordCloud(
mode='RGBA', # 设置透明底色
mask=bg, # 造型遮盖
background_color="white", # 背景颜色
max_font_size=, # 字体最大值
min_font_size=, # 字体最小值
max_words=, # 词云显示的最大词数
random_state=, # 设置有多少种随机生成状态,即有多少种配色方案
font_path=font, # 设置字体 ).generate(text)
wc.to_file(resultPath) if __name__ == '__main__':
weixin = WeiXinAnalyze()
weixin.wx_login()
weixin.get_sex_info()
weixin.get_address_info()
weixin.wx_ciyun()
最后看结果:



好累,第一次接触数据分析。
python 一键登录微信分析好友性别 地址 生成结果的更多相关文章
- 【python】itchat登录微信获取好友签名并生成词云
在知乎上看到一篇关于如何使用itchat统计微信好友男女比例并使用plt生成柱状图以及获取微信好友签名并生成词云的文章https://zhuanlan.zhihu.com/p/36361397,感觉挺 ...
- 10分钟教你用Python玩转微信之好友性别比例统计分析
01 前言+效果展示 想必,微信对于大家来说,是再熟悉不过的了.那么,大家想不想探索一下微信上的各种奥秘呢?今天,我们一起来简单分析一下微信上的好友性别比例吧~废话不多说,开始干活. 结果如下: 02 ...
- python爬取微信信息--显示性别/地域/词云(附代码)
看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码 首先要 import itchat 库 ...
- python之获取微信服务器的ip地址
# -*- coding: cp936 -*- #PYTHON 27 #xiaodeng #获取微信服务器的ip地址 import urllib url='https://api.weixin.qq. ...
- Java二维码登录流程实现(包含短地址生成,含部分代码)
近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二 ...
- python一键电影搜索与下载
代码地址如下:http://www.demodashi.com/demo/14313.html python一键电影搜索与下载 概述 使用python搜索并爬取豆瓣电影信息,包括评分,主演,导演,类型 ...
- 利用 Python 分析微信好友性别和位置
今天用到一个非常有意思的库——itchat,它已经完成了 wechat 的个人账号API接口,使爬取个人微信信息更加方便. 下载 爬取微信好友信息 这样就将你所有微信好友的信息都返回了,我们并不需要 ...
- Python 实现获取微信好友信息
最近用闲余时间看了点python,在网上冲浪时发现有不少获取微信好友信息的博客,对此比较感兴趣,于是自己敲了敲顺便记录下来. 一.使用 wxpy 模块库获取好友男比例信息和城市分布. # -*- co ...
- 我用 Python 爬取微信好友,最后发现一个大秘密
前言 你身处的环境是什么样,你就会成为什么样的人.现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界.你所处的朋友圈是怎么样,慢慢你的思想也会变的怎么样.最近在 ...
随机推荐
- 用Java实现一个二叉树
介绍 使用Java实现一个int值类型的排序二叉树 二叉树 二叉树是一个递归的数据结构,每个节点最多有两个子节点. 通常二叉树是二分查找树,每个节点它的值大于或者等于在它左子树节点上的值,小于或者等于 ...
- mysql 存储过程中使用动态sql语句
Mysql 5.0 以后,支持了动态sql语句,我们可以通过传递不同的参数得到我们想要的值 这里介绍两种在存储过程中的动态sql: set sql = (预处理的sql语句,可以是用concat拼接的 ...
- 深度学习之NLP维基百科数据模型
知识点 """ 1) from gensim.model import Word2Vec import jieba 2) opencc :将繁体字转换为简体字 转换命令: ...
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_2 RequestBody注解
拿整个请求体的数据
- Java 语言实现 MD5 加密
Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么, ...
- 集群中配置多台机器之间 SSH 免密码登录
集群中配置多台机器之间 SSH 免密码登录 问题描述 由于现在项目大多数由传统的单台机器部署,慢慢转变成多机器的集群化部署. 但是,这就涉及到机器间的 SSH 免密码互通问题. 当集群机器比较多的时候 ...
- MVC - 单点登录中间件 (转)
http://www.cnblogs.com/wangrudong003/p/6435013.html 本章将要和大家分享的是一个单点登录中间件,中间件听起来高深其实这里只是吧单点登录要用到的逻辑和处 ...
- java源码-ConcurrentHashMap分析-1
ConcurrentHashMap源码分析 版本jdk8 摈弃了jdk7之前的segement段锁: 首先分析一下put方法,大致的流程就是首先对key取hash函数 判断是否first节点是否存在 ...
- spring boot configuration annotation processor not found in classpath
<dependency> <groupId> org.springframework.boot </groupId> <artifactId> spri ...
- Node、Document关系的探究
上图来自于<JavaScript权威指南(第六版)>P375 受到上图的启发,写了如下测试代码: var head = document.getElementsByTagName(&quo ...