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程序中操作文件之isatty()方法的使用教程
May 24 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
python把转列表为集合的方法
Jun 28 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
如何基于python操作json文件获取内容
Dec 24 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
python实现xml转json文件的示例代码
Dec 30 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
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
跟老齐学Python之做一个小游戏
2014/09/28 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
python的命名规则知识点总结
2019/10/04 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
外包公司软件测试工程师
2014/11/01 面试题
商务英语广告词大全
2014/03/18 职场文书
建筑工地标语
2014/06/18 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
环保建议书作文500字
2015/09/14 职场文书
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS