利用python怎么對(duì)微信好友的信息進(jìn)行分析-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)利用 python 怎么對(duì)微信好友的信息進(jìn)行分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)公司云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)13年的服務(wù)器租用、德陽(yáng)電信服務(wù)器托管、云服務(wù)器、虛擬空間、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、虛擬空間、域名與空間、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。

1. 使用到的庫(kù)

① wxpy:初始化微信機(jī)器人

② openpyxl:保存微信好友數(shù)據(jù)為Excel表格

③ pyecharts:生成可視化的地圖

④ wordcloud、matplotlib、jieba:生成詞云圖

【特別提醒】:pyecharts 庫(kù)用的是0.5.x版本,而在 pip 中安裝的為1.x.x版本,因此需要自行到【官網(wǎng)】中下載。

2. 基本功能

① 分析微信好友數(shù)據(jù)

② 生成詞云圖

③ 生成地圖展示

3. 代碼實(shí)現(xiàn)


此處使用類來(lái)實(shí)現(xiàn)

(1) 導(dǎo)入模塊

# 導(dǎo)入模塊
from wxpy import Bot
import openpyxl
from pyecharts import Map
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

(2) 初始化機(jī)器人和獲取微信好友的源信息

此處調(diào)用 Bot() 方法,需要掃碼登陸微信網(wǎng)頁(yè)版,后續(xù)操作才能進(jìn)行。

def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):
  ''' 初始化機(jī)器人和其他參數(shù) '''
  # 初始化機(jī)器人,需要掃碼
  self.bot = Bot()
  # 獲取我所有的微信好友信息 - 存儲(chǔ)基礎(chǔ)信息(未處理)
  self.allFriends_Info = self.bot.friends()
  # 我的微信好友個(gè)數(shù)
  self.allFriends_Num = len(self.allFriends_Info)
  # 保存微信好友信息的表格文件路徑(.xlsx)
  self.ExcelFile = ToExcelFile
  # 保存城市詞云圖的文件路徑(.png/.jpg)
  self.WCOfCityFile = ToCityFile
  # 保存省份地圖的文件路徑(.html)
  self.MapProvinceFile = ToMapProvinceFile
  # 其他可用參數(shù)
  self.MapCityFile = ToMapCityFile
  # 自動(dòng)調(diào)用run方法,使得在實(shí)例化對(duì)象后自動(dòng)運(yùn)行其他函數(shù)
  self.run()

(3) 統(tǒng)計(jì)和處理微信好友的信息

除了列出的還有 個(gè)性簽名、頭像等其他屬性。

def getFriendsInfo(self):
  ''' 獲取微信好友的全部信息 '''
  # 存儲(chǔ)微信好友的信息(經(jīng)過(guò)信息處理的)
  self.friendsInfo = []
  # 定義列標(biāo)題
  self.infoTitle = ['NickName', 'RemarkName', 'Sex', 'Province', 'City']
  for aFriend in self.allFriends_Info:
    # 獲取昵稱
    NickName = aFriend.raw.get(self.infoTitle[0], None)
    # 獲取備注
    RemarkName = aFriend.raw.get(self.infoTitle[1], None)
    # 獲取性別
    Sex = {1:"男", 2:"女", 0:"其他"}.get(aFriend.raw.get(self.infoTitle[2], None), None)
    # 獲取省份
    Province = aFriend.raw.get(self.infoTitle[3], None)
    # 獲取城市
    City = aFriend.raw.get(self.infoTitle[4], None)
    lisTmp = [NickName, RemarkName, Sex, Province, City]
    self.friendsInfo.append(lisTmp)

(4) 保存微信好友的信息

在這保存為Excel表格,在代碼中插入表頭行,為了便于閱讀。

def saveFriendsInfoAsExcel(self, ExcelName):
  ''' 保存微信好友的信息到 Excel 表格中 '''
  # 生成openpyxl對(duì)象
  workbook = openpyxl.Workbook()
  # 激活表格
  sheet = workbook.active
  # 設(shè)置表格標(biāo)題
  sheet.title = 'WeChatFriendsInfo'
  # 填充列標(biāo)題到第一行
  for _ in range(len(self.infoTitle)):
    sheet.cell(row=1, column=_+1, value=self.infoTitle[_])
  # 填充微信好友信息,從第二行開(kāi)始
  for i in range(self.allFriends_Num):
    for j in range(len(self.infoTitle)):
      sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))
  # 若文件名非空,則保存到該路徑下
  if ExcelName != "":
    workbook.save(ExcelName)
    print(">>> Save WeChat friends' information successfully!")

(5) 分析微信好友的信息

 def quiteAnalyzeFriendsInfo(self):
   ''' 分析數(shù)據(jù),一步到位,直接了當(dāng) '''
   print(self.allFriends_Info.stats_text())

(6) 生成city詞云圖

def creatWordCloudOfCity(self, CityName):
  ''' 使用獲取的數(shù)據(jù)生成city詞云圖 '''
  # 獲取所有的城市
  cityStr = ""
  for i in range(self.allFriends_Num):
    if self.friendsInfo[i][4] not in cityStr:
      cityStr += " " + self.friendsInfo[i][4]
  #jieba庫(kù)精確模式分詞
  wordlist = jieba.lcut(cityStr)
  cityStr = ' '.join(wordlist)
  # 加載背景圖片
  #cloud_mask = np.array(Image.open(BackGroundFile))
  #設(shè)置詞云圖屬性
  font = r'C:\Windows\Fonts\simfang.ttf' # 設(shè)置字體路徑
  wc = WordCloud(
    background_color = 'black',   # 背景顏色
    #mask = cloud_mask,       # 背景圖片
    max_words = 100,        # 設(shè)置較大顯示的詞云數(shù)
    font_path = font,        # 設(shè)置字體形式(在本機(jī)系統(tǒng)中)
    height = 300,          # 圖片高度
    width = 600,          # 圖片寬度
    max_font_size = 100,      # 字體較大值
    random_state = 100,       # 配色方案的種類
    )
  # 生成詞云圖
  myword = wc.generate(cityStr)
  #展示詞云圖
  plt.imshow(myword)
  plt.axis('off')
  plt.show()
  # 若文件名非空,則保存到該路徑下
  if CityName != "":
    #保存詞云圖
    wc.to_file(CityName)
    print(">>> Creat WeChat wordcloud of city successfully!")

(7) 生成province地圖

def creatMapProvince(self, MapFile):
  ''' 使用獲取的數(shù)據(jù)生成province地圖 '''
  # 獲取所有省份
  provinceList, provinceNum = [], []
  for i in range(self.allFriends_Num):
    if self.friendsInfo[i][3] not in provinceList:
      provinceList.append(self.friendsInfo[i][3])
      provinceNum.append(0)
  for i in range(self.allFriends_Num):
    for j in range(len(provinceList)):
      if self.friendsInfo[i][3] == provinceList[j]:
        provinceNum[j] += 1
  # 生成 Map
  map = Map("各省微信好友分布", width=1000, height=800)
  map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')
  # 若文件名非空,則保存到該路徑下
  if MapFile != "":
    map.render(MapFile)
    print(">>> Creat WeChat Map of Provinces seccessfully!")

(8) 生成city地圖

def creatMapCity(self, MapFile):
    ''' 使用獲取的數(shù)據(jù)生成city地圖 '''
    # 獲取所有省份
    CityList, CityNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in CityList:
        CityList.append(self.friendsInfo[i][4])
        CityNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(CityList)):
        if self.friendsInfo[i][4] == CityList[j]:
          CityNum[j] += 1
    for i in range(len(CityList)):
      CityList[i] += '市'
    # 生成 Map
    map = Map("各市微信好友分布", width=1000, height=800)
    map.add("", CityList, CityNum, maptype="廣東", is_visualmap=True, visual_text_color='#000')
    # 若文件名非空,則保存到該路徑下
    if MapFile != "":
      map.render(MapFile)
      print(">>> Creat WeChat Map of Cities seccessfully!")

有了上述實(shí)現(xiàn)各個(gè)功能的方法,那么就差一個(gè)調(diào)用各種方法的方法了。

(9) run方法

def run(self):
  # 獲取微信好友信息
  self.getFriendsInfo()
  print(">>> Get WeChat friends' information successfully!")
  print(">>> Members:", self.allFriends_Num)
  # 保存微信好友信息
  self.saveFriendsInfoAsExcel(self.ExcelFile)
  # 分析微信好友信息
  self.quiteAnalyzeFriendsInfo()
  # 使用微信好友的 city 產(chǎn)生詞云圖
  self.creatWordCloudOfCity(self.WCOfCityFile)
  # 生成微信好友的 province 地圖
  self.creatMapProvince(self.MapProvinceFile)
  # 生成微信好友的 city 地圖
  self.creatMapCity(self.MapCityFile)

對(duì)于文件路徑,在main函數(shù)中傳遞即可?!咀ⅰ浚荷鲜龃a都在類中,在此處結(jié)束,下面為main函數(shù)

if __name__ == "__main__":
  ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx"   # 微信好友信息的Excel表格保存路徑
  ToPictureFile = "./WeChatAnalyze//CityWordCloud.png"  # 微信好友信息city詞云圖保存路徑
  ToMapFileProvince = "./WeChatAnalyze//WeChatProvinceMap.html" # 微信好友信息province地圖保存路徑
  ToMapFileCity = "./WeChatAnalyze//WeChatCityMap.html" # 微信好友信息city地圖保存路徑
  # WeChatRobot對(duì)象實(shí)例化
  robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)

是不是覺(jué)得Main函數(shù)很簡(jiǎn)短,哈哈,沒(méi)錯(cuò),就是這么簡(jiǎn)!

接下來(lái)看看實(shí)現(xiàn)的效果吧!

>>> 這個(gè)是終端顯示效果

利用 python 怎么對(duì)微信好友的信息進(jìn)行分析

>>> 這個(gè)是保存為Excel表格的內(nèi)容

利用 python 怎么對(duì)微信好友的信息進(jìn)行分析

 >>> 這個(gè)是微信好友各省的分布

利用 python 怎么對(duì)微信好友的信息進(jìn)行分析

>>> 這個(gè)是微信好友各市的分布

利用 python 怎么對(duì)微信好友的信息進(jìn)行分析

完整代碼

# -*- coding: utf-8 -*-
'''
This is a program which can analyze datas of WeChat friends.
@author: bpf
'''

# 導(dǎo)入模塊
from wxpy import Bot
import openpyxl
from pyecharts import Map
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

class WeChatRobot:

  '''====================== 1. 獲取微信好友信息 ======================'''
  def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):
    ''' 初始化機(jī)器人和其他參數(shù) '''
    # 初始化機(jī)器人,需要掃碼
    self.bot = Bot()
    # 獲取我所有的微信好友信息 - 存儲(chǔ)基礎(chǔ)信息(未處理)
    self.allFriends_Info = self.bot.friends()
    # 我的微信好友個(gè)數(shù)
    self.allFriends_Num = len(self.allFriends_Info)
    # 保存微信好友信息的表格文件路徑(.xlsx)
    self.ExcelFile = ToExcelFile
    # 保存城市詞云圖的文件路徑(.png/.jpg)
    self.WCOfCityFile = ToCityFile
    # 保存省份地圖的文件路徑(.html)
    self.MapProvinceFile = ToMapProvinceFile
    # 其他可用參數(shù)
    self.MapCityFile = ToMapCityFile
    # 自動(dòng)調(diào)用run方法,使得在實(shí)例化對(duì)象后自動(dòng)運(yùn)行其他函數(shù)
    self.run()

  '''====================== 2. 統(tǒng)計(jì)微信好友信息 ======================'''
  def getFriendsInfo(self):
    ''' 獲取微信好友的全部信息 '''
    # 存儲(chǔ)微信好友的信息(經(jīng)過(guò)信息處理的)
    self.friendsInfo = []
    # 定義列標(biāo)題
    self.infoTitle = ['NickName', 'RemarkName', 'Sex', 'Province', 'City']
    for aFriend in self.allFriends_Info:
      # 獲取昵稱
      NickName = aFriend.raw.get(self.infoTitle[0], None)
      # 獲取備注
      RemarkName = aFriend.raw.get(self.infoTitle[1], None)
      # 獲取性別
      Sex = {1:"男", 2:"女", 0:"其他"}.get(aFriend.raw.get(self.infoTitle[2], None), None)
      # 獲取省份
      Province = aFriend.raw.get(self.infoTitle[3], None)
      # 獲取城市
      City = aFriend.raw.get(self.infoTitle[4], None)
      lisTmp = [NickName, RemarkName, Sex, Province, City]
      self.friendsInfo.append(lisTmp)

  '''====================== 3. 保存微信好友信息 ======================'''
  def saveFriendsInfoAsExcel(self, ExcelName):
    ''' 保存微信好友的信息到 Excel 表格中 '''
    # 生成openpyxl對(duì)象
    workbook = openpyxl.Workbook()
    # 激活表格
    sheet = workbook.active
    # 設(shè)置表格標(biāo)題
    sheet.title = 'WeChatFriendsInfo'
    # 填充列標(biāo)題到第一行
    for _ in range(len(self.infoTitle)):
      sheet.cell(row=1, column=_+1, value=self.infoTitle[_])
    # 填充微信好友信息,從第二行開(kāi)始
    for i in range(self.allFriends_Num):
      for j in range(len(self.infoTitle)):
        sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))
    # 若文件名非空,則保存到該路徑下
    if ExcelName != "":
      workbook.save(ExcelName)
      print(">>> Save WeChat friends' information successfully!")

  '''====================== 4. 分析微信好友信息 ======================'''
  def quiteAnalyzeFriendsInfo(self):
    ''' 分析數(shù)據(jù),一步到位,直接了當(dāng) '''
    print(self.allFriends_Info.stats_text())

  '''====================== 5. 產(chǎn)生city詞云圖 ======================'''
  def creatWordCloudOfCity(self, CityName):
    ''' 使用獲取的數(shù)據(jù)生成city詞云圖 '''
    # 獲取所有的城市
    cityStr = ""
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in cityStr:
        cityStr += " " + self.friendsInfo[i][4]
    #jieba庫(kù)精確模式分詞
    wordlist = jieba.lcut(cityStr)
    cityStr = ' '.join(wordlist)
    # 加載背景圖片
    #cloud_mask = np.array(Image.open(BackGroundFile))
    #設(shè)置詞云圖屬性
    font = r'C:\Windows\Fonts\simfang.ttf' # 設(shè)置字體路徑
    wc = WordCloud(
      background_color = 'black',   # 背景顏色
      #mask = cloud_mask,       # 背景圖片
      max_words = 100,        # 設(shè)置較大顯示的詞云數(shù)
      font_path = font,        # 設(shè)置字體形式(在本機(jī)系統(tǒng)中)
      height = 300,          # 圖片高度
      width = 600,          # 圖片寬度
      max_font_size = 100,      # 字體較大值
      random_state = 100,       # 配色方案的種類
      )
    # 生成詞云圖
    myword = wc.generate(cityStr)
    #展示詞云圖
    plt.imshow(myword)
    plt.axis('off')
    plt.show()
    # 若文件名非空,則保存到該路徑下
    if CityName != "":
      #保存詞云圖
      wc.to_file(CityName)
      print(">>> Creat WeChat wordcloud of city successfully!")

  '''===================== 6. 產(chǎn)生province地圖 ====================='''
  def creatMapProvince(self, MapFile):
    ''' 使用獲取的數(shù)據(jù)生成province地圖 '''
    # 獲取所有省份
    provinceList, provinceNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][3] not in provinceList:
        provinceList.append(self.friendsInfo[i][3])
        provinceNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(provinceList)):
        if self.friendsInfo[i][3] == provinceList[j]:
          provinceNum[j] += 1
    # 生成 Map
    map = Map("各省微信好友分布", width=1000, height=800)
    map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')
    # 若文件名非空,則保存到該路徑下
    if MapFile != "":
      #map.show_config()
      map.render(MapFile)
      print(">>> Creat WeChat Map of Provinces seccessfully!")

  '''===================== 7. 產(chǎn)生city地圖 ====================='''
  def creatMapCity(self, MapFile):
    ''' 使用獲取的數(shù)據(jù)生成city地圖 '''
    # 獲取所有省份
    CityList, CityNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in CityList:
        CityList.append(self.friendsInfo[i][4])
        CityNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(CityList)):
        if self.friendsInfo[i][4] == CityList[j]:
          CityNum[j] += 1
    for i in range(len(CityList)):
      CityList[i] += '市'
    # 生成 Map
    map = Map("各市微信好友分布", width=1000, height=800)
    map.add("", CityList, CityNum, maptype="廣東", is_visualmap=True, visual_text_color='#000')
    # 若文件名非空,則保存到該路徑下
    if MapFile != "":
      map.render(MapFile)
      print(">>> Creat WeChat Map of Cities seccessfully!")

  '''===================== 8. 自動(dòng)執(zhí)行函數(shù) ====================='''
  def run(self):
    # 獲取微信好友信息
    self.getFriendsInfo()
    print(">>> Get WeChat friends' information successfully!")
    print(">>> Members:", self.allFriends_Num)
    # 保存微信好友信息
    self.saveFriendsInfoAsExcel(self.ExcelFile)
    # 分析微信好友信息
    self.quiteAnalyzeFriendsInfo()
    # 使用微信好友的 city 產(chǎn)生詞云圖
    self.creatWordCloudOfCity(self.WCOfCityFile)
    # 生成微信好友的 province 地圖
    self.creatMapProvince(self.MapProvinceFile)
    # 生成微信好友的 city 地圖
    self.creatMapCity(self.MapCityFile)

if __name__ == "__main__":
  ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx"   # 微信好友信息的Excel表格保存路徑
  ToPictureFile = "./WeChatAnalyze//CityWordCloud.png"  # 微信好友信息city詞云圖保存路徑
  ToMapFileProvince = "./WeChatAnalyze//WeChatProvinceMap.html" # 微信好友信息province地圖保存路徑
  ToMapFileCity = "./WeChatAnalyze//WeChatCityMap.html" # 微信好友信息city地圖保存路徑
  # WeChatRobot對(duì)象實(shí)例化
  robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)

上述就是小編為大家分享的利用 python 怎么對(duì)微信好友的信息進(jìn)行分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:利用python怎么對(duì)微信好友的信息進(jìn)行分析-創(chuàng)新互聯(lián)
本文來(lái)源:http://bm7419.com/article14/gijde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)微信小程序、網(wǎng)站設(shè)計(jì)面包屑導(dǎo)航、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作