Python实现微信好友的数据分析


Posted in Python onDecember 16, 2019

基于微信开放的个人号接口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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
详解Python如何生成词云的方法
Jun 01 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Python中dict和set的用法讲解
Mar 28 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
keras多显卡训练方式
Jun 10 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
python析构函数用法及注意事项
Jun 22 Python
在 Python 中利用 Pool 进行多线程
Apr 24 Python
Python字典中的值为列表或字典的构造实例
Dec 16 #Python
python groupby 函数 as_index详解
Dec 16 #Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 #Python
Python实现word2Vec model过程解析
Dec 16 #Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 #Python
python实现监控阿里云账户余额功能
Dec 16 #Python
Python实现密码薄文件读写操作
Dec 16 #Python
You might like
配置php网页显示各种语法错误
2013/09/23 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
php数组遍历类与用法示例
2019/05/24 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
SVG实现时钟效果
2018/07/17 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
python抓取网页中链接的静态图片
2018/01/29 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
Python3中的bytes和str类型详解
2019/05/02 Python
简单了解python的一些位运算技巧
2019/07/13 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
解决pip install psycopg2出错问题
2020/07/09 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
公司总经理岗位职责
2014/03/15 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
骨干教师考核方案
2014/05/09 职场文书
保密工作整改报告
2014/11/06 职场文书
结婚典礼主持词
2015/06/29 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书