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 安裝見我的博客

【實驗步驟】

  1. 在終端:使用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  
  1. 開啓Pycharm,選擇Create New Project。在編譯環境Interpreter處選擇:anaconda3相應的編譯環境,點擊Create。
  2. 在此項目下創建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()


  1. 右鍵運行WeiXinFX.py,會彈出一個二維碼的網頁,使用微信“掃一掃”功能,登錄微信網頁版後,關閉該二維碼網頁。等待程序運行完成,我們可以看到在文件夾下生成了render.html。找到render.html文件,雙擊打開。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章