Python | 超前滞后分析
Nino SST Indices (Nino 1+2, 3, 3.4, 4; ONI and TNI)
有几个指标用于监测热带太平洋,所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常,异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Niño 3.4 index)
和海洋厄尔尼诺指数(Oceanic Niño Index (ONI))
是定义厄尔尼诺和拉尼娜事件最常用的指数。其他index
用于帮助描述每个事件的独特性质。
El Niño 1、2、3和4 的范围如下所示:
Niño 1+2 (0-10S,90W-80W)
:
- 厄尔尼诺1 + 2区域是Niño海表温度区域中最小和最东部的区域,与南美洲沿海地区相对应,在那里El Niño,首先被当地居民识别发现。这一指数往往是Niño海表温度指数中变化最大的。
Niño 3(5N-5S,150W-90W)
:
- 这个区域曾经是监测和预测El Niño现象的主要焦点,但是研究人员后来了解到,ENSO 海洋-大气耦合相互作用的关键区域位于更西部(Trenberth,1997)。因此,
Niño 3.4和 ONI 成为定义厄尔尼诺和拉尼娜事件的首选
。
Niño 3.4(5N-5S,170W-120W)
: - Niño3.4异常可以被认为代表从日期线到南美海岸的横跨太平洋的赤道 SST 的平均值。Niño 3.4 index通常使用5个月的连续平均值,
El Niño or La Niña
是在Niño 3.4 SST 超过 +/-0.4 C 6个月或更长时间内确定的。
ONI (5N-5S,170W-120W)
:
- ONI 使用与厄尔尼诺3.4指数相同的区域。ONI 采用的是连续3个月的平均值,要被归类为全面的厄尔尼诺或拉尼娜现象,
异常必须至少连续5个月超过 + 0.5 C 或 -0.5 C
。这是美国国家海洋和大气管理局使用的定义。
Niño 4(5N-5S,160E-150W)
:
- 厄尔尼诺4指数捕捉赤道太平洋中部的海表温度异常。这个区域的变化往往比其他厄尔尼诺区域少。
为了定义每个 El Niño or La Niña
事件的独特性,Trenberth 和 Stepaniak (2001)认为,应该将厄尔尼诺3.4指数与他们引入的一个指数结合使用,这个指数被称为跨尼诺指数(Trans-Niño Index,TNI
)。TN
I 被定义为厄尔尼诺1 + 2和厄尔尼诺4区域之间标准化海表温度异常的差异。TNI 因此测量了赤道太平洋中部和东部海表温度异常的梯度。当海表温度梯度特别大时(比如,由于尼诺4区域的正异常和尼诺1 + 2区域的负异常) ,一些研究人员将该事件归类为“太平洋中部的厄尔尼诺现象”
或“El Niño Modoki
”,尽管将这种类型的事件作为一个单独的现象进行区分是一个问题或争论。
Nino 3.4 index 的具体计算步骤
-
1、选择厄尔尼诺3.4区域(5N-5S,170W-120W)的
sst
月平均数据 -
2、计算Nino 3.4区域内每个月的异常
-
3、计算每个月异常的区域平均值
-
4、去线性趋势化处理(也可以不去)
代码实现过程:
# == netcdf file name and location"
fnc = 'oisst_monthly.nc'
dmask = xr.open_dataset('lsmask.nc')
print(dmask)ds = xr.open_dataset(fnc)
print(ds)# === Climatology and Anomalies
sst = ds.sst.where(dmask.mask.isel(time=0) == 1)
clm = sst.sel(time=slice('1982-01-01','2020-12-01')).groupby('time.month').mean(dim='time')
anm = (sst.groupby('time.month') - clm)
#print(clm)
# -- Detorending
def detrend_dim(da, dim, deg=1):# detrend along a single dimensionp = da.polyfit(dim=dim, deg=deg)fit = xr.polyval(da[dim], p.polyfit_coefficients)return da - fitdef cal_nino34(ds,lat1,lat2,lon1,lon2):ds = ds.sel(lat=slice(lat1,lat2),lon=slice(lon1,lon2))clm = ds.groupby('time.month').mean(dim='time')an_ds = ds.groupby('time.month') - clman_ds = an_ds.mean(('lon','lat'))an_ds = detrend_dim(an_ds,dim='time',deg=1)return an_dsnino3_4 = cal_nino34(sst,5,-5,190,240)
nino3_4.plot()
结果展示:
平滑
还可以对于指数进行平滑,使结果看起来更好看一点。如果指数平滑了,后续计算相关相关时也需要对于输入的其他变量进行统一平滑。
ninoSD=nino3_4/nino3_4.std(dim='time')
rninoSD=ninoSD.rolling(time=3, center=True).mean('time')
计算超前滞后
相关性和回归分析部分:
Leading:
- 通过计算NINO指数(rninoSD)和时间滞后12个时间步长的rdanm之间的相关系数和回归系数。类似地,也计算了时间滞后6个时间步长的相关系数和回归系数。
Simultaneous: - 计算NINO指数(rninoSD)和rdanm之间同期的相关系数和回归系数。
Lagging: - 计算NINO指数(rninoSD)和时间滞后6、12、18个时间步长的rdanm之间的相关系数和回归系数。
# -- Running meanranm = anm.rolling(time=3, center=True).mean('time')
rdanm = detrend_dim(ranm,'time',1)# -- Correlation & Regression# Leading
corM12 = xr.corr(rninoSD, rdanm.shift(time=-12), dim="time")
regM12 = xr.cov( rninoSD, rdanm.shift(time=-12), dim="time")/rninoSD.var(dim='time',skipna=True).values
corM6 = xr.corr(rninoSD, rdanm.shift(time=-6), dim="time")
regM6 = xr.cov( rninoSD, rdanm.shift(time=-6), dim="time")/rninoSD.var(dim='time',skipna=True).values# simultaneous
cor0 = xr.corr(rninoSD, rdanm, dim="time")
reg0 = xr.cov(rninoSD, rdanm, dim="time")/rninoSD.var(dim='time',skipna=True).values# Laging
corP6 = xr.corr(rninoSD, rdanm.shift(time=6), dim="time")
regP6 = xr.cov( rninoSD, rdanm.shift(time=6), dim="time")/rninoSD.var(dim='time',skipna=True).values
corP12 = xr.corr(rninoSD, rdanm.shift(time=12), dim="time")
regP12 = xr.cov( rninoSD, rdanm.shift(time=12), dim="time")/rninoSD.var(dim='time',skipna=True).values
corP18 = xr.corr(rninoSD, rdanm.shift(time=18), dim="time")
regP18 = xr.cov( rninoSD, rdanm.shift(time=18), dim="time")/rninoSD.var(dim='time',skipna=True).values
绘图
# -- figure plotdef makefig(cor, reg,title, grid_space):# 修复 0 度和 360 度经度附近未显示数据的伪影cor = gvutil.xr_add_cyclic_longitudes(cor, 'lon')reg = gvutil.xr_add_cyclic_longitudes(reg, 'lon')# 添加等距柱面投影,中心经度为210°ax = fig.add_subplot(grid_space,projection=ccrs.PlateCarree(central_longitude=210))# 添加海岸线ax.coastlines(linewidth=0.5, alpha=0.6)# 设置坐标范围gvutil.set_axes_limits_and_ticks(ax,xlim=(-180, 180),ylim=(-90, 90),xticks=np.arange(-180, 180, 60),yticks=np.arange(-90, 90, 30))# Use geocat.viz.util convenience function to add minor and major tick linesgvutil.add_major_minor_ticks(ax, labelsize=10)# Use geocat.viz.util convenience function to make latitude, longitude tick labelsgvutil.add_lat_lon_ticklabels(ax)#设置colorbarnewcmp = cmaps.NCV_blu_redindex = [5, 20, 35, 50, 65, 85, 95, 110, 125, 0, 0, 135, 150, 165, 180, 200, 210, 220, 235, 250 ]color_list = [newcmp[i].colors for i in index]# 设置colorbar中间颜色为白色color_list[9]=[ 1., 1., 1.]color_list[10]=[ 1., 1., 1.]# 定义填色图的参数kwargs = dict(vmin = -1.0,vmax = 1.0,levels = 21,colors=color_list,add_colorbar=False, # allow for colorbar specification latertransform=ccrs.PlateCarree(), # ds projection)# 相关系数的填色图fillplot = cor.plot.contourf(ax=ax, **kwargs)# 添加陆地、地形ax.add_feature(cfeature.LAND, facecolor='lightgray', zorder=1)ax.add_feature(cfeature.COASTLINE, edgecolor='gray', linewidth=0.5, zorder=1)# 设置等值线参数# Specify contour levels excluding 0delc=0.2levels = np.arange(-3, 0, delc)levels = np.append(levels, np.arange(delc, 3, delc))# 回归系数为等值线rad = reg.plot.contour(ax=ax,colors='black',alpha=0.8,linewidths=1.0,add_labels=False,levels=levels,transform=ccrs.PlateCarree())pe = [PathEffects.withStroke(linewidth=2.0, foreground="w")]plt.setp(rad.collections, path_effects=pe)# 设置标题、及其位置、大小gvutil.set_titles_and_labels(ax,lefttitle=title,lefttitlefontsize=16,righttitle='',righttitlefontsize=16,xlabel="",ylabel="")return ax, fillplot# Show the plotfig = plt.figure(figsize=(10, 12),dpi=200)
grid = fig.add_gridspec(ncols=2, nrows=3)
#grid = fig.add_gridspec(ncols=2, nrows=3, hspace=-0.20)ax1, fill1 = makefig(corP18,regP18,'18-month lag', grid[0,0])
ax2, fill2 = makefig(corP12,regP12,'12-month lag', grid[1,0])
ax3, fill3 = makefig(corP6,regP6,'6-month lag', grid[2,0])
ax4, fill4 = makefig(cor0,reg0,'Simultaneous', grid[0,1])
ax5, fill5 = makefig(corM6,regM6,'6-month lead', grid[1,1])
ax6, fill6 = makefig(corM12,regM12,'12-month lead', grid[2,1])fig.colorbar(fill6,ax=[ax1, ax2, ax3, ax4, ax5, ax6],drawedges=True,orientation='horizontal',shrink=0.5,pad=0.05,extendfrac='auto',extendrect=True)fig.suptitle('SST correlation & regression with Nino3.4', fontsize=18, y=0.9)plt.draw()
https://climatedataguide.ucar.edu/climate-data/nino-sst-indices-nino-12-3-34-4-oni-and-tni
Trenberth, Kevin & National Center for Atmospheric Research Staff (Eds). Last modified 2024-03-20 "The Climate Data Guide: Nino SST Indices (Nino 1+2, 3, 3.4, 4; ONI and TNI).”
Trenberth, K.E. and Stepaniak, D.P. (2001) Indices of El Nino Evolution. Journal of Climate, 14, 1697-1701.
https://doi.org/10.1175/1520-0442(2001)014<1697:LIOENO>2.0.CO;2https://climate.usu.edu/people/yoshi/pyclm101/index.html
本文由mdnice多平台发布
相关文章:

Python | 超前滞后分析
Nino SST Indices (Nino 12, 3, 3.4, 4; ONI and TNI) 有几个指标用于监测热带太平洋,所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常,异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Nio 3.4 index)和海洋厄尔尼诺指数(Ocea…...

Linux CPU利用率
Linux CPU利用率 在线上服务器观察线上服务运行状态的时候,绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如,随手拿来的一台机器,top 命令显示的利用率信息如下 这个输出结果说简单也简单,说复杂也不是那么…...

vue3实现导出pdf、png功能
准备做的系统中出现了 想导出当前页面的png或者pdf设计数据较多后端做可能比较麻烦 就自己研究了一下 1、安装html2canvas 、jspdf包 npm install --save html2canvas // 可以将dom元素转为一张图片 npm install --save jspdf // 导出为PDF格式 2、vue组件中引用&#x…...

what is tty?
waht is tty? 黑话:TTY 为什么使用Linux的时候CtrlC就会终止一个命令运行,ta是如何设置的? stty -a 桌面切换 CTRL ALT F1 – 锁屏 CTRL ALT F2 – 桌面环境 CTRL ALT F3 – TTY3 CTRL ALT F4 – TTY4 CTRL ALT F5 – TTY5 CTRL ALT F6 – TTY6...

在vite中限制node版本
1.修改package.json文件 {"name": "wine-store-frontend","version": "0.0.0","private": true,"type": "module","scripts": {"dev": "vite --open","build"…...

07 Php学习:运算符
PHP 算术运算符 在 PHP 中,算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取余数,负数运算、取反和并置运算。以下是这些运算符的详细解释和示例: 加法运算符 :用于将两个数值相加。 $a 5; $b 3;…...

做了多年前端,有没有想在python,go,nodejs,.net,java,c++中学一门后端,推荐
作为一名经验丰富的前端开发者,选择学习后端技术是一个重要的职业发展决策。Python、Go、Node.js、.NET、Java和C都是强大的后端开发语言,每门语言都有其特定的优势和应用场景。以下是对这些技术的分析,以帮助你做出选择: 目录 …...

JR-SMD201-P便携式网络解码器
详细介绍: JR-SMD201-P便携式网络解码器采用1/2U设计,支持AVS/H.265/H.264/MPEG2解码,支持IP输入,支持1080P/1080I/720P/576I/480I多种分辨率,支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持输入方式IP 接口丰富&a…...

线程池阻塞队列的选择
一、背景 想起前两年被问到阻塞队列怎么选,有界是必然的, ArrayBlockingQueue、LinkedBlockingQueue怎么选呢。 二、打开源码看看 ArrayBlockingQueue arrayBlockingQueue new ArrayBlockingQueue(3);LinkedBlockingQueue linkedBlockingQueue new Lin…...

linux内核驱动-在内核代码里添加设备结点
linux中,一切皆文件 我们在用户层用一些系统函数(如:fopen等等)时,会进入内核,内核会在字符注册了的设备号链表中查找。如果找到就运行我们写的设备文件的(驱动)函数 我们在前面已经…...

【算法优选】 动态规划之简单多状态dp问题——贰
文章目录 🎋前言🌴[买卖股票的最佳时机含冷冻期](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/)🚩题目描述🚩算法思路:🎈状态表示:🎈…...

【算法刷题 | 二叉树 06】4.10( 路径总和、路径总和 || )
文章目录 13.路径总和13.1问题13.2解法一:递归13.2.1递归思路(1)确定递归函数参数以及返回值(2)确定终止条件(3)确定递归逻辑 13.2.2代码实现 14.路径总和 ||14.1问题14.2解法一:递归…...

代码学习记录37----动态规划
随想录日记part37 t i m e : time: time: 2024.04.06 主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及四个方面: 完全背包;零钱兑换 II ;组合总和 Ⅳ 和单词拆分 …...

Spring Boot:Web开发之三大组件的整合
Spring Boot 前言Spring Boot 整合 ServletSpring Boot 整合 FilterSpring Boot 整合 Listener前言 在 Web 开发中,Servlet 、Filter 和 Listener 是 Java Web 应用中的三大组件。Servlet 是 Java 代码,通过 Java 的 API 动态的向客户端输出内容。Filter 是处于客户端与服务…...

2024.3.15力扣每日一题——卖木头块
2024.3.15 题目来源我的题解方法一 记忆化搜索(自顶向下)方法二 动态规划(自底向上) 题目来源 力扣每日一题;题序:2312 我的题解 方法一 记忆化搜索(自顶向下) 用 f(x,y)表示当木…...

vue快速入门(七)内联语句
注释很详细,直接上代码 上一篇 新增内容 button点击事件绑定内联语句写法与要求 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...

Docker实战教程 第2章 Docker基础
3-1 Docker介绍 什么是Docker 虚拟化,容器 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上&…...

【S32K3 MCAL配置】-3.2-CANFD配置-发送“经典CAN/CANFD标准帧“和“经典CAN/CANFD扩展帧“(基于MCAL+FreeRTOS)
"><--返回「Autosar_MCAL高阶配置」专栏主页--> 目录 实现的架构:基于MCAL层 前期准备工作: 1 评估板S32K312EVB-Q172中CAN外设...

【airtest】自动化入门教程(四)Poco元素定位
目录 一、基础操作 1、通过属性名等方式 2、通过属性组合 3、子节点方式 4、子节点加属性组合方式 5、孙节点offspring 6、兄弟节点sibling 7、父节点parent 8、正则表达式 9、直到某个元素出现 10、直到某个元素消失 二、通过局部坐标定位 1、使用局部坐标系的cli…...

Go语言中如何处理goroutine和循环变量
对goroutine和循环变量处理不当可能是Go开发人员在编写并发应用程序时最常犯的错误之一。让我们看一个具体的例子,然后我们将定义发生此类错误的条件以及如何防止发生这类错误。 在下面的示例中,我们初始化一个切片,然后在作为新goroutine执行的闭包中访问这个元素: s := …...

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容
在软件测试过程中,生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架,它不仅支持丰富的断言和测试用例组织方式,还提供了灵活的插件系统和钩子函数,可以帮助我们定…...

《高通量测序技术》分享,生物信息学生信流程的性能验证,以肿瘤NGS基因检测为例。
这是这本书,第四章第五节的内容,这一部分是以NGS检测肿瘤基因突变为例,描述了其原理和大概流程,这和以前我分享的病原宏基因组高通量测序性能确认方案可以互相补充,大家可以都看一下,但是想要真正的弄懂&am…...

Django+Celery框架自动化定时任务开发
本章介绍使用DjCelery即DjangoCelery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等,从而取代Jenkins上的定时执行脚本和发送…...

解决element-plus table组件 fixed=“right“(left)浮动后横向滚动文字穿透的问题
BUG 版本:element-plus 2.6.1 浏览器:360极速浏览器22.1 (Chromium内核) 组件:el-table组件 问题:在头部/尾部浮动加上斑马条纹后,横向滚动存在文字穿透的问题。具体如图: 白色背景行的文字,…...

【opencv】示例-distrans.cpp 距离变换
stuff.jpg #include <opencv2/core/utility.hpp> // 包含OpenCV中的核心功能支持库 #include "opencv2/imgproc.hpp" // 包含OpenCV中的图像处理库 #include "opencv2/imgcodecs.hpp" // 包含OpenCV中的图像编解码库 #include "open…...

LVGL V8 代码细读——极致的链表使用
极致的链表的使用 序章碎碎念从redis源码里掏出来的adlist极致的精简的list.hlvgl对链表的巧思lv_ll尾记 序章碎碎念 对于链表,大家应该都不陌生。学过数据结构的,都知道它作为链式储存的基础,重要性不言而喻。 由于本人自动化专业ÿ…...

蓝桥杯第十二届c++大学B组详解
目录 1.空间 2.直线 3.路径 4.卡片 5.货物摆放 6.时间显示 7.砝码称重 8.杨辉三角 9.双向排序 10.括号序列 1.空间 题目解析:1Byte 8bit 1kb 1024B 1MB 1024kb; 先将256MB变成Byte 256 * 1024 * 1024; 再将32位 变成Byte就是 32 / 8 4;…...

Tubi 十岁啦!
Tubi 今年十岁了,这十年不可思议,充满奇迹! 从硅谷一个名不见经传的创业小作坊,转变成为四分之一美国电视家庭提供免费流媒体服务的北美领先的平台; 从费尽心力终于签下第一笔内容合作协议,到现在与 450 …...

Qt C++ 实现文件监视源码
以下是使用Qt C++实现文件监视的一个简单示例代码: #include <QCoreApplication> #include <QFileSystemWatcher> #include <QDebug>int main(int argc, char *argv[...

蓝桥杯第十一届c++大学B组详解
目录 1.字符串排序 2.门牌制作 3.即约分数 4.蛇型填数 5.跑步锻炼 6.七段码 7.成绩统计 8.回文日期 9.字串分值和 10.平面切分 1.字符串排序 题目解析:这个题目真没搞懂。有会的大佬教我一下谢谢。 2.门牌制作 题目解析:出过超级多这类题目&am…...