大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
创始人
2024-04-01 16:16:26

大数据系列文章:👉 目录 👈

在这里插入图片描述

文章目录

    • 一、题目描述
      • 0、背景
      • 1、题目一
      • 2、题目二
      • 3、题目三
    • 二、题解
      • 1、题目一详解 —— 学校学生使用频次最多的前30所学校
        • ① 相关知识点讲解
          • Ⅰ、Pyecharts Bar 相关使用
        • ② 本题题解
      • 2、题目二详解 —— 使用频次前五学校学生中男女使用比例
        • ① 相关知识点讲解
          • Ⅰ、matplotlib 相关使用
        • ② 本题题解
      • 3、题目三详解 —— 按省份统计使用快手APP数量
        • ① 相关知识点讲解
          • Ⅰ、Pyecharts Map 相关使用
        • ② 本题题解
    • 三、资源

一、题目描述

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 等模块都需要导入。当然后面需要的时候再导入也是可以的啦!

# 导入所需模块
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import matplotlib.pyplot as plt
from pyecharts.charts import Map
import 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:

学校
0香港中文大学
1汉口学院
2阜阳职业技术学院
3福建医科大学
4青岛职业技术学院

从这里便可以看出使用频率排名前五的学校,接着就可以使用 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
女 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 个饼图:

# 创建画布
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 中的 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:

在这里插入图片描述

三、资源

  • 某短视频APP大学生用户分析数据.csv
  • Pyechart 官网
  • 和鲸社区 —— 某短视频APP大学生用户分析数据

文中代码在和鲸社区中也有发布,大家可以可以 fork 并运行来进行学习哦!

相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...