日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
用Python更加了解微信好友

用了微信幾年了,微信號有也不少了,但是真正了解自己的好友嗎?好友最多的城市是哪個?好友男女比例是多少?好友簽名都是什么?今天我們來充分了解自己的微信好友。

創(chuàng)新互聯(lián)服務項目包括米脂網站建設、米脂網站制作、米脂網頁制作以及米脂網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,米脂網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到米脂省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

運行平臺:Windows

Python版本:Python3.6

IDE:Sublime Text

1、準備工作

1.1 庫介紹

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

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

wxpy一些常見的場景:

  • 控制路由器、智能家居等具有開放接口的玩意兒
  • 運行腳本時自動把日志發(fā)送到你的微信
  • 加群主為好友,自動拉進群中
  • 跨號或跨群轉發(fā)消息
  • 自動陪人聊天
  • 逗人玩

總而言之,可用來實現(xiàn)各種微信個人號的自動化操作。

1.2 wxpy庫安裝

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

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

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

 
 
 
 
  1. pip install -U wxpy

從豆瓣 PYPI 鏡像源下載安裝 (推薦國內用戶選用):

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

1.3 登錄微信

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

通過機器人對象 Bot 的 chats(), friends(),groups(), mps() 方法, 可分別獲取到當前機器人的 所有聊天對象、好友、群聊,以及公眾號列表。

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

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

以下為輸出消息:

 
 
 
 
  1. Getting uuid of QR code.
  2. Downloading QR code.
  3. Please scan the QR code to log in.
  4. Please press confirm on your phone.
  5. Loading the contact, this may take a little while.

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

2、微信好友男女比例

2.1 數據統(tǒng)計

使用一個字典sex_dict來統(tǒng)計好友中男性和女性的數量。

 
 
 
 
  1. # 使用一個字典統(tǒng)計好友男性和女性的數量
  2. sex_dict = {'male': 0, 'female': 0}
  3. for friend in my_friends:
  4.     # 統(tǒng)計性別
  5.     if friend.sex == 1:
  6.         sex_dict['male'] += 1
  7.     elif friend.sex == 2:
  8.         sex_dict['female'] += 1
  9. print(sex_dict)

以下為輸出結果:

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

2.2 數據呈現(xiàn)

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

1、echarts餅圖原始內容

從圖中可以看到左側為數據,右側為呈現(xiàn)的數據圖,其他的形式的圖也是這種左右結構。看一下左邊的數據:

 
 
 
 
  1. option = {
  2.     title : {
  3.         text: '某站點用戶訪問來源',
  4.         subtext: '純屬虛構',
  5.         x:'center'
  6.     },
  7.     tooltip : {
  8.         trigger: 'item',
  9.         formatter: "{a} 
     : {c} (wc2gut2%)"
  10.     },
  11.     legend: {
  12.         orient : 'vertical',
  13.         x : 'left',
  14.         data:['直接訪問','郵件營銷','聯(lián)盟廣告','視頻廣告','搜索引擎']
  15.     },
  16.     toolbox: {
  17.         show : true,
  18.         feature : {
  19.             mark : {show: true},
  20.             dataView : {show: true, readOnly: false},
  21.             magicType : {
  22.                 show: true, 
  23.                 type: ['pie', 'funnel'],
  24.                 option: {
  25.                     funnel: {
  26.                         x: '25%',
  27.                         width: '50%',
  28.                         funnelAlign: 'left',
  29.                         max: 1548
  30.                     }
  31.                 }
  32.             },
  33.             restore : {show: true},
  34.             saveAsImage : {show: true}
  35.         }
  36.     },
  37.     calculable : true,
  38.     series : [
  39.         {
  40.             name:'訪問來源',
  41.             type:'pie',
  42.             radius : '55%',
  43.             center: ['50%', '60%'],
  44.             data:[
  45.                 {value:335, name:'直接訪問'},
  46.                 {value:310, name:'郵件營銷'},
  47.                 {value:234, name:'聯(lián)盟廣告'},
  48.                 {value:135, name:'視頻廣告'},
  49.                 {value:1548, name:'搜索引擎'}
  50.             ]
  51.         }
  52.     ]
  53. };  

可以看到option =后面的大括號里是JSON格式的數據,接下來分析一下各項數據:

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

其它類型的圖數據格式類似,后面不再詳細分析。只需要修改data、legend->data、series->data即可,修改后的數據為:

 
 
 
 
  1. option = {
  2.     title : {
  3.         text: '微信好友性別比例',
  4.         subtext: '真實數據',
  5.         x:'center'
  6.     },
  7.     tooltip : {
  8.         trigger: 'item',
  9.         formatter: "{a} 
     : {c} (s2m7jpb%)"
  10.     },
  11.     legend: {
  12.         orient : 'vertical',
  13.         x : 'left',
  14.         data:['男性','女性']
  15.     },
  16.     toolbox: {
  17.         show : true,
  18.         feature : {
  19.             mark : {show: true},
  20.             dataView : {show: true, readOnly: false},
  21.             magicType : {
  22.                 show: true, 
  23.                 type: ['pie', 'funnel'],
  24.                 option: {
  25.                     funnel: {
  26.                         x: '25%',
  27.                         width: '50%',
  28.                         funnelAlign: 'left',
  29.                         max: 1548
  30.                     }
  31.                 }
  32.             },
  33.             restore : {show: true},
  34.             saveAsImage : {show: true}
  35.         }
  36.     },
  37.     calculable : true,
  38.     series : [
  39.         {
  40.             name:'訪問來源',
  41.             type:'pie',
  42.             radius : '55%',
  43.             center: ['50%', '60%'],
  44.             data:[
  45.                 {value:255, name:'男性'},
  46.                 {value:104, name:'女性'}
  47.             ]
  48.         }
  49.     ]
  50. };  

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

2、好友性別比例

將鼠標放到餅圖上可以看到詳細數據:

3、好友性別比例查看數據

3、微信好友全國分布圖

3.1 數據統(tǒng)計

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

以下為輸出結果:

 
 
 
 
  1. [{'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': '臺灣', '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': '內蒙古', 'value': 0}, {'name': '新疆', 'value': 2}, {'name': '寧夏', 'value': 0}, {'name': '廣西', 'value': 1}, {'name': '西藏', 'value': 0}, {'name': '香港', 'value': 0}, {'name': '澳門', 'value': 0}]

可以看出,好友最多的省份為北京。那么問題來了:為什么要把數據重組成這種格式?因為ECharts的地圖需要這種格式的數據。

3.2 數據呈現(xiàn)

采用ECharts地圖 來進行好友分布的數據呈現(xiàn)。打開該網址,將左側數據修改為:

 
 
 
 
  1. option = {
  2.     title : {
  3.         text: '微信好友全國分布圖',
  4.         subtext: '真實數據',
  5.         x:'center'
  6.     },
  7.     tooltip : {
  8.         trigger: 'item'
  9.     },
  10.     legend: {
  11.         orient: 'vertical',
  12.         x:'left',
  13.         data:['好友數量']
  14.     },
  15.     dataRange: {
  16.         min: 0,
  17.         max: 100,
  18.         x: 'left',
  19.         y: 'bottom',
  20.         text:['高','低'],           // 文本,默認為數值文本
  21.         calculable : true
  22.     },
  23.     toolbox: {
  24.         show: true,
  25.         orient : 'vertical',
  26.         x: 'right',
  27.         y: 'center',
  28.         feature : {
  29.             mark : {show: true},
  30.             dataView : {show: true, readOnly: false},
  31.             restore : {show: true},
  32.             saveAsImage : {show: true}
  33.         }
  34.     },
  35.     roamController: {
  36.         show: true,
  37.         x: 'right',
  38.         mapTypeControl: {
  39.             'china': true
  40.         }
  41.     },
  42.     series : [
  43.         {
  44.             name: '好友數量',
  45.             type: 'map',
  46.             mapType: 'china',
  47.             roam: false,
  48.             itemStyle:{
  49.                 normal:{label:{show:true}},
  50.                 emphasis:{label:{show:true}}
  51.             },
  52.             data:[
  53.               {'name': '北京', 'value': 91},
  54.               {'name': '上海', 'value': 12},
  55.               {'name': '天津', 'value': 15}, 
  56.               {'name': '重慶', 'value': 1}, 
  57.               {'name': '河北', 'value': 53},
  58.               {'name': '山西', 'value': 2}, 
  59.               {'name': '吉林', 'value': 1},
  60.               {'name': '遼寧', 'value': 1}, 
  61.               {'name': '黑龍江', 'value': 2},
  62.               {'name': '陜西', 'value': 3},
  63.               {'name': '甘肅', 'value': 0},
  64.               {'name': '青海', 'value': 0}, 
  65.               {'name': '山東', 'value': 7},
  66.               {'name': '福建', 'value': 3}, 
  67.               {'name': '浙江', 'value': 4},
  68.               {'name': '臺灣', 'value': 0},
  69.               {'name': '河南', 'value': 1},
  70.               {'name': '湖北', 'value': 4}, 
  71.               {'name': '湖南', 'value': 4},
  72.               {'name': '江西', 'value': 4},
  73.               {'name': '江蘇', 'value': 9},
  74.               {'name': '安徽', 'value': 2},
  75.               {'name': '廣東', 'value': 63}, 
  76.               {'name': '海南', 'value': 0},
  77.               {'name': '四川', 'value': 2},
  78.               {'name': '貴州', 'value': 0}, 
  79.               {'name': '云南', 'value': 1},
  80.               {'name': '內蒙古', 'value': 0},
  81.               {'name': '新疆', 'value': 2}, 
  82.               {'name': '寧夏', 'value': 0},
  83.               {'name': '廣西', 'value': 1},
  84.               {'name': '西藏', 'value': 0},
  85.               {'name': '香港', 'value': 0},
  86.               {'name': '澳門', 'value': 0}
  87.             ]
  88.         }
  89.     ]
  90. };    

注意兩點:

  • dataRange->max 根據統(tǒng)計數據適當調整
  • series->data 的數據格式

點擊刷新按鈕后,可以生成如下地圖:

好友全國分布圖

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

有趣的是,地圖左邊有一個滑塊,代表地圖數據的范圍,我們將上邊的滑塊拉到最下面可以看到沒有微信好友分布的省份:

5、沒有微信好友的省份

按照這個思路,我們可以在地圖上看到確切數量好友分布的省份,讀者可以動手試試。

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

4.1 數據統(tǒng)計

 
 
 
 
  1. def write_txt_file(path, txt):
  2.     '''
  3.     寫入txt文本
  4.     '''
  5.     with open(path, 'a', encoding='gb18030', newline='') as f:
  6.         f.write(txt)    
  7. # 統(tǒng)計簽名
  8. for friend in my_friends:
  9.     # 對數據進行清洗,將標點符號等對詞頻統(tǒng)計造成影響的因素剔除
  10.     pattern = re.compile(r'[一-龥]+')
  11.     filterdata = re.findall(pattern, friend.signature)
  12.     write_txt_file('signatures.txt', ''.join(filterdata))

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

4.2 數據呈現(xiàn)

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

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

 
 
 
 
  1. pip install jieba
  2. pip install pandas
  3. pip install numpy
  4. pip install scipy
  5. pip install wordcloud

4.2.1 讀取txt文件

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

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

4.2.2 stop word

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

在百度搜索stpowords.txt進行下載,放到py文件同級目錄。

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

4.2.3 詞頻統(tǒng)計

重頭戲來了,詞頻統(tǒng)計使用numpy:

 
 
 
 
  1. import numpy
  2. words_stat = words_df.groupby(by=['segment'])['segment'].agg({"計數":numpy.size})
  3.     words_stat = words_stat.reset_index().sort_values(by=["計數"],ascending=False)

4.2.4 詞頻可視化:詞云

詞頻統(tǒng)計雖然出來了,可以看出排名,但是不***,接下來我們將它可視化。使用到wordcloud庫,詳細介紹見 github 。

 
 
 
 
  1. from scipy.misc import imread
  2. from wordcloud import WordCloud, ImageColorGenerator
  3. # 設置詞云屬性
  4. color_mask = imread('background.jfif')
  5. wordcloud = WordCloud(font_path="simhei.ttf",   # 設置字體可以顯示中文
  6.                 background_color="white",       # 背景顏色
  7.                 max_words=100,                  # 詞云顯示的***詞數
  8.                 mask=color_mask,                # 設置背景圖片
  9.                 max_font_size=100,              # 字體***值
  10.                 random_state=42,
  11.                 width=1000, height=860, margin=2,# 設置圖片默認的大小,但是如果使用背景圖片的話,                                                   # 那么保存的圖片大小將會按照其大小保存,margin為詞語邊緣距離
  12.                 )
  13. # 生成詞云, 可以用generate輸入全部文本,也可以我們計算好詞頻后使用generate_from_frequencies函數
  14. word_frequence = {x[0]:x[1]for x in words_stat.head(100).values}
  15. print(word_frequence)
  16. word_frequence_dict = {}
  17. for key in word_frequence:
  18.     word_frequence_dict[key] = word_frequence[key]
  19. wordcloud.generate_from_frequencies(word_frequence_dict)
  20. # 從背景圖片生成顏色值  
  21. image_colors = ImageColorGenerator(color_mask) 
  22. # 重新上色
  23. wordcloud.recolor(color_func=image_colors)
  24. # 保存圖片
  25. wordcloud.to_file('output.png')
  26. plt.imshow(wordcloud)
  27. plt.axis("off")
  28. plt.show()

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

6、背景圖和詞云圖對比

從詞云圖可以分析好友特點:

  • 做--------------------行動派
  • 人生、生活--------熱愛生活
  • 快樂-----------------樂觀
  • 選擇-----------------決斷
  • 專業(yè)-----------------專業(yè)
  • 愛--------------------愛

5、總結

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

6、完整代碼

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

 
 
 
 
  1. #-*- coding: utf-8 -*-
  2. import re
  3. from wxpy import *
  4. import jieba
  5. import numpy
  6. import pandas as pd
  7. import matplotlib.pyplot as plt
  8. from scipy.misc import imread
  9. from wordcloud import WordCloud, ImageColorGenerator
  10. def write_txt_file(path, txt):
  11.     '''
  12.     寫入txt文本
  13.     '''
  14.     with open(path, 'a', encoding='gb18030', newline='') as f:
  15.         f.write(txt)
  16. def read_txt_file(path):
  17.     '''
  18.     讀取txt文本
  19.     '''
  20.     with open(path, 'r', encoding='gb18030', newline='') as f:
  21.         return f.read()
  22. def login():
  23.     # 初始化機器人,掃碼登陸
  24.     bot = Bot()
  25.     # 獲取所有好友
  26.     my_friends = bot.friends()
  27.     print(type(my_friends))
  28.     return my_friends
  29. def show_sex_ratio(friends):
  30.     # 使用一個字典統(tǒng)計好友男性和女性的數量
  31.     sex_dict = {'male': 0, 'female': 0}
  32.     for friend in friends:
  33.         # 統(tǒng)計性別
  34.         if friend.sex == 1:
  35.             sex_dict['male'] += 1
  36.         elif friend.sex == 2:
  37.             sex_dict['female'] += 1
  38.     print(sex_dict)
  39. def show_area_distribution(friends):
  40.     # 使用一個字典統(tǒng)計各省好友數量
  41.     province_dict = {'北京': 0, '上海': 0, '天津': 0, '重慶': 0,
  42.         '河北': 0, '山西': 0, '吉林': 0, '遼寧': 0, '黑龍江': 0,
  43.         '陜西': 0, '甘肅': 0, '青海': 0, '山東': 0, '福建': 0,
  44.         '浙江': 0, '臺灣': 0, '河南': 0, '湖北': 0, '湖南': 0,
  45.         '江西': 0, '江蘇': 0, '安徽': 0, '廣東': 0, '海南': 0,
  46.         '四川': 0, '貴州': 0, '云南': 0,
  47.         '內蒙古': 0, '新疆': 0, '寧夏': 0, '廣西': 0, '西藏': 0,
  48.         '香港': 0, '澳門': 0}
  49.     # 統(tǒng)計省份
  50.     for friend in friends:
  51.        &nbs
    當前題目:用Python更加了解微信好友
    地址分享:http://www.5511xx.com/article/dpopdij.html