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)

posted @ 2019-06-05 16:31  gsd_tt  阅读(301)  评论(0编辑  收藏  举报