# -*- 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 一键登录微信分析好友性别 地址 生成结果的更多相关文章

  1. 【python】itchat登录微信获取好友签名并生成词云

    在知乎上看到一篇关于如何使用itchat统计微信好友男女比例并使用plt生成柱状图以及获取微信好友签名并生成词云的文章https://zhuanlan.zhihu.com/p/36361397,感觉挺 ...

  2. 10分钟教你用Python玩转微信之好友性别比例统计分析

    01 前言+效果展示 想必,微信对于大家来说,是再熟悉不过的了.那么,大家想不想探索一下微信上的各种奥秘呢?今天,我们一起来简单分析一下微信上的好友性别比例吧~废话不多说,开始干活. 结果如下: 02 ...

  3. python爬取微信信息--显示性别/地域/词云(附代码)

    看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码 首先要 import itchat 库 ...

  4. python之获取微信服务器的ip地址

    # -*- coding: cp936 -*- #PYTHON 27 #xiaodeng #获取微信服务器的ip地址 import urllib url='https://api.weixin.qq. ...

  5. Java二维码登录流程实现(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二 ...

  6. python一键电影搜索与下载

    代码地址如下:http://www.demodashi.com/demo/14313.html python一键电影搜索与下载 概述 使用python搜索并爬取豆瓣电影信息,包括评分,主演,导演,类型 ...

  7. 利用 Python 分析微信好友性别和位置

    今天用到一个非常有意思的库——itchat,它已经完成了 wechat 的个人账号API接口,使爬取个人微信信息更加方便.  下载 爬取微信好友信息 这样就将你所有微信好友的信息都返回了,我们并不需要 ...

  8. Python 实现获取微信好友信息

    最近用闲余时间看了点python,在网上冲浪时发现有不少获取微信好友信息的博客,对此比较感兴趣,于是自己敲了敲顺便记录下来. 一.使用 wxpy 模块库获取好友男比例信息和城市分布. # -*- co ...

  9. 我用 Python 爬取微信好友,最后发现一个大秘密

    前言 你身处的环境是什么样,你就会成为什么样的人.现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界.你所处的朋友圈是怎么样,慢慢你的思想也会变的怎么样.最近在 ...

随机推荐

  1. 安装了Node.js 从VScode 使用node -v 和 npm -v等命令却无效

    前言 最近写TypeScript需要安装.配置Node.js环境,楼主是使用的安装包所以环境变量都是自动就配好了(如果是下载的zip压缩包解压后要自己配置到系统环境变量中).打开系统终端敲入命令 no ...

  2. koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  3. smartbi的安装及使用

    http://wiki.smartbi.com.cn/pages/viewpage.action?pageId=42011285

  4. Movidius的深度学习入门

    1.Ubuntu虚拟机上安装NC SDK cd /home/shine/Downloads/ mkdir NC_SDK git clone https://github.com/movidius/nc ...

  5. CISCN2018 Writeup

    The Lounge战队 CISCN2018 Writeup Pwn-Supermarket from pwn import * def add(name,price,size,des): p.sen ...

  6. 五十五:WTForms表单验证之渲染模板

    此功能看似强大,实则鸡肋 from wtforms import Form, StringField, BooleanField, SelectFieldfrom wtforms.validators ...

  7. 关于 About

    关于我 我是 Ivy,目前武汉大学 GIS 专业在读硕士研究生,业余渣程序媛. 写了一些不起眼的代码(参看我的 GitHub),做了一些不起眼的小研究(参看我的 ResearchGate). 关于本站 ...

  8. IntelliJ IDEA 设置护眼背景色

    IntelliJ IDEA 设置护眼背景色 1.设置主体和字体 Settings --> Appearance & Behavior --> Appearance Theme: I ...

  9. CnPack 开源软件项目

    Cnpack公共窗体库 ------------------------------ CnPack 2009-09-14 SVN 包,包括以下内容: 1. CnPack 组件包所有源代码.2. CnP ...

  10. MR1和MR2的工作原理

    MapReduce1 分为6个步骤: 1.作业的提交 1).客户端向jobtracker请求一个新的作业ID(通过JobTracker的getNewJobId()方法获取,见第2步 2).计算作业的输 ...