社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

代码共享 | 基于Python的网格数据MK分析和相关性分析

happy科研 • 1 年前 • 223 次点击  

这次使用的数据是网格数据,netCDF老演员了,使用了两个数据,分别是PM2.5和气温TEM,对二者先进行相关性分析,然后分别进行MK分析,并且为了防止遇到nan和inf值,在自定义函数中进行了限制,应该适用性还是可以的,应该可以很方便地用于自己的数据集中。

首先读取两个数据集,由于网格较多,这里只选择一小部分来执行,在选择制定范围数据的时候,使用isel趋选择,不要用sel,在我用sel去选择数据的时候发现lat显示是0。

接下来对PM2.5和TEM数据进行相关性分析:

from scipy import stats
def corr_3d(x,y): nlat=y.shape[1] nlon=y.shape[2] corr=np.full([nlat,nlon],np.nan) pval=np.full([nlat,nlon],np.nan) for i in range(nlat): for j in range(nlon): t_x = np.isnan(x[:,i,j]) t_y = np.isnan(y[:,i,j]) if True in t_x or True in t_y: continue else: r,p=stats.pearsonr(x[:,i,j],y[:,i,j]) corr[i,j]=r pval[i,j]=p lat = y.coords['lat'] lon = y.coords['lon'] corr=xr.DataArray(corr,coords=[lat,lon],dims=['latitude','longitude']) pval=xr.DataArray(pval,coords=[lat,lon],dims=['latitude','longitude']) return corr,pval
corr,pval=corr_3d(PM25,TEM['tmp'])

然后绘制出相关系数图

第二部分是分别对PM2.5和TEM数据进行MK趋势分析,只需要简单修改一下上述定义好的函数即可使用

然后绘制出来看看,由于数据是每月的,因此slope那里乘了12表示年的趋势,绘图结果如下

同样的,对TEM气温数据也进行MK测试,slope乘了120表示十年的趋势,TEM的趋势数值没想到这么大

在具体的使用中,如果网格较大的话运行可能比较慢。


申根区牛逼!过几天就去维也纳参加EGU2023啦!

A)联系小编获取原价100刀的谢尚平新书电子版《海气耦合动力学:从厄尔尼诺到气候变化》 & 公众号不定期送书活动
B)提前联系号主委托录制所需报告 & 公众号主页右上角放大镜即可搜索往期上万录屏
C)中国气象背景数据集(点击蓝字跳转)
D)全国气象局、民航空管、考研升学等面试真题
E)Python、Linux、Endnote、Fortran等干货专题(菜单栏)
F)头条免费宣传课题组科研进展,旨在促进学科交流,欢迎供稿!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/153816
 
223 次点击