侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python微信好友数据分析详解

Python  /  管理员 发布于 7年前   180

基于微信开放的个人号接口python库itchat,实现对微信好友的获取,并对省份、性别、微信签名做数据分析。

效果:

直接上代码,建三个空文本文件stopwords.txt,newdit.txt、unionWords.txt,下载字体simhei.ttf或删除字体要求的代码,就可以直接运行。

 #wxfriends.py 2018-07-09import itchatimport sysimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#绘图时可以显示中文plt.rcParams['axes.unicode_minus']=False#绘图时可以显示中文import jiebaimport jieba.posseg as psegfrom scipy.misc import imreadfrom wordcloud import WordCloudfrom 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  #将好友信息保存成CSVdef 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生成九宫格图片
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客