首页 > 编程语言 >大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )

时间:2022-12-28 12:38:00浏览次数:69  
标签:学校 快手 频次 Python 使用 freqByStuNum data opts 随记

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_python



文章目录

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



一、题目描述

0、背景

背景:利用Python分析快手APP全国大学生用户数据,发现:
哪个学校的学生最喜欢使用快手APP
Android、IOS、PC三大平台用户占比份额
全国哪些城市(学校所在地)的学生使用频次最高
全国哪些省份的生源最喜欢使用快手APP

数据:快手APP大学生用户分析数据.csv
数据结构如下(字段名都为中文):

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_python_02

1、题目一

1、学校学生使用频次最多的前30所学校(5分)

提示:按照学校分组,对学生人数做累加求得每个学校学生使用的频次,最后对频次进行降序排名并将最终结果通过横向柱状图展示。

要求:
1)各学校使用频次(1分)
2)学校学生使用频次最多的前30所学校(1分)

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_java_03

2、题目二

2、使用频次前五学校学生中男女使用比例 (5分)

基于题目1中统计得到的各学校学生使用频次取出排名前5的学校,按照学校、性别分组,对学生人数进行sum累加求得各性别人数,将最终结果通过饼图展示(即展示前5所学校中每所学校男生女生的人数,需要在一张画布上展示5个图形,学校名作为每个图形的标题)。

要求:
1)取出学校学生使用频次排名前5的学校 (1分)
2)求得前5所学校中男生女生的使用频次(1分)

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_大数据_04

3、题目三

3、按省份统计使用快手APP数量 (5分)

按照学校省份进行分组,对学生人数进行累加求和得到每个省份的学生使用频次,最终将结果通过地图展示

要求:
1)各省份学生的使用频次(1分)

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_数据_05

二、题解

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:

大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )_数据_06

注意,有些系统可能无法正常显示中文,需要在画图之前添加以下语句来设置 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:

m


标签:学校,快手,频次,Python,使用,freqByStuNum,data,opts,随记
From: https://blog.51cto.com/u_15082598/5974268

相关文章

  • Python中itertools详解
    目录Python中itertools模块一、简介二、使用介绍1、常用迭代器1.1chain1.2groupby2、无穷迭代器2.1count2.2cycle2.3repeat3、排列组合迭代器3.1product3.2perm......
  • python 接入钉钉群机器人
    一、获取机器人信息。1)添加自定义机器人 2)保存机器人webhook信息  二:调用机器人接口1)curl命令转化程代码可以使用在线工具进行转化程其他语言的代码。cur......
  • python——random模块
    参考:https://www.cnblogs.com/liangmingshen/p/8909376.html 1.random.random() #用于生成一个0到1的随机浮点数:0<=n<1.01importrandom2a=random.rand......
  • python实验报告(第11章)
    实验11:使用Python操作数据库一、实验目的和要求1、学会数据库编程接口;2、学会使用SQLite;3、学会使用MySQL。二、实验环境软件版本:Python3.1064_bit三、实验过程......
  • python实验报告(第12章)
    实验12:GUI界面编程一、实验目的和要求1、学会应用常用控件;2、学会使用BoxSizer布局;3、学会事件处理。二、实验环境软件版本:Python3.1064_bit三、实验过程1、实......
  • python多线程
    1、获取线程ID(线程是操作系统中最小的调度单位)importthreadingt=threading.currentThread()#线程IDprint('Threadid:%d'%t.ident)#线程NAMEprint('Threadna......
  • 极客编程python入门-多重继承
    多重继承通过多重继承,一个子类就可以同时获得多个父类的所有功能。Python自带的很多库也使用了MixIn。举个例子,Python自带了​​TCPServer​​和​​UDPServer​​这两类网......
  • Python之多任务编程线程
    一、线程概述1.线程的介绍在Python中,想要实现多任务除了使用进程,还可以使用线程来完成,线程是实现多任务的另外一种方式。2.线程的概念线程是进程中执行代码的一个分支,每个......
  • Python之多任务编程进程和线程的对比
    1.进程和线程的对比的三个方向关系对比区别对比优缺点对比2.关系对比线程是依附在进程里面的,没有进程就没有线程。一个进程默认提供一条线程,进程可以创建多个线程。3.区......
  • Python 缩进语法的起源:上世纪 60-70 年代的大胆创意!
    上个月,Python之父GuidovanRossum在推特上转发了一篇文章《​​TheOriginsofPython​​》,引起了我的强烈兴趣。众所周知,Guido在1989年圣诞节期间开始创造Python,......