热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python一键登录微信分析好友性别地址生成结果

python一键登录微信分析好友性别地址生成结果,Go语言社区,Golang程序员人脉社


# -*- coding:utf-8 -*-
"""
author:Mr Yang
data:
2019/09/26
"""

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[0]['NickName'] # 获取此微信昵称
for item in data:
sex
= item.get('Sex') # 性别
province
= item.get('Province') # 省份
city
= item.get('City') # 城市
if sex or sex == 0:
if sex not in self.sex_dict:
self.sex_dict[sex]
= 1
else:
self.sex_dict[sex]
+= 1
if province and city:
address
= '-'.join([province, city])
if address not in self.city_dict:
self.city_dict[address]
= 1
else:
self.city_dict[address]
+= 1
if item["Signature"]:
signature
= re.sub(r'', '', 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(1), self.sex_dict.pop(2), self.sex_dict.pop(0)
# 数据准备
data
= sex_dict.items()
labels
= [i[0] for i in data]
nums
= [i[1] 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[1], reverse=True)[:20]
x
= [i[0] for i in sort_data]
y
= [i[1] 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
=80, # 字体最大值
min_font_size
=10, # 字体最小值
max_words
=5000, # 词云显示的最大词数
random_state
=100, # 设置有多少种随机生成状态,即有多少种配色方案
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()

最后看结果:

 

 

好累,第一次接触数据分析。

 


转载于:https://www.cnblogs.com/lvye001/p/11593377.html



推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
author-avatar
菜123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有