python—圖解你的好友分布情況
- 2019 年 10 月 8 日
- 筆記
很久之前做了查看微信的好友分布,但是礙於當時的數據可視化有一個巨坑,網上的教程都是互相轉發,互相複製的,最後並不能實現操作,這次想要來填坑,所以記錄一下。
關於用python來操作微信的庫我們這裡用的是wxpy,因為它是基於itchat的,有著微信登錄,收發消息,搜索好友,數據統計等等的功能,相比itchat的一個好處就是不用重複掃碼。
如果你用itchat去操作微信的話,你每次運行程式都要去掃二維碼登錄微信網頁版,但是wxpy就不用,它將登錄資訊快取了,可以不用每次運行程式時掃二維碼。
首先第一步,給自己的電腦安裝相關的庫,這裡要安裝的是wxpy庫。
這裡可以直接pip install wxpy,即可,如果你用pycharm,也用了虛擬的環境的話,就在pycharm里的setting->project interpreter里去安裝wxpy。
登錄微信:
from wxpy import * #導入wxpy庫 bot = Bot(cache_path=True) #登錄,並且有快取為true
簡單的獲取新消息,輸出並發一份給文件傳輸助手:

bot.file_helper就是文件傳輸助手,
bot.self就是你自己的微訊號,將消息發送給你自己。
這個recv_send_msg其實接收到消息後回復的函數,但是我們並沒有返回值,所以就沒有回復了。如果誇張一點這樣就差不多可以知道別人撤回的消息內容,因為他會在你的程式下列印,並且會發送一份內容給你的文件傳輸助手,或者你自己的微訊號。
獲取指定微訊號的消息:

獲取你微訊號的男女比例:

這裡用到的數據可視化我用的是matplotlib,如果沒有使用過的話,還是需要去下載一下庫。
這裡就是填坑的地方了。
獲取微信好友的省份分布圖:
from wxpy import * bot = Bot(cache_path=True) friends = bot.friends() area = {} for f in friends: if f.province not in area: area[f.province] = 1 else: area[f.province]+=1 attr = area.keys() value = area.values()
以上是就是獲取的省份的數據了,以及省份擁有的人數

接著就是在地圖上顯示出來,看了一下百度上的教程,百分之90的都是0.5版本的pycharts,但是我們用pip安裝的時候是最新版v1.0版本的pyecharts,因此百度上的方法都是不適用的。

在這裡你要查看一下你的python版本和pyecharts的版本,然後決定用的是v0.5版本的還是v1版本
一般python3.6以上的版本都是v1版本的pycharts。
下面是v1版本的省份顯示的完整程式碼。
from wxpy import * bot = Bot(cache_path=True) friends = bot.friends() area = {} for f in friends: if f.province not in area: area[f.province] = 1 else: area[f.province]+=1 attr = area.keys() value = area.values() from pyecharts import options as opts from pyecharts.charts import Map print(area) def map_base() -> Map: c = ( Map() .add("人數", [list(z) for z in zip(attr, value)], "china") .set_global_opts(title_opts=opts.TitleOpts(title="省份分布人數")) ) return c c = map_base() c.render()
這個只是基礎的顯示,還有更多的細節沒有添加,就直接給圖加入兩個數據,attr和value,然後修改一下map的名稱而已的。如果想做更加靈活的操作可以去pyecharts的官網,獲取相應的方法,很容易上手,十分便利。
上面程式碼運行完後,你的項目文件夾下會出現一個html文件

打開即可看到結果

這樣子就可以看到你的微信好友在全國的省份分布,並且知道分布的人數。
pyecharts的官網:
https://pyecharts.org/#/zh-cn/intro