2019-06-02 Python之微信好友数据分析以及运用Pyecharts可视化
一.库的使用说明
pass
二.微信好友信息的获取
def get_friends_info(self): #获取好像信息,返回lis列表
bot = Bot()
lis = [['name', 'real_name', 'sex', 'city', 'province']] # 把信息存储为一个二维列表,添加头部信息
friend_all = bot.friends() for a_friend in friend_all:
NickName = a_friend.raw.get('NickName', None) #获取所有好友信息 raw表示获取全部信息
RemarkName = a_friend.raw.get('RemarkName', None)
Sex = {1: "男", 2: "女", 0: "其他"}.get(a_friend.raw.get('Sex', None), None)
City = a_friend.raw.get('City', None)
Province = a_friend.raw.get('Province', None)
Signature = a_friend.raw.get('Signature', None)
#HeadImgUrl = a_friend.raw.get('HeadImgUrl', None)
#HeadImgFlag = a_friend.raw.get('HeadImgFlag', None)
list_0 = [NickName, RemarkName, Sex, City, Province, Signature]
lis.append(list_0)
return lis
三.信息写入到excel
def friends_info_lis_to_excle(self):
import openpyxl
lis = self.get_friends_info()
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = self.sheetname
for i in range(0, len(lis)):
for j in range(0, len(lis[i])):
sheet.cell(row=i+1, column=j+1, value=str(lis[i][j]))
wb.save(self.filename)
print("excel保存成功")

四.词云 注意,1要在当前py文件夹下面放一张名字为love 的jpg图片
2 如果报错,可能是电脑缺少字体,可以改为msyh.ttc
def city_wordcloud(self, save_name, condition):
wordlist, giveup = self.extract_data_as_two_lis(condition)
new_wordlist = list()
for i in range(25):
new_wordlist.append(wordlist[i])
wl = ' '.join(wordlist) # 把列表转换成str wl为str类型,所以需要转换
cloud_mask = np.array(Image.open("love.jpg")) # 词云的背景图,需要颜色区分度高
wc = WordCloud(
background_color="black", # 背景颜色
mask=cloud_mask, # 背景图cloud_mask
max_words=100, # 最大词语数目
font_path='simsun.ttf', # 调用font里的simsun.tff字体,需要提前安装
height=500, # 设置高度
width=2600, # 设置宽度
max_font_size=1000, # 最大字体号
random_state=1000, # 设置随机生成状态,即有多少种配色方案
)
myword = wc.generate(wl) # 用 wl的词语 生成词云
# 展示词云图
plt.imshow(myword)
plt.axis("off")
#plt.show()
try:
wc.to_file(save_name + '.jpg') # 把词云保存下当前目录(与此py文件目录相同)
except:
print("词云保存失败")

五.地图可视化
#参数为condition,picture_name, keylist, valueslist, Map_condition->china或者广东创建html地图图片,图片名字为picture_name
def map_picture(self, condition, picture_name, keylist, valueslist, Map_condition):
from pyecharts import options as opts
from pyecharts.charts import Map def map_visualmap() -> Map:
new_keylist = list()
new_valueslist = list()
if condition == 'city':
for i in range(len(keylist)):
# 列表处理,默认elsx里面的city没有'市'字,地图需要市字
new_keylist.append(keylist[i] + '市')
new_valueslist.append(valueslist[i])
else:
for i in range(len(keylist)):
new_keylist.append(keylist[i])
new_valueslist.append(valueslist[i]) c = (
Map()
.add("好友地图分布", [list(z) for z in zip(new_keylist, new_valueslist)], Map_condition)
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap"),
visualmap_opts=opts.VisualMapOpts(max_=100),
)
)
try:
c.render(picture_name)
except:
print("html地图图片创建失败")
print('html地图图片保存成功')
map_visualmap()#调用自己

六.完整代码
from wxpy import *
from wordcloud import WordCloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from pandas import read_excel
import pandas as pd class wechat_test(): def __init__(self, filename, sheetname):
self.filename = filename
self.sheetname = sheetname def get_friends_info(self): #获取好像信息,返回lis列表
bot = Bot()
lis = [['name', 'real_name', 'sex', 'city', 'province']] # 把信息存储为一个二维列表,添加头部信息
friend_all = bot.friends() for a_friend in friend_all:
NickName = a_friend.raw.get('NickName', None) #获取所有好友信息 raw表示获取全部信息
RemarkName = a_friend.raw.get('RemarkName', None)
Sex = {1: "男", 2: "女", 0: "其他"}.get(a_friend.raw.get('Sex', None), None)
City = a_friend.raw.get('City', None)
Province = a_friend.raw.get('Province', None)
Signature = a_friend.raw.get('Signature', None)
#HeadImgUrl = a_friend.raw.get('HeadImgUrl', None)
#HeadImgFlag = a_friend.raw.get('HeadImgFlag', None)
list_0 = [NickName, RemarkName, Sex, City, Province, Signature]
lis.append(list_0)
return lis # 把lis信息写入到excle
def friends_info_lis_to_excle(self):
import openpyxl
lis = self.get_friends_info()
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = self.sheetname
for i in range(0, len(lis)):
for j in range(0, len(lis[i])):
sheet.cell(row=i+1, column=j+1, value=str(lis[i][j]))
wb.save(self.filename)
print("excel保存成功") #参数为condition 词频,提取两个列表,condition 和 人数,降序列表
def extract_data_as_two_lis(self, condition):
df = read_excel(self.filename, sheet_name=self.sheetname)
X_list = df[condition].fillna('').tolist() # 把列转换为list,用0替换Nan?
counts = {} # 创建字典
for word in X_list:
counts[word] = counts.get(word, 0) + 1 # 统计词频
items = list(counts.items()) # 返回所有键值对
items.sort(key=lambda x: x[1], reverse=True) # 降序排序
keylist = list()
valueslist = list()
for item in items:
word, count = item
#if word == '0':
#word = "其他"
keylist.append(word) # 把词语降序word放进一个列表
valueslist.append(count)
return keylist, valueslist #参数为 save_name 自动添加jpg 创建X条件词云,
def city_wordcloud(self, save_name, condition):
wordlist, giveup = self.extract_data_as_two_lis(condition)
new_wordlist = list()
for i in range(25):
new_wordlist.append(wordlist[i])
wl = ' '.join(wordlist) # 把列表转换成str wl为str类型,所以需要转换
cloud_mask = np.array(Image.open("love.jpg")) # 词云的背景图,需要颜色区分度高
wc = WordCloud(
background_color="black", # 背景颜色
mask=cloud_mask, # 背景图cloud_mask
max_words=100, # 最大词语数目
font_path='simsun.ttf', # 调用font里的simsun.tff字体,需要提前安装
height=500, # 设置高度
width=2600, # 设置宽度
max_font_size=1000, # 最大字体号
random_state=1000, # 设置随机生成状态,即有多少种配色方案
)
myword = wc.generate(wl) # 用 wl的词语 生成词云
# 展示词云图
plt.imshow(myword)
plt.axis("off")
#plt.show()
try:
wc.to_file(save_name + '.jpg') # 把词云保存下当前目录(与此py文件目录相同)
except:
print("词云保存失败") #参数为condition ,创建柱形html图片,
def pillar_picture(self, condition, render_name):
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
from pyecharts import options as opts keylist, valueslist = self.extract_data_as_two_lis(condition)
new_keylist = list()
new_valueslist = list()
for i in range(10):
new_keylist.append(keylist[i])
new_valueslist.append(valueslist[i])
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
# x轴 列表
bar.add_xaxis(new_keylist)
bar.add_yaxis("好友分布", new_valueslist)
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render(render_name)
print("pillar_picture图片保存成功!") #参数为condition,picture_name, keylist, valueslist, Map_condition->china或者广东创建html地图图片,图片名字为picture_name
def map_picture(self, condition, picture_name, keylist, valueslist, Map_condition):
from pyecharts import options as opts
from pyecharts.charts import Map def map_visualmap() -> Map:
new_keylist = list()
new_valueslist = list()
if condition == 'city':
for i in range(len(keylist)):
# 列表处理,默认elsx里面的city没有'市'字,地图需要市字
new_keylist.append(keylist[i] + '市')
new_valueslist.append(valueslist[i])
else:
for i in range(len(keylist)):
new_keylist.append(keylist[i])
new_valueslist.append(valueslist[i]) c = (
Map()
.add("好友地图分布", [list(z) for z in zip(new_keylist, new_valueslist)], Map_condition)
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap"),
visualmap_opts=opts.VisualMapOpts(max_=100),
)
)
try:
c.render(picture_name)
except:
print("html地图图片创建失败")
print('html地图图片保存成功')
map_visualmap()#调用自己
if __name__ == "__main__":
wechat = wechat_test('wechat_info.xlsx', 'list')
wechat.friends_info_lis_to_excle()
wechat.city_wordcloud('city_wordclour', 'city')
wechat.pillar_picture('city', 'render.html')
keylist, valueslist = wechat.extract_data_as_two_lis('city')
wechat.map_picture('city', 'test.html', keylist, valueslist, "广东")
#wechat.find_friends_in_city()
代码运行结果:


2019-06-02 Python之微信好友数据分析以及运用Pyecharts可视化的更多相关文章
- 利用python进行微信好友分析
欢迎python爱好者加入:学习交流群 667279387 本文主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为itchat,pandas,py ...
- 使用 python 进行微信好友分析
使用 python 进行微信好友分析 1. 使用到的库 ① wxpy:初始化微信机器人 ② openpyxl:保存微信好友数据为Excel表格 ③ pyecharts:生成可视化的地图 ④ wordc ...
- 用Python对微信好友进行简单统计分析,获取好友的基本信息!
早些日子有人问我我的微信里面有一共多少朋友,我就随后拉倒了通讯录最下面就找到了微信一共有多少位好友.然后他又问我,这里面你认识多少人?这一句话问的我很无语.一千多个好友我真的不知道认识的人有多少. ...
- 如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
- 教你用Python制作微信好友背景墙
目录: 0 引言 1 环境 2 代码实现 3 后记 0 引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这 ...
- Python爬微信好友头像,性别,所在地区
本文适合新手(有一定基础的小白) 今天没事,用的网页版微信,于是看源码心理作怪,F12打开,研究了一下,结果发现 /斜眼笑/斜眼笑/斜眼笑 再加上,没事干,(大家有好工作求介绍,本人待就业),Pyth ...
- 利用 Python 分析微信好友性别和位置
今天用到一个非常有意思的库——itchat,它已经完成了 wechat 的个人账号API接口,使爬取个人微信信息更加方便. 下载 爬取微信好友信息 这样就将你所有微信好友的信息都返回了,我们并不需要 ...
- 使用python 实现 微信好友 个性签名 并 制作 词云图
环境搭建: pip install itchat numpy wordcloud matplotlib jieba 先把上面的几个包安装完成,直接上代码 import itchat from itch ...
- Python分析微信好友性别比例和省份城市分布比例
如需转发请注明:小婷儿的博客:https://www.cnblogs.com/xxtalhr/p/10642241.html 一.安装模块 pip install itchat pip install ...
随机推荐
- 单例模式和配置admin
单例模式和配置admin 单例模式的概念 单例模式主要目的是确保某一个类只有一个实例存在.比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信 ...
- MySQL学习(3)
一 SQL语句 1. 数据库级别(*) 显示全部数据库:show databases; 创建数据库:create database '数据库名字’; 使用数据库:use '数据库名字'; 删除数据库: ...
- xpath模块使用
xpath模块使用 一.什么是xml(百度百科解释如下) 可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 在电子计算机中,标记指计算机所能理解的信 ...
- 如何在Linux系统上安装nginx
安装Nginx 下载Nginx 到官网http://nginx.org/下载对应nginx包,推荐使用稳定版本进入官网之后界面如下 点击download进行到下一页 然后下载所需要的版本(强烈建议 ...
- OpenCV-Python 图像的几何变换 | 十四
目标 学习将不同的几何变换应用到图像上,如平移.旋转.仿射变换等. 你会看到这些函数: cv.getPerspectiveTransform 变换 OpenCV提供了两个转换函数cv.warpAffi ...
- GAN的五大有趣应用
引言 你能看出这张照片中面部的共同点吗? 这些人都不是真实存在的!这些面部图像都是由GAN技术生成的. "GAN"这个词是由Ian Goodfellow在2014年提出的,但相关概 ...
- HDU - 1962 二分图最大匹配模板(扑克牌得分最大)
题意: 直接说数据,第一行给定几组数据,每一组数据的第一行是两个人扑克牌分别的数量,第一行是亚当的扑克牌,第二行是夏娃的扑克牌,每一个扑克牌的大小用两个字符来表示,第一个表示是几号扑克牌,第二个表示扑 ...
- 一些数组笔记(C)
0.数组名是一个指针,存放数组首元素地址,所以使用scanf()接受字符串输入时只用写上数组名,不用加&.数组名是常量不允许修改其值.数组只能定义的时候初始化,后期初始化会被认为是修改数组名的 ...
- [noip模拟]B<构造>
[题目描述] 在两个n*m的网格上染色,每个网格中被染色的格子必须是一个四联通块(没有任何格子被染色也可以),四联通块是指所有染了色的格子可以通过网格的边联通,现在给出哪些格子在两个网格上都被染色了, ...
- [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林
[白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...