登录
转载

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

发布于 2021-04-07 阅读 45
  • 后端
  • 人工智能
转载

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

文章目录

  • 前言
    • 1. 概述
    • 2. 版本
      • 2.1 山东青岛,2021年3月29日,Version1
  • 一、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


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

  • 关于climate indices库的用法介绍,可以参考climate_indices 1.08 Documents中的介绍。该文档对该库中各个气象指数调用时的基本参数进行了说明。 Climate Indices部分输入参数介绍
  • 对于如何利用climate_indices库中的spei函数计算spei,我们可以打开下载的此包的源码,查看里面对于spei函数这一部分的定义。 indices源码
  • 以下是源码中对于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=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_1']) # 计算结果转换为DataFrame
    
    # 计算结果写出
    spei_df.to_csv(outpath+'SPEI3.csv',index=False)
    
    print('Finished.')
    
    
    

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

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

    评论区

    king
    3粉丝

    励志做一条安静的咸鱼,从此走上人生巅峰。

    0

    0

    0

    举报