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中生成Epoch的方法
Apr 26 Python
Flask解决跨域的问题示例代码
Feb 12 Python
详解Python中where()函数的用法
Mar 27 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python实现控制台打印的方法
Jan 12 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python实现计算对象的内存大小示例
Jul 10 Python
django页面跳转问题及注意事项
Jul 18 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
Django3中的自定义用户模型实例详解
Aug 23 Python
Python&Matlab实现樱花的绘制
Apr 07 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 COOKIE设置为浏览器进程
2009/06/21 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
JavaScript基本对象
2007/01/11 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
Python 高级专用类方法的实例详解
2017/09/11 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
暑假实习求职信范文
2013/09/22 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
孩子教育的心得体会
2014/09/01 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
运动会入场词
2015/07/18 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python