2025年广东省职业院校技能大赛“大数据应用与服务”竞赛样题三
文章目录
大数据应用与服务交流:982262433
一、背景描述
大数据时代背景下,人们的出行方式发生了显著变化。共享单车作为一种新型的城市短途出行解决方案,不仅满足了人们"最后一公里"的出行需求,也为城市交通带来了新的活力。在传统的运营模式中,由于缺乏数据支持,共享单车的投放和调度主要依靠运营人员的经验判断,导致供需失衡、车辆分布不均等问题。而在大数据时代,通过对骑行数据的分析,可以更精准地预测用户需求,优化车辆调度,提升运营效率。
共享单车平台可以收集包括用户骑行轨迹、使用时段、车辆状态等多维度数据。通过对这些数据的分析,可以识别热门区域和时段,预测车辆使用需求,优化调度策略,同时也能够对车辆维护进行预警,提升用户体验。这些数据还可以为城市交通规划提供重要参考,助力智慧城市建设。
因数据驱动的大数据时代已经到来,没有大数据,我们无法为用户提供高效的共享单车服务。为完成共享单车使用数据分析工作,你所在的小组将应用大数据技术,通过Python语言以数据采集为基础,将采集的数据进行相应处理,并且进行数据标注、数据分析与可视化、通过大数据业务分析方法实现相应数据分析。运行维护数据库系统保障存储数据的安全性。通过运用相关大数据工具软件解决具体业务问题。你们作为该小组的技术人员,请按照下面任务完成本次工作。
二、模块一:平台搭建与运维
(一)任务一:大数据平台搭建
1.子任务一:基础环境准备
本任务需要使用 root 用户完成相关配置,安装 Hadoop 需要配置前置环境。命令中要求使用绝对路径,具体要求如下:
(1)配置三个节点的主机名,分别为 master、slave1、slave2,然后修改三个节点的 hosts 文件,使得三个节点之间可以通过主机名访问,在 master上将执行命令 cat /etc/hosts 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
(2)将 /opt/software 目录下将文件 jdk-8u191-linux-x64.tar.gz 安装包解压到 /opt/module 路径中,将 JDK 解压命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
(3)在 /etc/profile 文件中配置 JDK 环境变量 JAVA_HOME 和 PATH 的值,并让配置文件立即生效,将在 master上 /etc/profile 中新增的内容复制并粘贴至【提交结果.docx】中对应的任务序号下;
(4)查看 JDK 版本,检测 JDK 是否安装成功,在 master 上将执行命令 java -version 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
(5)创建 hadoop 用户并设置密码,为 hadoop 用户添加管理员权限。在 master 上将执行命令 grep ‘hadoop’ /etc/sudoers 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
(6)关闭防火墙,设置开机不自动启动防火墙,在 master 上将执行命令 systemctl status firewalld 的结果复制并粘贴至【提交结果.docx】中对应的任务序号下;
(7)配置三个节点的 SSH 免密登录,在 master 上通过 SSH 连接 slave1 和 slave2 来验证。
2.子任务二:Hadoop 完全分布式安装配置
本任务需要使用 root 用户和 hadoop 用户完成相关配置,使用三个节点完成 Hadoop 完全分布式安装配置。命令中要求使用绝对路径,具体要求如下:
(1)在 master 节点中的 /opt/software 目录下将文件 hadoop-3.3.6.tar.gz 安装包解压到 /opt/module 路径中,将 hadoop 安装包解压命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
(2)在 master 节点中将解压的 Hadoop 安装目录重命名为 hadoop,并修改该目录下的所有文件的所属者为 hadoop,所属组为 hadoop,将修改所属者的完整命令复制并粘贴至【提交结果.docx】中对应的任务序号下;
(3)在 master 节点中使用 hadoop 用户依次配置 hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、masters 和 workers 配置文件,Hadoop集群部署规划如下表,将 yarn-site.xml 文件内容复制并粘贴至【提交结果.docx】中对应的任务序号下;
服务器 | master | slave1 | slave2 |
---|---|---|---|
HDFS | NameNode | ||
HDFS | SecondaryNameNode | ||
HDFS | DataNode | DataNode | DataNode |
YARN | ResourceManager | ||
YARN | NodeManager | NodeManager | NodeManager |
历史日志服务器 | JobHistoryServer |
(二)任务二:数据库服务器的安装与运维
- 子任务一:MySQL 安装配置
本任务需要使用 rpm 工具安装 MySQL 并初始化,具体要求如下:
(1)在 master 节点中的 /opt/software 目录下将 MySQL 5.7.44 安装包解压到 /opt/module 目录下;
(2)在 master 节点中使用 rpm -ivh 依次安装 mysql-community-common、mysql-community-libs、mysql-community-libs-compat、mysql-community-client 和 mysql-community-server 包,将所有命令复制粘贴至【提交结果.docx】中对应的任务序号下;
(3)在 master 节点中启动数据库系统并初始化 MySQL 数据库系统,将完整命令复制粘贴至【提交结果.docx】中对应的任务序号下。 - 子任务二:MySQL 运维
本任务需要在成功安装 MySQL 的前提下,对 MySQL 进行运维操作,具体要求如下:
(1)配置服务端 MySQL 数据库的远程连接,将新增的配置内容复制粘贴至【提交结果.docx】中对应的任务序号下;
(2)配置 root 用户允许任意 IP 连接,将完整命令复制粘贴至【提交结果.docx】中对应的任务序号下;
(3)通过 root 用户登录 MySQL 数据库系统,查看 mysql 库下的所有表,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;
(4)创建新的用户 bike_admin,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;
(5)创建数据库 bike_data,并设置正确的字符集,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;
(6)授予新用户查询数据和插入数据的权限,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下;
(7)刷新权限,将完整命令及执行命令后的结果复制粘贴至【提交结果.docx】中对应的任务序号下。 - 子任务三:数据表的创建及维护
(1)根据以下数据字段在 bike_data 数据库中创建骑行记录表(ride_records)。骑行记录表字段如下:
*字段* | *类型* | *中文含义* | *备注* |
---|---|---|---|
*id* | int | 记录编号 | 主键 |
*bike_id* | varchar | 单车编号 | |
*user_id* | varchar | 用户ID | |
*start_time* | datetime | 开始时间 | |
*end_time* | datetime | 结束时间 | |
*start_location* | varchar | 起始位置 | |
*end_location* | varchar | 结束位置 | |
*ride_distance* | double | 骑行距离(km) | |
*ride_duration* | int | 骑行时长(分钟) |
(2)根据以下数据字段在 bike_data 数据库中创建单车状态表(bike_status)。单车状态表字段如下:
*字段* | *类型* | *中文含义* | *备注* |
---|---|---|---|
*bike_id* | varchar | 单车编号 | 主键 |
*status* | varchar | 车辆状态 | |
*battery_level* | int | 电量百分比 | |
*last_maintain_time* | datetime | 最后维护时间 | |
*current_location* | varchar | 当前位置 | |
*total_mileage* | double | 总里程(km) |
将这两个 SQL 建表语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。
(3)根据已提供的 SQL 文件将这两份数据导入 bike_data 数据库中,并对其中的数据进行如下操作:
在 ride_records 表中查询骑行时长超过60分钟的记录数量;
在 bike_status 表中统计各个状态的单车数量;
将这两个 SQL 语句分别复制粘贴至【提交结果.docx】中对应的任务序号下。
三、模块二:数据获取与处理
(一)任务一:数据获取与清洗
- 子任务一:数据获取
有一份共享单车使用数据,包含以下字段:骑行ID、单车编号、用户ID、开始时间、结束时间、起始位置、结束位置、骑行距离(km)、骑行时长(分钟)、天气状况、温度、周末标记。
数据已存入 bike_rides.csv 文件中,请使用 pandas 读取 bike_rides.csv 并将数据集的前10行打印在 IDE 终端的截图复制粘贴至【提交结果.docx】中对应的任务序号下。 - 子任务二:使用 Python 进行数据清洗
现已从共享单车平台获取到原始数据集,为保障用户隐私和商业敏感信息,已进行数据脱敏处理。数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及用户安全数据或者商业敏感数据的情况下,不违反系统规则条件下,对真实数据进行改造并提供测试使用。
请使用 pandas 库加载并分析相关数据集,根据题目规定要求使用 pandas 库实现数据处理,具体要求如下:
(1)删除骑行距离为空或为0的记录,并将结果存储为 cleaned_data_c1_N.csv,N 为删除的数据条数;
(2)删除骑行时长小于1分钟或大于24小时的异常记录,并将结果存储为 cleaned_data_c2_N.csv,N 为删除的数据条数;
(3)将天气状况中的空值替换为该时段最常见的天气状况,并存储为 cleaned_data_c3_N.csv,N 为修改的数据条数;
(4)识别并删除重复的骑行记录,将结果存储为 cleaned_data_c5_N.csv,N 为删除的数据条数;
将该 4 个文件名截一张图复制粘贴至【提交结果.docx】中对应的任务序号下。
(二)任务二:数据标注
- 子任务一:骑行距离分类标注
使用 Python 编写脚本,根据骑行距离将骑行记录分为三类:“短途”、“中途"和"长途”。具体的分类要求如下:
(1)短途:骑行距离小于2公里;
(2)中途:骑行距离在2公里至5公里之间;
(3)长途:骑行距离超过5公里;
在数据集中新增一列"距离分类",根据上述标准对每条骑行记录进行分类标注,存入 ride_distance_mark.csv 文件中。具体格式如下:
*骑行ID* | *开始时间* | *骑行距离(km)* | *距离分类* |
---|---|---|---|
*1001* | 2025-01-01 08:30:00 | 3.5 | 中途 |
将 ride_distance_mark.csv 打开后直接截图(不用下拉)复制粘贴至【提交结果.docx】中对应的任务序号下。
2. 子任务二:时段热度标注
使用 Python 编写脚本,基于骑行开始时间,对每个时段进行热度标注。具体的分类要求如下:
(1)高峰时段:工作日的7:00-9:00和17:00-19:00;
(2)平峰时段:工作日的9:00-17:00和19:00-22:00;
(3)低峰时段:工作日的22:00-次日7:00以及周末全天。
在数据集中新增一列"时段热度",根据上述标准对每条骑行记录进行时段标注,存入 time_period_mark.csv 文件中。具体格式如下:
*骑行ID* | *开始时间* | *周末标记* | *时段热度* |
---|---|---|---|
*1001* | 2025-01-01 08:30:00 | 0 | 高峰时段 |
将 time_period_mark.csv 打开后直接截图(不用下拉)复制粘贴至【提交结果.docx】中对应的任务序号下。
(三)任务三:数据统计
- 子任务一:HDFS 文件操作
本任务需要使用 Hadoop、HDFS 命令,已安装 Hadoop 及需要配置前置环境,具体要求如下:
(1)在 HDFS 目录下新建目录 /bike_data,将新建目录的完整命令粘贴至【提交结果.docx】中对应的任务序号下;
(2)修改权限,赋予目录 /bike_data 最高 777 权限,将修改目录权限的完整命令粘贴至【提交结果.docx】对应的任务序号下;
(3)下载 HDFS 新建目录 /bike_data,到本地容器 master 指定目录 /tmp下,将完整命令粘贴至【提交结果.docx】中对应的任务序号下。
2.子任务二:计算输入文件中的单词数
本任务需要使用 Hadoop 默认提供的 wordcount 示例来完成单词数统计任务,具体要求如下:
(1)在 HDFS 上创建 /user/hadoop/input 目录;
(2)在 master 节点将 /var/log/dmesg 文件上传到 HDFS 的 /user/hadoop/input 目录下;
(3)使用 Hadoop 中提供的 wordcount 示例对 HDFS 上的 dmesg 文件进行单词统计,并将统计结果存储到 HDFS 的 /user/hadoop/output 目录下;
(4)查看 HDFS 中的 /user/hadoop/output 单词数统计结果并将结果前十行截图粘贴至【提交结果.docx】中对应的任务序号下。
3.子任务三:计算区域平均骑行时长
本任务需要使用 MapReduce 框架计算每个区域的平均骑行时长,具体要求如下:
(1)编写 MapReduce 程序,计算每个区域(根据起始位置划分)的平均骑行时长。输入数据格式为:
起始位置,结束位置,骑行时长(分钟)
朝阳区望京,朝阳区大屯,15
海淀区中关村,海淀区五道口,22
…
(2)Map 函数需要从输入数据中提取起始位置的区域名称和骑行时长,Reduce 函数需要计算每个区域的平均骑行时长;
(3)将计算结果输出到 HDFS 的 /user/hadoop/avg_duration 目录下,输出格式为:
区域名称 平均骑行时长(分钟)
朝阳区 18.5
海淀区 20.3
…
(4)将程序运行结果截图粘贴至【提交结果.docx】中对应的任务序号下。
四、模块三:业务分析与可视化
(一)任务一:数据分析与可视化
1.子任务一:数据分析
数据分析是理解共享单车使用模式的重要手段,可以揭示用户偏好、使用高峰和运营效率。在这个任务中,我们将运用 Python 对共享单车使用数据进行深入分析,以获取关键洞察。参赛者需要运用 Python 的数据处理和分析库,如 Pandas 来完成以下任务:
(1)按开始时间统计每个小时的平均骑行量,进行倒序排序展示前三个高峰时段;
(2)计算不同天气状况下的平均骑行时长和平均骑行距离;
(3)分析工作日和周末的骑行模式差异,计算两者的平均骑行量、平均骑行时长和平均骑行距离;
(4)统计每个区域的起始和结束骑行次数,识别最热门的上车区域和下车区域;
(5)分析温度对骑行量的影响,计算不同温度区间(0-10℃、10-20℃、20-30℃、30℃以上)的平均骑行量;
将该 5 个统计结果在 IDE 的控制台中打印并分别截图复制粘贴至【提交结果.docx】中对应的任务序号下。
2.子任务二:数据可视化
在这个任务中,参赛者将使用 pyecharts 库来创建直观、互动的图表,以展示共享单车使用的关键模式和趋势。具体要求如下:
(1)创建时间热力图展示一周内各时段的骑行量分布,横轴为星期(周一至周日),纵轴为小时(0-23时),颜色深浅表示骑行量的多少;
(2)使用折线图展示一天24小时内的骑行量变化趋势,图中需要包含工作日和周末两条折线,以便对比不同类型日期的使用模式差异;
(3)制作区域流向图,展示不同区域之间的骑行流量,使用箭头的粗细表示流量大小,颜色表示平均骑行时长;
(4)创建散点图分析气温与骑行量的关系,横轴为温度,纵轴为日骑行量,每个点的大小表示平均骑行时长,颜色表示天气状况;
将该 4 个可视化图表分别截图复制粘贴至【提交结果.docx】中对应的任务序号下。
(二)任务二:业务分析
在共享单车运营中,准确理解用户需求、使用模式和运营效率至关重要。通过分析骑行数据,可以优化运营策略,提升服务质量。本任务中使用 Python 对骑行数据进行深入的业务分析,目的是识别关键运营指标,并提出基于数据的改进建议。
使用提供的骑行数据集,计算以下指标:
(1)单车周转率
日均使用次数 = 单车每日骑行订单数的平均值
日均使用时长 = 单车每日总骑行时长的平均值(小时)
计算周转率 = 日均使用时长 / 24小时,结果以百分比表示
需分别计算工作日和周末的周转率
(2)区域供需分析
区域供需平衡指数计算方法:
o计算每个区域的供给量 = 该区域结束骑行的单车数量
o计算每个区域的需求量 = 该区域开始骑行的单车数量
o供需平衡指数 = (供给量 - 需求量) / 需求量 × 100%
o指数为正表示供大于求,为负表示供不应求
o理想范围应在 ±20% 之内
(3)高峰期分析
对于每个区域在工作日早晚高峰时段(7:00-9:00,17:00-19:00):
o计算平均小时需求量 = 该时段内每小时发起的骑行订单数量
o计算实际供给量 = 该时段内区域内可用单车数量
o计算供需比 = 实际供给量 / 平均小时需求量
o供需比低于1.2的区域被认定为供给不足
o供需比高于2.0的区域被认定为供给过剩
根据上述分析结果,请撰写一份简短的分析报告(300字以内),内容应包括:
当前运营情况的主要发现
存在的关键问题和挑战
至少三条具体的优化建议,并说明预期效果
将分析报告内容复制粘贴至【提交结果.docx】中对应的任务序号下。