一、题目描述
0、背景
背景:利用 Python 分析快手 APP 全国大学生用户数据,发现:哪个学校的学生最喜欢使用快手 APPAndroid、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()
可以对我们所绘制的柱状图的属性进行一些设置,像是柱状图的名称、标签、颜色等属性都可以在这里进行设置。
② 本题题解
首先导入我们所需要的包,pandas、pyecharts、matplotlib 等模块都需要导入。当然后面需要的时候再导入也是可以的啦!
# 导入所需模块import pandas as pdfrom pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.commons.utils import JsCodeimport matplotlib.pyplot as pltfrom pyecharts.charts import Mapimport os
复制代码
使用 pandas 中的 read_csv()
函数读取我们的数据:
# 读取数据data = pd.read_csv('某短视频APP大学生用户分析数据.csv')
复制代码
接下来使用 pandas 相关的 groupby()
方法将数据分组,并使用 sort_values()
将数据按照学生使用频次将学校进行排列:
# 数据处理freqByStuNum = data.groupby(by='学校')['学生人数'].sum().to_frame('学生使用频次').sort_values(['学生使用频次'],ascending=False).reset_index()
复制代码
之后使用 pyecharts 中的 Bar 进行柱状图的绘画,画出的图像可能会显示不全,这里可以使用 InitOpts()
方法设置图像的大小,从而避免这一问题。
# pyecharts 画图( Bar( # 调整图像 init_opts=opts.InitOpts(width="1700px", height="750px",) ) .add_xaxis(freqByStuNum['学校'].tolist()[0:30]) .add_yaxis('人数',freqByStuNum['学生使用频次'].tolist()[0:30],category_gap="100%",bar_min_width=20) .set_series_opts( label_opts=opts.LabelOpts(position="right", ), ) .reversal_axis() .set_global_opts( title_opts=opts.TitleOpts(title="使用频次"), xaxis_opts=opts.AxisOpts( name='频次', axislabel_opts={"rotate":45}, ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=12), axistick_opts=opts.AxisTickOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_show=False), interval=100, ), ) .render_notebook())
复制代码
2、题目二详解 —— 使用频次前五学校学生中男女使用比例
① 相关知识点讲解
Ⅰ、matplotlib 相关使用
这里主要讲一下 matplotlib 画布的分割问题,以及饼图的绘制问题。
关于 matplotlib 画布的分割问题,可以使用 subplot()
函数将画布划分成若干个子画布,在子画布上画图,从而实现 “一画多图” 的效果。
这里使用 matplotlib 来饼图,是因为 matplotlib 绘制饼图更简单,在一个画布中绘制五个图形的方式更加方便。matplotlib 绘制饼图只需要传入我们的数据,matplotlib 就会自动计算比例并绘制图形大小,详情可以见下面的分析。
② 本题题解
使用 head()
方法取出快手 app 使用频次排名前五的学校,结果如下:
# 获取频次排名前五的学校freqByStuNum_head5 = freqByStuNum.head(5)freqByStuNum_head5['学校'].to_frame()
复制代码
out:
从这里便可以看出使用频率排名前五的学校,接着就可以使用 value_count()
对各所学校的男女人数进行统计:
# 处理频率前五所学校的性别freqByStuNum_top1_Sex = data[data['学校'] ==('香港中文大学')]['性别'].value_counts()freqByStuNum_top2_Sex = data[data['学校'] ==('汉口学院')]['性别'].value_counts()freqByStuNum_top3_Sex = data[data['学校'] ==('阜阳职业技术学院')]['性别'].value_counts()freqByStuNum_top4_Sex = data[data['学校'] ==('福建医科大学')]['性别'].value_counts()freqByStuNum_top5_Sex = data[data['学校'] ==('青岛职业技术学院')]['性别'].value_counts()# 输出一下print(freqByStuNum_top1_Sex)print(freqByStuNum_top2_Sex)print(freqByStuNum_top3_Sex)print(freqByStuNum_top4_Sex)print(freqByStuNum_top5_Sex)
复制代码
out:
男 18 女 11Name: 性别, dtype: int64 男 17 女 15Name: 性别, dtype: int64 男 14 女 10Name: 性别, dtype: int64 男 21 女 12Name: 性别, dtype: int64 女 11 男 9Name: 性别, dtype: int64
得到男女人数之后,我们就可以开始做图了,这里我们使用 matplotlib 的 pie 来作饼图,并使用 subplot 函数讲我们的画布分成 5 份来分别做出 5 个饼图:
# 创建画布plt.figure(figsize=(20, 8), dpi=1000)# 香港中文大学plt.subplot(1,5,1) # 画布第 1 块plt.pie(freqByStuNum_top1_Sex, labels=['男','女'], autopct='%.2f%%')plt.title("香港中文大学")# 汉口学院plt.subplot(1,5,2) # 画布第 2 块plt.pie(freqByStuNum_top2_Sex, labels=['男','女'], autopct='%.2f%%')plt.title("汉口学院")# 阜阳职业技术学院plt.subplot(1,5,3) # 画布第 3 块plt.pie(freqByStuNum_top3_Sex, labels=['男','女'], autopct='%.2f%%')plt.title("阜阳职业技术学院")# 福建医科大学plt.subplot(1,5,4) # 画布第 4 块plt.pie(freqByStuNum_top4_Sex, labels=['男','女'], autopct='%.2f%%')plt.title("福建医科大学")# 青岛职业技术学院plt.subplot(1,5,5) # 画布第 5 块plt.pie(freqByStuNum_top5_Sex, labels=['男','女'], autopct='%.2f%%')plt.title("青岛职业技术学院")
复制代码
out:
注意,有些系统可能无法正常显示中文,需要在画图之前添加以下语句来设置 matplotlib 的字体从而保证饼图中汉字的正常显示:
## 部分设备安装 matplotlib 可能无法正常显示中文,需要添加以下两句plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False
复制代码
3、题目三详解 —— 按省份统计使用快手 APP 数量
① 相关知识点讲解
Ⅰ、Pyecharts Map 相关使用
想要画出好看的地图,Pyecharts 中的 Map 就尤为重要。通过 Map()
中的 add()
方法,可以将数据转换成热力分布地图。
set_global_opts()
可以用来设置热力图的数值范围,从而将地图中的颜色更加分明,更容易看出不同地区之间 app 使用频次的差异。
set_series_opts()
中可以使用 LabelOpts()
方法来设置地图中标签的格式,其中的 formatter
可以使用 JavaScript 来对我们的标签进行更复杂的渲染,从而美化我们的图像。
② 本题题解
第三题我们主要使用 pyecharts 中的 map 来实现频次热力地图,由于 pyecharts 画地图时可能会因为网络问题而导致地图无法显示出来,于是我们就先下载 pyecharts 的地图数据包(当然网络好的可以不用下载)。
## 安装地图数据包# pip install echarts-countries-pypkg# pip install echarts-china-provinces-pypkg# pip install echarts-china-cities-pypkg# pip install echarts-china-counties-pypkg# pip install echarts-china-misc-pypkg# pip install echarts-united-kingdom-pypkg# python os调用系统命令来实现地图数据包的安装os.system("pip install echarts-countries-pypkg")os.system("pip install echarts-china-provinces-pypkg")os.system("pip install echarts-china-cities-pypkg")os.system("pip install echarts-china-counties-pypkg")os.system("pip install echarts-china-misc-pypkg")os.system("pip install echarts-united-kingdom-pypkg")
复制代码
因为画 map 图的时候需要省名与学生人数的列表数据,这里便把两者分离出来,并对省份名做相关处理。
# 数据处理province_data = data.loc[:,['学生省份','学生人数']].groupby('学生省份').count().reset_index()province_data = province_data.replace('省','',regex=True).replace('自治区','',regex=True).replace('特别行政区','',regex=True)\.replace('壮族','',regex=True).replace('维吾尔','',regex=True).replace('回族','',regex=True).replace('市','',regex=True)province_name = province_data['学生省份'].tolist()province_num = province_data['学生人数'].tolist()# 输出数据print(province_name,'\n',province_num)
复制代码
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 值不要设置太大,否则都会变成一个颜色。
( Map() .add("人数", [list(z) for z in zip(province_name, province_num)], maptype="china" ) .set_series_opts( label_opts=opts.LabelOpts( is_show=True, color='black', position='bottom', font_size=10, formatter=JsCode( '''function(params) { if (isNaN(params.value)){ return params.name; }else{return params.name+'\\n'+params.value;} }''' ), ) ) .set_global_opts( title_opts=opts.TitleOpts(title="各省份使用人数"), visualmap_opts=opts.VisualMapOpts(max_=1500), ) .render_notebook())
复制代码
out:
三、资源
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
如果需要可以点击链接免费领取或者滑到最后扫描二v码
👉[CSDN大礼包:《python学习路线&全套学习资料》免费分享](安全链接,放心点击)
👉Python学习大纲👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python书籍和视频合集👈
👉Python面试刷题👈
👉Python副业兼职路线👈
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取 【保证100%免费
】
👉[CSDN大礼包:《python学习路线&全套学习资料》免费分享](安全链接,放心点击)
![](https://hnxx.oss-cn-shanghai.aliyuncs.com/official/1682662612051.png?t=0.8598397641494797)