1.比赛资料
比赛名称:第二届世界科学智能大赛地球科学赛道:AI极端降水预报
官网连接:上海科学智能研究院
环境:https://www.modelscope.cn/my/mynotebook/preset
2.Task1 逐行解释代码
2.1Terminal环境安装
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_earth_baseline.git
这两行代码是用于Git版本控制系统的命令,通常用于从远程仓库克隆代码库到本地。
git lfs install
- 这条命令是用于初始化Git Large File Storage(LFS)的。
Git LFS是一个Git扩展,用于处理大型文件。
它允许你像处理小文件一样处理大文件,例如视频、图片或其他大型二进制文件。
install
命令会设置Git LFS,使其在当前仓库中可用。
git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_earth_baseline.git
- 这是
git clone
命令,用于克隆远程Git仓库到本地。
- 这是
https://www.modelscope.cn/datasets/Datawhale/AICamp_earth_baseline.git
是远程仓库的URL地址。
当你执行这个命令时,Git会从该URL下载仓库的所有文件和历史记录到本地目录,
目录名称默认为仓库名,即AICamp_earth_baseline
。
请注意,实际执行这些命令之前,你需要确保你的计算机上已经安装了Git和Git LFS,
并且你有权限访问指定的远程仓库。
2.2安装数组处理库
在运行环境中安装对应的库,并解压数据集
执行命令即可
!pip install xarray[complete]
这行代码是Python的包管理工具pip的命令,用于安装一个名为xarray
的Python库,并指定了一个额外的选项[complete]
。下面是对这条命令的详细解释:
-
!
:这个感叹号在某些编程环境中(如Jupyter Notebook)用作命令行模式的指示符,表示接下来的内容应该作为命令行命令执行。如果你在标准的Python脚本或命令行环境中使用pip,你不需要这个感叹号。 -
pip
:是Python的包安装器,用于安装和管理Python包。 -
install
:这是pip的一个子命令,用于安装指定的包。 -
xarray[complete]
:指定了要安装的包名和额外的选项。xarray
是一个开源的、用于处理多维数组的Python库,特别适合处理N维数组,常用于地球科学和数据科学领域。[complete]
是一个额外的选项,表示安装xarray
时包括所有可选的依赖项,这通常意味着安装一些额外的库,这些库提供了额外的功能或优化性能。
执行这条命令后,pip会从Python包索引(PyPI)下载xarray
及其所有必要的依赖项,并安装到当前Python环境中。这确保了xarray
的所有功能都能正常使用。如果你只需要xarray
的基本功能,也可以省略[complete]
选项,仅安装核心包。
2.3解压数据集:训练集和测试集
!unzip -q -n weather.round1.train.gt.2019-2021.zip -d groundtruth
!unzip -q -n weather.round1.test.zip -d test
这两行代码是Unix-like系统的命令行指令,用于解压ZIP文件。下面是对每条命令的逐行解释:
-
!unzip -q -n weather.round1.train.gt.2019-2021.zip -d groundtruth
!
:在某些编程环境(如Jupyter Notebook)中,感叹号用于执行系统命令。unzip
:是一个用于解压ZIP文件的命令行工具。-q
:表示“quiet”模式,即安静模式,不显示解压过程中的详细信息。-n
:表示不覆盖已存在的文件。如果目标目录中已经存在与ZIP文件中同名的文件,unzip
命令将不会替换它们。weather.round1.train.gt.2019-2021.zip
:这是要解压的ZIP文件的名称。-d
:后面跟着的是解压后文件存放的目录。这里是groundtruth
,意味着解压后的文件将被放置在这个名为groundtruth
的目录中。
-
!unzip -q -n weather.round1.test.zip -d test
- 这条命令与第一条命令类似,只是解压的ZIP文件和目标目录不同。
weather.round1.test.zip
:这是另一个要解压的ZIP文件的名称。-d test
:指定了解压后文件存放的目录为test
。
执行这两条命令后,weather.round1.train.gt.2019-2021.zip
和weather.round1.test.zip
这两个ZIP文件将被解压到当前目录下的groundtruth
和test
目录中,且不会覆盖已存在的同名文件。如果你在标准的命令行环境中使用这些命令,可以去掉前面的感叹号。
2.4 导入运行所需要的库函数
import os
import pandas as pd
import xarray as xr
from torch.utils.data import Dataset, DataLoader
这段Python代码是导入模块的语句,用于在Python脚本或Jupyter Notebook中引入所需的库。下面是对每个导入语句的解释:
-
import os
- 这行代码导入了Python的标准库
os
,它提供了一种方便的方式来使用操作系统依赖的功能,如文件路径操作、环境变量访问等。
- 这行代码导入了Python的标准库
-
import pandas as pd
- 这行代码导入了
pandas
库,并将其别名设置为pd
。pandas
是一个强大的数据分析和操作库,广泛用于数据处理和分析任务,特别是处理表格数据(如CSV文件)。
- 这行代码导入了
-
import xarray as xr
- 这行代码导入了
xarray
库,并将其别名设置为xr
。xarray
是一个用于处理多维数组的库,特别适合于处理具有标签的N维数组,常用于地球科学、气象学等领域。
- 这行代码导入了
-
from torch.utils.data import Dataset, DataLoader
- 这行代码从
torch.utils.data
模块导入了Dataset
和DataLoader
类。 torch.utils.data
是PyTorch框架的一部分,用于数据加载和批处理。Dataset
是一个抽象类,用于定义自定义数据集。它需要你实现__len__
方法(返回数据集中的样本数量)和__getitem__
方法(根据索引获取数据集中的样本)。DataLoader
是一个迭代器,用于批量加载数据集,支持自动加载、自动打乱(如果设置了shuffle=True
)和多线程加载。
- 这行代码从
这些导入的库和类通常用于数据科学、机器学习和深度学习项目中,用于数据处理、分析以及模型训练的数据准备。
2.5 数据集路径配置设置
比赛的数据部分分为数据特征和数据真值两部分,数据特征是模型训练的输入,数据真值是模型训练的标签
其中数据特征部分
输入的路径目录下包含年份文件夹
例如示例给出的 “输入路径/2021/…” 各年份文件夹下包含从官网下载的压缩包
(e.g. weather.round1.train.ft.2021.1.zip)
解压后文件夹下有不同时段的数据文件夹
(e.g. 20210101-00),
内部包含6个nc文件, 是从伏羲大模型中获取的从第6小时到第72小时的数据
数据真值部分
输入的路径目录下包含3个年份的.nc数据,
其中选择哪些年份的特征数据作为输入,
就在years中添加哪些年份
fcst_steps指预测的时间步长,
从第1小时到第72小时,
间隔为1小时
# path config
feature_path = 'feature'
gt_path = 'groundtruth'
years = ['2021']
fcst_steps = list(range(1, 73, 1))
这段Python代码是设置路径配置和一些变量的语句,通常用于定义数据文件的存储路径和一些分析或模型训练过程中需要的参数。下面是对每行代码的解释:
-
# path config
- 这是一个注释行,用于说明接下来的几行代码是关于路径配置的。
-
feature_path = 'feature'
- 这行代码定义了一个名为
feature_path
的变量,其值为字符串'feature'
。这通常用于指定存放特征数据的目录路径。
- 这行代码定义了一个名为
-
gt_path = 'groundtruth'
- 这行代码定义了一个名为
gt_path
的变量,其值为字符串'groundtruth'
。这通常用于指定存放地面真实数据(Ground Truth)的目录路径。
- 这行代码定义了一个名为
-
years = ['2021']
- 这行代码创建了一个名为
years
的列表,其中只包含一个元素'2021'
。这个列表用于指定分析或模型训练所使用的年份数据。
- 这行代码创建了一个名为
-
fcst_steps = list(range(1, 73, 1))
- 这行代码首先使用
range
函数生成一个从1到72的整数序列(因为range(1, 73, 1)
的结束索引是不包含的,即73不包括在内),然后使用list
函数将这个序列转换成一个列表,赋值给变量fcst_steps
。这个列表可能用于表示预测的时间步长,例如在气象预测中,可能表示从1小时到72小时的每个小时的预测。
- 这行代码首先使用
这些变量和配置通常在数据处理或模型训练脚本的开始部分设置,以便于在脚本的其他部分引用这些路径和参数。
2.6 Feature类和GroundTruth类是数据集的定义
方便后续自定义数据集和数据加载类, 方便我们训练时取数据
# Feature部分
class Feature:
def __init__(self):
self.path = feature_path
self.years = years
self.fcst_steps = fcst_steps
self.features_paths_dict = self.get_features_paths()
def get_features_paths(self):
init_time_path_dict = {
}
for year in self.years:
init_time_dir_year = os.listdir(os.path.join(self.path, year))
for init_time in sorted(init_time_dir_year):
init_time_path_dict[pd.to_datetime(init_time)] = os.path.join(self.path, year, init_time)
return init_time_path_dict
def get_fts(self, init_time):
return xr.open_mfdataset(self.features_paths_dict.get(init_time) + '/*').sel(lead_time=self.fcst_steps).isel(
time=0)
# GroundTruth部分
class GT:
def __init__(self):
self.path = gt_path
self.years = years
self.fcst_steps = fcst_steps
self.gt_paths = [os.path.join(self.path