热门标签 | 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



推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • Deepin 20 系统源更换指南及基础设置教程
    配置目标:创建一个适合基本娱乐、办公和直播的环境。安装方法:手动分区。系统要求:EFI分区需大于500MB,根分区建议至少20GB,以确保系统稳定运行和足够的存储空间。此外,建议分配适量的交换分区,以提升系统性能和响应速度。 ... [详细]
  • 依然最钟爱《People Have the Power》,强烈推荐大家聆听这首经典之作
    尽管今日情绪低落,我在音乐库中反复筛选,最终还是选择了《People Have the Power》来激励自己。这首歌不仅旋律动听,歌词也充满力量,能够带给人正能量。强烈建议大家找来聆听,体验其独特的魅力。《People Have the Power》虽然不是出自专辑《Horses》,但同样是一首不可多得的经典之作。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • OSChina 周末闲谈 —— 程序员的浪漫情话
    在OSChina的周末闲谈栏目中,探讨了程序员特有的浪漫情话。本文不仅分享了一些程序员如何用代码表达爱意的有趣例子,还推荐了一首适合程序员聆听的歌曲——李克勤的《啜泣》。对于喜欢在编程之余享受音乐的朋友们,不妨点击链接试听一下。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 掌握这些技巧,轻松获取超过90%的资源信息
    在数字时代,高效获取所需资源是每个人必备的技能。本文将分享一系列实用技巧,帮助读者轻松获取超过90%的网络资源信息,无论是学术资料、技术文档还是最新资讯,都能迅速找到。通过优化搜索引擎使用、利用专业数据库和社群资源等方法,读者将能够在信息海洋中游刃有余。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 在本课中,我们将通过一段对话来了解一个晴朗美好的日子。请先听录音,然后回答问题:琼斯一家在哪里?这段对话不仅展现了家庭成员之间的互动,还描绘了他们在晴朗天气中的活动场景。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
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社区 版权所有