昨天无意中看到一篇文章《基于Python实现的微信好友数据分析》,感觉很有趣,就想自己尝试一下。也不太清楚原作者是谁了,也是公众号转载的,基于原问题进行了代码的优化。

微信是目前我们用的最多的社交软件,古语云“观其友而知其人”。对微信好友的数据分析也是对自身的一种分析。

一、本文将引用多个第三方模块,引用如下:

import itchat
import numpy as np
import os
from collections import Counter
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#绘图时可以显示中文
plt.rcParams['axes.unicode_minus']=False#绘图时可以显示中文
import TencentYoutuyun
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
from PIL import Image
import time
import re
import snownlp
import jieba
import jieba.analyse
import pandas as pd

本人用的python3,以上模块除了TencentYoutuyun和wordcloud,均可以通过pip install 安装。

(1)TencentYoutuyun安装:点击打开链接

(2)wordcloud安装:

访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud下载对应版本的安装包,将下载的安装包保存在工作目录下,直接使用pip install 文件名

二、登录微信,获取好友数据:

if __name__ == "__main__":itchat.auto_login(hotReload=True)friends = itchat.get_friends(update=True)

三、微信好友数据分析:

1、性别分析

def fun_analyse_sex(friends):sexs = list(map(lambda x:x['Sex'],friends[1:]))#收集性别数据counts = list(map(lambda x:x[1],Counter(sexs).items()))#统计不同性别的数量counts = sorted(counts)labels = ['保密','男','女']#2:女,1:男,0:保密colors = ['red','yellow','blue']plt.figure(figsize=(8,5), dpi=80)plt.axes(aspect=1)plt.pie(counts, #性别统计结果labels=labels, #性别展示标签colors=colors, #饼图区域配色labeldistance = 1.1, #标签距离圆点距离autopct = '%3.1f%%', #饼图区域文本格式shadow = False, #饼图是否显示阴影startangle = 90, #饼图起始角度pctdistance = 0.6 #饼图区域文本距离圆点距离)plt.legend(loc='upper left')#标签位置plt.title(u'%s的微信好友性别比例' % friends[0]['NickName'])plt.show()

结果如下:

男女比例还是均衡的。

2、头像分析

头像分析有两部分,(1)头像是否是人脸;(2)头像标签的词云

(1)第一部分将会用到腾讯优图提供的人脸识别API,需要自己注册获得appid。详细使用文档:点击打开链接

def fun_analyse_HeadImage(friends):basePath = os.path.abspath('.')#程序的存储位置baseFolder = basePath + '\\HeadImages\\'#创建存储图片的文件夹的位置if(os.path.exists(baseFolder) == False):os.makedirs(baseFolder)else:passuse_face = 0#使用人脸not_use_face = 0#未使用人脸appid = '你的appid'secret_id = '你的secret_id'secret_key = '你的secret_key'end_point = TencentYoutuyun.conf.API_YOUTU_END_POINTyoutu = TencentYoutuyun.YouTu(appid, secret_id, secret_key,end_point)image_tags = ""for index in range(1,len(friends)):friend = friends[index]#保存头像文件imgFile = baseFolder + '//Image%s.jpg' %str(index)imgData = itchat.get_head_img(userName=friend['UserName'])if (os.path.exists(imgFile) == False):with open(imgFile,'wb') as file:file.write(imgData)#检测人脸time.sleep(1)result = youtu.DetectFace(imgFile)if result['face']:use_face += 1else:not_use_face += 1#头像分类,做词云result2 = youtu.imagetag(imgFile)#调用图像标签接口image_tags += (",".join(list(map(lambda x:x['tag_name'],result2['tags'])))+',')#将标签文件连接到一起labels = [u'使用人脸头像',u'未使用人脸头像']counts = [use_face,not_use_face]colors = ['red','blue','yellow']plt.figure(figsize=(8,5), dpi=120)plt.axes(aspect=1)#此处的aspect=1表示正圆,取不同的值,表示的圆形状不同plt.pie(counts,#计数labels=labels,colors = colors,labeldistance = 1.1,#标签距离圆心的距离autopct = '%3.1f%%', #饼图区域文本格式shadow = False,#饼图是否有阴影startangle = 90,pctdistance = 0.6)plt.legend(loc = 'upper right')plt.title(u'%s的微信好友使用人脸头像的情况' %friends[0]['NickName'])plt.show()#绘制头像标签词云image_tags = image_tags.encode('iso8859-1').decode('utf-8')#加密解密plt.figure(figsize=(8,5), dpi=160)back_coloring = np.array(Image.open('face.jpg'))word_cloud = WordCloud(font_path = 'simkai.ttf',background_color = 'white',max_words = 1200,mask = back_coloring,max_font_size = 75,stopwords = STOPWORDS.add('写真照'),#ps:这个词有点太露骨了。random_state=45,width=600,height = 300,margin = 15)word_cloud.generate(image_tags)plt.imshow(word_cloud)plt.axis("off")plt.show()

结果如下:

大部分人还是没有使用人脸头像的。

女孩这个词十分显眼,推断是女生更喜欢是用个人头像或女星为头像。词云选择的乔布斯为底图背景。

3、签名分析:

好友签名分析,也分为两部分:(1)切词构造词云;(2)文本分析,生活态度

代码如下:

def fun_analyse_Signature(friends):signatures = ''emotions = []for friend in friends:signature = friend['Signature']if signature != None:signature = signature.strip().replace("span","").replace("class","").replace("emoji","")#去除无关数据signature = re.sub(r'1f(\d.+)',"",signature)if len(signature) > 0:nlp = snownlp.SnowNLP(signature)emotions.append(nlp.sentiments)#nlp.sentiments:权值signatures += " ".join(jieba.analyse.extract_tags(signature,5))#关键字提取back_coloring = np.array(Image.open("xiaohuangren.jpg"))#图片可替换word_cloud2 = WordCloud(font_path = 'simkai.ttf',background_color = 'white',max_words = 1200,mask = back_coloring,margin = 15)word_cloud2.generate(signatures)image_colors = ImageColorGenerator(back_coloring)plt.figure(figsize=(8,5),dpi=160)plt.imshow(word_cloud2.recolor(color_func=image_colors))plt.axis("off")plt.show()word_cloud2.to_file("signatures.jpg")
#人生观count_positive = len(list(filter(lambda x:x>0.66,emotions)))#大于0.66为积极count_negative = len(list(filter(lambda x:x<0.33,emotions)))#小于0.33为消极count_neutral = len(list(filter(lambda x:x>=0.33 and x <= 0.66,emotions)))labels = [u'积极',u'中性',u'消极']values =(count_positive,count_neutral,count_negative)plt.rcParams['font.sans-serif'] = ['simHei']plt.rcParams['axes.unicode_minus'] = Falseplt.xlabel("情感判断")plt.ylabel("频数")plt.xticks(range(3),labels)plt.legend(loc='upper right')plt.bar(range(3),values,color='rgb')plt.title(u'%s的微信好友签名信息情感分析情况' % friends[0]['NickName'])plt.show()

结果如下:

看来好友还都是蛮积极乐观的。

4、好友位置分析:

今天弄懂了pyecharts,就想起来可以用来做位置分析。

再分析之前,还要安装pychart库,直接pip。

pip install pyecharts

不懂得地方参考本篇文章: http://blog.csdn.net/xxzj_zz2017/article/details/79601135

假设已经配置好环境,接下来进行分析,代码如下:

from pyecharts import Map
def get_attr(friends, key):return list(map(lambda user: user.get(key), friends))
def fun_pos(friends)users = dict(province=get_attr(friends, "Province"),city=get_attr(friends, "City"),nickname=get_attr(friends, "NickName"))provinces = pd.DataFrame(users)provinces_count = provinces.groupby('province', as_index=True)['province'].count().sort_values()attr = list(map(lambda x: x if x != '' else '未知', list(provinces_count.index)))#未填写地址的改为未知value = list(provinces_count)map_1 = Map("微信好友位置分布图",title_pos="center",width=1000, height=500)map_1.add('', attr, value, is_label_show=True, is_visualmap=True, visual_text_color='#000',visual_range=[0,120])map_1

看来还是在北京的朋友多。

暂时只对好友进行了以上几方面的分析,感觉还是很有意思的。

利用python进行微信好友数据分析相关推荐

  1. python微信好友分析_基于python实现微信好友数据分析(简单)

    一.功能介绍 本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,功能包括: 1.爬取好友列表,显示好友昵称.性别和地域和签名, 文件保存为 xlsx 格式 2. ...

  2. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  3. python表白代码照片墙-如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  4. 利用python进行微信好友分析

    欢迎python爱好者加入:学习交流群 667279387 本文主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为itchat,pandas,py ...

  5. 利用Python对微信好友数据进行分析

    一直就想着做个微信好友数据分析,折腾了一天总算是勉强完成了. 本文参考: 微信好友大数据分析 Python基于jieba库进行简单分词及词云功能实现方法 本文会使用到的第三方模块: itchat:微信 ...

  6. 基于python的微信好友数据分析_python 微信好友特征数据分析及可视化

    #微信好友特征数据分析及可视化 # 1.导包操作 from wxpy import * import re import jieba import numpy as np from scipy.mis ...

  7. 利用Python查看微信好友撤回的消息

    效果图如下: 不仅可以查看微信好友撤回的文字消息,如位置.视频.音频.图片等等都可以查看. 直接上源代码: # Python查看微信撤回消息 import re import os import ti ...

  8. 【微信】利用python实现微信好友防撤回、消息监控

    该项目来源于github,将其跑通: # -*- coding: utf-8 -*- """ Created on Fri Jun 21 12:09:43 2019@au ...

  9. python 微信数据_Python实现的微信好友数据分析功能示例

    本文实例讲述了python实现的微信好友数据分析功能.分享给大家供大家参考,具体如下: 这里主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为it ...

  10. 基于Python实现的微信好友数据分析——抓取好友性别、位置、头像签名

    最近微信迎来了一次重要的更新,允许用户对"发现"页面进行定制.不知道从什么时候开始,微信朋友圈变得越来越复杂,当越来越多的人选择"仅展示最近三天的朋友圈",大概 ...

最新文章

  1. Asp.net 用户控件和自定义控件注册
  2. 虚拟化对VMcpu分配的理解
  3. 树状数组c语言模板,【树状数组】Cows (POJ2481) PASCAL 解题报告
  4. 数据库范式(1NF 2NF 3NF BCNF)详解
  5. 最有价值的100句话
  6. c++经典编程题_【经典C语言知识】C/C++编程难点总结
  7. html之属性的定义
  8. 【BZOJ 1036】 树的统计count
  9. 程序员的十个经典算法
  10. OpenGL学习之颜色
  11. 【C语言】案例五十一 员工档案管理系统
  12. win10重装系统后部分电脑无法调节亮度问题
  13. 长差分:LongDifference及AcemogluAER论文推介
  14. 视频点播和OSS两个产品之间的区别与联系
  15. Django之Form表单验证组件Tyrion
  16. Python 【哔哩哔哩】短视频的自动上传与发布实例演示,,同时支持抖音、快手、小红书、微视、西瓜视频、微信视频号等平台的视频自动化同步发布
  17. 未明学院:量化金融训练营开始报名,成为兼具数据分析技能+项目实战经验的复合型人才!
  18. kubernetes v1.20项目之二进制扩容多Master
  19. Excel 每N个取平均值
  20. 在IDEA中给项目同时配置git和svn

热门文章

  1. 线性变换(1)——不变子空间
  2. 苹果计算机如何显示错误,Mac闪烁问号——如何修复苹果电脑错误提示-万兴恢复专家...
  3. apt-get update “the following signatures couldn’t be verified because the public key is not avail
  4. SQL存储过程对象名无效
  5. 【BeEF】Ubuntu 20.04安装BeEF
  6. java中put是什么意思_关于java:请求参数和PUT方法
  7. 关于DFU 烧录更新image
  8. Mint-ui MessageBox.confirm 确定和取消事件
  9. 基于Opencv的人脸&姓名&表情&年龄&种族&性别识别系统(源码&教程)
  10. 一口一个超酥脆的宝宝小零食,超简单的做法哦