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用于帮助描述每个事件的独特性质。

oni.monthly.smoo_stro

El Niño 1、2、3和4 的范围如下所示:

El Niño index regions

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)。TNI 被定义为厄尔尼诺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()

结果展示:

nino3.4-index

平滑

还可以对于指数进行平滑,使结果看起来更好看一点。如果指数平滑了,后续计算相关相关时也需要对于输入的其他变量进行统一平滑。


ninoSD=nino3_4/nino3_4.std(dim='time')
rninoSD=ninoSD.rolling(time=3, center=True).mean('time')

nino3.4-index-smooth

计算超前滞后

相关性和回归分析部分:

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()

sst_lead_lag_corr_reg-smooth

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;2

https://climate.usu.edu/people/yoshi/pyclm101/index.html

本文由mdnice多平台发布

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

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

相关文章

golang代码练习样例模版--推荐--测试学习使用的方法

golang代码练习样例模版 以前用的python代码&#xff0c;每次测试都是一个python文件&#xff0c;但是go就是以文件夹为目录为 结构的测试&#xff08;同一个文件夹下&#xff0c;不能有同名的函数&#xff09; 大部分时间就是测试&#xff0c;如何对go程序函数进行测试&#…

【java工具-灵活拉取数据库表结构和数据】

需求&#xff1a; 假设我们现在有一个需求&#xff0c;需要快速拉取数据库的某些表建表语句&#xff0c;和数据&#xff0c;平时做备份之类&#xff1b; 我这边自己写了个工具&#xff0c;不多废话&#xff0c;也不整虚的&#xff0c; 直接看代码&#xff1a; package com.…

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置&#xff08;Windows&#xff09;下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具&#xff1a; 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题&#xff0c;笔者因此认为代码版本管理工具对于提高团队…

JR-SMD201-P便携式网络解码器

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

户外骑行存档(图新地球与运动健康App)经验分享

0序 之前天天加班熬夜&#xff0c;身体素质有些下降&#xff0c;在锻炼的过程中喜欢上了骑行&#xff0c;周周骑、天天骑。 骑行会产生很多的轨迹&#xff08;有很多朋友不喜欢装很多app&#xff0c;就用手机自带的运动健康&#xff0c;也有喜欢专业运动app的&#xff0c;道理…

SQL注入原理与信息获取及常规攻击思路靶场实现

SQL注入原理与信息获取及常规攻击思路靶场实现 很早的时候就写了&#xff0c;权当备份吧 Web程序三层架构 表示层 &#xff1a;与用户交互的界面 , 用于接收用户输入和显示处理后用户需要的数据 业务逻辑层 &#xff1a;表示层和数据库访问层之间的桥梁 , 实现业务逻辑 ,验证、…

BPMN.JS中文教程学习

基础篇 vue bpmn.js 建模BpmnModeler将数据转图形bpmnModeler.importXML // basic.vue<script>// 引入相关的依赖import BpmnModeler from bpmn-js/lib/Modelerimport {xmlStr} from ../mock/xmlStr // 这里是直接引用了xml字符串export default {name: ,components: {…

三维点云:对原始点云数据进行体素化

文章目录 一、原始点云二、对原始点云进行体素化三、结果展示 一、原始点云 &#x1f349;原始点云为.pts文件&#xff0c;内容为x, y, z的坐标 原始点云展示 二、对原始点云进行体素化 使用open3d库实现&#xff0c;如果没有需要在命令行执行pip install open3d import o…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库&#xff0c;用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

kali使用msf+apkhook520+cploar实现安卓手的攻击

学习网络安全的过程中&#xff0c;突发奇想怎么才能控制或者说是攻击手机 边找工作边实验 话不多说启动kali 一、使用msfapktool生成简单的木马程序 首先使用kali自带的msfvenom写上这样一段代码 选择安卓 kali的ip 一个空闲的端口 要输出的文件名 msfvenom -p android/met…

kafka(五)——消费者流程分析(c++)

概念 ​ 消费者组&#xff08;Consumer Group&#xff09;&#xff1a;由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费&#xff1b;消费者组之间互不影响。所有的消费者都属于某个消费者组&#xff0c;即消费者…

今日arXiv最热大模型论文:Dataverse,针对大模型的开源ETL工具,数据清洗不再难!

引言&#xff1a;大数据时代下的ETL挑战 随着大数据时代的到来&#xff0c;数据处理的规模和复杂性不断增加&#xff0c;尤其是在大语言模型&#xff08;LLMs&#xff09;的开发中&#xff0c;对海量数据的需求呈指数级增长。这种所谓的“规模化法则”表明&#xff0c;LLM的性…

HTML - 请你说一下如何阻止a标签跳转

难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…

【就近接入,智能DNS-Geo DNS ,大揭秘!】

做过后端服务或者网络加速的小伙伴&#xff0c;可能或多或少都听说过&#xff0c;智能DNS或者Geo DNS&#xff0c;就是根据用户的位置&#xff0c;返回离用户最近的服务节点&#xff0c;就近接入&#xff0c;以达到服务提速的效果。 那么大家有没想过&#xff0c;这个背后的原理…

C++:日期类的实现 const修饰 取地址及const取地址操作符重载(类的6个默认成员函数完结篇)

一、日期类的实现 根据之前赋值运算符重载逻辑&#xff0c;我们现在来实现完整的日期类。 1.1 判断小于 上篇博客已经实现: bool operator<(const Date& d) {if (_year < d._year){return true;}else if (_year d._year){if (_month < d._month){return true…

总结C/C++中程序内存区域划分

C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼…

OpenHarmony开发技术:【国际化】实例

国际化 如今越来的越多的应用都走向了海外&#xff0c;应用走向海外需要支持不同国家的语言&#xff0c;这就意味着应用资源文件需要支持不同语言环境下的显示。本节就介绍一下设备语言环境变更后&#xff0c;如何让应用支持多语言。 应用支持多语言 ArkUI开发框架对多语言的…

TypeScript—详解、小案例(配合源代码)

简介&#xff1a;TypeScript是微软开发的 JavaScript 的超集&#xff0c;TypeScript兼容JavaScript&#xff0c;可以载入JavaScript代码然后运行。TypeScript与JavaScript相比进步的地方 包括&#xff1a;加入注释&#xff0c;让编译器理解所支持的对象和函数&#xff0c;编译器…

Web路径专题

文章目录 1.资源定位1.前置条件上下文路径设置 2.上下文路径介绍重点说明 3.资源定位方式资源路径 上下文路径 资源位置a.html定位C.java定位 4.浏览器和服务器解析的区别1.浏览器解析/&#xff08;地址变化&#xff09;2.服务器解析/&#xff08;地址不变&#xff09; 5.带/…