python微信好友数据分析详解


Posted in Python onNovember 19, 2018

基于微信开放的个人号接口python库itchat,实现对微信好友的获取,并对省份、性别、微信签名做数据分析。

效果:

python微信好友数据分析详解

python微信好友数据分析详解

python微信好友数据分析详解

直接上代码,建三个空文本文件stopwords.txt,newdit.txt、unionWords.txt,下载字体simhei.ttf或删除字体要求的代码,就可以直接运行。

#wxfriends.py 2018-07-09
import itchat
import sys
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#绘图时可以显示中文
plt.rcParams['axes.unicode_minus']=False#绘图时可以显示中文
import jieba
import jieba.posseg as pseg
from scipy.misc import imread
from wordcloud import WordCloud
from os import path
#解决编码问题
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
 
 
#获取好友信息
def getFriends():
 friends = itchat.get_friends(update=True)[0:]
 flists = []
 for i in friends:
  fdict={}
  fdict['NickName']=i['NickName'].translate(non_bmp_map)
  if i['Sex'] == 1:
   fdict['Sex']='男'
  elif i['Sex'] == 2:
   fdict['Sex']='女'
  else:
   fdict['Sex']='雌雄同体'
  if i['Province'] == '':
   fdict['Province'] ='未知'
  else:
   fdict['Province']=i['Province']
  fdict['City']=i['City']
  fdict['Signature']=i['Signature']
  flists.append(fdict)
 return flists
 
 
#将好友信息保存成CSV
def saveCSV(lists):
 df = pd.DataFrame(lists)
 try:
  df.to_csv("wxfriends.csv",index = True,encoding='gb18030')
 except Exception as ret:
  print(ret)
 return df
 
 
#统计性别、省份字段 
def anysys(df):
 df_sex = pd.DataFrame(df['Sex'].value_counts())
 df_province = pd.DataFrame(df['Province'].value_counts()[:15])
 df_signature = pd.DataFrame(df['Signature'])
 return df_sex,df_province,df_signature
 
 
#绘制柱状图,并保存 
def draw_chart(df_list,x_feature):
 try:
  x = list(df_list.index)
  ylist = df_list.values
  y = []
  for i in ylist :
   for j in i:
    y.append(j)
  plt.bar(x,y,label=x_feature)
  plt.legend()
  plt.savefig(x_feature)
  plt.close()
 except:
  print("绘图失败")
 
 
#解析取个性签名构成列表  
def getSignList(signature):
 sig_list = []
 for i in signature.values:
  for j in i:
   sig_list.append(j.translate(non_bmp_map))
 return sig_list
 
 
#分词处理,并根据需要填写停用词、自定义词、合并词替换
def segmentWords(txtlist):
 stop_words = set(line.strip() for line in open('stopwords.txt', encoding='utf-8'))
 newslist = []
 #新增自定义词
 jieba.load_userdict("newdit.txt")
 for subject in txtlist:
  if subject.isspace():
   continue
  word_list = pseg.cut(subject)
  
  for word, flag in word_list:
   if not word in stop_words and flag == 'n' or flag == 'eng' and word !='span' and word !='class':
    newslist.append(word)
  #合并指定的相似词
 for line in open('unionWords.txt', encoding='utf-8'):
  newline = line.encode('utf-8').decode('utf-8-sig') #解决\ufeff问题
  unionlist = newline.split("*")
  for j in range(1,len(unionlist)):
   #wordDict[unionlist[0]] += wordDict.pop(unionlist[j],0)
   for index,value in enumerate(newslist):
    if value == unionlist[j]:
     newslist[index] = unionlist[0] 
 return newslist
 
 
#高频词统计
def countWords(newslist):
 wordDict = {}
 for item in newslist:
  wordDict[item] = wordDict.get(item,0) + 1
 itemList = list(wordDict.items())
 itemList.sort(key=lambda x:x[1],reverse=True)  
 for i in range(100):
  word, count = itemList[i]
  print("{}:{}".format(word,count))
 
 
#绘制词云
def drawPlant(newslist):
 d = path.dirname(__file__)
 mask_image = imread(path.join(d, "timg.png"))
 content = ' '.join(newslist)
 wordcloud = WordCloud(font_path='simhei.ttf', background_color="white",width=1300,height=620, max_words=200).generate(content) #mask=mask_image,
 # Display the generated image:
 plt.imshow(wordcloud)
 plt.axis("off")
 wordcloud.to_file('wordcloud.jpg')
 plt.show()
 
 
def main():
 #登陆微信
 itchat.auto_login() # 登陆后不需要扫码 hotReload=True
 flists = getFriends()
 fdf = saveCSV(flists)
 df_sex,df_province,df_signature = anysys(fdf)
 draw_chart(df_sex,"性别")
 draw_chart(df_province,"省份")
 wordList = segmentWords(getSignList(df_signature))
 countWords(wordList)
 drawPlant(wordList)
 
main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的自定义函数学习笔记
Sep 23 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
Python对象转JSON字符串的方法
Apr 27 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
pymysql的简单封装代码实例
Jan 08 Python
TensorFLow 变量命名空间实例
Feb 11 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
keras.layer.input()用法说明
Jun 16 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
python生成九宫格图片
Nov 19 #Python
python实现简易动态时钟
Nov 19 #Python
python使用Turtle库绘制动态钟表
Nov 19 #Python
python+PyQT实现系统桌面时钟
Jun 16 #Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 #Python
Window环境下Scrapy开发环境搭建
Nov 18 #Python
Python中安装easy_install的方法
Nov 18 #Python
You might like
PHP 编写的 25个游戏脚本
2009/05/11 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
浅谈PHP中的
2016/04/23 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
python中字符串类型json操作的注意事项
2017/05/02 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python实现简易数码时钟
2021/02/19 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python创建学生管理系统
2019/11/22 Python
Python:slice与indices的用法
2019/11/25 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
中餐厅主管的职责范文
2014/02/04 职场文书
小学音乐教学反思
2014/02/05 职场文书
学习标兵获奖感言
2014/02/20 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers