忙了好久没有更新,最近各种汇报、组会、读文献、学习深度学习的基础知识,转眼间4月都快结束了,太快了。。
- 今天分享一个用来检查下载的GPM数据是否存在缺失的python代码。为什么要这么干呢?这是因为在进行深度学习进行数据集前处理的时候,我这里使用了两套资料,一套卫星的产品,一套观测的资料。其中一套资料存在部分时刻的文件缺失,而我所研究的深度学习的方向,需要考虑数据的时间同步性,要缺失,两套资料对应时刻都缺失。
- 这里提供两个解决的办法
一个是,手动创建缺失时刻的数据,将其全部赋成缺测值,然后最后进行数据处理的时候再剔除掉。
第二个办法更简单一点,直接将两套数据资料进行相互验证。剔除掉缺失的部分。举个例子,如果A数据缺失2023.04.28时刻的数据,那么同样的将B数据中相同时刻的数据也剔除掉。这样起码保证了每个数据在时间上对应上的。当然,这种情况对于短期内变化较小的数据影响稍微好一点。如果短时间内,某一个变量变化非常明显的话,可能就不太适合了。
下面分享一个代码,是用来检查下载的GPM降水资料是否存在缺失的情况,比较简单,但是效率也比较低,无非是循环套循环。
代码如下,思路比较简单:
观察数据路径格式可以发现路径是有规律的,按照不同年份、不同天数、不同时刻进行一个循环即可。需要注意的几个点是:
- 1、需要判断该年是不是闰年
- 2、年份下面的文件夹是按照该年的天数进行排列的,而不是月份。文件的命名为:001、002、003、004、005、、、、366这样
- 3、但是具体到每个文件中是正常的
月-天
的格式:20160101、、20161231,所以为什么我下面写了两个关于day的循环,一个是对于文件夹
名的循环,一个是关于文件本身命名
的循环 - 4、这里偷懒了,最后的命名其实是有规律的,但是我直接使用
glob.glob()
直接将所有符合要求的*HDF5
文件进行匹配了。
最后就是将整个文件路径拼起来就完事了,之前其实写过类似的教程,批量读取不同文件夹下的文件名称,属于是换汤不换药了。。:
1、python ——批量读取相同格式文件(多个文件夹/单个文件夹)—nc文件为例
2、python 批量处理nc文件-字符串拼接文件,有规律文件名
这里记录一下,方面后续偷懒直接调用
import os
import calendar
# '/Datadisk/GPM/GPM_30min/2016/366/3B-HHR.MS.MRG.3IMERG.20161231-S003000-E005959.0030.V06B.HDF5'
file_path = '/Datadisk/GPM/GPM_30min/'
for year in range(2016,2018):
if calendar.isleap(year):
days_in_year = 366
else:
days_in_year = 365
for month in range(1,13):
for day in range(1,days_in_year+1):
for d in range(1,calendar.monthrange(year,month)[1]+1):
day_str = "{0:03d}".format(day)
print(day_str)
fn = file_path + '%04.0f'%year +'/'+day_str +'/'+ '3B-HHR.MS.MRG.3IMERG.'+\
'%04.0f'%year+'%02.0f'%month+'%02.0f'%d+'*.HDF5'
fn = glob.glob(fn)
for i in fn:
if os.path.exists(i):
pass
else:
print(fn +' is missing')