Python | 超前滞后分析

news2024/12/23 11:35:34

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 dimension
    p = da.polyfit(dim=dim, deg=deg)
    fit = xr.polyval(da[dim], p.polyfit_coefficients)
    return da - fit

def 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') - clm
    an_ds = an_ds.mean(('lon','lat'))
    an_ds = detrend_dim(an_ds,dim='time',deg=1)
    return an_ds


nino3_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 mean

ranm = 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 plot

def 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 lines
  gvutil.add_major_minor_ticks(ax, labelsize=10)
  
  # Use geocat.viz.util convenience function to make latitude, longitude tick labels
  gvutil.add_lat_lon_ticklabels(ax)
  
  #设置colorbar
  newcmp = cmaps.NCV_blu_red
  index = [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 later
    transform=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 0
  delc=0.2
  levels = 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 plot

fig = 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.coloradmin.cn/o/1583676.html

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

相关文章

【Ubuntu】update-alternatives 命令详解

1、查看所有候选项 ​​​​​​​sudo update-alternatives --list java 2、​​​​​​​更换候选项 sudo update-alternatives --config java 3、自动选择优先级最高的作为默认项 sudo update-alternatives --auto java 4、删除候选项 sudo update-alternatives --rem…

MATLAB技巧:箱型图绘制

箱型图/箱线图 箱型图&#xff08;Box Plot&#xff09;&#xff0c;也称为盒须图或箱线图&#xff0c;是一种用于展示数据分布情况的统计图表。它通过展示数据的中位数、上下四分位数、最大值和最小值&#xff0c;可以直观地显示出数据的离散程度、偏态和异常值等信息。 箱型…

Python实现读取dxf文件的所有字符

Python实现读取dxf文件的所有字符 import ezdxfdef read_dxf_and_print_text(filename):# 加载DXF文件doc ezdxf.readfile(filename)# 遍历所有的实体for entity in doc.entities:# 检查实体是否是TEXT、MTEXT或DIMENSIONif isinstance(entity, ezdxf.entities.Text):print(f…

从头训练、采用预训练模型这两种方法在图像分类上的实践

参考书籍《Python深度学习》Chapter 5《深度学习用于计算机视觉》 演示数据&#xff1a;Dogs vs. Cats | Kaggle 1. 从头训练模型 1.1 不使用数据增强 1.2 使用数据增强 2. 使用预训练模型 去掉已有模型的最后的分类层。 2.1 直接使用已有模型的结果&#xff0c;再输入到新建…

【快捷部署】015_Minio(latest)

&#x1f4e3;【快捷部署系列】015期信息 编号选型版本操作系统部署形式部署模式复检时间015MiniolatestCentOS 7.XDocker单机2024-04-09 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a;c…

处理慢查询时使用explain一般看哪些字段

explain之后会出现这些&#xff0c;一般就只看下面这几个字段 select_type就是查询类型&#xff0c;在我司的业务里基本上用的都是简单查询&#xff0c;在内存中处理逻辑&#xff0c;复杂查询的话排查问题比较麻烦&#xff0c;引起慢查询还会拖累数据库&#xff0c;数据库里还…

Day:005 | Python爬虫:高效数据抓取的编程技术(爬虫效率)

爬虫之多线程-了解 单线程爬虫的问题 因为爬虫多为IO密集型的程序&#xff0c;而IO处理速度并不是很快&#xff0c;因此速度不会太快如果IO卡顿&#xff0c;直接影响速度 解决方案 考虑使用多线程、多进程 原理&#xff1a; 爬虫使用多线程来处理网络请求&#xff0c;使用线程…

python爬虫———激发学习兴趣的案列(第十三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

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

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

【MATLAB源码-第184期】基于matlab的FNN预测人民币美元汇率 输出预测图误差图RMSE R2 MAE MBE等指标

操作环境&#xff1a; MATLAB 2022a 1、算法描述 前馈神经网络&#xff08;Feedforward Neural Network, FNN&#xff09;是最简单也是应用最广泛的人工神经网络之一。在许多领域&#xff0c;尤其是数据预测方面&#xff0c;FNN已经展现出了卓越的性能和强大的适应性。 一、…

linux之文件系统、inode和动静态库制作和发布

一、背景 1.没有被打开的文件都在磁盘上 --- 磁盘级文件 2.对磁盘级别的文件&#xff0c;我们的侧重点 单个文件角度 -- 这个文件在哪里&#xff0c;有多大&#xff0c;其他属性是什么&#xff1f; 站在系统角度 -- 一共有多少文件&#xff1f;各自属性在哪里&#xff1f…

c#获取Web.Config中的值出现的错误及解决办法

c#获取Web.Config中的值出现的错误及解决办法 1.错误提示 2.原因寻找 问题出在Web.Config文件中 <add key"mchid " value"1495103432"/>//mchid 后面不应该有空格图示如下&#xff1a; 3.改正代码如下&#xff1a; <?xml version"1.0…

spring boot —— Spring-Cloud-Zuul(网关服务getway),kafka笔记

一、 引入zuul依赖&#xff1a; org.springframework.cloud spring-cloud-starter-zuul 二、创建应用主类。使用EnableZuulProxy注解开启zuul的API网关服务功能&#xff1a; EnableZuulProxy SpringCloudApplication public class Application { public static void mai…

Python结合spy++

导入必要的库 import win32con from win32 import win32gui from win32 import win32clipboard as w import pyautogui import sys1.获取窗口全部属性 def show_window_attr(hwnd):"""显示窗口的属性:param hwnd: 窗口句柄&#xff08;十进制&#xff09;:ret…

Severt

severt是让我们自己写一些类,然后把这些类给加载Tomcat中&#xff0c;后续Tomcat收到HTTP请求(来自于浏览器)&#xff0c;就会执行到咱们上面写的代码.从而通过这些代码,完成一定的业务逻辑. 创建项目 此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建…

MyBatis 等类似的 XML 映射文件中,当传入的参数为空字符串时,<if> 标签可能会导致 SQL 语句中的条件判断出现意外结果。

问题 传入的参数为空字符串&#xff0c;但还是根据参数查询了。 原因 在 XML 中使用 标签进行条件判断时&#xff0c;需要明确理解其行为。在 MyBatis 等类似的 XML 映射文件中&#xff0c; 标签通常用于动态拼接 SQL 语句的条件部分。当传入的参数 riskLevel 为空字符串时…

【linux】基础IO(四)

在上一篇基础IO中我们主要讲述了文件再磁盘中的存储&#xff0c;当然我们说的也都只是预备知识&#xff0c;为这一篇的文件系统进行铺垫。 目录 搭文件系统的架子&#xff1a;填补细节&#xff1a;inode&#xff1a;datablock[]: 更上层的理解&#xff1a; 搭文件系统的架子&a…

竞赛升温,量子革命待发

人工智能已经吸引了全球企业巨头和政界领袖的广泛关注。同时&#xff0c;一场激烈的全球竞赛正在展开&#xff0c;目标是开发被许多专家视为下一个领域革命性技术的量子计算。 量子计算机利用量子物理学的原理&#xff0c;有潜力推动包括药物研究、股票市场分析以及数据加密在内…

unable to find a medium containing a live file system解决办法!

背景&#xff1a; 用Ventoy制作U盘系统安装盘&#xff0c;只需要把ISO镜像拷进去就可以&#xff0c;可以放多少个镜像取决于U盘的大小&#xff0c;无需重复制作。Ventoy 将U盘的第一个分区默认格式化为exFAT文件系统来存放ISO文件。 但是&#xff0c;今天鲲鹏920平台安装银河…

外包干了15天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…