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实现代理服务功能实例
Nov 15 Python
Python生成随机MAC地址
Mar 10 Python
Python中的异常处理简明介绍
Apr 13 Python
安装dbus-python的简要教程
May 05 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
Django在win10下的安装并创建工程
Nov 20 Python
wxPython实现窗口用图片做背景
Apr 25 Python
python爬取个性签名的方法
Jun 17 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
通过Python实现Payload分离免杀过程详解
Jul 13 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
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
Python autoescape标签用法解析
2020/01/17 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python实现井字棋小游戏
2020/03/04 Python
python 一维二维插值实例
2020/04/22 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
检讨书格式范文
2015/05/07 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python