第一個微信小項目

第一個微信小項目html

使用 python 進行微信好友分析python

1. 使用到的庫微信

① wxpy:初始化微信機器人 ② openpyxl:保存微信好友數據爲Excel表格 ③ pyecharts:生成可視化的地圖 ④ wordcloud、matplotlib、jiebaapp

2. 基本功能echarts

① 分析微信好友數據 ② 生成詞雲圖 ③ 生成地圖展現dom

3.代碼函數

# -*- coding: utf-8 -*-
"""
Created on Wed Jun  5 23:53:56 2019

@author: ABC
"""

from wxpy import Bot
import openpyxl
from pyecharts import Map
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

class WeChatRobot:

    '''====================== 1. 獲取微信好友信息 ======================'''
    def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):
        ''' 初始化機器人和其餘參數 '''
        # 初始化機器人,須要掃碼
        self.bot = Bot()
        # 獲取我全部的微信好友信息 - 存儲基礎信息(未處理)
        self.allFriends_Info = self.bot.friends()
        # 個人微信好友個數
        self.allFriends_Num = len(self.allFriends_Info)
        # 保存微信好友信息的表格文件路徑(.xlsx)
        self.ExcelFile = ToExcelFile
        # 保存城市詞雲圖的文件路徑(.png/.jpg)
        self.WCOfCityFile = ToCityFile
        # 保存省份地圖的文件路徑(.html)
        self.MapProvinceFile = ToMapProvinceFile
        # 其餘可用參數
        self.MapCityFile = ToMapCityFile
        # 自動調用run方法,使得在實例化對象後自動運行其餘函數
        self.run()

    '''====================== 2. 統計微信好友信息 ======================'''
    def getFriendsInfo(self):
        ''' 獲取微信好友的所有信息 '''
        # 存儲微信好友的信息(通過信息處理的)
        self.friendsInfo = []
        # 定義列標題
        self.infoTitle = ['NickName', 'RemarkName', 'Sex', 'Province', 'City']
        for aFriend in self.allFriends_Info:
            # 獲取暱稱
            NickName = aFriend.raw.get(self.infoTitle[0], None)
            # 獲取備註
            RemarkName = aFriend.raw.get(self.infoTitle[1], None)
            # 獲取性別
            Sex = {1:"男", 2:"女", 0:"其餘"}.get(aFriend.raw.get(self.infoTitle[2], None), None)
            # 獲取省份
            Province = aFriend.raw.get(self.infoTitle[3], None)
            # 獲取城市
            City = aFriend.raw.get(self.infoTitle[4], None)
            lisTmp = [NickName, RemarkName, Sex, Province, City]
            self.friendsInfo.append(lisTmp)
    
    '''====================== 3. 保存微信好友信息 ======================'''
    def saveFriendsInfoAsExcel(self, ExcelName):
        ''' 保存微信好友的信息到 Excel 表格中 '''
        # 生成openpyxl對象
        workbook = openpyxl.Workbook()
        # 激活表格
        sheet = workbook.active
        # 設置表格標題
        sheet.title = 'WeChatFriendsInfo'
        # 填充列標題到第一行
        for _ in range(len(self.infoTitle)):
            sheet.cell(row=1, column=_+1, value=self.infoTitle[_])
        # 填充微信好友信息,從第二行開始
        for i in range(self.allFriends_Num):
            for j in range(len(self.infoTitle)):
                sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))
        # 若文件名非空,則保存到該路徑下
        if ExcelName != "":
            workbook.save(ExcelName)
            print(">>> Save WeChat friends' information successfully!")

    '''====================== 4. 分析微信好友信息 ======================'''
    def quiteAnalyzeFriendsInfo(self):
        ''' 分析數據,一步到位,直接了當 '''
        print(self.allFriends_Info.stats_text())
    
    '''====================== 5. 產生city詞雲圖 ======================'''
    def creatWordCloudOfCity(self, CityName):
        ''' 使用獲取的數據生成city詞雲圖 '''
        # 獲取全部的城市
        cityStr = ""
        for i in range(self.allFriends_Num):
            if self.friendsInfo[i][4] not in cityStr:
                cityStr += " " + self.friendsInfo[i][4]
        #jieba庫精確模式分詞
        wordlist = jieba.lcut(cityStr)
        cityStr = ' '.join(wordlist)
        # 加載背景圖片
        #cloud_mask = np.array(Image.open(BackGroundFile))
        #設置詞雲圖屬性
        font = r'C:\Windows\Fonts\simfang.ttf' # 設置字體路徑
        wc = WordCloud(
            background_color = 'black',     # 背景顏色
            #mask = cloud_mask,             # 背景圖片
            max_words = 100,                # 設置最大顯示的詞雲數
            font_path = font,               # 設置字體形式(在本機系統中)
            height = 300,                   # 圖片高度
            width = 600,                    # 圖片寬度
            max_font_size = 100,            # 字體最大值
            random_state = 100,             # 配色方案的種類
            )
        # 生成詞雲圖
        myword = wc.generate(cityStr)
        #展現詞雲圖
        plt.imshow(myword)
        plt.axis('off')
        plt.show()
        # 若文件名非空,則保存到該路徑下
        if CityName != "":
            #保存詞雲圖
            wc.to_file(CityName)
            print(">>> Creat WeChat wordcloud of city successfully!")
    
    '''===================== 6. 產生province地圖 ====================='''
    def creatMapProvince(self, MapFile):
        ''' 使用獲取的數據生成province地圖 '''
        # 獲取全部省份
        provinceList, provinceNum = [], []
        for i in range(self.allFriends_Num):
            if self.friendsInfo[i][3] not in provinceList:
                provinceList.append(self.friendsInfo[i][3])
                provinceNum.append(0)
        for i in range(self.allFriends_Num):
            for j in range(len(provinceList)):
                if self.friendsInfo[i][3] == provinceList[j]:
                    provinceNum[j] += 1
        # 生成 Map
        map = Map("各省微信好友分佈", width=1000, height=800)
        map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')
        # 若文件名非空,則保存到該路徑下
        if MapFile != "":
            #map.show_config()
            map.render(MapFile)
            print(">>> Creat WeChat Map of Provinces seccessfully!")
    
    '''===================== 7. 產生city地圖 ====================='''
    def creatMapCity(self, MapFile):
        ''' 使用獲取的數據生成city地圖 '''
        # 獲取全部省份
        CityList, CityNum = [], []
        for i in range(self.allFriends_Num):
            if self.friendsInfo[i][4] not in CityList:
                CityList.append(self.friendsInfo[i][4])
                CityNum.append(0)
        for i in range(self.allFriends_Num):
            for j in range(len(CityList)):
                if self.friendsInfo[i][4] == CityList[j]:
                    CityNum[j] += 1
        for i in range(len(CityList)):
            CityList[i] += '市'
        # 生成 Map
        map = Map("各市微信好友分佈", width=1000, height=800)
        map.add("", CityList, CityNum, maptype="廣東", is_visualmap=True, visual_text_color='#000')
        # 若文件名非空,則保存到該路徑下
        if MapFile != "":
            map.render(MapFile)
            print(">>> Creat WeChat Map of Cities seccessfully!")
        
    '''===================== 8. 自動執行函數 ====================='''
    def run(self):
        # 獲取微信好友信息
        self.getFriendsInfo()
        print(">>> Get WeChat friends' information successfully!")
        print(">>> Members:", self.allFriends_Num)
        # 保存微信好友信息
        self.saveFriendsInfoAsExcel(self.ExcelFile)
        # 分析微信好友信息
        self.quiteAnalyzeFriendsInfo()
        # 使用微信好友的 city 產生詞雲圖
        self.creatWordCloudOfCity(self.WCOfCityFile)
        # 生成微信好友的 province 地圖
        self.creatMapProvince(self.MapProvinceFile)
        # 生成微信好友的 city 地圖
        self.creatMapCity(self.MapCityFile)
        
if __name__ == "__main__":
    ToExcelFile = "C:/Users//ABC//AppData//Local//Programs//Python//Python37//FriendsInfo.xlsx"      # 微信好友信息的Excel表格保存路徑
    ToPictureFile = "C:/Users//ABC//AppData//Local//Programs//Python//Python37//CityWordCloud.png"   # 微信好友信息city詞雲圖保存路徑
    ToMapFileProvince = "D:\\新建文件夾 (2)\\WeChatProvinceMap.html" # 微信好友信息province地圖保存路徑
    ToMapFileCity = "D:\\新建文件夾 (2)\\WeChatCityMap.html"  # 微信好友信息city地圖保存路徑
    # WeChatRobot對象實例化
    robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)

 

 

 

 

相關文章
相關標籤/搜索