python微信好友数据分析详解


Posted in Python onNovember 19, 2018

基于微信开放的个人号接口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中的decode()方法的使用
May 18 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
python生成九宫格图片
Nov 19 #Python
python实现简易动态时钟
Nov 19 #Python
python使用Turtle库绘制动态钟表
Nov 19 #Python
python+PyQT实现系统桌面时钟
Jun 16 #Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 #Python
Window环境下Scrapy开发环境搭建
Nov 18 #Python
Python中安装easy_install的方法
Nov 18 #Python
You might like
php 什么是PEAR?
2009/03/19 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
javascript实现的网页局布刷新效果
2008/12/01 Javascript
offsetParent 算法分析
2010/04/05 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python绘制规则网络图形实例
2019/12/09 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
应届生求职信
2014/05/31 职场文书
学校2014年度工作总结
2014/12/06 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
60句有关成长的名言
2019/09/04 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python