• 第一个微信小项目


    第一个微信小项目

    使用 python 进行微信好友分析

    1. 使用到的库

    ① wxpy:初始化微信机器人 ② openpyxl:保存微信好友数据为Excel表格 ③ pyecharts:生成可视化的地图 ④ wordcloud、matplotlib、jieba

    2. 基本功能

    ① 分析微信好友数据 ② 生成词云图 ③ 生成地图展示

    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: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(">>> 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)
    

  • 相关阅读:
    Shader_ShaderForge_NGUI_流光&波纹&消融
    “PurMVC”在Unity中的应用
    springboot整合jdbc
    ajax属性详解
    FreeMarker 日期转换失败
    freemarker404解决方案(全面)
    @RequestParam,@PathParam,@PathVariable等注解区别
    @RestController和@Controller区别
    通过code去获取他的枚举
    Servlet(三)ServletContext
  • 原文地址:https://www.cnblogs.com/foldline/p/10982680.html
Copyright © 2020-2023  润新知