#冲刺创作新星# 利用Python分析快手APP全国大学生用户数据 原创 精华
Table of Contents
一、题目描述
0、背景
背景:利用Python分析快手APP全国大学生用户数据,发现:
哪个学校的学生最喜欢使用快手APP
Android、IOS、PC三大平台用户占比份额
全国哪些城市(学校所在地)的学生使用频次最高
全国哪些省份的生源最喜欢使用快手APP
…
数据:快手APP大学生用户分析数据.csv
数据结构如下(字段名都为中文):
1、题目一
1、学校学生使用频次最多的前30所学校(5分)
提示:按照学校分组,对学生人数做累加求得每个学校学生使用的频次,最后对频次进行降序排名并将最终结果通过横向柱状图展示。
要求:
1)各学校使用频次(1分)
2)学校学生使用频次最多的前30所学校(1分)
2、题目二
2、使用频次前五学校学生中男女使用比例 (5分)
基于题目1中统计得到的各学校学生使用频次取出排名前5的学校,按照学校、性别分组,对学生人数进行sum累加求得各性别人数,将最终结果通过饼图展示(即展示前5所学校中每所学校男生女生的人数,需要在一张画布上展示5个图形,学校名作为每个图形的标题)。
要求:
1)取出学校学生使用频次排名前5的学校 (1分)
2)求得前5所学校中男生女生的使用频次(1分)
3、题目三
3、按省份统计使用快手APP数量 (5分)
按照学校省份进行分组,对学生人数进行累加求和得到每个省份的学生使用频次,最终将结果通过地图展示
要求:
1)各省份学生的使用频次(1分)
二、题解
1、题目一详解 —— 学校学生使用频次最多的前30所学校
① 相关知识点讲解
Ⅰ、Pyecharts Bar 相关使用
Pyecharts 画柱状图的方式非常简单,只需要导包并使用 Pyecharts 中 Bar()
类即可。其中 add_yaxis()
方法是必不可少的,通过该方法来导入数据并绘制柱状图;其次,通过 add_xaxis()
可以添加横坐标。
其次, reversal_axis()
可以用来将横纵坐标调换,从而达到绘制横向柱状图的目的。
set_global_opts()
可以对我们所绘制的柱状图的属性进行一些设置,像是柱状图的名称、标签、颜色等属性都可以在这里进行设置。
更多内容可以参考 【Pyecharts 柱状图的绘制】。
② 本题题解
首先导入我们所需要的包,pandas、pyecharts、matplotlib 等模块都需要导入。当然后面需要的时候再导入也是可以的啦!
使用 pandas 中的 read_csv()
函数读取我们的数据:
接下来使用 pandas 相关的 groupby()
方法将数据分组,并使用 sort_values()
将数据按照学生使用频次将学校进行排列:
之后使用 pyecharts 中的 Bar 进行柱状图的绘画,画出的图像可能会显示不全,这里可以使用 InitOpts()
方法设置图像的大小,从而避免这一问题。
2、题目二详解 —— 使用频次前五学校学生中男女使用比例
① 相关知识点讲解
Ⅰ、matplotlib 相关使用
这里主要讲一下 matplotlib 画布的分割问题,以及饼图的绘制问题。
关于 matplotlib 画布的分割问题,可以使用 subplot()
函数将画布划分成若干个子画布,在子画布上画图,从而实现 “一画多图” 的效果。
这里使用 matplotlib 来饼图,是因为 matplotlib 绘制饼图更简单,在一个画布中绘制五个图形的方式更加方便。matplotlib 绘制饼图只需要传入我们的数据,matplotlib 就会自动计算比例并绘制图形大小,详情可以见下面的分析。
② 本题题解
使用 head()
方法取出快手app使用频次排名前五的学校,结果如下:
out:
学校 | |
---|---|
0 | 香港中文大学 |
1 | 汉口学院 |
2 | 阜阳职业技术学院 |
3 | 福建医科大学 |
4 | 青岛职业技术学院 |
从这里便可以看出使用频率排名前五的学校,接着就可以使用 value_count()
对各所学校的男女人数进行统计:
out:
男 18
女 11
Name: 性别, dtype: int64
男 17
女 15
Name: 性别, dtype: int64
男 14
女 10
Name: 性别, dtype: int64
男 21
女 12
Name: 性别, dtype: int64
女 11
男 9
Name: 性别, dtype: int64
得到男女人数之后,我们就可以开始做图了,这里我们使用 matplotlib 的 pie 来作饼图,并使用 subplot 函数讲我们的画布分成 5 份来分别做出 5 个饼图:
out:
注意,有些系统可能无法正常显示中文,需要在画图之前添加以下语句来设置 matplotlib 的字体从而保证饼图中汉字的正常显示:
3、题目三详解 —— 按省份统计使用快手APP数量
① 相关知识点讲解
Ⅰ、Pyecharts Map 相关使用
想要画出好看的地图,Pyecharts 中的 Map 就尤为重要。通过 Map()
中的 add()
方法,可以将数据转换成热力分布地图。
set_global_opts()
可以用来设置热力图的数值范围,从而将地图中的颜色更加分明,更容易看出不同地区之间 app 使用频次的差异。
set_series_opts()
中可以使用 LabelOpts()
方法来设置地图中标签的格式,其中的 formatter
可以使用 JavaScript 来对我们的标签进行更复杂的渲染,从而美化我们的图像。
更多内容可以参考 【Pyecharts Map的绘制】。
② 本题题解
第三题我们主要使用 pyecharts 中的 map 来实现频次热力地图,由于 pyecharts 画地图时可能会因为网络问题而导致地图无法显示出来,于是我们就先下载 pyecharts 的地图数据包(当然网络好的可以不用下载)。
因为画 map 图的时候需要省名与学生人数的列表数据,这里便把两者分离出来,并对省份名做相关处理。
out:
[‘\N’, ‘上海’, ‘云南’, ‘内蒙古’, ‘北京’, ‘台湾’, ‘吉林’, ‘四川’, ‘天津’, ‘宁夏’, ‘安徽’, ‘山东’, ‘山西’, ‘广东’, ‘广西’, ‘新疆’, ‘江苏’, ‘江西’, ‘河北’, ‘河南’, ‘浙江’, ‘海南’, ‘湖北’, ‘湖南’, ‘澳门’, ‘甘肃’, ‘福建’, ‘西藏’, ‘贵州’, ‘辽宁’, ‘重庆’, ‘陕西’, ‘青海’, ‘香港’, ‘黑龙江’]
[115, 731, 959, 705, 912, 3, 624, 1289, 585, 374, 1110, 1309, 917, 1433, 973, 620, 1388, 1034, 1231, 1403, 1196, 451, 1065, 1078, 31, 772, 920, 143, 1027, 883, 916, 923, 305, 36, 728]
使用 pyecharts map 图作频率热力地图,使用 add 方法使用我们的数据进行画图,并使用 JsCode 方法把地图中各个省份的标签变成 省份+数字
的形式,注意 VisualMapOpts()
中的 max 值不要设置太大,否则都会变成一个颜色。
out:
三、资源
文中代码在和鲸社区中也有发布,大家可以可以 fork 并运行来进行学习哦!
看到附件怎么还有作业