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

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

文章目录

  • 前言
    • 1. 概述
    • 2. 版本
      • 2.1 山东青岛,2021年3月29日,Version1
      • 2.2 山东青岛,2021年5月3日,Version2
    • 3. 微信公众号GISRSGeography
  • 一、climte indices库中的indices.spei()的输入和输出
  • 二、基于climate_indices库计算站点SPEI
    • 1. 数据准备
    • 2. 站点特定尺度的spei的计算
    • 3. 和spei.exe计算结果的比较


前言

  此系列博文的目的是基于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中的介绍。该文档对该库中各个气象指数调用时的基本参数进行了说明。
    基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算_第1张图片
  2. 对于如何利用climate_indices库中的spei函数计算spei,我们可以打开下载的此包的源码,查看里面对于spei函数这一部分的定义。
    基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算_第2张图片
  3. 以下是源码中对于spei函数的定义语句,通过其定义语句,我们可以知道在调用此库计算SPEI时需要输入的参数信息,关于这些参数的介绍,可以参考源码中的说明或者1中给出链接中的说明。以下对其进行简要说明:
    基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算_第3张图片
  • 输入参数简要说明
参数 含义 输入格式
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可以看出两者存在着一定的差别,这可能是由于分布拟合参数上有一些区别导致的。
基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算_第4张图片

你可能感兴趣的:(04_地理数学方法,python,SPEI)