700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > itchat+pyecharts实现微信好友分析及可视化

itchat+pyecharts实现微信好友分析及可视化

时间:2019-08-28 07:49:14

相关推荐

itchat+pyecharts实现微信好友分析及可视化

python+pyecharts实现微信好友分析及可视化

1. 准备及介绍2. itchat获取微信好友列表3. 分词及生成词云3.1 jieba分词3.2 生成词云 4. pyecharts生成好友性别饼图5. pyecharts生成好友分布图5.1 微信好友省份分布图5.2 微信好友城市分布图 6. 问题及解决

1. 准备及介绍

主要库的安装如下(其余省略):

itchat,开源的微信个人号接口,用来获取微信的联系人列表,安装命令如下:

pip install itchat

pyecharts,由百度开源的数据可视化,目前已更新到V1版本,之前的0.5.x 版本将不再进行维护。安装命令如下(后三个为地图包):

pip install pyecharts -Upip install echarts-countries-pypkg pip install echarts-china-provinces-pypkgpip install echarts-china-cities-pypkg

本文的主要目的如下:

获取当前用户好友列表中每个好友的备注名、性别、所属省份、城市以及个性签名根据个性签名生成词云根据好友性别生成好友性别柱状图根据好友所属省份、城市分布生成微信好友分布图

2. itchat获取微信好友列表

通过itchart的get_friends()函数可以获取当前微信号好友列表的所有好友信息(运行过程中需要扫码登录),包括好友备注、性别、个性签名等信息,代码实现如下:

import itchatimport pandas as pditchat.auto_login(hotReload=True) # 扫码登录微信friends = itchat.get_friends(update=True) # 获取联系人信息remark_name = [] # 备注sex = [] # 性别province = [] # 省份city = [] # 城市signature = [] # 个性签名# 提取数据for x in friends:remark_name.append(x['RemarkName'])sex.append(x['Sex'])if x['Province'] == '':x['Province'] = '无'province.append(x['Province'])if x['City'] == '':x['City'] = '无'city.append(x['City'])if x['Signature'] == '':x['Signature'] = '无'signature.append(x['Signature'])# 转化为Series类型,并组合为DataFrameseries_rem = pd.Series(remark_name, name='remarkname')series_sex = pd.Series(sex, name='sex')series_pro = pd.Series(province, name='province')series_cit = pd.Series(city, name='city')series_sig = pd.Series(signature, name='signature')friends_info = pd.concat([series_rem, series_sex, series_pro, series_cit, series_sig], axis=1)# 将数据保存为csv文件friends_info.to_csv('friends_info.csv', header=0)

3. 分词及生成词云

3.1 jieba分词

通过jieba对提取的个性签名进行分词,并剔除其中的停用词:

import pandas as pdimport jieba# 读取csv文件names = ['remarkname', 'sex', 'province', 'city', 'signature']df = pd.read_csv('friends_info.csv', names=names)# 提取个性签名text = ';'.join(df['signature'])# 读取停用词stopwords = open('stopwords.txt').read().split('\n')# 去除停用词result = jieba.cut(text, cut_all=True)clean_result = list(filter(lambda x: x not in stopwords, result))

3.2 生成词云

使用WordCloud生成词云,其中,字号越大则代表改词出现的频率越高:

# 生成词云font_path = 'simfang.ttf' # 字体库,显示中文words = ';'.join(clean_result)wordcloud = WordCloud(background_color="white", width=1000, height=860, font_path=font_path).generate(words)plt.imshow(wordcloud)plt.axis("off")plt.show()

运行结果如下:

4. pyecharts生成好友性别饼图

在提取到的数据中,性别(Sex字段)是用数字来表示的,0表示不明,1表示男性,2表示女性。我们通过DataFrame的groupby()函数按照性别进行分组,统计每个性别的人数,并通过pyecharts绘制柱形图:

# 按性别分组:0为不明、1为男、2为女grouped = df['sex'].groupby(df['sex'])data = []sex_result = grouped.count()for x in sex_result:data.append(x)# 绘制饼图pie = (Pie().add("", [list(z) for z in zip(['不明', '男', '女'], data)]).set_colors(['blue', 'purple', 'red']).set_global_opts(title_opts=opts.TitleOpts(title="微信好友性别比例")))pie.render('display_sex.html')

运行结果如下:

5. pyecharts生成好友分布图

5.1 微信好友省份分布图

通过Geo()生成地理坐标系图,显示微信好友的省份分布:

# 统计每个省份的人数data_province = {}province_df = df['province']for x in province_df:if x == '无' or ('A' <= x[0] <= 'Z'):continueif x in data_province.keys():data_province[x] = data_province[x] + 1else:data_province[x] = 1geo = (Geo().add_schema(maptype='china').add("", [list(z) for z in zip(data_province.keys(), data_province.values())]).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True),title_opts=opts.TitleOpts(title="微信好友省份分布")))geo.render('display_province.html')

运行结果如下,地理信息图上不同颜色的点代表不同的人数:

5.2 微信好友城市分布图

选择好友最多的城市(以山西为例),通过Map()类绘制山西省内的好友分布情况:

# 统计江苏各地区的好友分布df_sx = df[df['province'] == '山西']['city']data_city = {}for x in df_sx:if x == '无':continueif x in data_city.keys():data_city[x] = data_city[x] + 1else:data_city[x] = 1new_keys = []# 需要在城市名后面加上市for x in data_city.keys():new_keys.append(x + '市')print(new_keys)map = (Map().add("", [list(z) for z in zip(new_keys, data_city.values())], '山西').set_global_opts(title_opts=opts.TitleOpts(title="微信好友城市分布"),visualmap_opts=opts.VisualMapOpts(),))map.render('display_city.html')

运行结果如下:

6. 问题及解决

报错:cannot import name ‘Map’ from ‘pyecharts’

解决:pyecharts更新到V1版本之后,Map等包位于pyecharts.charts下,改为:

from pyecharts.charts import Map

在生成微信好友城市分布图时,没有报错,但是地图上没有显示出数据。

解决:好友信息中的城市是不加”市“的,比如”太原“,但是构造Map的时候所需要的参数是包含“市”的,比如”太原市“,所以需要在所有城市名后面补上”市“字。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。