基于Sen+MK的多站点不同季节和年尺度的SPEI趋势分析.md

news2024/12/23 20:54:54
再大的风浪,不过只短暂喧哗。

文章目录

  • 前言
    • 1. 概述
      • 2.1 问题情景
      • 2.2 说明
    • 2. 版本
      • 2.1 天津,2024年5月4日,Version1
    • 3. 微信公众号GISRSGeography
  • 一、数据
    • 1. 输入数据
    • 2. 输出数据
  • 二、程序代码
  • 三、参考资料


前言

1. 概述

2.1 问题情景

  • 假设目前我们有若干个站点的春、夏、秋、冬和四季的spei,需要利用Sen+MK方法计算各站点四季和年尺度的SPEI的趋势。

2.2 说明

  • 测试数据和程序可以点击基于Sen+MK的多站点不同季节和年尺度的SPEI趋势分析下载。
  • 请尊重知识产权,切勿复制本程序和示例数据到闲鱼、淘宝等平台,一经发现,必将追究相关责任。

2. 版本

2.1 天津,2024年5月4日,Version1

3. 微信公众号GISRSGeography

  • 欢迎大家关注公众号 GISRSGeography,谢谢!。
    GISRSGeography

一、数据

1. 输入数据

  • 存储在同一个excel文件中的三个站点的四季和年尺度的SPEI。
    输入数据

2. 输出数据

  • 存储在一个excel文件中的三个站点的四季和年的SPEI的SEN+MK的趋势分析结果。
    输出数据

二、程序代码

# -*- coding: utf-8 -*-
"""
1. 程序目的
   (1) 基于SEN+MK分析不同站点四季和年的干旱趋势

2. 2024年5月4日 Version 1

3. 数据
   3.1 输入数据
       '...\JJJ_SensonYearSPEI.xlsx'
       
   3.2 输出数据
       '...\JJJ_SensonYearSPEI_SEN.xlsx'
   
"""
# %% 包的导入
# 包的导入
import numpy as np
import pandas as pd

import pymannkendall as mk

# %% 四季和年spei数据读取
def spei_get(
        inpath: str
        ) -> list:
    """
    (1) 功能:
        1) 读取四季和年的SPEI
    ----------
    
    (2) 输入参数
        1) inpath: str
           文件存储绝对路径
    ----------
      
    (3) 输出参数
        1) spei_data: DataFrame
           spei数据
  
    """
    spei_data = pd.read_excel(inpath)
    
    return spei_data

# %%   
def spei_trend(
        speidata: pd.DataFrame,
        styr: int,
        edyr: int
        )  -> pd.DataFrame:
    """
    (1) 功能
        1) 提取目标时段的spei
        2) 计算不同时段的spei的sen趋势,并利用mk进行显著性检验
    ----------
    
    (2) 输入参数
    speidata : pd.DataFrame
               存储着目标站点四季和年尺度的SPEI
    -------
    
    (3) 输出数据
    spei_senslope : pd.DataFrame
                    存储着目标站点四季和年尺度的SPEI的Sen+MK的趋势分析结果

    """
    # 目标时段数据选取
    speidata_aim = speidata.loc[(speidata['Year']>=styr) & (speidata['Year']<=edyr),:]
    
    # 特定站点数据提取并调用pymannkendall进行趋势计算和显著性检验
    seasonyear = ['Spring','Summer','Autumn','Winter','YearSPEI']
    sen_p = ['_SenSlope','_PValue']
    columns = ['Sta_ID','Period']
    for seasonyear_temp in seasonyear:
        for senp_temp in sen_p:
           columns.append(seasonyear_temp+senp_temp) 
    
    spei_senslope = pd.DataFrame([],columns=columns)
    sta_all = np.unique(speidata_aim.Sta_ID)
    ii = 0
    for sta_temp in sta_all:
        # 站点数据提取
        spei_sta = speidata_aim.loc[speidata_aim['Sta_ID']==sta_temp,:] 
        
        # Sen趋势度计算和显著性检验
        for seasonyear_temp in seasonyear:
            spei_sta_seasonyear = spei_sta[seasonyear_temp]
            
            senmkresult = mk.original_test(spei_sta_seasonyear)
            spei_senslope.loc[ii,seasonyear_temp+'_SenSlope']=senmkresult.slope
            spei_senslope.loc[ii,seasonyear_temp+'_PValue']=senmkresult.p
            #print(senmkresult)
        
        spei_senslope.loc[ii,'Sta_ID'] = sta_temp
        
        ii = ii + 1
        
        print(ii)
            
    spei_senslope['Period'] = str(styr) + '-' + str(edyr)
    
   
    return spei_senslope

                     
# %%
if __name__ == '__main__':
    
# %% 路径处理和变量预定义
    infile = r'...\JJJ_SensonYearSPEI.xlsx'     # 需要修改为自己的路径
    outfile = r'...\JJJ_SensonYearSPEI_SEN.xlsx' # 需要修改为自己的路径
    
    styr=1980;
    edyr=2020;
       
# %% spei数据读取
    spei_data  = spei_get(infile)
    
# %% Sen+MK
    spei_sen = spei_trend(spei_data,styr,edyr)
    
# %% 结果写出
    spei_sen.to_excel(outfile,index=False,sheet_name='JJJ')
    
    print('Finished.')


三、参考资料

  1. pymannkendall 1.4.3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1642830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java-Spring-mvc-(请求和响应)

目录 &#x1f4cc;HTTP协议 超文本传输协议 请求 Request 响应 Response &#x1f3a8;请求方法 GET请求 POST请求 &#x1f4cc;HTTP协议 超文本传输协议 HTTP协议是浏览器与服务器通讯的应用层协议&#xff0c;规定了浏览器与服务器之间的交互规则以及交互数据的格式…

thinkphp6 workerman无法使用框架Db/model等类库方法解决方案

thinkphp6 workerman无法使用框架Db/model相关操作解决 执行安装相关扩展 composer require webman/gateway-worker引入成功后编辑服务类文件,直接展示代码 <?phpnamespace app\server\controller;use GatewayWorker\BusinessWorker; use GatewayWorker\Gateway; use Gate…

java异常.day30(Error,Exception)

Error和Exception说明 Error Error类及其子类表示的是Java虚拟机&#xff08;JVM&#xff09;无法或不应该尝试恢复的严重问题。这些问题通常是由JVM本身的问题、系统资源耗尽、或其他不可控的环境因素引起的。由于Error是不可恢复的&#xff0c;因此应用程序不应该尝试捕获和…

Cisco WLC 2504控制器重启后所有AP掉线故障-系统日期时间

1 故障描述 现场1台WLC 2504控制器掉电重启后&#xff0c;所有AP均无线上线&#xff0c; 正常时共有18个AP在线&#xff0c;而当前为0 AP在线数量为0 (Cisco Controller) >show ap sumNumber of APs.................................... 0Global AP User Name..........…

细胞自动机与森林火灾与燃烧模拟

基于 元胞自动机-森林火灾模拟_vonneumann邻域-CSDN博客 进行略微修改&#xff0c;解决固定方向着火问题&#xff0c;用了一个meshv2数组记录下一状态&#xff0c;避免旧状态重叠数据失效。 参数调整 澳洲森林火灾蔓延数学建模&#xff0c;基于元胞自动机模拟多模式下火灾蔓延…

大语言模型从Scaling Laws到MoE

1、摩尔定律和伸缩法则 摩尔定律&#xff08;Moores law&#xff09;是由英特尔&#xff08;Intel&#xff09;创始人之一戈登摩尔提出的。其内容为&#xff1a;集成电路上可容纳的晶体管数目&#xff0c;约每隔两年便会增加一倍&#xff1b;而经常被引用的“18个月”&#xf…

【C++题解】1659. 是否含有数字5

问题&#xff1a;1659. 是否含有数字5 类型&#xff1a;分支结构 题目描述&#xff1a; 请从键盘读入一个五位整数 n&#xff0c;判断其是否含有数字 5&#xff0c;如果含有数字 5 &#xff0c;请输出这个 5 位数各个位的和&#xff1b;如果不含数字 5 &#xff0c;请直接输出…

IoTDB 入门教程 基础篇⑧——数据库管理工具 | IDEA 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、IDEA驱动四、IDEA连接数据库五、数据库应用六、其他 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/org/apache/iotdb/iotdb-jdbc/ 本…

记录vue报错问题 in ./node_modules/axios/lib/platform/index.js

今天这个问题困扰了我许久 报错内容如下&#xff1a; 最初一直以为是我没装axios&#xff0c;又重新装了一次&#xff0c;后面才发现是axios版本原因&#xff0c;真的总是被版本的原因困住真的很烦 解决方法如下&#xff1a; 将axios的版本改为1.5.0 1、打开项目的文件夹“…

探索LLM在广告领域的应用——大语言模型的新商业模式和新个性化广告的潜力

概述 在网络搜索引擎的领域中&#xff0c;广告不仅仅是一个补充元素&#xff0c;而是构成了数字体验的核心部分。随着互联网经济的蓬勃发展&#xff0c;广告市场的规模已经达到了数万亿美元&#xff0c;并且还在持续扩张。广告的经济价值不断上升&#xff0c;它已经成为支撑大…

C++奇迹之旅:STL初步学习

文章目录 &#x1f4dd;什么是STL&#x1f320; STL的版本&#x1f309;STL的六大组件 &#x1f320;STL的重要性&#x1f309;如何学习STL&#x1f320;STL的缺陷&#x1f6a9;总结 &#x1f4dd;什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的…

ubuntu安装LVGL/lv_img_conv并在thinkphp中进行调用生成bin文件

项目需求&#xff1a;需要处理图片成为bin文件&#xff0c;并以二进制的方式传给蓝牙设备&#xff0c;当前仅介绍如何安装&#xff0c;对lvgl功能和简介不做过多描述 项目库地址&#xff1a;https://github.com/lvgl/lv_img_conv 安装过程比较简单 一&#xff0c;确保node.j…

ubuntu20中ros与anaconda的python版本冲突问题

系统环境 原本系统是ubuntu20 noetic&#xff0c;python都在/usr/bin中&#xff0c;一共是两个版本的python&#xff0c;一个是python3.8&#xff0c;另一个是python2.7。 问题发现 当安装anaconda后&#xff0c;并且将anaconda的bin目录加入到系统环境中时候&#xff0c;…

Unity 性能优化之动态批处理(四)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、动态合批是什么&#xff1f;二、使用动态批处理1.打开动态合批2.满足条件 三、检查动态合批是否成功五、动态合批弊端总结 前言 动态批处理是常用优…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮&#xff0c;鼠标放在按钮上可以弹性拉出的三个按钮&#xff0c;使用贝塞尔曲线实现&#xff0c;项目demo显示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

TOOL使用fiddler导出的har文件导入到postman测试接口

在fiddler操作 export → File → Export Sessions → alls-->http arch v1.1 导出的har文件直接拖入到浏览器的调试工具中&#xff0c; 然后复制为curl&#xff0c;导入到postman中即可&#xff01;

菜鸡学习netty源码(四)—— EventLoop

1.概述 我们前面进行过分析,channel为netty网络操作的抽象类,EventLoop负责处理注册到其上的Channel处理的I/O事件;EventLoopGroup是一个EventLoop的分组,它可以获取到一个或者多个的EventLoop对象。 2.类关系图 NioEventLoopGroup的类继承图,蓝色部分为对应的java类,绿…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/o…

AI大模型探索之路-训练篇13:大语言模型Transformer库-Evaluate组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

2021-11-10 51蛋骗鸡单数码0-9按键条件速度逢9蜂鸣

缘由用Proteus设计单片机控制1只数码管&#xff0c;循环显示0~9。循环显示间隔可手动按钮调整。每当到9时&#xff0c;发出声音提示-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3;…