广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用Python对NetCDF数据做空间相关分析
  • 894
分享到

如何使用Python对NetCDF数据做空间相关分析

2024-04-02 19:04:59 894人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

引言:我一直想理解空间相关分析的计算思维,于是今天又拿起python脚本和数据来做练习。首先需要说明的是,这次实验的数据和Python脚本均来自于[好久不见]大佬,在跟大佬说明之后,

引言:我一直想理解空间相关分析的计算思维,于是今天又拿起python脚本和数据来做练习。首先需要说明的是,这次实验的数据和Python脚本均来自于[好久不见]大佬,在跟大佬说明之后,允许我写到公众号来与大家共享,在此对大佬的指点表示感谢,这次实验的脚本可在气象家园或简书app(如果没记错的话)搜索到这次实验的相关内容,也可以微信或者后台发消息给我获取。在此之前我觉得自己还没理解这个方法的计算思维,检验的标准就是我能否迅速运用到其他方面。于是今天又重新回来温习一遍,我把自己的理解与大伙共同交流。

首先,数据的格式是NetCDF(.nc)数据,两个数据分别是[哈德来中心海温sst数据,pc数据是对东太平洋SSTA做的EOF获取]。知道数据信息之后我们就准备开始去运行程序。原始脚本包括了回归分析和相关分析两部分,但是今天我做了空间相关分析这一部分,有兴趣的可以到[好久不见]大佬的气象家园阅读喔!如果还没有安装Cartopy包的话请在后台联系我喔

为了方便理解每一步,我选择去Jupyter运行,因为可以一段一段程序的运行,这是比较方便的。绘图部分并不是很难,关键还是在于数据预处理部分。

空间相关分析的脚本如下:


import numpy as np #数值计算用,如相关系数
import xarray as xr #读取.nc文件用
from sklearn.feature_selection import f_regression #做显著性检验
import matplotlib.pyplot as plt #绘制和展示图形用
import cartopy.crs as ccrs #绘制地图用,如果没有安装好的话,请在后台联系我
import cartopy.feature as cfeature #添加一些矢量用,这里没用到,因为我没数据
from cartopy.mpl.ticker import LongitudeFORMatter, LatitudeFormatter #经纬度格式设置
import cmaps #ncl的color,如果没有的话,请联系我,也可以在气象家园找到

#使用上下文管理器读取.nc数据,并提取数据中的变量,可以提前用NASA的panoply这个软件查看.nc信息
with xr.open_dataset(r'D:\inuyasha\codeX\codeLEARN\sst.DJF.mean.anom.nc') as f1:
      pre = f1['sst_anom'][:-1, :, :]  # 三维数据全取,时间,纬度+经度
      lat, lon = f1['lat'], f1['lon'] #提取经纬度,后面格网化需要用到
pre2d = np.array(pre).reshape(pre.shape[0], pre.shape[1]*pre.shape[2])
#0表示行个数,1列代表的个数,2经度代表个数
with xr.open_dataset(r'D:\inuyasha\codeX\codeLEARN\pc.DJF.sst.nc') as f2:
      pc = f2['pc'][0, :]

# 相关系数计算
pre_cor = np.corrcoef(pre2d.T, pc)[:-1, -1].reshape(len(lat), len(lon))

# 做显著性检验
pre_cor_sig = f_regression(np.nan_to_num(pre2d), pc)[1].reshape(len(lat), len(lon))#用0代替NaN
area = np.where(pre_cor_sig < 0.05)
# numpy的作用又来了 
nx, ny = np.meshgrid(lon, lat)  
# 格网化经纬度,打印出来看看就知道为什么要这么做了
plt.figure(figsize=(16, 8)) #创建一个空画布
#让colorbar字体设置为新罗马字符
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 16

ax2 = plt.subplot(projection=ccrs.PlateCarree(central_longitude=180))
# 在画布上绘图,这个叫axes,这不是坐标轴喔
ax2.coastlines(lw=0.4)
ax2.set_global()
c2 = ax2.contourf(nx, ny, pre_cor, extend='both', cmap=cmaps.nrl_sirkes, transform=ccrs.PlateCarree())
plt.colorbar(c2,fraction=0.05,orientation='horizontal', shrink=0.4, pad=0.06)
# extend关键字设置colorbar的形状,both为两端尖的,pad是距离主图的距离,其他参数WEB搜索

# 显著性打点
sig2 = ax2.scatter(nx[area], ny[area], marker='+', s=1, c='k', alpha=0.6, transform=ccrs.PlateCarree())
# 凸显显著性区域
plt.title('Correlation Analysis', fontdict={'family' : 'Times New Roman', 'size'   : 16})
#标题字体也修改为新罗马字符,数字和因为建议都用新罗马字符
ax2.set_xticks(np.arange(0, 361, 30),crs=ccrs.PlateCarree())
# 经度范围设置,nunpy的作用这不就又来了嘛
plt.xticks(fontproperties = 'Times New Roman',size=16) #修改xy刻度字体为新罗马字符
plt.yticks(fontproperties = 'Times New Roman',size=16)
ax2.set_yticks(np.arange(-90, 90, 15),crs=ccrs.PlateCarree())
# 设置y
ax2.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label = False))#经度0度不加东西
ax2.yaxis.set_major_formatter(LatitudeFormatter())
# 设置经纬度格式,就是多少度显示那样的,而不是一些数字
ax2.set_extent([-178, 178, -70, 70], crs=ccrs.PlateCarree())
# 设置空间范围
plt.grid(color='k')
# 画一个网格吧
plt.show()
# 显示出图形

那么就运行看看效果吧

如果觉得这个color不喜欢的话,就换一下ncl的来吧,ncl的颜色多而漂亮,喜欢啥就换啥

想要理解这个方法的计算思维,有必要观察原始数据和数据处理之后的样式,理解了数据样式之后可能更有助于我们理解整个程序


import numpy as np
import xarray as xr
from sklearn.feature_selection import f_regression
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cmaps

with xr.open_dataset(r'D:\inuyasha\codeX\codeLEARN\sst.DJF.mean.anom.nc') as f1:
      pre = f1['sst_anom'][:-1, :, :]  # 三维数据全取,时间,纬度+经度
      lat, lon = f1['lat'], f1['lon']
pre2d = np.array(pre).reshape(pre.shape[0], pre.shape[1]*pre.shape[2])#0行代表的个数,1纬度,2经度
#pre2d.shape是一个39行,16020列的矩阵,T之后就变为了16020行,39列

with xr.open_dataset(r'D:\inuyasha\codeX\codeLEARN\pc.DJF.sst.nc') as f2:
      pc = f2['pc'][0, :]
#pc是一个39行的数组

# # 相关系数
pre_cor = np.corrcoef(pre2d.T, pc)[:-1, -1].reshape(len(lat), len(lon))
#pre_cor.shape,(16020,)->reshape(89,180)
# # 显著性检验

# pre_cor_sig = f_regression(np.nan_to_num(pre2d), pc)[1].reshape(len(lat), len(lon))#用0代替NaN
# area = np.where(pre_cor_sig < 0.05)

nx, ny = np.meshgrid(lon, lat)  # 格网化
nx,ny

看看格网化后的经纬度多规范啊。画张图来看看可能也会直观一些。

好吧,今天的分享就到这里了,理解了这个计算思维,能更好地迁移运用到其他研究方面,如果还没有安装Cartopy包的话请在后台联系我喔,如果需要测试数据和脚本请在后台联系我,当然也可以去[好久不见]大佬的主页。如果觉得这次分享不错的话,还请老铁们点个赞,多多分享,欢迎交流学习,感谢各位!

原始资料:

Http://bbs.06climate.com/forum.PHP?mod=viewthread&tid=92816&highlight=%CF%D4%D6%F8%D0%D4%BC%EC%D1%E9%2B%CF%E0%B9%D8%B7%D6%CE%F6

以上就是如何使用Python对NetCDF数据做空间相关分析的详细内容,更多关于Python对NetCDF数据做空间分析的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何使用Python对NetCDF数据做空间相关分析

本文链接: https://www.lsjlt.com/news/124101.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Python对NetCDF数据做空间相关分析
    引言:我一直想理解空间相关分析的计算思维,于是今天又拿起Python脚本和数据来做练习。首先需要说明的是,这次实验的数据和Python脚本均来自于[好久不见]大佬,在跟大佬说明之后,...
    99+
    2022-11-12
  • 怎么使用Python对NetCDF数据做空间相关分析
    这篇文章主要介绍了怎么使用Python对NetCDF数据做空间相关分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python有哪些常用库python常用的库:1.requ...
    99+
    2023-06-14
  • 如何用Python对数据进行相关性分析
    这期内容当中小编将会给大家带来有关如何用Python对数据进行相关性分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在进行数据分析时,我们所用到的数据往往都不是一维的,而这些数据在分析时难度就增加了不少...
    99+
    2023-06-16
  • 如何用python做数据分析
    使用Python进行数据分析可以通过以下步骤进行:1. 安装Python和相应的数据分析库:首先,你需要安装Python解释器。可以...
    99+
    2023-10-08
    python
  • 如何分析ADO数据映射的相关使用
    这期内容当中小编将会给大家带来有关如何分析ADO数据映射的相关使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。ADO数据和 DataSet:描述 DataSet 如何与作为数据源的 XML 进行交互(包...
    99+
    2023-06-17
  • 如何使用Python实现对相同数据分箱
    小编给大家分享一下如何使用Python实现对相同数据分箱,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是分箱?简单点说就是将不同的东西,按照特定的条件放到一个...
    99+
    2023-06-28
  • 如何用Python做疫情数据分析
    本篇文章为大家展示了如何用Python做疫情数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在这个全民抗疫情的非常时期,每天在家除了远程办公之外,也不由得随时刷新下疫情信息,关心一下有什么...
    99+
    2023-06-16
  • 如何用Python分析相亲网站数据
    这篇文章主要介绍“如何用Python分析相亲网站数据”,在日常操作中,相信很多人在如何用Python分析相亲网站数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python分析相亲网站数据”的疑惑有所...
    99+
    2023-06-27
  • redis的list数据类型相关命令分析及如何使用
    今天给大家介绍一下redis的list数据类型相关命令分析及如何使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。list列表简介list是简单的字符串列表(...
    99+
    2023-06-26
  • 如何进行SQLite数据库管理相关命令的使用分析
    这篇文章将为大家详细讲解有关如何进行SQLite数据库管理相关命令的使用分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  1.创建数据库  启动命令行,...
    99+
    2022-10-19
  • 如何使用ContentValues对数据库进行相关操作
    本篇内容介绍了“如何使用ContentValues对数据库进行相关操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-18
  • 如何使用Python搞定数据分析
    大数据是当前比较火的方向,依托于这一行业,互联网公司对数据分析人员需求也逐年递增,数据分析师也成为是当前比较火的从业方向。 数据是企业数字资产,如何让这些资产转化为实际价值? 通过数据分析工具或者数据分析人员对数据进行挖掘,挖掘潜在价值,为...
    99+
    2023-01-31
    如何使用 数据 Python
  • 如何分析Oracle数据库表空间设计中ASM/BFT/OMF的综合使用
    这篇文章给大家介绍如何分析Oracle数据库表空间设计中ASM/BFT/OMF的综合使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为满足海量数据的高性能、易管理性等综合需求,很多项...
    99+
    2022-10-19
  • 如何用Python帮朋友做了张猪肉数据分析图
    如何用Python帮朋友做了张猪肉数据分析图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。事情的经过是这样的:我开开心心的去一家烧饼店吃饭抬头一看,二师兄又涨价了叹了口气,...
    99+
    2023-06-16
  • 如何使用Python分析14亿条数据
    这篇文章主要介绍“如何使用Python分析14亿条数据”,在日常操作中,相信很多人在如何使用Python分析14亿条数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Python分析14亿条数据”的疑...
    99+
    2023-07-06
  • 如何使用Go语言和Redis做实时数据分析
    如何使用Go语言和Redis做实时数据分析概述:随着大数据时代的到来,数据分析在企业决策中的重要性越来越凸显。而实时数据分析则成为了更加流行和需要的技术方法。本文将介绍如何使用Go语言和Redis实现实时数据分析,并提供具体的代码示例。Re...
    99+
    2023-10-27
    Go语言 redis 实时数据分析
  • 数据库中如何使用裸设备之对表空间扩展大小或创建表空间
    小编给大家分享一下数据库中如何使用裸设备之对表空间扩展大小或创建表空间,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 1.查看表空间对应的数据文件路径selec...
    99+
    2022-10-18
  • 如何使用Python中的数据分析库处理和预测时间序列数据
    如何使用Python中的数据分析库处理和预测时间序列数据时间序列数据是指按时间顺序排列的数据,其特点是具有时间上的相关性和趋势性。在许多领域中,时间序列数据分析起着重要的作用,如股市预测、天气预报、销售预测等。Python中有许多强大的数据...
    99+
    2023-10-22
    Python 时间序列数据 数据分析库
  • 如何使用Python对网易云歌单数据分析及可视化
    项目概述1.1项目来源网易云音乐是一款由网易开发的音乐产品,是网易杭州研究院的成果 ,依托专业音乐人、DJ、好友推荐及社交功能,在线音乐服务主打歌单、社交、大牌推荐和音乐指纹,以歌单、DJ节目、社交、地理位置为核心要素,主打发现和分享。对网...
    99+
    2023-05-17
    Python
  • 阿里云空天数据库如何使用和优势分析
    随着科技的发展,数据的重要性日益凸显。对于企业来说,拥有大量的数据意味着拥有更多的商业机会和竞争优势。为了满足这种需求,阿里云空天数据库应运而生。它是一款面向空天领域的分布式数据库,提供了高效的数据存储和管理功能。本文将详细介绍如何使用阿里...
    99+
    2023-12-10
    阿里 天数 如何使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作