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

文章介绍了在进行深度学习数据预处理时,如何使用Python检查GPM降水资料是否存在缺失的情况。通过循环遍历文件路径,结合闰年判断,找出并处理缺失文件,以确保数据的时间同步性。提供了两种处理方法,包括创建缺测值和数据相互验证。
摘要由CSDN通过智能技术生成

忙了好久没有更新,最近各种汇报、组会、读文献、学习深度学习的基础知识,转眼间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')
                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值