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脚本实现集群检测和管理功能
Mar 06 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
Django中的ajax请求
Oct 19 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Python二元算术运算常用方法解析
Sep 15 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
javaScript语法总结
2016/11/25 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
python网页请求urllib2模块简单封装代码
2014/02/07 Python
浅析Python中的join()方法的使用
2015/05/19 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
土木工程毕业生推荐信
2013/10/28 职场文书
经济学博士求职自荐信范文
2013/11/23 职场文书
会计实习自我鉴定
2013/12/04 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
法制宣传实施方案
2014/03/13 职场文书
担保书怎么写
2014/04/01 职场文书
女性健康讲座主持词
2015/07/04 职场文书
七年级话题作文之执着
2019/11/19 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python