我们的微信公众号、知乎账号和简书账号就是都是Python干货铺子喔~欢迎大家的关注以及交流地理学呀~我们希望以自己微薄的努力促进开放地球科学的研究工作!期待大家的关注~
在这里写技术推文感觉还是不太方便,比如贴代码部分,所以还是建议回到我们的公众号原文阅读一下啦
地址:基于Python和ArcGIS的空间插值和空间Mann-Kendall(M-K)分析
篇外话:地理学分析很重视时间和空间数据分析,可以说地理学很大程度上围绕着时空取得了众多重要的研究成果。空间异质性也通过空间分析技术得到了非常直观的解释。
本次推文主要分为两部分:
第一部分是使用ArcGIS去提取,然后插值下载来的CRU格点降水数据,shapefile矢量范围用的是青藏高原的;
第二部分是使用下载来的CRU格点降水数据做空间Mann-Kendall分析;
先看结果图,不看结果的学习就是耍流氓
Mann-Kendall分析在地学研究中是很常见的一种研究手段,我们可以在很多场合看到这个方法的身影。ArcGIS提供的空间数据插值之前也学习过了,是可以通过站点,也就是具体的经纬点来插值的。那么接下来就先做ArcGIS对CRU降水格点数据做提取和插值美化工作,好好地出一张地图出来,然后使用Python对下载的CRU降水格点数据做Mann-Kendall趋势分析。
首先是ArcGIS部分,在CRU官网[https://crudata.uea.ac.uk/cru/data/hrg/cru_ts_4.05/cruts.2103051243.v4.05/pre/]下载数据,格式是NetCDF
然后打开ArcMap的多维工具箱从nc创建一个栅格图层,维度选择time维。
加载完成之后,顺便把shp也加进去,然后在数据管理工具箱中合成全部band,由于我做的时候已经全部做好了,这感觉似乎不是很好写,我也只能将一个大概的步骤了。把数据提取到point去,就可以在shp上得到数据了,统计均值,如果你的数据原本就被方大了十倍的话,那么可以使用地图代数去除以10。。。。我发现这部分真不好写,特别是这个图,一大长条的太影响美观了。
最后,通过提取到point的格点,也就是shp范围内的格点来做ID插值,需要说明的是从CRU下载的数据是全球尺度的,于是提取到point去之后我就clip出了shp青藏高原的来了,没有mask,因为这里两个数据都已经是矢量了。
对提取到point的降水数据进行IDW插值之后再进行简单的美化修饰操作就得到了如下的结果图了,然后打印出地图来看看
这样的话,一张简单的地图就完成了,这个测试的目的就是提取栅格点出去插值。
##################我是分割线#################
第二部分就是使用Python就是对下载来的CRU降水数据做空间Mann-Kendall测试分析。为了让测试看起来比较理想,我选择下载另一个CRU文件,时间范围比较长,1901-2020年的,前面的网址打开之后可以去下载到。测试环境为Jupyter Notebook。需要的一个关键包是pymannkenall,之外还需要xarray,numpy等。
这个nc数据大小为2.78G,我也不想选择一个子区域了,直接就做全球的
如果还没安装pymannkendall的话,先安装一下,然后导入必要的包并读取,这部分代码零零散散的我就以截图形式展示
然后从这里开始正式的计算,原理是loop经维格点。这里,建议还是自己手动输入,不要复制脚本。以前看MK分析那种一般是两条曲线,x轴是时间,现在是经纬度。
由于数据有点大,计算要花点时间的,算完之后就可以使用cartopy去绘制地图了
然后就得到了结果图:
最开始的时候,colorbar并不是有文字在上面的,需要使用如下脚本添加一下:
Ok,这样的话就搞定了,是否点赞再看那不是我的事,做的质量如何不是我说了算的,如果觉得有帮助的人就点一下,随意一点很好