Python微信好友分析Demo
Python微信好友分析Demo
【實驗內容】
練習使用Python模塊,調取微信好友接口,獲取好友相關信息進行統計並可視化展示。
【實驗原理】
Python:Python是一種計算機程序設計語言。是一種動態的、面向對象的腳本語言,最初被設計用於編寫自動化腳本(shell),隨着版本的不斷更新和語言新功能的添加,越來越多被用於獨立的、大型項目的開發。
itchat:itchat是一個開源的微信個人號接口,使用python調用微信從未如此簡單。
使用不到三十行的代碼,你就可以完成一個能夠處理所有信息的微信機器人。
pyecharts:pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是百度開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒,爲了與 Python 進行對接,方便在 Python 中直接使用數據生成圖。
pandas:python的一個數據分析包,納入了大量庫和一些標準的數據模型,數據結構包含有一維數組Series、二維的表格型數據結構DataFrame、三維的數組Panel 。
【實驗環境】
Python 3.6
PyCharm
anaconda3 安裝見我的博客
【實驗步驟】
- 在終端:使用pip命令安裝實驗用到的Python第三方模塊
pip install itchat -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install echarts-countries-pypkg -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install echarts-china-provinces-pypkg -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pyecharts -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pyecharts_snapshot -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
- 開啓Pycharm,選擇Create New Project。在編譯環境Interpreter處選擇:anaconda3相應的編譯環境,點擊Create。
- 在此項目下創建Python文件
# -*- coding: utf-8 -*-?
import pandas as pd
import itchat
from pyecharts import Pie, Map, Style, Page, Bar
# from pyecharts import configure
# configure(global_theme='dark')
# 獲取聯繫人信息
def get_attr(friends, key):#get_attr()函數,根據鍵值獲取好友列表的方法:
return list(map(lambda user: user.get(key), friends))
# 獲取聯繫人信息
def get_friends():#編寫get_friends()函數,使用itchat模塊的get_friends()方法獲取微信好友信息:
# 連接微信登陸的入口,hotReload記住登陸狀態
itchat.auto_login(hotReload=True)
# 獲取微信好友列表
friends = itchat.get_friends()
# 獲取好友信息
users = dict(province=get_attr(friends, "Province"), # 省份
# city=get_attr(friends, "City"), # 城市
nickname=get_attr(friends, "NickName"), # 暱稱
sex=get_attr(friends, "Sex"), # 性別
signature=get_attr(friends, "Signature"), # 簽名
remarkname=get_attr(friends, "RemarkName"), # 備註名稱
pyquanpin=get_attr(friends, "PYQuanPin"), # 全拼
displayname=get_attr(friends, "DisplayName"), # 顯示名稱
isowner=get_attr(friends, "IsOwner")) # 所有者
return users
# 獲取聯繫人性別
def sex_stats(users):#編寫sex_stats()函數和prov_stats()函數,從讀取到的好友信息中提取並統計好友性別及所在省份:
# 將數據格式化
df = pd.DataFrame(users)
# 將性別信息提取出來
sex_arr = df.groupby(['sex'], as_index=True)['sex'].count()
# 將提取出來的性別信息轉化爲我們需要的格式
data = dict(zip(list(sex_arr.index), list(sex_arr)))
# 因爲微信接口性別給的是:0、1、2,所以需要我們自己將其轉化
data['None'] = data.pop(0)
data['Male'] = data.pop(1)
data['Female'] = data.pop(2)
return data.keys(), data.values()
# 獲取聯繫人省份
def prov_stats(users):
# 將數據格式化
prv = pd.DataFrame(users)
# 將省份信息提取出來
prv_cnt = prv.groupby('province', as_index=True)['province'].count().sort_values()
# 將提取出來的省份信息轉化爲我們需要的格式
attr = list(map(lambda x: x if x != '' else 'None', list(prv_cnt.index)))
return attr, list(prv_cnt)
# 將數據格式化
df = pd.DataFrame(users)
# 將城市信息提取出來
data = df.query('province == "Beijing"')
res = data.groupby('city', as_index=True)['city'].count().sort_values()
# 將提取出來的城市信息轉化爲我們需要的格式
attr = list(map(lambda x: '%sDistrict' % x if x != '' else 'None', list(res.index)))
return attr, list(res)
# 生成圖表
def create_charts():#得到我們需要的信息後,現在開始創建圖表,編寫create_charts()函數,根據統計數據分別繪製“微信好友性別比例餅狀圖”、“好友分佈-中國地圖”和“好友分佈-柱狀圖”
users = get_friends()
page = Page()
style = Style(width=1100, height=600)
style_middle = Style(width=900, height=500)
#############################
data = sex_stats(users)
attr, value = data
chart = Pie('Sex Ratio of WeChat Friends-Pie Chart') # title_pos='center'
# chart.use_theme('chalk')
# 添加數據
chart.add('', attr, value, center=[50, 50],
radius=[30, 70], is_label_show=True, legend_orient='horizontal', legend_pos='center',
legend_top='bottom', is_area_show=True)
# 生成圖片
page.add(chart)
#############################
data = prov_stats(users)
attr, value = data
chart = Map('Friends Distribution-Map of China', **style.init_style)
# chart.use_theme('chalk')
chart.add('', attr, value, is_label_show=True, is_visualmap=True, visual_text_color='#001')
page.add(chart)
chart = Bar('Friends Distribution-Bar Chart', **style_middle.init_style)
# chart.use_theme('chalk')
chart.add('', attr, value, is_stack=True, label_pos='top', is_datazoom_show=True, is_label_show=True)
# 生成圖片
page.add(chart)
page.render()
if __name__ == '__main__':
create_charts()
users = get_friends()
- 右鍵運行WeiXinFX.py,會彈出一個二維碼的網頁,使用微信“掃一掃”功能,登錄微信網頁版後,關閉該二維碼網頁。等待程序運行完成,我們可以看到在文件夾下生成了render.html。找到render.html文件,雙擊打開。