当前位置:首页>python>淼的Python科研包|1.卫星降水数据下载

淼的Python科研包|1.卫星降水数据下载

  • 2026-09-13 17:52:48
淼的Python科研包|1.卫星降水数据下载

前言

SCI论文返修,审稿人质疑我用的CHIRPS数据集在中国的质量不行。由于之前下载的MSWEP数据不在手边,于是我开发了 sysumkit 包,可以直接下载 IMERG 和 GSMaP数据集。相信做地学或者环境研究的人,找不到高质量的降水数据集肯定都会很难受,相信这篇推文和 sysumkit 包一定能帮到有需要的朋友!

PS:本篇如果能帮到大家,希望各位给GitHub仓库点个Star,谢谢哈!

诞生由来

好消息,论文写的有机会出版;坏消息,CHIRPS数据集质量太差。

小问题,我换套数据集呗。相信咱的算法换种数据集照样效果好!

sysumkit 安装及使用

下载:https://github.com/Curallin/sysumkit/tree/main 

安装

下载 .whl 文件,激活目标 Python 环境。

执行 pip install whl文件

使用conda激活环境安装whl包

IMERG数据环境配置

IMERG数据集下载需要进行必要的配置,请参阅官方文档https://urs.earthdata.nasa.gov/profile

如果不明白怎么配置,可以参考往期付费推文https://mp.weixin.qq.com/s/FNDrmp9tZiYWWcVpAahsjw  ,一顿饭钱感谢各位老板!

from precipkit.download import configure_earthdataconfigure_earthdata()

调用ImergDownloader模块下载IMERG数据

前往IMERG官网,筛选数据、获取下载链接:https://disc.gsfc.nasa.gov/datasets/GPM_3IMERGDF_07/summary?keywords=IMERG

筛选数据、点击Get Data获取下载链接

from sysumkit.download.imerg import ImergDownloader# 1. 下载dl = ImergDownloader(    links_txt=下载链接地址,    output_folder=输出目标文件夹,    organize_by_date=True,)dl.download()# 2. 删除不完整的文件 这里设置为小于5MB的文件【这一步要小心,先确认正常文件大小是多少】dl.check_incomplete_files(    min_size_mb=5)# 3. 重试失败(可选)dl.retry_failed(max_retries=3)

如图,已经进入下载,支持断点继续下载,代码会自动跳过已经存在的文件。同时,可以使用check_incomplete_files 把下载不完整的文件删除,使用 retry_failed 可以下载没有成功下载下来的数据。

调用GsmapDownloader模块下载GSMaP数据

GSMaP 数据下载是用固定的FTP账户密码端口,我已经在代码中写死,无需配置。

base_dir 指的是下载的产品,当前支持的是 V8最新版本 日尺度数据下载,如果需要其他版本的,可以参考源码进行更改。

start_mon, end_mon:起止年月

target: 输出文件夹

variable: 输出数据的变量名

【关键】GsMaP数据提供的原始数据是.gz文件,并且读取后单个文件的数据只有一行,需要进行转换,这里我查了相关资料,直接把转换成nc数据的逻辑写好了,可以直接使用dl.gz_to_nc()就可以把下载的数据全部转换为xarray正常读取的nc文件。

from sysumkit.download.gsmap import GsmapDownloader# 1. 初始化下载器dl = GsmapDownloader(    base_dir='/standard/v8/daily_G/00Z-23Z/',    start_mon='202607',    end_mon='202607',    target=r'D:\GSMaP',    variable='precip')# 2. 执行下载dl.download()# 3. 如果有失败,重试dl.retry_failed(max_retries=3)# 4. 转换为 NCdl.gz_to_nc()

合并数据集

由于日数据是按照: 根目录>年>月>YYYYMMDD.nc来组织文件夹和文件的,因此我们可以轻松实现合并任意时间范围、矩形区域内的数据

合并 IMERG 数据集

from sysumkit.download import IMERGAdapter, BasePrecipMerger# 数据适配器dataset = IMERGAdapter(    root=r"D:/IMERG")# 数据合并器merger = BasePrecipMerger(    adapter=dataset,    start_date="20200101",    end_date="20201231",    lat_range=(20, 30),    lon_range=(100, 120))# 合并并保存merger.merge(    r"D:/IMERG/IMERG.nc")

合并 GsMaP 数据集

from sysumkit.download import GSMaPAdapter, BasePrecipMergerimport xarray as xr# 数据适配器dataset = GSMaPAdapter(    root=r"D:/GSMaP")# 数据合并器merger = BasePrecipMerger(    adapter=dataset,    start_date="20260701",    end_date="20260727",    lat_range=(0, 60),    lon_range=(70, 140))# 合并并保存merger.merge(    r"D:/GSMaP/GSMaP.nc")ds = xr.open_dataset(r"D:/GSMaP/GSMaP.nc")ds.mean(dim='time').precip.plot()

未完待续

后续继续开发工具模块,目前自己有很多降水相关的统计算法、地理绘图代码,有时间会慢慢纳入~

欢迎加入 Python科研AI交流群:428657886

视频介绍

已关注
关注
重播 分享 赞

点个喜欢吧

最新文章

随机文章