gma 教程 | 气候气象 | 计算标准化降水蒸散指数(SPEI)

目标

【基于 Excel 降水和蒸散数据计算 SPEI】
【基于 GTiff 栅格降水和蒸散数据计算 SPEI】

环境

系统: Window 10+ (X64)
Python 版本: 3.8.8 +
gma 版本: 1.0.10 +

gma 安装和详细功能帮助见:地理与气象分析库

函数

gma.climet.SPEI(PRE, PET, Axis = None, Scale = 1, Periodicity = 12)


功能:【标准化降水蒸散指数】。基于 Log-Logistic 分布计算标准化降水蒸散指数。

参数:

 PRE: array。降水量(mm)。

 PET: array。潜在蒸散量(mm)。

可选参数:

  Axis = int。计算轴。如果不设置(None),多维数据会将所有数据展开到一维计算。

  Scale = int。时间尺度。默认为 1。例如:1月、3月或其他。

  Periodicity = int。周期。默认为 12。例如:月数据可以以 12 为周期。

*注意:Scale、Periodicity 基于计算轴!

返回:array

参考文献:

 Vicente-Serrano S M , S Beguería, JI López-Moreno. A Multiscalar Drought Index Sensitive to Global Warming: The Standardized Precipitation Evapotranspiration Index[J]. Journal of Climate, 2010, 23(7):1696-1718.


示例

数据

基于 Excel 表数据的 SPEI 计算

import gma
import pandas as pd
# 读取数据
Data = pd.read_excel('PRE_ET0.xlsx')

# 看一下 Excel 文件前 5 行内容
Data.head()
PREET0
15.253.4
7.266.9
34.5114.4
22.8144.1
3.7208.5
# 提取 PRE 和 ET0 用于 SPEI 运算
PRE = Data['PRE'].values
ET0 = Data['ET0'].values
# 分别计算1个月、3个月、6个月、12个月、24个月、60个月尺度的 SPEI 数据
SPEI1 = gma.climet.SPEI(PRE, ET0)
SPEI3 = gma.climet.SPEI(PRE, ET0, Scale = 3)
SPEI6 = gma.climet.SPEI(PRE, ET0, Scale = 6)
SPEI12 = gma.climet.SPEI(PRE, ET0, Scale = 12)
SPEI24 = gma.climet.SPEI(PRE, ET0, Scale = 24)
SPEI60 = gma.climet.SPEI(PRE, ET0, Scale = 60)

绘制计算结果

import matplotlib.pyplot as plt
PAR = {'font.sans-serif': 'Times New Roman',
       'axes.unicode_minus': False,
      }
plt.rcParams.update(PAR)

## 标记一下不同时间尺度结果变量的不同
S = [1,3,6,12,24,60]
## 准备横坐标(年份)的标签
X = range(len(PRE))
Date = gma.osf.DateSeries('198101','202101',DateDelta='M', Format='%Y%m').strftime('%Y-%m')

## 循环绘制 6 个尺度的 SPEI 结果
plt.figure(figsize = (18, 14), dpi = 300)
for i in range(6):
    ax = plt.subplot(4, 2, i + 1) 
    ### 绘制数据
    ax.plot(X, eval(f'SPEI{S[i]}'), linewidth = 0.8, c = 'gray')
    ### 添加图例
    ax.legend([f'SPEI{S[i]}'],frameon = False)
    ### 添加横坐标标签
    ax.set_xticks(X[::72], Date[::72], rotation = 0)
    ### 定义横纵坐标显示范围
    ax.set_xlim(-12)
    ax.set_ylim(-3.8, 3.8)
    ### 绘制干(-1)湿(1)分界线
    plt.axhline(y = -1,ls=(0,(6,6)), c="r", linewidth = 0.4)
    plt.axhline(y = 1,ls=(0,(6,6)), c="b", linewidth = 0.4)
    ### 绘制其他网格
    ax.grid(True, linestyle = (0,(6,6)), linewidth = 0.3)
### 修改子图边距
plt.subplots_adjust(wspace = 0.04, hspace = 0.18)
plt.show()

绘图结果如下:

请添加图片描述
将结果保存到文件

OUT = pd.DataFrame([SPEI1, SPEI3, SPEI6, SPEI12, SPEI24, SPEI60],
                   index = ['SPEI1','SPEI3','SPEI6','SPEI12','SPEI24','SPEI60']).T
OUT.to_excel('SPEI.xlsx', index = False)

基于 GTiff 栅格数据的 SPEI 计算

import gma
## 读取数据集
PERSet = gma.Open(r'D:\BaiduNetdiskDownload\PRE_Luoyang_1981-2020.tif')
ET0Set = gma.Open(r'D:\BaiduNetdiskDownload\ET0_Luoyang_1981-2020.tif')
PRE = PERSet.ToArray()
ET0 = ET0Set.ToArray()
### 读取的数据为三维数据(波段,行,列),第一维为时间序列(月数据)。因此按照轴 0 来计算
SPEI1 = gma.climet.SPEI(PRE, ET0, Axis = 0)
SPEI3 = gma.climet.SPEI(PRE, ET0, Axis = 0, Scale = 3)
SPEI6 = gma.climet.SPEI(PRE, ET0, Axis = 0, Scale = 6)
SPEI12 = gma.climet.SPEI(PRE, ET0, Axis = 0, Scale = 12)
SPEI24 = gma.climet.SPEI(PRE, ET0, Axis = 0, Scale = 24)
SPEI60 = gma.climet.SPEI(PRE, ET0, Axis = 0, Scale = 60)

绘制最后一个月(2020年12月)计算结果

绘图方法请参考:基于 Python 的地理空间绘图指南

请添加图片描述
存储计算结果

for i in S:
	# 保存所有结果中的非全 nan 波段。即:去除时间尺度累积时序列前无效的波段。
    gma.rasp.WriteRaster(fr'.\1981-2020_SPEI{i}.tif', 
                         eval(f'SPEI{i}[i-1:]'), 
                         Projection = PRESet.Projection,
                         Transform = PRESet.GeoTransform, 
                         DataType = 'Float32', 
                         NoData = np.nan)  

反馈与讨论

微信号:Luo_Suppe

相关链接

地理与气象分析库

### 回答1: Cran Spei是一个用来计算每日标准化降水蒸散指数(Standardized Precipitation Evapotranspiration Index,SPEI)的R软件包。SPEI是一个量化气候干旱指数,它综合考虑了降雨、蒸散发和温度等气象因素对气候干旱的影响。 使用Cran Spei可以通过输入气象数据(如降雨、温度等),得到每天的SPEI值。在计算每日SPEI值时,Cran Spei考虑了各个气象因素的影响,并采用统计模型对计算结果进行了标准化处理。 在实际应用中,Cran Spei可以帮助农业、水资源管理等领域预测干旱风险,从而采取相应的措施来应对干旱。另外,Cran Spei还可以对不同时间尺度(如月度、季度、年度等)的SPEI进行计算,以更全面地了解气候变化对干旱影响的情况。 ### 回答2: Cran Spei是一个用于计算每日标准化降水蒸发指数(Standardized Precipitation Evapotranspiration Index,简称SPEI)的R软件程序包,其主要功能是提供基于时间序列的SPEI计算方法,以分析气候变化对水资源的影响。 每日SPEI计算是指将每日的降水量和蒸发量数据转化为标准化指数,以便对水文、气象和生态系统等领域的研究进行比较和分析。SPEI主要反映了降水量与蒸发量之间的平衡程度,从而反映了水资源的变化情况。 Cran Spei使用了最新的气候数据和模型,支持从日降水数据中计算近百年的SPEI。它还提供了多种标准化指数计算方法和时间尺度选择,以满足不同应用领域的需求。由于SPEI计算方法比较复杂,使用Cran Spei软件包可以使计算过程更加简单和方便。 总之,每日SPEI计算是一个重要的水文、气象和生态系统研究方法,而Cran Spei软件包则是一个方便实用的计算工具,可以有效地分析气候变化对水资源的影响。
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

洛的地理研学

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值