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)