基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算

无论外界怎样,请平心静气地努力!


前言

  此系列博文的目的是基于Python的Climate Indices库计算标准化降水蒸散发(SPEI)指数。

1. 概述

  此篇博文的目的是基于Climate Indices库中计算SPEI的函数,在一个站点上展开某一时间尺度的SPEI的计算。

2. 版本

2.1 山东青岛,2021年3月29日,Version1

2.2 山东青岛,2021年5月3日,Version2

   (1)原始程序的第38行pet_mm=tas_data修改为pet_mm=pet_data

3. 微信公众号GISRSGeography

  • 公众号 GISRSGeography的内容涉及GIS,遥感和作物模型等的内容,会坚持更新,
    欢迎大家关注,谢谢!。
    GISRSGeography

一、climte indices库中的indices.spei()的输入和输出

  1. 关于climate indices库的用法介绍,可以参考climate_indices 1.08 Documents中的介绍。该文档对该库中各个气象指数调用时的基本参数进行了说明。
    Climate Indices部分输入参数介绍
  2. 对于如何利用climate_indices库中的spei函数计算spei,我们可以打开下载的此包的源码,查看里面对于spei函数这一部分的定义。
    indices源码
  3. 以下是源码中对于spei函数的定义语句,通过其定义语句,我们可以知道在调用此库计算SPEI时需要输入的参数信息,关于这些参数的介绍,可以参考源码中的说明或者1中给出链接中的说明。以下对其进行简要说明:
    spei函数中的参数
  • 输入参数简要说明
参数含义输入格式
precips_mm降水(毫米)numpy数组
pet_mm潜在蒸散发(毫米)numpy数组
scale时间尺度整型
distribution用于拟合时间序列的分布函数字符串
periodicity计算的时间单元字符串,‘monthly’或’daily’
data_start_year计算开始年整型
calibration_year_initial校准期最初年份整型
calibration_year_final校准期最后年份整型
param fitting_params预先计算的分布拟合参数的可选字典字典,通常使用默认值
  • 输出数据
      计算完成之后,函数的输出数据是就是特定时间尺度的SPEI,以浮点型的np.array的格式输出。

二、基于climate_indices库计算站点SPEI

1. 数据准备

  计算spei的测试数据,我们选择SPEI提出者给出的测试数据tampa.txt,选择此数据的另一个好处是我们可以将基于climate indices库计算的spei和基于官方的spei.exe计算的spei进行对比。需要注意的是tampa.txt的存储格式是按照spei.exe计算时需要的格式存储的,所以下载完成之后,可以先将其进行预处理,转存到.csv文件中
tampa.csv文件内容

2. 站点特定尺度的spei的计算

  在了解climate indices库中spei函数的基本用法之后,我们可以利用该库计算spei,由于我们利用的数据的内容是温度和降水,这里我们需要先依据桑斯维特方法计算潜在蒸散发(pet),可以再climate indices库中调用计算pet的函数直接计算pet。整个基于climate indices库计算特定时间尺度的spei的程序如下:

# -*- coding: utf-8 -*-
"""
1. 程序目的
    (1) 基于climate indices库计算spei
   
2. 版本
    2.1 山东青岛  2021年3月29日 Version 1
"""

# 相关包的导入
import numpy as np
import pandas as pd

from climate_indices import indices
from climate_indices import compute  # 计算SPEI的包

# 路径处理和基本变量定义
rootdir = r'D:\SPEI_Cal\\';
tampa_file = rootdir + '01_Data\\tampa.csv'
outpath = rootdir + '03_Result\\'

lat = 27.96
styr = 1900
edyr = 2007

# 气象数据读取
tampa_data = pd.read_csv(tampa_file)
pre_data = np.asarray(tampa_data['Pre']) # 降水数据转换为np.array
tas_data = np.asarray(tampa_data['Tas']) # 温度数据转换为np.array

# 潜在蒸散发计算-桑斯维特方法
pet_data = indices.pet(temperature_celsius=tas_data,
                      latitude_degrees=lat,
                      data_start_year=styr)

# 计算SPEI
spei = indices.spei(precips_mm=pre_data,
                    pet_mm=pet_data, # pet_mm=tas_data是不正确的,
                    scale=3, # 3个月尺度
                    distribution=indices.Distribution.gamma,
                    periodicity=compute.Periodicity.monthly,
                    data_start_year=styr,
                    calibration_year_initial=styr,
                    calibration_year_final=edyr,
                    )

spei[np.isnan(spei)] = -99 # nan转换为-99
spei_df = pd.DataFrame(data=spei,columns=['SPEI_3']) # 计算结果转换为DataFrame

# 计算结果写出
spei_df.to_csv(outpath+'SPEI3.csv',index=False)

print('Finished.')

3. 和spei.exe计算结果的比较

  通过比较基于spei.exe和基于climate indices库计算的spei可以看出两者存在着一定的差别,这可能是由于分布拟合参数上有一些区别导致的。
SPEI计算结果比较

评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

EWBA_GIS_RS_ER

如有帮助,赏杯茶吧。

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

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

打赏作者

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

抵扣说明:

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

余额充值