用 python 進行微信好友資訊分析
阿新 • • 發佈:2020-11-28
1. 使用到的庫
① wxpy:初始化微信機器人
② openpyxl:儲存微信好友資料為Excel表格
③ pyecharts:生成視覺化的地圖
④ wordcloud、matplotlib、jieba:生成詞雲圖
【特別提醒】:pyecharts 庫用的是0.5.x版本,而在 pip 中安裝的為1.x.x版本,因此需要自行到【官網】中下載。
2. 基本功能
① 分析微信好友資料
② 生成詞雲圖
③ 生成地圖展示
3. 程式碼實現
此處使用類來實現
(1) 匯入模組
# 匯入模組 from wxpy import Bot import openpyxl from pyecharts import Map from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba
(2) 初始化機器人和獲取微信好友的源資訊
此處呼叫 Bot() 方法,需要掃碼登陸微信網頁版,後續操作才能進行。
def __init__(self,ToExcelFile="",ToCityFile="",ToMapProvinceFile="",ToMapCityFile=""): ''' 初始化機器人和其他引數 ''' # 初始化機器人,需要掃碼 self.bot = Bot() # 獲取我所有的微信好友資訊 - 儲存基礎資訊(未處理) self.allFriends_Info = self.bot.friends() # 我的微信好友個數 self.allFriends_Num = len(self.allFriends_Info) # 儲存微信好友資訊的表格檔案路徑(.xlsx) self.ExcelFile = ToExcelFile # 儲存城市詞雲圖的檔案路徑(.png/.jpg) self.WCOfCityFile = ToCityFile # 儲存省份地圖的檔案路徑(.html) self.MapProvinceFile = ToMapProvinceFile # 其他可用引數 self.MapCityFile = ToMapCityFile # 自動呼叫run方法,使得在例項化物件後自動執行其他函式 self.run()
(3) 統計和處理微信好友的資訊
除了列出的還有 個性簽名、頭像等其他屬性。
def getFriendsInfo(self): ''' 獲取微信好友的全部資訊 ''' # 儲存微信好友的資訊(經過資訊處理的) self.friendsInfo = [] # 定義列標題 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物件 workbook = openpyxl.Workbook() # 啟用表格 sheet = workbook.active # 設定表格標題 sheet.title = 'WeChatFriendsInfo' # 填充列標題到第一行 for _ in range(len(self.infoTitle)): sheet.cell(row=1,column=_+1,value=self.infoTitle[_]) # 填充微信好友資訊,從第二行開始 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): ''' 分析資料,一步到位,直接了當 ''' print(self.allFriends_Info.stats_text())
(6) 生成city詞雲圖
def creatWordCloudOfCity(self,CityName): ''' 使用獲取的資料生成city詞雲圖 ''' # 獲取所有的城市 cityStr = "" for i in range(self.allFriends_Num): if self.friendsInfo[i][4] not in cityStr: cityStr += " " + self.friendsInfo[i][4] #jieba庫精確模式分詞 wordlist = jieba.lcut(cityStr) cityStr = ' '.join(wordlist) # 載入背景圖片 #cloud_mask = np.array(Image.open(BackGroundFile)) #設定詞雲圖屬性 font = r'C:\Windows\Fonts\simfang.ttf' # 設定字型路徑 wc = WordCloud( background_color = 'black',# 背景顏色 #mask = cloud_mask,# 背景圖片 max_words = 100,# 設定最大顯示的詞雲數 font_path = font,# 設定字型形式(在本機系統中) 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): ''' 使用獲取的資料生成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): ''' 使用獲取的資料生成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("各市微信好友分佈",height=800) map.add("",CityList,CityNum,maptype="廣東",visual_text_color='#000') # 若檔名非空,則儲存到該路徑下 if MapFile != "": map.render(MapFile) print(">>> Creat WeChat Map of Cities seccessfully!")
有了上述實現各個功能的方法,那麼就差一個呼叫各種方法的方法了。
(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 產生詞雲圖 self.creatWordCloudOfCity(self.WCOfCityFile) # 生成微信好友的 province 地圖 self.creatMapProvince(self.MapProvinceFile) # 生成微信好友的 city 地圖 self.creatMapCity(self.MapCityFile)
對於檔案路徑,在main函式中傳遞即可。【注】:上述程式碼都在類中,在此處結束,下面為main函式
if __name__ == "__main__": ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx" # 微信好友資訊的Excel表格儲存路徑 ToPictureFile = "./WeChatAnalyze//CityWordCloud.png" # 微信好友資訊city詞雲圖儲存路徑 ToMapFileProvince = "./WeChatAnalyze//WeChatProvinceMap.html" # 微信好友資訊province地圖儲存路徑 ToMapFileCity = "./WeChatAnalyze//WeChatCityMap.html" # 微信好友資訊city地圖儲存路徑 # WeChatRobot物件例項化 robot = WeChatRobot(ToExcelFile,ToPictureFile,ToMapFileProvince,ToMapFileCity)
是不是覺得Main函式很簡短,哈哈,沒錯,就是這麼簡!
接下來看看實現的效果吧!
>>> 這個是終端顯示效果
>>> 這個是儲存為Excel表格的內容
>>> 這個是微信好友各省的分佈
>>> 這個是微信好友各市的分佈
完整程式碼
# -*- coding: utf-8 -*- ''' This is a program which can analyze datas of WeChat friends. @author: bpf ''' # 匯入模組 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,ToMapCityFile=""): ''' 初始化機器人和其他引數 ''' # 初始化機器人,需要掃碼 self.bot = Bot() # 獲取我所有的微信好友資訊 - 儲存基礎資訊(未處理) self.allFriends_Info = self.bot.friends() # 我的微信好友個數 self.allFriends_Num = len(self.allFriends_Info) # 儲存微信好友資訊的表格檔案路徑(.xlsx) self.ExcelFile = ToExcelFile # 儲存城市詞雲圖的檔案路徑(.png/.jpg) self.WCOfCityFile = ToCityFile # 儲存省份地圖的檔案路徑(.html) self.MapProvinceFile = ToMapProvinceFile # 其他可用引數 self.MapCityFile = ToMapCityFile # 自動呼叫run方法,使得在例項化物件後自動執行其他函式 self.run() '''====================== 2. 統計微信好友資訊 ======================''' def getFriendsInfo(self): ''' 獲取微信好友的全部資訊 ''' # 儲存微信好友的資訊(經過資訊處理的) self.friendsInfo = [] # 定義列標題 self.infoTitle = ['NickName','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:"男",None) # 獲取省份 Province = aFriend.raw.get(self.infoTitle[3],None) # 獲取城市 City = aFriend.raw.get(self.infoTitle[4],None) lisTmp = [NickName,City] self.friendsInfo.append(lisTmp) '''====================== 3. 儲存微信好友資訊 ======================''' def saveFriendsInfoAsExcel(self,ExcelName): ''' 儲存微信好友的資訊到 Excel 表格中 ''' # 生成openpyxl物件 workbook = openpyxl.Workbook() # 啟用表格 sheet = workbook.active # 設定表格標題 sheet.title = 'WeChatFriendsInfo' # 填充列標題到第一行 for _ in range(len(self.infoTitle)): sheet.cell(row=1,value=self.infoTitle[_]) # 填充微信好友資訊,從第二行開始 for i in range(self.allFriends_Num): for j in range(len(self.infoTitle)): sheet.cell(row=i+2,value=str(self.friendsInfo[i][j])) # 若檔名非空,則儲存到該路徑下 if ExcelName != "": workbook.save(ExcelName) print(">>> Save WeChat friends' information successfully!") '''====================== 4. 分析微信好友資訊 ======================''' def quiteAnalyzeFriendsInfo(self): ''' 分析資料,一步到位,直接了當 ''' print(self.allFriends_Info.stats_text()) '''====================== 5. 產生city詞雲圖 ======================''' def creatWordCloudOfCity(self,CityName): ''' 使用獲取的資料生成city詞雲圖 ''' # 獲取所有的城市 cityStr = "" for i in range(self.allFriends_Num): if self.friendsInfo[i][4] not in cityStr: cityStr += " " + self.friendsInfo[i][4] #jieba庫精確模式分詞 wordlist = jieba.lcut(cityStr) cityStr = ' '.join(wordlist) # 載入背景圖片 #cloud_mask = np.array(Image.open(BackGroundFile)) #設定詞雲圖屬性 font = r'C:\Windows\Fonts\simfang.ttf' # 設定字型路徑 wc = WordCloud( background_color = 'black',# 背景顏色 #mask = cloud_mask,# 背景圖片 max_words = 100,# 設定最大顯示的詞雲數 font_path = font,# 設定字型形式(在本機系統中) 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. 產生province地圖 =====================''' def creatMapProvince(self,MapFile): ''' 使用獲取的資料生成province地圖 ''' # 獲取所有省份 provinceList,[] 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("各省微信好友分佈",visual_text_color='#000') # 若檔名非空,則儲存到該路徑下 if MapFile != "": #map.show_config() map.render(MapFile) print(">>> Creat WeChat Map of Provinces seccessfully!") '''===================== 7. 產生city地圖 =====================''' def creatMapCity(self,visual_text_color='#000') # 若檔名非空,則儲存到該路徑下 if MapFile != "": map.render(MapFile) print(">>> Creat WeChat Map of Cities seccessfully!") '''===================== 8. 自動執行函式 =====================''' def run(self): # 獲取微信好友資訊 self.getFriendsInfo() print(">>> Get WeChat friends' information successfully!") print(">>> Members:",self.allFriends_Num) # 儲存微信好友資訊 self.saveFriendsInfoAsExcel(self.ExcelFile) # 分析微信好友資訊 self.quiteAnalyzeFriendsInfo() # 使用微信好友的 city 產生詞雲圖 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物件例項化 robot = WeChatRobot(ToExcelFile,ToMapFileCity)
以上就是用 python 進行微信好友資訊分析的詳細內容,更多關於python 微信資訊分析的資料請關注我們其它相關文章!