一、前言
今天是假期的第七天,厌倦那些无聊的生活。于是对着实验楼的教程,就开干了。
那做好的感受是什么?
其实,谈不上什么收获,都是抄别人的脚本,再调试一波。
如果问学到了什么,也没学到什么。
二、实验效果
三、实验过程
1.搭建虚拟环境,并且安装相应的包
--打开cmd:
- mkvirtualenv wechats
- pip install itchat pillow
- pip install pyecharts pyecharts_snapshot echarts-countries-pypkg echarts-china-provinces-pypkg echarts-china-cities-pypkg
2.在pycharm上新建“纯python”项目,添加相应的虚拟环境
3.新建python文件,输入一下代码:
# -*- coding:utf-8 -*-
import itchat
from collections import Counter
from pyecharts import Bar
import re
from pyecharts import Map
# 实现获取朋友指定信息的方法
def get_key_info(friends_info, key):
return list(map(lambda friend_info: friend_info.get(key), friends_info))
# 获取朋友的相关信息,生成一个 {key:[value1,value2,...],} 类型的字典,最后返回该字典
def get_friends_info(friends):
friends_info = dict(
username=get_key_info(friends, 'UserName'), # 用户名
sex=get_key_info(friends, 'Sex'), # 性别
province=get_key_info(friends, 'Province'), # 省份
city=get_key_info(friends, 'City') # 城市
)
return friends_info
if __name__ == '__main__':
itchat.auto_login(hotReload=True)
friends = itchat.get_friends(update=True)
from pyecharts import Page, Pie
# 处理数据
def count_nums(new_list):
new_dict = {}
for i in new_list:
if bool(re.search('[a-z]|[A-Z]', i)): # 如果带英文字母(要么是国外,要么是乱写的)就跳出本次循环
continue
elif not new_dict.__contains__(i):
new_dict[i] = 1
else:
new_dict[i] += 1
new_dict.pop('') # 去掉空的键
return new_dict
def analysis(friends):
friends_info = get_friends_info(friends)
# 男女性别比例
sex_list = friends_info['sex']
sex_dict = dict(Counter(sex_list))
attr = ["未知", "男性", "女性"]
value = [sex_dict[0], sex_dict[1], sex_dict[2]]
page = Page()
chart1 = Pie("微信好友性别比例图",title_pos='center') #标题放在中间
chart1.add("", attr, value, is_label_show=True, legend_orient="vertical", legend_pos="left") #显示标签,图例组件垂直分布,图例位于左侧
page.add(chart1) #把chart1添加到页面中
#中国省级分析
province_list = friends_info['province']
province_dict = count_nums(province_list)
attr, value = list(province_dict.keys()), list(province_dict.values())
# 中国省级分析画图
chart2 = Map('好友省级分布(中国地图)', width=1200, height=600) #设置图像的长和高的像素值
chart2.add('', attr, value, maptype='china', is_label_show=True, is_visualmap=True, visual_text_color='#000') #地图类型为中国,显示标签数据,使用视觉映射组件,文本颜色为黑色
page.add(chart2) #把chart2添加到页面中
# 中国城市分析(取前10个人数最多的城市)
city_list = friends_info['city']
city_dict = count_nums(city_list)
top_ten_city = dict(sorted(city_dict.items(), key=lambda x: x[1], reverse=True)[0:10])
attr, value = list(top_ten_city.keys()), list(top_ten_city.values())
# 中国城市分析画图
chart3 = Bar('好友城市分布Top10柱状图', width=900, height=500) #设置图形的长和宽
chart3.add('', attr, value, is_stack=False,is_label_show=True,bar_category_gap='20%') #把数据堆叠设置为False,显示标签,类目轴的柱状距离为20%
page.add(chart3) #把chart3添加到页面中
page.render('analysisResult.html') #生成整个页面,命名为analysisResult.html
if __name__ == '__main__':
itchat.auto_login(hotReload=True)
friends = itchat.get_friends(update=True)
analysis(friends)
4.运行,同目录下自动生成HTML文件,再运行HTML页面即可
四、总结
- 学习时不能急于求成,上面就是一种急于求成的做法。照着上面的教程,对,你做出来了,你能跟别人解释清楚吗?那些代码是什么意思?能用在什么场景?等等,这都需要你思考。
- 脚本是从上往下执行,前面的函数不能调用后面的函数。如下如:
- 虽然实验楼的教程是把分析方法分成很多部分了,你得整理成一个函数
- 注意缩进