zoukankan      html  css  js  c++  java
  • python之微信好友分析。

    1、划重点!!!

    需要安装的第三方库有: 

    wxpy 0.3.9.8——登录微信
    openpyxl 2.6.2——可对 excel 表格进行操作

    pyecharts 0.5.11——百度的开源可视化库,

    wordcloud 1.5.0——词云制作库

    matplotlib 3.1.0——生成词云图

    pandas 0.24.2——读取 excel 表格的数据

    pyecharts-snapshot 0.2.0——是 pyecharts 的依赖库之一

    echarts-countries-pypkg——pyecharts 的世界地图包

    echarts-china-provinces-pypkg——pyecharts 的中国省份地图包

    上面的库都可以直接在pip直接下载,需注意:安装 pycharts 需要特殊些(因为最新版已出为 1.X版,不向下兼容)。

    好了所有库安装好了之后直接用代码在spyder里面运行。

    代码及运行结果如图:

    from wxpy import *
    
    #把获取的微信好友信息存为列表 
    def wx_friend_information(friend_all):
        
        #先生成一个二维列表,用来储存好友信息 
        lis = [['NickName','Sex','City','Province','Signature','HeadImgUrl','HeadImgFlag']]
        #遍历 friend_all, 并使用 raw.get(' ', None), 来获取每一各朋友的基本信息 
        for a_friend in friend_all:
            NickName = a_friend.raw.get('NickName', None)
            Sex = {1:"", 2:"", 0:"其它"}.get(a_friend.raw.get('Sex', None), None)
            City = a_friend.raw.get('City', None)
            Province = a_friend.raw.get('Province', None)
            Signature = a_friend.raw.get('Signature', None)
            HeadImgUrl = a_friend.raw.get('HeadImgUrl', None)
            HeadImgFlag = a_friend.raw.get('HeadImgFlag', None)
            list_0 = [NickName, Sex, City, Province, Signature, HeadImgUrl, HeadImgFlag]
            lis.append(list_0)
            
        return lis
    
    #把列表转换为 xlsx 表格,并保存表格       
    def list_to_xlsx(filename, list):
        
        #使用 openpyxl 创建空表格 
        import openpyxl
        wb = openpyxl.Workbook()
        #获得当前正在显示的 sheet, 或 wb.get_active_sheet()  
        sheet = wb.active
        #表格的 sheet 页命名为 Friends 
        sheet.title = 'Friends'
        # execl 文件命名
        file_name = filename + '.xlsx'
        #遍历 excel 表格,并读入数据 
        for i in range(0, len(list)):
            for j in range(0, len(list[i])):
                #为什么 i+1,j+1 不懂 
                sheet.cell(row = i+1, column = j+1, value = str(list[i][j]))
        #保存表格         
        wb.save(file_name)
        print("读写数据成功")
        
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    import pandas as pd
    #使用 pandas 的 read_excel 模块读取execl 表格
    from pandas import read_excel
    #import numpy as np
    
    #生成词云图 
    def create_wordcloud(df):
        
        #把 df(dataframe) 中城市那列中 为空的 替换为 空字符,并把替换后的城市列存在 city_list中
        word_list = df['City'].fillna('').tolist()
        #把 city_list 列表中的 各项 用空格隔开,并变为字符串 
        new_text = ' '.join(word_list)
        #设置词云图的字体为 ‘msyh.ttc', 背景为白色(默认为黑色),并用 generate() 生成词云图 
        wordcloud = WordCloud(font_path='msyh.ttc', background_color = 'white').generate(new_text)
        #展示生成的词云图 
        plt.imshow(wordcloud)
        #plt.axis("off")
        #plt.show()
        plt.savefig("WordCloud.png")
        print("保存词云图")
    
    #使用 pyecharts 生成词云    
    def create_wordcloud_html(df):
        
        #调用 pyecharts 中 wordcloud 模块
        from pyecharts import WordCloud
        
        #把 df(dataframe) 中城市那列中 为空的 替换为 空字符,并把替换后的城市列存在 city_list中 
        city_list = df['City'].fillna('').tolist()
        
        #使用 pandas.value_count() 返回 city_list 中各项和其对应的频数(两者一一对应),并存在 count_city 中  
        count_city = pd.value_counts(city_list)
        #把 count_city 中的项提取出来,并存在 name 中
        name = count_city.index.tolist()
        #把 count_city 中的频数提取出来 
        value = count_city.tolist()
        #生成词云图 
        wordcloud = WordCloud(width=1300,height=620)
        #往词云图中添加信息, 
        wordcloud.add("",name,value,word_size_range=[20,100])
        #输出词云图的配置 
        #wordcloud.show_config()
        #wordcloud.render(r'D:wc.html')
        #保存词云图 
        wordcloud.render('wordcloud.html')
        print("网页词云图已生成")
        
        
    #将好友展示在地图上
    def create_map(df):
        
        #使用 pyechart 的 Map 模块,生成网页词云图
        from pyecharts import Map
    
        #把 df(dataframe) 中省份那列中 为空的 替换为 空字符,并把替换后的城市列存在 province_list中
        province_list = df['Province'].fillna('').tolist()
        #使用 pandas.value_count() 返回 province_list 中各项和其对应的频数(两者一一对应),并存在 count_province 中
        count_province = pd.value_counts(province_list)
        #把 count_province 中的项提取出来,并存在 name 中
        attr = count_province.index.tolist()
        #把 count_province 中的频数提取出来
        value1 = count_province.tolist()
        #生成一个标题为 “ ”的空白 HTML 
        map = Map("各省微信好友分布", width=1200,height=600)
        #向空白 HTML 中添加 信息,设置地图为 中国地图,并显示地图,设置地图上文字颜色,并显示标签
        map.add("",attr, value1, maptype='china',is_visualmap=True,visualmap_text_color='#000',is_label_show=True)
        #map.show_config()
        #保存词云网页 
        map.render('map.html')
        print("map已生成")
        
        
    if __name__ == "__main__":
        
        #获取登录二维码
        bot = Bot(cache_path = True)
        
        #获取微信朋友的基本数据
        friend_all = bot.friends()
        list = wx_friend_information(friend_all)
        list_to_xlsx('wechat_friend', list)
        
        df = read_excel('wechat_friend.xlsx')
        create_wordcloud(df)
        create_wordcloud_html(df)
        create_map(df)

  • 相关阅读:
    列举面向对象中的特殊成员以及应用场景
    python中os和sys模块
    谈谈你对闭包的理解?
    Python面试题(练习一)
    logging模块的作用以及应用场景
    Python的垃圾回收机制
    Python的深浅copy
    rust 支持的CPU架构
    Rust 数据类型
    网站用https访问的问题
  • 原文地址:https://www.cnblogs.com/gsd-tt/p/10980368.html
Copyright © 2011-2022 走看看