广东省计算机设计大赛2025年样题(含解析)

森 绫 发布于 2025-06-17 50 次阅读


前言

超好玩的广东省计算机设计大赛已经结束啦,看起来好像没有任何资料,本着贡献的态度,开源资料~

样题1

整体要求

本题需要在Linux操作系统中完成Flume的安装配置。请根据下列任务完成相关配置,具体要求如下。

在Linux终端执行命令 "initnetwork",或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络,启动基础环境。

【数据获取】

使用wget命令获取数据(运行引号中的所有代码可将数据上传到实训平台)。

Flume安装包:“wget -P /data http://house.tipdm.com/JS-Competition/software/apache-flume-1.11.0-bin.tar.gz”。

【说明】

① 登录平台后需先在Linux终端执行命令"initnetwork",或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络。

② 通过"$JAVA_HOME"指令可返回JAVA的安装目录;通过"$HADOOP_HOME"指令可返回Hadoop的安装目录。

③ 通过 wget 命令可将安装包下载至“/data”目录下,完整数据路径为“/data/apache-flume-1.11.0-bin.tar.gz”。

【答案提交】

整理赛题的最终答案的代码与成果,并按照以下要求提交完整答案。

代码提交:将每道小题的完整代码(非图片)填入相应小题的答题框,注意代码的缩进、格式。5分

第一题

要求

将master节点的/data目录下的Flume安装包解压到/opt/module目录下(若无/opt/module目录需自行创建),查看/opt/module目录结构并将查看结果截图。

代码答案

tar -zxvf /data/apache-flume-1.11.0-bin.tar.gz -c /opt/module 

解析

tar -zxvf example.tar.gz
#-z: 表示要使用 gzip 解压归档文件。
#-x: 表示解压操作。
#-v: 表示详细输出,列出被解压的文件。
#-f example.tar.gz: 指定要解压的归档文件的名称为 example.tar.gz。

第二题

要求

进入Flume安装目录的conf目录,将flume-env.sh.template重命名为flume-env.sh,将JAVA的安装目录添加至flume-env.sh文件中。

代码答案

cd /opt/module/apache-flume-1.11.0-bin/conf
mv flume-env.sh.template flume-env.sh
vim flume-env.sh
#JAVA_HOME=修改为目标路径

解析

解压后重命名文件并修改即可

第三题

要求

删除Flume安装目录的lib目录下的guava-11.0.2.jar包,之后将Hadoop类库中的guava-27.0-jre.jar复制至Flume安装目录的lib目录,最后查看Flume安装目录的lib目录下的内容,验证guava的Jar包版本并截图。

代码答案

ls -al | grep guava
rm guava-11.0.2.jar
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar \
   /opt/module/apache-flume-1.11.0-bin/lib

解析

  1. 寻找原来的guava包,删除
  2. 复制hadoop 的guava包到flume的目录

第四题

要求

在master节点的/etc/profile文件中配置Flume环境变量(FLUME_HOME)和PATH的值,并使配置文件立即生效,最后查看Flume版本,检测Flume是否安装成功,并将结果截图。

代码答案

vim /etc/profile 
#添加以下内容
#export FLUME_HOME = /opt/module/apache-flume-1.11.0-bin
#export PATH=$FLUME_HOME/bin
source /etc/profile
flume-ng version

解析

记得重启或应用环境变量

样题2

整体要求

本题需要在Linux操作系统中完成Spark的安装配置。请根据下列任务完成相关配置,具体要求如下。

在Linux终端执行命令“initnetwork”,或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络,启动基础环境。

【数据获取】

使用wget命令获取数据(运行引号中的所有代码可将数据上传到实训平台)。

① Spark安装包:“wget -P /data http://house.tipdm.com/JS-Competition/software/spark-3.2.1-bin-hadoop3.2.tgz”。

② 2016-2020年空气质量数据:“wget -P /data http://house.tipdm.com/JS-Competition/data/2016年空气质量数据.csv”。

wget -P /data http://house.tipdm.com/JS-Competition/data/2017年空气质量数据.csv”。

wget -P /data http://house.tipdm.com/JS-Competition/data/2018年空气质量数据.csv”。

wget -P /data http://house.tipdm.com/JS-Competition/data/2019年空气质量数据.csv”。

wget -P /data http://house.tipdm.com/JS-Competition/data/2020年空气质量数据.csv”。

【说明】

① 登录平台后需先在Linux终端执行命令“initnetwork”,或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络。

② 通过“$JAVA_HOME”指令可返回JAVA的安装目录;通过“$HADOOP_HOME”指令可返回Hadoop的安装目录。

③ 通过 wget 命令可将安装包下载至“/data”目录下,完整数据路径为“/data/spark-3.2.1-bin-hadoop3.2.tgz”。

第一题

要求

在master节点将/data目录下的spark-3.2.1-bin-hadoop3.2.tgz安装包解压到/opt/module目录下(需自行创建/opt/module目录),查看/opt/module目录结构。

代码答案

mkdir -p /opt/module && tar -zxvf /data/spark-3.2.1-bin-hadoop3.2.tgz -C /opt/module

解析

创建目录并解压到目标目录即可

第二题

要求

在master节点上将/opt/module/spark-3.2.1-bin-hadoop3.2/conf目录下的spark-env.sh.template文件更名为spark-env.sh,workers.template文件名更名为workers,查看/opt/module/spark-3.2.1-bin-hadoop3.2/conf目录下的内容。

代码答案

cd /opt/module/spark-3.2.1-bin-hadoop3.2/conf
mv spark-env.sh.template spark-env.sh
mv workers.template workers
ls -al /opt/module/spark-3.2.1-bin-hadoop3.2/conf

解析

打开到spark的目标目录,对文件进行重命名即可

第三题

要求

在spark-env.sh文件中进行修改,需要配置JAVA_HOME安装目录及Hadoop的配置文件目录,指定standalone模式运行时的Master进程运行在master节点上,指定Master进程内部通信端口号及SPARK的WEB UI端口。workers文件中进行修改,指定standalone模式运行时Worker进程需要分别在master、slave1、slave2节点上运行。

代码答案

cd /opt/module/spark-3.2.1-bin-hadoop3.2/conf
vim spark-env.sh
# 之后修改JAVA_HOME,WEBUI, MASTER_PORT
vim workers
# 修改为master
#       slave1
#       slave2

解析

第四题

要求

在master节点上将Spark安装目录远程拷贝到slave1、slave2节点的/opt/module路径下,之后查看slave1和slave2的/opt/module目录结构。

代码答案

scp -r /opt/module/spark-3.2.1-bin-hadoop3.2 root@slave1:/opt/module
scp -r /opt/module/spark-3.2.1-bin-hadoop3.2 root@slave2:/opt/module
ssh slave1
ls -l /opt/module
exit
ssh slave2
ls -l /opt/module

解析

scp [选项] [源文件] [目标路径]
-r:递归复制整个目录。
-P:指定远程主机的 SSH 端口号(默认是 22)。
-p:保留文件的修改时间、访问时间和权限。
-v:显示详细的调试信息,有助于排查问题。
-C:启用压缩,可以加快传输速度。

第五题

要求

在master节点修改/etc/profile文件,设置Spark环境变量(SPARK_HOME)和PATH的值,并使环境变量生效。

代码答案

vim /etc/profile
#SPARK_HOME
export SPARK_HOME=/opt/module/spark-3.2.1-bin-hadoop3.2
export PATH=$SPARK_HOME/bin:$PATH

scp -r /etc/profile root@slave1:/etc/profile
scp -r /etc/profile root@slave2:/etc/profile

解析

注意同步其他节点的变量

第六题

要求

启动Spark集群,使用jps查看master节点、slave1节点、slave2节点的进程(启动Spark集群前需先启动Hadoop集群)

代码答案

$HADOOP_HOME/sbin/start-all.sh
/opt/module/spark-3.2.1-bin-hadoop3.2/sbin/start-all.sh

解析

第七题

要求

在HDFS中创建/air目录,并将master节点的/data目录下2016年-2020年空气质量数据共5份csv文件上传至HDFS的/air目录下。

代码答案

hdfs dfs -mkdir /air
hdfs dfs -put /data/2016年空气质量数据.csv /air/
hdfs dfs -put /data/2017年空气质量数据.csv /air/
hdfs dfs -put /data/2018年空气质量数据.csv /air/
hdfs dfs -put /data/2019年空气质量数据.csv /air/
hdfs dfs -put /data/2020年空气质量数据.csv /air/
hdfs dfs -ls /air

解析

使用hdfs API将文件发送到指定目录

第八题

要求

使用Spark SQL分别读取/air目录下的5份csv数据文件并转为DataFrame数据,合并5年的空气质量数据,并保存为新的DataFrame,命名为airdata,打印数据的记录数及列名。

代码答案

var df1 = spark.read.option("header","true")
                 .option("sep",",")
                    .csv("hdfs://master:8020/air/2016年空气质量数据.csv")
var df2 = spark.read.option("header","true")
                 .option("sep",",")
                    .csv("hdfs://master:8020/air/2017年空气质量数据.csv")
var df3 = spark.read.option("header","true")
                 .option("sep",",")
                    .csv("hdfs://master:8020/air/2018年空气质量数据.csv")
var df4 = spark.read.option("header","true") //读入数据
                 .option("sep",",")
                    .csv("hdfs://master:8020/air/2019年空气质量数据.csv")
var df5 = spark.read.option("header","true") //读入数据
                 .option("sep",",")
                    .csv("hdfs://master:8020/air/2020年空气质量数据.csv")

var unionedDF = df1.union(df2).union(df3).union(df4)

解析

使用spark.read.option读入数据后,再用union合并表

第九题

要求

对airdata数据进行去重,并打印输出去重后的数据记录数。

代码答案

var airdata = unionedDF.distinct()
airdata.describe()

解析

使用distinct()方法对数据进行去重,用describe()方法查看数据。

第十题

要求

将去重后的数据保存到HDFS的/air/airdata.csv文件中

代码答案

airdata.coalesce(1) //写入数据
    .write.option("header","true")
        .csv("hdfs://master:8020/air/airdata.csv")
//后续重命名生成的csv并移动到/air目录

解析

使用write.option回写csv文件

样题3

整体要求

针对某地区的居民幸福度,从气候、经济、人口等方面进行综合分析。其中,气候数据来源于气象站采集的“地面逐小时常规观测数据.csv”,但该文件存在数据质量问题,请根据以下任务编写Python代码,完成数据的获取与清洗。

【数据获取】

使用wget命令获取数据(右键打开终端,运行引号中的所有代码可将数据上传到实训平台)。

地面逐小时常规观测数据:wget -P /data http://house.tipdm.com/JS-Competition/data/地面逐小时常规观测数据.csv。

【说明】

平台的数据路径为“/data/地面逐小时常规观测数据.csv”

【答案提交】

整理赛题的最终答案的代码按照以下要求提交完整答案。

代码提交:将每道小题的完整代码(非图片)填入相应小题的答题框,注意代码的缩进、格式。

第一题

要求

使用Pandas库读取“地面逐小时常规观测数据.csv”,并赋值给变量data1。

代码答案

import pandas as pd
data1 = pd.read_csv('data/地面逐小时常规观测数据.csv')

解析

使用pandas库读入数据

第二题

要求

根据“观测时间”字段,删除数据的重复值,要求保留最后一条重复数据。

代码答案

data1  = data1.drop_duplicates(subset="观测时间",keep="last")

解析

使用drop_duplicates方法对数据去重,注意保留最后一条数据

第三题

要求

对于数据存在的缺失值,使用“前向填充”方法填充缺失值。

代码答案

data1.fillna(method="pad",inplace=True)
data1.isna().sum()

解析

对数据集使用fillna方法,参数method为pad,作用前向填充。使用inplace=True替换缺失值。

第四题

要求

删除“气压”和“气温”字段的数值单位,并将数值类型转为浮点型,如气压“1023hPa”改为“1023.0”。

代码答案

data1['气温'] = data1['气温'].str.strip('℃').astype(float)
data1['气压'] = data1['气压'].str.strip('hPa').astype(float)
data1['气压']

解析

使用字符串分割法替换即可并使用astype对类型进行转换

第五题

要求

通过描述性统计分析查看数据的最大值、最小值、平均值与四分位数,并查看数据的字段类型。

代码答案

print(data1.describe())
print(data1.info())

解析

使用.info和.describe分别查看

第六题

要求

在气象业务中,2分钟与10分钟的风向与风速数值相差不大,删除数据中2分钟风向与风速数据。

代码答案

data1.drop(['2分钟平均风速','2分钟平均风向'],axis=1,inplace=True)
data1.info()

解析

使用drop删除数据即可,注意删除的是列数据。

第七题

要求

“观测时间”字段转为datetime时间类型,并通过重采样的方法,按照下面的统计方式,将逐小时数据转化为逐日数据,获取逐日平均数据。

统计方式数据字段
平均值气压、气温、相对湿度、 10 分钟平均风向、 10 分钟平均风速
总和过去一小时的降水量

代码答案

data1['观测时间'] = pd.to_datetime(data1['观测时间'])
data1 = data1.set_index("观测时间")
group_data = data1.resample("D").agg({
    '气压':'mean',
    '气温':'mean',
    '相对湿度':'mean',
    '过去一小时降水量':'sum',
    '10分钟平均风向':'mean',
    '10分钟平均风速':'mean'
})

解析

使用datetime对数据进行转换,使用set_index将列设置为索引,之后使用重采样,对所有的数据进行聚类重采样。

第八题

要求

修改逐日平均数据的字段名称:观测时间、气压、气温、相对湿度、日降水量、平均风向、平均风速。

代码答案

group_data = data1.rename(columns={
    '观测时间':'观测时间',
    '气压':'气压',
    '气温':'气温',
    '相对湿度':'相对湿度',
    '过去一小时降水量':'日降水量',
    '10分钟平均风向':'平均风向',
    '10分钟平均风速':'平均风速'
})
group_data

解析

使用rename方法对所有数据进行重命名,之后查看数据即可。

第九题

要求

将处理后的逐日平均数据保存至“result2.csv”文件中。

代码答案

group_data.to_csv('data/result2.csv',index=False)

解析

使用to_csv方法对处理好的数据进行保存即可。

样题4

整体要求

基于处理后的“地面气候数据.csv”,完成下列任务的Python代码编写,统计并计算气候属性指标,分析该地区的居住气候。

【数据获取】

使用wget命令获取数据(右键打开终端,运行引号中的所有代码可将数据上传到实训平台)。

地面气候数据:wget -P /data http://house.tipdm.com/JS-Competition/data/地面气候数据.csv

【说明】

平台的数据路径为“/data/地面气候数据.csv”

【答案提交】

整理赛题的最终答案的代码与成果,根据赛供的“问题4答案报告.docx”文档,按文档要求将其整理入文档,并以“准考证号+问题4答案报告”命名并提交。

第一题

要求

从“观测时间”列提取年份,如“2016/1/5”提取数值“2016”,将结果保存至“年份”字段,并展示提取结果。

代码答案

import pandas as pd
import numpy as np
data = pd.read_csv('data/地面气候数据.csv')
data['年份'] = data['观测时间'].str.split('/').str[0]
data.head(10)

解析

读取数据后使用字符串分割并保存就好。

第二题

要求

降水指标:统计并展示2016~2020年的总降水量。

代码答案

group_data = data.groupby(by='年份')
group_data.agg({'降水量':'sum'})

解析

对数据按照年份分组,然后,聚类求和

第三题

要求

根据下面的公式,计算风效指数、温湿指数,并将计算结果保存至相应的字段。

指标计算公式
风效指数$ -(10\sqrt{风速}+10.45-风速)\times (33-气温)+8.55\times 日照指数 $
温湿指数$ 1.8\times 气温+ 32- 0.55\times (1- 相对湿度)\times (1.8\times 气温-26) $

代码答案

data['风效指数'] = -(10*np.sqrt(data['平均风速'])-data['平均风速'])*
                    (33-data['气温'])+(8.55*data['日照时数'])
data['温湿指数'] = (1.8*data['气温'])+32-0.55*(1-data['相对湿度'])*
                    (1.8*data['气温']-26)
data.head(10)

解析

按照公式进行暴力计算,另起一列保存数值

第四题

要求

气候舒适指标:根据不同的环境条件,通过风效指数、温湿指数,筛选气候舒适的数据,并统计每年气候舒适的累计天数。

序号属于气候舒适的环境条件
110℃ ≤ 气温 ≤ 16℃ -600 < 风效增效 ≤ -50
2气温 < 10℃ 且 相对湿度 < 0.85 且 -600 < 风效指数 ≤ -50
3气温>16℃ 且 55 ≤ 温湿指数 < 70
4气温<10℃ 且 相对湿度 > 0.85 且 55 ≤温湿指数 < 70

代码答案

def is_comfortable(df):
    if 10 <= df['气温'] <= 16 and -600 <= df['风效指数'] <= -50:
        return True
    if df['气温'] < 10 and -600 <= df['风效指数'] <= -50 and df['相对湿度'] < 85:
        return True
    if df['气温'] > 16 and 55 <= df['温湿指数'] < 70:
        return True
    if df['气温'] < 10 and df['相对湿度'] > 85 and 55 <= df['温湿指数'] < 70:
        return True
    return False
data['是否舒适'] = data.apply(is_comfortable,axis=1)
data.head(10)
print(data.groupby(by= '年份')['是否舒适'].sum())

解析

通过构建一个函数,对数据进行自定义函数处理即可

第五题

要求

气温指标:筛选日平均气温不小于15℃且不大于25℃的数据作为适宜气温数据,统计并展示每年适宜气温的累计天数。

代码答案

temp = data.loc[(data['气温'] >= 15) & (data['气温'] <= 25)]
print(temp.groupby('年份').size())

解析

对数据进行条件切片,直接计算大小

第六题

要求

合并降水指标、气候舒适指标和气温指标,并将合并结果保存至“result3.csv”文件中

代码答案

data.to_csv('data/result3.csv',index=False)

样题5

整体要求

基于“空气质量数据.csv”,完成下列任务的Python代码编写,从多个维度统计并分析该地区的环境质量。

【数据获取】

使用wget命令获取数据(右键打开终端,运行引号中的所有代码可将数据上传到实训平台)。

空气质量数据:wget -P /data http://house.tipdm.com/JS-Competition/data/空气质量数据.csv

【说明】

平台的数据路径为/data/空气质量数据.csv

【答案提交】

整理赛题的最终答案的代码与成果,根据赛供的“问题5答案报告.docx”文档,按文档要求将其整理入文档,并以“准考证号+问题5答案报告”命名并提交。

第一题

要求

从“日期”列提取年份,如“2016年1月1日”提取数值“2016”,将结果保存至“年份”字段,并展示提取结果。

代码答案

import pandas as pd
df =pd.read_csv("data/空气质量数据.csv")
df.head(5)
year = df["日期"].str[:4]
df["年份"]= year
df.head(10)

解析

读取完数据后,对字符串进行分割,之后保存即可

第二题

要求

根据空气质量指数(AQI)对照下表的空气质量等级标准,划分空气质量类别,将分类结果保存至“空气质量等级”字段,并展示分类结果。

代码答案

def AQI_level(AQI):
    if 0< AQI <=50:
        return "优"
    elif 51< AQI <=100:
        return "良"
    elif 101< AQI <=150:
        return "轻度污染"
    elif 151< AQI <=200:
        return "中度污染"
    elif 201< AQI <=300:
        return "重度污染"
    else:
        return "严重污染"
df["AQI等级"]=df["AQI"].apply(AQI_level)
df.head(10)

解析

通过构建一个函数,对数据进行自定义函数处理即可。

第三题

要求

统计不同空气质量等级的天数,并按升序排序。

代码答案

df["AQI等级"].value_counts(ascending=True)

解析

使用value_counts统计天数,参数为asceding=True(升序排序)

第四题

要求

通过透视表,统计并展示2016~2020年不同空气质量等级的天数,以“年份”作为透视表的索引。

代码答案

# 创建透视表
pivot_table = pd.pivot_table(df, 
                             values="AQI", 
                             index="年份", 
                             columns="AQI等级", 
                             aggfunc='count', 
                             fill_value=0)

# 展示透视表
pivot_table

解析

使用pivot_table方法,对数据做透视表,注意聚类函数和空值填充。

第五题

要求

统计2016~2020年空气污染物(PM10、PM2.5、NO2、SO2、CO)的最大值与最小值。

代码答案

result = df.groupby(["年份"])[['PM10','PM2.5','NO2','SO2','CO']].agg(['max','min'])
result

解析

对年份进行分组,分别使用聚类函数进行聚类

样题6

整体要求

基于“居民收入数据.csv”,完成下列任务的Python代码编写,对该地区居民收入进行分析,挖掘其中隐藏的城市经济趋势,并对未来两年的居民收入进行预测。

【数据获取】

使用wget命令获取数据(右键打开终端,运行引号中的所有代码可将数据上传到实训平台)。

居民收入数据:wget -P /data http://house.tipdm.com/JS-Competition/data/居民收入数据.csv

【说明】

① 平台的数据路径为/data/居民收入数据.csv

② 在可视化图表中,中文字体可设置为WenQuanYi Zen Hei

【答案提交】

整理赛题的最终答案的代码按照以下要求提交完整答案。

代码提交:将每道小题的完整代码(非图片)填入相应小题的答题框,注意代码的缩进、格式。

第一题

要求

计算各特征(x1~x13,y)之间的Pearson相关系数,并以DataFrame数据结构展示。

代码答案

data = pd.read_csv('data/居民收入数据.csv')
no_year = data.drop("year",axis=1)
data_cor = np.round(no_year.corr(method='pearson'),2)
data_cor

解析

注意删除year字段的数据,会干扰计算结果。

第二题

要求

提取“x1”至“x13”字段作为特征,赋值给feature变量;提取“y”字段作为标签,赋值给label变量。

代码答案

features = data.iloc[:,1:14]
label = data["y"]

解析

按题目要求对数据进行切片即可

第三题

要求


构建Lasso()函数,设置λ的值为1000,使用特征与标签训练模型,并对训练完成后的模型,获取并输出每个特征的相关系数值。

代码答案

model = Lasso(alpha=1000)
model.fit(features,label)
print("Lasso回归系数:", np.round(model.coef_,5))

解析

通过sklearn库,对数据集构建模型,进行训练。注意alpha参数

第四题

要求

对特征数据feature抽取强相关特征,赋值给new_feature变量。

强相关特征x1 ,x3, x4 , x5 , x6 , x7 , x8 , x13

代码答案

new_features = features[['x1','x3','x4','x5','x6','x7','x8','x13']]

解析

将特征列保存为新的变量即可

第五题

要求

将特征数据new_feature和标签数据label进行标准差标准化,输出并查看标准化后的结果。

代码答案

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
scaler_feature=scaler.fit_transform(new_features)
scaler_label = scaler.fit_transform(label.values.reshape(-1,1))
scaler_feature_df = pd.DataFrame(scaler_feature,
                                 columns=new_features.columns)
scaler_label_df = pd.DataFrame(scaler_label)
scaler_feature_df