Python+ITchart实现微信中男女比例,城市分布统计并可视化显示
直接上代码:
import itchat
import os
import csv
import pandas as pd
from pyecharts import Bar,Pie,Geo
import shutil as sh # 根据index打印朋友的信息
def print_Info(friends):
UserName = friends['UserName']
NickName = friends['NickName']
HeadImgUrl = friends['HeadImgUrl']
ContactFlag = friends['ContactFlag']
MemberCount = friends['MemberCount']
RemarkName = friends['RemarkName']
Sex = friends['Sex']
Province = friends['Province']
City = friends['City']
MemberCount=friends['MemberCount']
Signature=friends['Signature'] print('---------------UserInfo-------------')
print("UserName:", UserName)
print("NickName:", NickName)
print("HeadImgUrl:", HeadImgUrl)
print("ContactFlag:", ContactFlag)
print("MemberCount:", MemberCount)
print("RemarkName:", RemarkName)
print("Sex:", Sex)
print("Province:", Province)
print("City:", City)
print("MemberCount:", MemberCount)
print("Signature:", Signature)
print('---------------END-------------') return # 统计打印男女的比例,并生成Pie.html
def paint_CountScan(friends,nickName,path): # 其中1为男,2为女
male=female=other=0 for i in friends[1:]:
if i['Sex']==1:
male+=1
elif i['Sex']==2:
female+=1
else:
other+=1 total=len(friends[1:]) maleScan='{:.2%}'.format(male/total)
femaleScan='{:.2%}'.format(female/total)
otherScan='{:.2%}'.format(other/total) print('---------------Scan-------------')
print('total:',total,'\tmale:',male,'\tfemale:',female,'\tother:',other)
print('maleScan:',maleScan)
print('femaleScan:',femaleScan)
print('otherScan:',otherScan)
print('---------------END-------------') attr=['meal','female','other']
# data=[maleScan,femaleScan,otherScan]
data=[male,female,other]
pie=Pie("%s的Wechat男女分布比例"%nickName,background_color="#fff")
pie.add("Wechat",attr,data,is_label_show=True)
pie.show_config()
dir = r'%s\%s的Wechat男女分布比例.html' % (path, nickName)
pie.render(dir) return dir # 根据自己的nickName创建对应的用户文件夹
def createDir(filename):
try:
os.mkdir(filename)
print(filename,'文件夹创建成功')
except Exception as e:
print(e)
print(filename, '文件夹创建失败,可能已经存在该文件夹')
return # 数据清洗,提取需要的信息
def get_UseInfo(friends):
# 读取信息
data = pd.DataFrame(friends)
userName = data['UserName']
nickName = data['NickName']
headImgUrl = data['HeadImgUrl']
contactFlag = data['ContactFlag']
memberCount = data['MemberCount']
remarkName = data['RemarkName']
sex = data['Sex']
province = data['Province']
city = data['City']
signature = data['Signature']
# # 生成信息csv
info = {'userName': userName, 'nickName': nickName, 'remarkName': remarkName, 'sex': sex, 'province': province,
'city': city, 'signature': signature}
dataFrame = pd.DataFrame(info)
return dataFrame # dataFrame为提取后的信息格式,保存dataFrame信息
def save_FriendsCsvFile(dataFrame,fileName,path):
# 存储信息csv
dir=r'%s\%s的朋友信息表.csv'%(path,fileName)
dataFrame.to_csv(dir,sep=',')
return dir # dataFrame为提取后的信息格式
# 统计所在城市的信息,并保存下来
def save_CountCityCsvFile(dataFrame,fileName,path):
count = dataFrame['nickName'].groupby(dataFrame['city']).count()
city=pd.DataFrame(count[1:])
dir = r'%s\%s的朋友所在城市统计表.csv' % (path, fileName)
city.to_csv(dir)
return dir # 根据城市的信息CSV文件,画出Bar,Pie图
def paint_CountCityCsvFile(cityPath,nickName,path):
file = open(cityPath, 'r', encoding='utf-8')
# 使用csv.reader读取csvfile中的文件
csvFile=csv.reader(file)
# 读取第一行每一列的标题
header=next(csvFile)
# 将csv 文件中的数据保存到data中
city=[]
count=[]
for i in file:
temp=i.split(',')
city.append(temp[0])
count.append(temp[1]) # 画图
# 柱状图
bar = Bar("%s的朋友城市分布表" % nickName, "Data from WeChart", background_color="#fff",width=1600,height=600)
bar.add("City", city, count,xaxis_label_textsize=12,xaxis_rotate=30)
bar.show_config()
dir_Bar = r'%s\%s的朋友城市分布表Bar.html' % (path, nickName)
bar.render(dir_Bar) # 饼状图
pie=Pie("%s的朋友城市分布表" % nickName, "Data from WeChart", background_color="#fff",width=1500,height=800,title_top=80,title_text_size=20)
pie.add("City", city, count, is_label_show=True,radius=[0,60])
pie.show_config()
dir_Pie = r'%s\%s的朋友城市分布表Pie.html' % (path, nickName)
pie.render(dir_Pie) dir=[dir_Bar,dir_Pie]
return dir def copyPKL(nickName):
list=os.listdir()
for i in list:
if i=='itchat.pkl':
try:
sh.copyfile('itchat.pkl',r'.\%s\itchat.pkl'%nickName)
except Exception as e:
print('%s文件夹不存在'%nickName)
return def add_ReplaceDir(dir,dirData):
defType=[type('str'),type(['str','str'])]
if type(dir)== defType[0]:
dirData.append(dir)
elif type(dir)==defType[1]:
for i in dir:
dirData.append(i)
else:
print(dir,'的类型是',type(dir),'不是指定的类型',defType[0],defType[1])
return dirData #根据提供的路径替换指定HTML中的标题
def replace_Title(filePath):
content = []
try:
for file in filePath:
title=file.split('\\')[-1].split('.')[0]
with open(file, 'r', encoding='Utf-8') as f:
content = f.readlines()
f.close() content[4] = ' <title>%s</title>\n' % title
# for i in range(0,5,1):
# print(content[i]) f = open(file, 'w', encoding='utf-8')
for j in content:
f.write(j)
f.close() except Exception as e:
print(filePath,'不存在') return if __name__=="__main__":
# 登录
itchat.auto_login(hotReload=True)
friends=itchat.get_friends(update=True)
# 打印自己的信息
user=friends[0]
print_Info(user) # 创建用户文件夹
nickName=user['NickName']
createDir(nickName)
copyPKL(nickName)
path='.\%s'%nickName # 获取想要的数据
friends = itchat.get_friends(update=True)
data=get_UseInfo(friends) #要替换得title的HTML文件
reHtmlDir=[] # 画出男女比例图
print('----------------画出男女比例图------------')
dir=paint_CountScan(friends, nickName, path)
reHtmlPath=add_ReplaceDir(dir,reHtmlDir)
print('----------------END------------') # 画出城市统计图
print('----------------画出男女比例图------------')
dir=save_FriendsCsvFile(data,nickName,path)
cityFilePath=save_CountCityCsvFile(data,nickName,path)
dir=paint_CountCityCsvFile(cityFilePath,nickName,path)
reHtmlPath = add_ReplaceDir(dir, reHtmlDir)
print('----------------END------------') # 替换标题
print(reHtmlDir)
replace_Title(reHtmlPath)
效果:



版权 作者:feiquan 出处:http://www.cnblogs.com/feiquan/ 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
Python+ITchart实现微信中男女比例,城市分布统计并可视化显示的更多相关文章
- 利用Python统计微信联系人男女比例以及简单的地区分布
寒暄的话不多说,直接进入主题. 运行效果图: [准备环境] Python版本:v3.5及其以上 开发工具:随意,此处使用Pycharm [依赖包] 1.itchat (CMD运行:pip instal ...
- Python+ITchart实现微信机器人对指定的朋友和群自动回复
这里我主要用了3个机器人,可以切换. 1.图灵机器人 (傻的不行,一直在问别人问题,没有限制) http://www.tuling123.com 2.showApi上的图灵机器人 (感觉最聪明,可以 ...
- 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例
前几天给大家分享了利用Python网络爬虫抓取微信朋友圈的动态(上)和利用Python网络爬虫爬取微信朋友圈动态——附代码(下),并且对抓取到的数据进行了Python词云和wordart可视化,感兴趣 ...
- 用python登录WeChat(微信) 实现自动回复(非常详细)
如要转载 麻烦备注好原文出处!!! 最近实现了一些微信的简单玩法 我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息. >>安装itchat这个库 ...
- 利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视化
前几天给大家分享了如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,感兴趣的小伙伴可以点击链接进行查看.今天小编给大家介绍如何利用Python网络爬虫抓取微信好友的省位和城市,并且将 ...
- Python 开发个人微信号在运维开发中的使用
一.主题:Python 开发个人微信号在运维开发中的使用 二.内容: 企业公众号 介绍开发微信公众号的后台逻辑,包括服务器验证逻辑.用户认证逻辑 个人微信号 面对企业微信的种种限制,可以使用 Itch ...
- 使用itchat获取微信好友的男女比例
# 使用itchat获取微信好友的男女比例 import itchat itchat.auto_login(hotReload=True) friends = itchat.get_friends(u ...
- Python爬取微信好友
前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 来源: 痴海 链接: https://mp.weixin.qq.com/ ...
- python爬取微信信息--显示性别/地域/词云(附代码)
看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码 首先要 import itchat 库 ...
随机推荐
- nvidia-docker+cuda8.0+ubuntu16.04
nvidia-docker安装 如果之前安装过docker1.0版本,需要先删掉该版本和之前创建的容器 docker volume ls -q -f driver=nvidia-docker | xa ...
- 【java设计模式】(3)---代理模式(案例解析)
设计模式之代理模式 一.概述 1.什么是代理模式? 解释第一遍:代理模式主要由三个元素共同构成: 1)一个接口,接口中的方法是要真正去实现的. 2)被代理类,实现上述接口,这是真正去执行接口中方法的类 ...
- 花10分钟搞懂开源框架吧 - 【NancyFx.Net】
NancyFx是什么? Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保 ...
- 今天俺要说一说简单工厂模式(Simple Factory)
前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是23种设计模式之一,但是它在实际开发中经常用到,而且也非常简单,可以说是工厂模式的一个引导. 大多程序员都是单身狗,为了弥补一下你们的心情, ...
- [置顶]
xamarin android toolbar(踩坑完全入门详解)
网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...
- Jenkins时间修改为北京时间
jenkins安装后时间一直是utc时间,不太方便. 系统管理->脚本命令行 运行: System.setProperty('org.apache.commons.jelly.tags.fmt. ...
- MySQL 个人学习笔记
最早之前学习了Mysql,不知道是多长时间了 O(∩_∩)O,今天突然发现之前学习过程中的这个笔记,于是,就分享给大家,希望,能帮助到有需要的朋友,有不足的地方欢迎大家多多交流 b( ̄▽ ̄)d 1. ...
- 从SQL Server CloudDBA 看云数据库智能化
最近阿里云数据库SQL Server在控制台推出了CloudDBA服务,重点解决数据库性能优化领域问题,帮助客户更好的使用好RDS数据库,这是继MySQL之后第二个关系型数据库提供类似的服务. 数 ...
- 是时候给你的产品配一个AI问答助手了!
本文由云+社区发表 | 导语 问答系统是信息检索的一种高级形式,能够更加准确地理解用户用自然语言提出的问题,并通过检索语料库.知识图谱或问答知识库返回简洁.准确的匹配答案.相较于搜索引擎,问答系统能更 ...
- NFS的安装
NFS的安装鸟哥地址:http://vbird.dic.ksu.edu.tw/linux_server/0330nfs_2.php 13.2 NFS Server 端的设定 既然要使用 NFS 的话, ...