基於python實現微信好友資料分析(簡單)
一、功能介紹
本文主要介紹利用網頁端微信獲取資料,實現個人微信好友資料的獲取,並進行一些簡單的資料分析,功能包括:
1.爬取好友列表,顯示好友暱稱、性別和地域和簽名,檔案儲存為 xlsx 格式
2.統計好友的地域分佈,並且做成詞雲和視覺化展示在地圖上
二、依賴庫
1、Pyecharts:一個用於生成echarts圖表的類庫,echarts是百度開源的一個數據視覺化庫,用echarts生成的圖視覺化效果非常棒,使用pyechart庫可以在python中生成echarts資料圖。
2、Itchat:一個開源的微信個人號介面,使用python呼叫微信從未如此簡單。
3、Jieba:簡單的分詞操作庫。
4、Numpy:NumPy 系統是 Python 的一種開源的數值計算擴充套件。這種工具可用來儲存和處理大型矩 陣。
5、Pandas:pandas 是基於 NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。
6、Pillow:影象處理。
7、wxpy:wxpy 在 itchat 的基礎上,通過大量介面優化提升了模組的易用性,並進行豐富的功能 擴充套件。 (微信本身提供)
注:Pyecharts可能安裝0.5.*的版本比較好
以上的三方庫可以通過命令符(cmd)來實現安裝,具體命令:pip install ***
三,操作
from wxpy import * #匯入模組 bot = Bot(cache_path=True) #初始化機器人,選擇掃碼登入 friend_all = bot.friends() #獲取微信好友資訊
首先出現的是一張二維碼,然後掃描登入
成功登入好了就是這種顯示
之後就可以進行操作了,好友數量,個人資訊
print(len(friend_all)) #好友的數量 print(friend_all[0].raw) #輸出個人資訊
顯示的結果
四、接下來把全部的好友資訊轉化為一個xlsx檔案
獲取全部好友資訊
for a_friend in friend_all: NickName = a_friend.raw.get('NickName',None) #暱稱 #Sex = a_friend.raw.get('Sex',None) Sex = {1: "男",2: "女",0: "其它"}.get(a_friend.raw.get('Sex',None),None) #性別(優化) City = a_friend.raw.get('City',None) #城市 Province = a_friend.raw.get('Province',None) #省份 Signature = a_friend.raw.get('Signature',None) #個性簽名 HeadImgUrl = a_friend.raw.get('HeadImgUrl',None) #頭像地址 HeadImgFlag = a_friend.raw.get('HeadImgFlag',None) #小Flag list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag] #存為一維陣列 lis.append(list_0) #疊加資料
存為xlsx檔案
def list_excel(filename,lis): ''' 將列表寫入excel中,其中列表中的元素是列表. filename:儲存的檔名(含路徑) lis:元素為列表的列表,如下: lis = [["名稱","價格","出版社","語言"],["暗時間","32.4","人民郵電出版社","中文"],["拆掉思維裡的牆","26.7","機械工業出版社","中文"]] ''' import openpyxl wb = openpyxl.Workbook() #啟用worksheet sheet = wb.active sheet.title = 'sheet1' #建立一個表格 file_name = filename +'.xlsx' for i in range(0,len(lis)): for j in range(0,len(lis[i])): sheet.cell(row=i+1,column=j+1,value=str(lis[i][j])) #每行每列的存入資料 wb.save(file_name) print("寫入資料成功!") list_excel('wechat',lis)
效果如下:
可以看到其好友基本分佈再廣東省,個性簽名也是非常的殺馬特
五、實現詞雲圖(我們也可以從儲存在本地的 excel 中讀取資料進行分析,並檢視資料形式。在執行以 下程式碼之前,我們需要先把 excel 檔案加一個列標題行)
例如nickname sex city province signature headImgUrl headImgFlag
#匯入模組 from wordcloud import WordCloud import matplotlib.pyplot as plt import pandas as pd from pandas import DataFrame word_list= df['city'].fillna('0').tolist() #將 dataframe 的列轉化為 list,其中的 nan 用“0”替換 new_text = ' '.join(word_list) wordcloud = WordCloud(font_path='simhei.ttf',background_color="black").generate(new_text) #設計圖背景顏色,字型 plt.imshow(wordcloud) plt.axis("off") plt.show()
還可以將詞雲圖存為HTML形式
#利用 pyechart 做詞雲 import pandas as pd #count = df.city.value_counts() #對 dataframe 進行全頻率統計,排除了 nan city_list = df['city'].fillna('NAN').tolist()#將 dataframe 的列轉化為 list,其中的 nan 用“NAN” 替換 count_city = pd.value_counts(city_list)#對 list 進行全頻率統計 from pyecharts.charts.wordcloud import WordCloud #設定物件 name = count_city.index.tolist() value = count_city.tolist() wordcloud = WordCloud(width=1300,height=620) wordcloud.add("",name,value,word_size_range=[20,100]) wordcloud.show_config() wordcloud.render(r'D:\python\wechatcloud.html')
再看看效果:
六、轉化為地圖形式
注:安裝地圖資料包:pip install echarts-china-provinces-pypkg pip install echarts-countries-pypkg
province_list = df['province'].fillna('NAN').tolist() #將 dataframe 的列轉化為 list,其中的 nan 用 “NAN”替換 count_province = pd.value_counts(province_list) #對 list 進行全頻率統計 from pyecharts import Map value =count_province.tolist() attr =count_province.index.tolist() map=Map("各省微信好友分佈",width=1300,height=700) map.add("",attr,maptype='china',is_visualmap=True,visual_text_color='#000',is_label_show = True) #顯示地圖上的省份 map.show_config() map.render(r'D:\python\wechatProMap.html')
效果:
總結
以上所述是小編給大家介紹的基於python實現微信好友資料分析,希望對大家有所幫助!