溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

發(fā)布時(shí)間:2021-04-25 10:27:58 來(lái)源:億速云 閱讀:187 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

python主要應(yīng)用領(lǐng)域有哪些

1、云計(jì)算,典型應(yīng)用OpenStack。2、WEB前端開(kāi)發(fā),眾多大型網(wǎng)站均為Python開(kāi)發(fā)。3.人工智能應(yīng)用,基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來(lái)的人工智能本質(zhì)上已經(jīng)無(wú)法離開(kāi)python。4、系統(tǒng)運(yùn)維工程項(xiàng)目,自動(dòng)化運(yùn)維的標(biāo)配就是python+Django/flask。5、金融理財(cái)分析,量化交易,金融分析。6、大數(shù)據(jù)分析。

1、準(zhǔn)備工作

1.1 庫(kù)介紹

只有登錄微信才能獲取到微信好友的信息,本文采用wxpy該第三方庫(kù)進(jìn)行微信的登錄以及信息的獲取。

wxpy 在 itchat 的基礎(chǔ)上,通過(guò)大量接口優(yōu)化提升了模塊的易用性,并進(jìn)行豐富的功能擴(kuò)展。

wxpy一些常見(jiàn)的場(chǎng)景:

?控制路由器、智能家居等具有開(kāi)放接口的玩意兒
?運(yùn)行腳本時(shí)自動(dòng)把日志發(fā)送到你的微信
?加群主為好友,自動(dòng)拉進(jìn)群中
?跨號(hào)或跨群轉(zhuǎn)發(fā)消息
?自動(dòng)陪人聊天
?逗人玩

總而言之,可用來(lái)實(shí)現(xiàn)各種微信個(gè)人號(hào)的自動(dòng)化操作。

1.2 wxpy庫(kù)安裝

wxpy 支持 Python 3.4-3.6,以及 2.7 版本

將下方命令中的 “pip” 替換為 “pip3” 或 “pip2”,可確保安裝到對(duì)應(yīng)的 Python 版本中

1.從 PYPI 官方源下載安裝 (在國(guó)內(nèi)可能比較慢或不穩(wěn)定):

pip install -U wxpy1

1.從豆瓣 PYPI 鏡像源下載安裝 (推薦國(guó)內(nèi)用戶(hù)選用):

pip install -U wxpy -i "https://pypi.doubanio.com/simple/"1

1.3 登錄微信

wxpy中有一個(gè)機(jī)器人對(duì)象,機(jī)器人 Bot 對(duì)象可被理解為一個(gè) Web 微信客戶(hù)端。Bot 在初始化時(shí)便會(huì)執(zhí)行登陸操作,需要手機(jī)掃描登陸。

通過(guò)機(jī)器人對(duì)象 Bot 的 chats(), friends(),groups(), mps() 方法, 可分別獲取到當(dāng)前機(jī)器人的 所有聊天對(duì)象、好友、群聊,以及公眾號(hào)列表。

本文主要通過(guò)friends()獲取到所有好友信息,然后進(jìn)行數(shù)據(jù)的處理。

from wxpy import *
# 初始化機(jī)器人,掃碼登陸
bot = Bot()
# 獲取所有好友
my_friends = bot.friends()
print(type(my_friends))

以下為輸出消息:

Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Loading the contact, this may take a little while.
<Login successfully as 王強(qiáng)?>
<class 'wxpy.api.chats.chats.Chats'>

wxpy.api.chats.chats.Chats對(duì)象是多個(gè)聊天對(duì)象的合集,可用于搜索或統(tǒng)計(jì),可以搜索和統(tǒng)計(jì)的信息包括sex(性別)、province(省份)、city(城市)和signature(個(gè)性簽名)等。

2、微信好友男女比例

2.1 數(shù)據(jù)統(tǒng)計(jì)

使用一個(gè)字典sex_dict來(lái)統(tǒng)計(jì)好友中男性和女性的數(shù)量。

# 使用一個(gè)字典統(tǒng)計(jì)好友男性和女性的數(shù)量
sex_dict = {'male': 0, 'female': 0}
for friend in my_friends:
 # 統(tǒng)計(jì)性別
 if friend.sex == 1:
 sex_dict['male'] += 1
 elif friend.sex == 2:
 sex_dict['female'] += 1
print(sex_dict)

以下為輸出結(jié)果:

{'male': 255, 'female': 104}

2.2 數(shù)據(jù)呈現(xiàn)

本文采用 ECharts餅圖 進(jìn)行數(shù)據(jù)的呈現(xiàn),打開(kāi)鏈接http://echarts.baidu.com/echarts2/doc/example/pie1.html,可以看到如下內(nèi)容:

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

1、echarts餅圖原始內(nèi)容

從圖中可以看到左側(cè)為數(shù)據(jù),右側(cè)為呈現(xiàn)的數(shù)據(jù)圖,其他的形式的圖也是這種左右結(jié)構(gòu)??匆幌伦筮叺臄?shù)據(jù):

option = {
 title : {
 text: '某站點(diǎn)用戶(hù)訪(fǎng)問(wèn)來(lái)源',
 subtext: '純屬虛構(gòu)',
 x:'center'
 },
 tooltip : {
 trigger: 'item',
 formatter: "{a} <br/> : {c} (orc0eah%)"
 },
 legend: {
 orient : 'vertical',
 x : 'left',
 data:['直接訪(fǎng)問(wèn)','郵件營(yíng)銷(xiāo)','聯(lián)盟廣告','視頻廣告','搜索引擎']
 },
 toolbox: {
 show : true,
 feature : {
 mark : {show: true},
 dataView : {show: true, readOnly: false},
 magicType : {
 show: true, 
 type: ['pie', 'funnel'],
 option: {
  funnel: {
  x: '25%',
  width: '50%',
  funnelAlign: 'left',
  max: 1548
  }
 }
 },
 restore : {show: true},
 saveAsImage : {show: true}
 }
 },
 calculable : true,
 series : [
 {
 name:'訪(fǎng)問(wèn)來(lái)源',
 type:'pie',
 radius : '55%',
 center: ['50%', '60%'],
 data:[
 {value:335, name:'直接訪(fǎng)問(wèn)'},
 {value:310, name:'郵件營(yíng)銷(xiāo)'},
 {value:234, name:'聯(lián)盟廣告'},
 {value:135, name:'視頻廣告'},
 {value:1548, name:'搜索引擎'}
 ]
 }
 ]
};

可以看到option =后面的大括號(hào)里是JSON格式的數(shù)據(jù),接下來(lái)分析一下各項(xiàng)數(shù)據(jù):

?title:標(biāo)題
?text:標(biāo)題內(nèi)容
?subtext:子標(biāo)題
?x:標(biāo)題位置
?tooltip:提示,將鼠標(biāo)放到餅狀圖上就可以看到提示
?legend:圖例
?orient:方向
?x:圖例位置
?data:圖例內(nèi)容
?toolbox:工具箱,在餅狀圖右上方橫向排列的圖標(biāo)
?mark:輔助線(xiàn)開(kāi)關(guān)
?dataView:數(shù)據(jù)視圖,點(diǎn)擊可以查看餅狀圖數(shù)據(jù)
?magicType:餅圖(pie)切換和漏斗圖(funnel)切換
?restore:還原
?saveAsImage:保存為圖片
?calculable:暫時(shí)不知道它有什么用
?series:主要數(shù)據(jù)
?data:呈現(xiàn)的數(shù)據(jù)

其它類(lèi)型的圖數(shù)據(jù)格式類(lèi)似,后面不再詳細(xì)分析。只需要修改data、l**egend->data**、series->data即可,修改后的數(shù)據(jù)為:

option = {
 title : {
 text: '微信好友性別比例',
 subtext: '真實(shí)數(shù)據(jù)',
 x:'center'
 },
 tooltip : {
 trigger: 'item',
 formatter: "{a} <br/> : {c} (ntfww16%)"
 },
 legend: {
 orient : 'vertical',
 x : 'left',
 data:['男性','女性']
 },
 toolbox: {
 show : true,
 feature : {
 mark : {show: true},
 dataView : {show: true, readOnly: false},
 magicType : {
 show: true, 
 type: ['pie', 'funnel'],
 option: {
  funnel: {
  x: '25%',
  width: '50%',
  funnelAlign: 'left',
  max: 1548
  }
 }
 },
 restore : {show: true},
 saveAsImage : {show: true}
 }
 },
 calculable : true,
 series : [
 {
 name:'訪(fǎng)問(wèn)來(lái)源',
 type:'pie',
 radius : '55%',
 center: ['50%', '60%'],
 data:[
 {value:255, name:'男性'},
 {value:104, name:'女性'}
 ]
 }
 ]
};

數(shù)據(jù)修改完成后,點(diǎn)擊頁(yè)面中綠色的刷新按鈕,可以得到餅圖如下(可以根據(jù)自己的喜好修改主題):

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

2、好友性別比例

將鼠標(biāo)放到餅圖上可以看到詳細(xì)數(shù)據(jù):

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

3、好友性別比例查看數(shù)據(jù)

3、微信好友全國(guó)分布圖

3.1 數(shù)據(jù)統(tǒng)計(jì)

# 使用一個(gè)字典統(tǒng)計(jì)各省好友數(shù)量
province_dict = {'北京': 0, '上海': 0, '天津': 0, '重慶': 0,
 '河北': 0, '山西': 0, '吉林': 0, '遼寧': 0, '黑龍江': 0,
 '陜西': 0, '甘肅': 0, '青海': 0, '山東': 0, '福建': 0,
 '浙江': 0, '臺(tái)灣': 0, '河南': 0, '湖北': 0, '湖南': 0,
 '江西': 0, '江蘇': 0, '安徽': 0, '廣東': 0, '海南': 0,
 '四川': 0, '貴州': 0, '云南': 0,
 '內(nèi)蒙古': 0, '新疆': 0, '寧夏': 0, '廣西': 0, '西藏': 0,
 '香港': 0, '澳門(mén)': 0}
# 統(tǒng)計(jì)省份
for friend in my_friends:
 if friend.province in province_dict.keys():
 province_dict[friend.province] += 1
# 為了方便數(shù)據(jù)的呈現(xiàn),生成JSON Array格式數(shù)據(jù)
data = []
for key, value in province_dict.items():
 data.append({'name': key, 'value': value})
print(data)

以下為輸出結(jié)果:

[{'name': '北京', 'value': 91}, {'name': '上海', 'value': 12}, {'name': '天津', 'value': 15}, {'name': '重慶', 'value': 1}, {'name': '河北', 'value': 53}, {'name': '山西', 'value': 2}, {'name': '吉林', 'value': 1}, {'name': '遼寧', 'value': 1}, {'name': '黑龍江', 'value': 2}, {'name': '陜西', 'value': 3}, {'name': '甘肅', 'value': 0}, {'name': '青海', 'value': 0}, {'name': '山東', 'value': 7}, {'name': '福建', 'value': 3}, {'name': '浙江', 'value': 4}, {'name': '臺(tái)灣', 'value': 0}, {'name': '河南', 'value': 1}, {'name': '湖北', 'value': 4}, {'name': '湖南', 'value': 4}, {'name': '江西', 'value': 4}, {'name': '江蘇', 'value': 9}, {'name': '安徽', 'value': 2}, {'name': '廣東', 'value': 63}, {'name': '海南', 'value': 0}, {'name': '四川', 'value': 2}, {'name': '貴州', 'value': 0}, {'name': '云南', 'value': 1}, {'name': '內(nèi)蒙古', 'value': 0}, {'name': '新疆', 'value': 2}, {'name': '寧夏', 'value': 0}, {'name': '廣西', 'value': 1}, {'name': '西藏', 'value': 0}, {'name': '香港', 'value': 0}, {'name': '澳門(mén)', 'value': 0}]


可以看出,好友最多的省份為北京。那么問(wèn)題來(lái)了:為什么要把數(shù)據(jù)重組成這種格式?因?yàn)镋Charts的地圖需要這種格式的數(shù)據(jù)。

3.2 數(shù)據(jù)呈現(xiàn)

采用ECharts地圖 來(lái)進(jìn)行好友分布的數(shù)據(jù)呈現(xiàn)。打開(kāi)該網(wǎng)址,將左側(cè)數(shù)據(jù)修改為:

option = {
 title : {
 text: '微信好友全國(guó)分布圖',
 subtext: '真實(shí)數(shù)據(jù)',
 x:'center'
 },
 tooltip : {
 trigger: 'item'
 },
 legend: {
 orient: 'vertical',
 x:'left',
 data:['好友數(shù)量']
 },
 dataRange: {
 min: 0,
 max: 100,
 x: 'left',
 y: 'bottom',
 text:['高','低'], // 文本,默認(rèn)為數(shù)值文本
 calculable : true
 },
 toolbox: {
 show: true,
 orient : 'vertical',
 x: 'right',
 y: 'center',
 feature : {
 mark : {show: true},
 dataView : {show: true, readOnly: false},
 restore : {show: true},
 saveAsImage : {show: true}
 }
 },
 roamController: {
 show: true,
 x: 'right',
 mapTypeControl: {
 'china': true
 }
 },
 series : [
 {
 name: '好友數(shù)量',
 type: 'map',
 mapType: 'china',
 roam: false,
 itemStyle:{
 normal:{label:{show:true}},
 emphasis:{label:{show:true}}
 },
 data:[
 {'name': '北京', 'value': 91},
 {'name': '上海', 'value': 12},
 {'name': '天津', 'value': 15}, 
 {'name': '重慶', 'value': 1}, 
 {'name': '河北', 'value': 53},
 {'name': '山西', 'value': 2}, 
 {'name': '吉林', 'value': 1},
 {'name': '遼寧', 'value': 1}, 
 {'name': '黑龍江', 'value': 2},
 {'name': '陜西', 'value': 3},
 {'name': '甘肅', 'value': 0},
 {'name': '青海', 'value': 0}, 
 {'name': '山東', 'value': 7},
 {'name': '福建', 'value': 3}, 
 {'name': '浙江', 'value': 4},
 {'name': '臺(tái)灣', 'value': 0},
 {'name': '河南', 'value': 1},
 {'name': '湖北', 'value': 4}, 
 {'name': '湖南', 'value': 4},
 {'name': '江西', 'value': 4},
 {'name': '江蘇', 'value': 9},
 {'name': '安徽', 'value': 2},
 {'name': '廣東', 'value': 63}, 
 {'name': '海南', 'value': 0},
 {'name': '四川', 'value': 2},
 {'name': '貴州', 'value': 0}, 
 {'name': '云南', 'value': 1},
 {'name': '內(nèi)蒙古', 'value': 0},
 {'name': '新疆', 'value': 2}, 
 {'name': '寧夏', 'value': 0},
 {'name': '廣西', 'value': 1},
 {'name': '西藏', 'value': 0},
 {'name': '香港', 'value': 0},
 {'name': '澳門(mén)', 'value': 0}
 ]
 }
 ]
};

注意兩點(diǎn):

?dataRange->max 根據(jù)統(tǒng)計(jì)數(shù)據(jù)適當(dāng)調(diào)整
?series->data 的數(shù)據(jù)格式

點(diǎn)擊刷新按鈕后,可以生成如下地圖:

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

4、好友全國(guó)分布圖

從圖中可以看出我的好友主要分布在北京、河北和廣東。

有趣的是,地圖左邊有一個(gè)滑塊,代表地圖數(shù)據(jù)的范圍,我們將上邊的滑塊拉到最下面可以看到?jīng)]有微信好友分布的省份:

5、沒(méi)有微信好友的省份

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

按照這個(gè)思路,我們可以在地圖上看到確切數(shù)量好友分布的省份,讀者可以動(dòng)手試試。

4、好友簽名統(tǒng)計(jì)

4.1 數(shù)據(jù)統(tǒng)計(jì)

def write_txt_file(path, txt):
 '''
 寫(xiě)入txt文本
 '''
 with open(path, 'a', encoding='gb18030', newline='') as f:
 f.write(txt) 
# 統(tǒng)計(jì)簽名
for friend in my_friends:
 # 對(duì)數(shù)據(jù)進(jìn)行清洗,將標(biāo)點(diǎn)符號(hào)等對(duì)詞頻統(tǒng)計(jì)造成影響的因素剔除
 pattern = re.compile(r'[一-龥](méi)+')
 filterdata = re.findall(pattern, friend.signature)
 write_txt_file('signatures.txt', ''.join(filterdata))

上面代碼實(shí)現(xiàn)了對(duì)好友簽名進(jìn)行清洗以及保存的功能,執(zhí)行完成之后會(huì)在當(dāng)前目錄生成signatures.txt文件。

4.2 數(shù)據(jù)呈現(xiàn)

數(shù)據(jù)呈現(xiàn)采用詞頻統(tǒng)計(jì)和詞云展示,通過(guò)詞頻可以了解到微信好友的生活態(tài)度。

詞頻統(tǒng)計(jì)用到了 jieba、numpy、pandas、scipy、wordcloud庫(kù)。如果電腦上沒(méi)有這幾個(gè)庫(kù),執(zhí)行安裝指令:

?pip install jieba
?pip install pandas
?pip install numpy
?pip install scipy
?pip install wordcloud

4.2.1 讀取txt文件

前面已經(jīng)將好友簽名保存到txt文件里了,現(xiàn)在我們將其讀出:

def read_txt_file(path):
 '''
 讀取txt文本
 '''
 with open(path, 'r', encoding='gb18030', newline='') as f:
 return f.read()

4.2.2 stop word

下面引入一個(gè)概念:stop word, 在網(wǎng)站里面存在大量的常用詞比如:“在”、“里面”、“也”、“的”、“它”、“為”這些詞都是停止詞。這些詞因?yàn)槭褂妙l率過(guò)高,幾乎每個(gè)網(wǎng)頁(yè)上都存在,所以搜索引擎開(kāi)發(fā)人員都將這一類(lèi)詞語(yǔ)全部忽略掉。如果我們的網(wǎng)站上存在大量這樣的詞語(yǔ),那么相當(dāng)于浪費(fèi)了很多資源。

在百度搜索stpowords.txt進(jìn)行下載,放到py文件同級(jí)目錄。

content = read_txt_file(txt_filename)
segment = jieba.lcut(content)
words_df=pd.DataFrame({'segment':segment})
stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8')
words_df=words_df[~words_df.segment.isin(stopwords.stopword)]

4.2.3 詞頻統(tǒng)計(jì)

重頭戲來(lái)了,詞頻統(tǒng)計(jì)使用numpy:

import numpy
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"計(jì)數(shù)":numpy.size})
 words_stat = words_stat.reset_index().sort_values(by=["計(jì)數(shù)"],ascending=False)

4.2.4 詞頻可視化:詞云

詞頻統(tǒng)計(jì)雖然出來(lái)了,可以看出排名,但是不完美,接下來(lái)我們將它可視化。使用到wordcloud庫(kù),詳細(xì)介紹見(jiàn) github 。

from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
# 設(shè)置詞云屬性
color_mask = imread('background.jfif')
wordcloud = WordCloud(font_path="simhei.ttf", # 設(shè)置字體可以顯示中文
 background_color="white", # 背景顏色
 max_words=100,  # 詞云顯示的最大詞數(shù)
 mask=color_mask, # 設(shè)置背景圖片
 max_font_size=100, # 字體最大值
 random_state=42,
 width=1000, height=860, margin=2,# 設(shè)置圖片默認(rèn)的大小,但是如果使用背景圖片的話(huà),    # 那么保存的圖片大小將會(huì)按照其大小保存,margin為詞語(yǔ)邊緣距離
 )
# 生成詞云, 可以用generate輸入全部文本,也可以我們計(jì)算好詞頻后使用generate_from_frequencies函數(shù)
word_frequence = {x[0]:x[1]for x in words_stat.head(100).values}
print(word_frequence)
word_frequence_dict = {}
for key in word_frequence:
 word_frequence_dict[key] = word_frequence[key]

wordcloud.generate_from_frequencies(word_frequence_dict)
# 從背景圖片生成顏色值 
image_colors = ImageColorGenerator(color_mask) 
# 重新上色
wordcloud.recolor(color_func=image_colors)
# 保存圖片
wordcloud.to_file('output.png')
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

運(yùn)行效果圖如下(左圖為背景圖,右圖為生成詞云圖片):

如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析

6、背景圖和詞云圖對(duì)比

從詞云圖可以分析好友特點(diǎn):

?做——————–行動(dòng)派
?人生、生活——–熱愛(ài)生活
?快樂(lè)—————–樂(lè)觀
?選擇—————–決斷
?專(zhuān)業(yè)—————–專(zhuān)業(yè)
?愛(ài)——————–愛(ài)

5、總結(jié)

至此,微信好友的分析工作已經(jīng)完成,wxpy的功能還有很多,比如聊天、查看公眾號(hào)信息等,有意的讀者請(qǐng)自行查閱官方文檔。

6、完整代碼

上面的代碼比較松散,下面展示的完整代碼我將各功能模塊封裝成函數(shù):

#-*- coding: utf-8 -*-
import re
from wxpy import *
import jieba
import numpy
import pandas as pd
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
def write_txt_file(path, txt):
 '''
 寫(xiě)入txt文本
 '''
 with open(path, 'a', encoding='gb18030', newline='') as f:
 f.write(txt)
def read_txt_file(path):
 '''
 讀取txt文本
 '''
 with open(path, 'r', encoding='gb18030', newline='') as f:
 return f.read()
def login():
 # 初始化機(jī)器人,掃碼登陸
 bot = Bot()
 # 獲取所有好友
 my_friends = bot.friends()
 print(type(my_friends))
 return my_friends
def show_sex_ratio(friends):
 # 使用一個(gè)字典統(tǒng)計(jì)好友男性和女性的數(shù)量
 sex_dict = {'male': 0, 'female': 0}
 for friend in friends:
 # 統(tǒng)計(jì)性別
 if friend.sex == 1:
 sex_dict['male'] += 1
 elif friend.sex == 2:
 sex_dict['female'] += 1
 print(sex_dict)
def show_area_distribution(friends):
 # 使用一個(gè)字典統(tǒng)計(jì)各省好友數(shù)量
 province_dict = {'北京': 0, '上海': 0, '天津': 0, '重慶': 0,
 '河北': 0, '山西': 0, '吉林': 0, '遼寧': 0, '黑龍江': 0,
 '陜西': 0, '甘肅': 0, '青海': 0, '山東': 0, '福建': 0,
 '浙江': 0, '臺(tái)灣': 0, '河南': 0, '湖北': 0, '湖南': 0,
 '江西': 0, '江蘇': 0, '安徽': 0, '廣東': 0, '海南': 0,
 '四川': 0, '貴州': 0, '云南': 0,
 '內(nèi)蒙古': 0, '新疆': 0, '寧夏': 0, '廣西': 0, '西藏': 0,
 '香港': 0, '澳門(mén)': 0}
 # 統(tǒng)計(jì)省份
 for friend in friends:
 if friend.province in province_dict.keys():
 province_dict[friend.province] += 1
 # 為了方便數(shù)據(jù)的呈現(xiàn),生成JSON Array格式數(shù)據(jù)
 data = []
 for key, value in province_dict.items():
 data.append({'name': key, 'value': value})
 print(data)
def show_signature(friends):
 # 統(tǒng)計(jì)簽名
 for friend in friends:
 # 對(duì)數(shù)據(jù)進(jìn)行清洗,將標(biāo)點(diǎn)符號(hào)等對(duì)詞頻統(tǒng)計(jì)造成影響的因素剔除
 pattern = re.compile(r'[一-龥](méi)+')
 filterdata = re.findall(pattern, friend.signature)
 write_txt_file('signatures.txt', ''.join(filterdata))
 # 讀取文件
 content = read_txt_file('signatures.txt')
 segment = jieba.lcut(content)
 words_df = pd.DataFrame({'segment':segment})
 # 讀取stopwords
 stopwords = pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8')
 words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
 print(words_df)
 words_stat = words_df.groupby(by=['segment'])['segment'].agg({"計(jì)數(shù)":numpy.size})
 words_stat = words_stat.reset_index().sort_values(by=["計(jì)數(shù)"],ascending=False)
 # 設(shè)置詞云屬性
 color_mask = imread('background.jfif')
 wordcloud = WordCloud(font_path="simhei.ttf", # 設(shè)置字體可以顯示中文
  background_color="white", # 背景顏色
  max_words=100,  # 詞云顯示的最大詞數(shù)
  mask=color_mask, # 設(shè)置背景圖片
  max_font_size=100, # 字體最大值
  random_state=42,
  width=1000, height=860, margin=2,# 設(shè)置圖片默認(rèn)的大小,但是如果使用背景圖片的話(huà),    # 那么保存的圖片大小將會(huì)按照其大小保存,margin為詞語(yǔ)邊緣距離
  )
 # 生成詞云, 可以用generate輸入全部文本,也可以我們計(jì)算好詞頻后使用generate_from_frequencies函數(shù)
 word_frequence = {x[0]:x[1]for x in words_stat.head(100).values}
 print(word_frequence)
 word_frequence_dict = {}
 for key in word_frequence:
 word_frequence_dict[key] = word_frequence[key]
 wordcloud.generate_from_frequencies(word_frequence_dict)
 # 從背景圖片生成顏色值 
 image_colors = ImageColorGenerator(color_mask) 
 # 重新上色
 wordcloud.recolor(color_func=image_colors)
 # 保存圖片
 wordcloud.to_file('output.png')
 plt.imshow(wordcloud)
 plt.axis("off")
 plt.show()
def main():
 friends = login()
 show_sex_ratio(friends)
 show_area_distribution(friends)
 show_signature(friends)
if __name__ == '__main__':
 main()

關(guān)于“如何使用Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI