#微信好友特征数据分析及可视化

# 1.导包操作

from wxpy import *

import re

import jieba

import numpy as np

from scipy.misc import imread

from wordcloud import WordCloud

import matplotlib.pyplot as plt

from pylab import mpl

import pandas as pd

mpl.rcParams['font.sans-serif'] = ['SimHei']

from pyecharts.charts import Map

from pyecharts import options as opts

2.登录操作

bot = Bot()

列举登录账号的所有好友

all_friends = bot.friends()

print(all_friends)

获取登录账号所关注的所有的公众号

all_maps = bot.mps()

print("所有好友列表", all_maps)

获取当前登录账号的群聊列表

all_groups = bot.groups()

print("所有群聊列表", all_groups)

根据好友的备注名称搜索好友

myfriend = bot.friends().search('许宽')[0]

print("搜索好友:", myfriend)

搜索好友并发送信息

bot.friends().search('许宽')[0].send('你好呀')

向文件传输助手发送信息

bot.file_helper.send("hello")

3.显示男女比例

sex_dict = {'male': 0, 'female': 0, "no_set": 0}

for friend in all_friends:

print(friend, friend.sex)

if friend.sex == 1:

sex_dict['male'] += 1

elif friend.sex == 2:

sex_dict['female'] += 1

elif friend.sex == 0:

sex_dict['no_set'] += 1

print(sex_dict)

4使用matplotlib可视化

slices = [sex_dict["male"], sex_dict["female"], sex_dict["no_set"]]

activities = ["male", "female", "no_set"]

cols = ["r", "m", "g"]

startangle:开始绘图的角度,逆时针旋转

shadow:阴影

%1.1f%%:格式化字符串,整数部分最小1位,小数点后保留一位,%%:转义字符

plt.pie(slices, labels=activities, colors=cols, startangle=90, shadow=True, autopct='%1.1f%%')

plt.title("微信好友比例图")

plt.savefig("WeChat_sex.png")

统计登录账号好友的各省人数

province_dict = {'河北': 0, '山东': 0, '辽宁': 0, '广西': 0, '吉林': 0,

'甘肃': 0, '青海': 0, '河南': 0, '江苏': 0, '湖北': 0,

'湖南': 0, '江西': 0, '浙江': 0, '广东': 0, '云南': 0,

'福建': 0, '台湾': 0, '海南': 0, '山西': 0, '四川': 0,

'陕西': 0, '贵州': 0, '安徽': 0, '北京': 0, '天津': 0,

'重庆': 0, '上海': 0, '香港': 0, '澳门': 0, '新疆': 0,

'内蒙古': 0, '西藏': 0, '黑龙江': 0, '宁夏': 0}

统计省份

for friend in all_friends:

print(friend.province)

if friend.province in province_dict.keys():

province_dict[friend.province] += 1

print("province_dict")

print(province_dict)

为了方便数据呈现,生成JSON Array格式数据

data = []

for key, value in province_dict.items():

data.append({'name': key, 'value': value}) # 在data列表末尾添加一个字典元素

print(data)

data_process = pd.DataFrame(data) # 创建数据框

data_process.columns = ['city', 'popu']

print(data_process)

map = Map().add("微信好友城市分布图", [list(z) for z in zip(data_process['city'], data_process['popu'])],

"china").set_global_opts(

title_opts=opts.TitleOpts(title="Map-VisualMap(连续型)"), visualmap_opts=opts.VisualMapOpts(max_=10))

map.render('map.html')

with...as...语句结束时,自动调用f.close()

a表示:在文件末尾追加

def write_txt_file(path, txt): # 写文件

with open(path, 'a', encoding='gbk') as f:

return f.write(txt)

每次运行程序前,需要删除上一次的文件

默认字符编码为GBK

def read_txt_file(path):

with open(path, 'r', encoding='gbk') as f:

return f.read()

统计登录账号好友个性签名

for friend in all_friends:

print(friend, friend.signature)

对数据进行清洗,将标点符号等对词频率统计造成影响的因素剔除

[...]:匹配中括号任意一个字符

r:防止转义

pattern = re.compile(r'[一-龥]+') # 将正则字符串编译成正则表达式对象,以后在后期的匹配中复用

对某一个签名进行匹配,只匹配中文汉字,结果是列表

filterdata = re.findall(pattern, friend.signature)

print(filterdata)

write_txt_file('signatures.txt', ''.join(filterdata))

读取文件并输出。

content = read_txt_file('signatures.txt')

print(content) # 输出内容,仅汉字

输出分词结果,结果为列表

segment = jieba.lcut(content) # 精确模式:不存在冗余数据,适合文本分析

print(segment)

生成数据框且有一列元素

word_df = pd.DataFrame({'segment': segment}) # 字典类型

print(word_df)

index_col=False:第一行不做为索引

seq=" ":分隔符

names=['stopword']:列名

"stopwords.txt":停止词库

stopwords = pd.read_csv("stopwords.txt", index_col=False, sep=" ", names=['stopword'], encoding='gbk')

print(stopwords)

查看过滤停止词后的数据框

word_df = word_df[~word_df.segment.isin(stopwords.stopword)]

print("过滤后:")

print(word_df)

查看分词的词频

python中的groupby可以看作是基于行或者是基于index的聚合操作

agg函数提供基于列的聚合操作,一般与groupby连用

np.size:numpy库中统计一列中不同值的个数

words_stat = word_df.groupby(by=['segment'])['segment'].agg({"计数": np.size}) # 警告信息

print(words_stat)

根据计数这一列降序排列

words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)

print(words_stat)

读入背景图片

color_mask = imread("black_mask.png")

设置词云属性

wordcloud = WordCloud(font_path="Hiragino.ttf", # 设置字体

background_color="pink", # 设置颜色

max_words=100, # 词云显示的最大词数

mask=color_mask, # 设置背景图片

max_font_size=100 # 字体最大值

)

生成词云字典,获取词云最高的前一百词

word_frequence = {x[0]: x[1] for x in words_stat.head(100).values}

print(word_frequence)

绘制词云图

wordcloud.generate_from_frequencies(word_frequence)

wordcloud.to_file("wordcloud.png")

对图像进行处理

plt.imshow(wordcloud)

plt.axis("off") # 隐藏坐标轴

plt.show()

基于python的微信好友数据分析_python 微信好友特征数据分析及可视化相关推荐

  1. 【大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析

    [大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析-哔哩哔哩https://b23.tv/saIKtBH flask web框架,数据使用requests模块爬取数据, ...

  2. 【项目实战】:基于python的p2p运营商数据信息的特征挖掘

    ######[风控建模] 基于python的p2p运营商数据信息的特征挖掘 **@author: sunyaowu** **@datetime: 2018年8月** 说明:利用平台数据和第三方数据建立 ...

  3. 基于Python的微博大数据舆情分析,舆论情感分析可视化系统

    运行效果图 基于Python的微博大数据舆情分析,舆论情感分析可视化系统 系统介绍 微博舆情分析系统,项目后端分爬虫模块.数据分析模块.数据存储模块.业务逻辑模块组成. 先后进行了数据获取和筛选存储, ...

  4. 基于python的视频监控系统_Python实现微信监控报警系统

    概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的 ...

  5. python微信消息定时_python微信定时消息

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 使用supervisor的具体方法,在我这篇文章中有讲过:https:www.z ...

  6. python微信加人_Python微信机器人自动添加好友自动回复

    编写bot.py代码 from wxpy import * # 本地使用 bot = Bot(cache_path=True) # 服务器使用 需要安装 pillow 模块 (pip3 install ...

  7. 基于python的视频监控系统_Python远程视频监控程序的实例代码

    老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可是找来找去不是有毒就是收费,无奈技 ...

  8. 基于python的微信机器人开发_python 微信机器人

    [实例简介] [实例截图] [核心代码] from config import TOKEN,XML_STR from flask import Flask, request, make_respons ...

  9. python微信机器人库_Python微信机器人

    1.需要用到的模块: requests:Requests 是用 Itchat:itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 使用不到三十行的代码,你就可以完成一个能够 ...

最新文章

  1. 青源 LIVE 第 20 期 | 复旦大学吴祖煊:高效视频内容识别
  2. Python 之 matplotlib (十六)Animation动画
  3. MySQL修改存储过程(ALTER PROCEDURE)
  4. 千年服务器角色信息在哪个文件,千年服务端文件详解
  5. caffe编译报错 cudnn.hpp:127:41: error: too few arguments to function ‘cudnnStatus_t cudnnSetPooling2dDe
  6. Attachment assignment block里选择的文件是如何传到Netweaver服务器的
  7. swiper5 点击图换下一张_电商小牛教你如何选择点击率超同行三倍的爆品主图!...
  8. 微信小程序学习笔记-1-环境及基础结构
  9. Windows下FFmpeg各版本库文件下载
  10. 微信小程序区分分享到群和好友
  11. python字典由键插值_SciPyTutorial-一元插值interp1d
  12. 苹果mac好用的记事本软件:Ulysses 24
  13. windows 10 彻底卸载windows 易升
  14. Oracle openv目录,nub备份安装目录/openv由来
  15. Android开发实践:设计安卓应用以计算BMI指数
  16. centos7 安装7z压缩命令
  17. 爱可信携手Marvell展示爱可信Linux平台
  18. java实现docx文档下载
  19. 校园歌手信息评分系统(C语言),大一新生期末实训
  20. mysql 加上天数_MySQL Datetime添加天数?

热门文章

  1. matlab导出dat,matlab如何生成数据dat文件
  2. django Email
  3. Linux 文件系统结构
  4. Kali Linux 使用远程桌面连接——xrdpxfce
  5. Android之世面上程序锁的实现
  6. 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)
  7. 「LSTM 之父」亲笔万字长文,只为向世人证明:深度学习不是在母语为英语的地方被发明的
  8. word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】
  9. 2021-11-01 富文本编辑器Vue-Quill-Editor 踩坑之路
  10. 08-Hibernate3.6.2 查询02 by SQL QBC QBE