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程序设计入门(1)基本语法简介
Jun 13 Python
Python运用于数据分析的简单教程
Mar 27 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
Python3使用xlrd、xlwt处理Excel方法数据
Feb 28 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python建造者模式案例运行原理解析
Jun 29 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
mysq GBKl乱码
2006/11/28 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php中strtotime函数性能分析
2016/11/20 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
Python中实现的RC4算法
2015/02/14 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python如何判断IP地址合法性
2020/04/05 Python
详解python程序中的多任务
2020/09/16 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
会计专业推荐信
2013/10/29 职场文书
员工晚婚的请假条
2014/02/08 职场文书
元旦晚会感言
2014/03/12 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
安全员岗位职责
2015/02/10 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
Python内置数据类型中的集合详解
2022/03/18 Python