第一个微信小项目

这是代码::

# -*- coding: utf-8 -*-

"""

Spyder Editor

This is a temporary script file.

"""

#  导入模块

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(">>> 保存微信好友的信息成功!")

    '''====================== 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:WindowsFontssimfang.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(">>> 词云生成!")

    '''===================== 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(">>> 获取全国好友分布图!")

    

    '''===================== 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(">>> 获取广东省好友分布图!")

        

    '''===================== 8. 自动执行函数 ====================='''

    def run(self):

        # 获取微信好友信息

        self.getFriendsInfo()

        print(">>> 获取微信好友的信息成功!")

        print(">>> 好友数量:", 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/admin/Desktop/11/1.xlsx"      # 微信好友信息的Excel表格保存路径

    ToPictureFile = "C:/Users/admin/Desktop/11/2.png"   # 微信好友信息city词云图保存路径

    ToMapFileProvince = "C:/Users/admin/Desktop/11/3.html" # 微信好友信息province地图保存路径

    ToMapFileCity = "C:/Users/admin/Desktop/11/4.html"  # 微信好友信息city地图保存路径

    # WeChatRobot对象实例化

    robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)

 这是截图:

 

 

原文地址:https://www.cnblogs.com/hy120040/p/10980611.html