您现在的位置是:首页 >技术杂谈 >python -- 检验GPM数据是否缺失网站首页技术杂谈

python -- 检验GPM数据是否缺失

简朴-ocean 2023-06-22 04:00:02
简介python -- 检验GPM数据是否缺失

忙了好久没有更新,最近各种汇报、组会、读文献、学习深度学习的基础知识,转眼间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')
                        
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。