首页 > 编程问答 >如何重构这个netCDF?

如何重构这个netCDF?

时间:2024-07-25 14:57:15浏览次数:13  
标签:python python-xarray netcdf netcdf4

更新:我将文件上传到 dropbox,可以通过此链接下载(我希望这有效,我不经常使用 dropbox): https://www.dropbox.com/scl/fi/vd0s9g080m8h9fxh7rn9l/IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34 _F .nc?rlkey=isrwelpr9abbqswr91unrhpkp&st=6hkb5u2l&dl=0


我已经下载了一个netCDF数据集,我用xarray读取它,但它的结构相对复杂,我无法掌握如何以通用格式导入它作为(时间,纬度,经度),以便我可以在地图上绘制相关变量的值。

我将发布一个较短的版本,并在下部部分中向变量添加附加信息,这更多或减少打印所有变量的信息,我认为这些信息与将数据带入一般结构(时间、纬度、长)相关。

简短版本:

我使用 xarray 打开 netcdf 文件|| |这个文件有 77 个变量,我对变量的值感兴趣

netcdf = xr.open_dataset(
    'path/tofile/IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34_F.nc'
)

integrated_co2 坐标不是坐标,但似乎是坐标的索引,它们存储在数据集中的两个变量中,名称为“lat”和“lon”。此外,还有两个时间变量。 我认为相关的变量形状是:

print(netcdf.integrated_co2)

enter image description here

# Relevant variables in the netcdf-file:
var_names = [
    "lat",
    "lon",
    "record_start_time",
    "record_stop_time",
    "across_track",
    "along_track",
    "integrated_co2",
]

for var in var_names:
    print(f"{var}: {netcdf[var].shape} ")

enter image description here

lat 变量包含以度为单位的坐标, lon 包含从1到742的数字, along_track 包含从1到120的数字,时间变量包含 7.732523e+08 形式的数字。 across_track 我认为,一切都在那里,坐标、时间戳、co2 值,但有点令人困惑,实际形式的坐标是实际坐标的索引。至少这是,它看起来是什么?

如何将这些变量带入 (time,lat,lon) 的一般结构中,以便我能够在 a 上绘制“integrated_co2”的数据地图?

如果有人知道如何重组这些数据,我会很高兴。我是初学者,我已经阅读了很多有关如何使用数据的内容,但还没有找到类似的示例。

以下是相关变量的一些


附加信息 to the relevant variables:

print(netcdf.along_track)

enter image description here

print(netcdf.across_track)

enter image description here

print(netcdf.lat)

enter image description here

print(netcdf.lon)

enter image description here

print(netcdf.record_start_time)

enter image description here

print(netcdf.record_stop_time)

enter image description here


可以使用 xarray 和 NumPy 的组合来重构的 netCDF 数据。的数据似乎以沿轨道和跨轨道坐标作为主维度存储,需要使用纬度和经度信息对其进行重新索引。

以下是实现此目标的方法:

import xarray as xr
import numpy as np

# 加载 netCDF 数据
netcdf = xr.open_dataset('IASISND02_20240702161759Z_20240702175655Z_epct_d9f95b34_F.nc')

# 创建新的纬度和经度坐标
lat = np.array(netcdf['lat']).reshape((120, 742))
lon = np.array(netcdf['lon']).reshape((120, 742))

# 使用新的纬度和经度坐标重新索引 integrated_co2 数据
co2 = netcdf['integrated_co2'].values.reshape((75, 120, 742))
co2_reindexed = co2.transpose(0, 1, 2)

# 创建一个新的 xarray 数据集
ds = xr.Dataset(
    {
        'integrated_co2': (('time', 'latitude', 'longitude'), co2_reindexed),
    },
    coords={
        'time': netcdf['record_start_time'].values,
        'latitude': (('latitude', 'longitude'), lat),
        'longitude': (('latitude', 'longitude'), lon),
    },
)

# 现在,应该拥有一个具有 (time, latitude, longitude) 维度的 integrated_co2 数据集
print(ds)

# 可以使用此数据集在地图上绘制 integrated_co2 的值
# 例如,使用 matplotlib 和 cartopy:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure(figsize=(12, 6))
ax = plt.axes(projection=ccrs.PlateCarree())

# 选择要绘制的时间切片
time_index = 0

ds['integrated_co2'][time_index].plot(ax=ax, transform=ccrs.PlateCarree())

ax.coastlines()
plt.show()

这段代码首先从 netCDF 文件中加载数据,然后创建新的纬度和经度坐标,并将 integrated_co2 数据重新索引到新的坐标系中。最后,它创建一个新的 xarray 数据集,其中包含重新索引的数据和新的坐标。

现在,可以使用此新的 xarray 数据集在地图上绘制 integrated_co2 值,或者对其执行任何其他所需的操作。

标签:python,python-xarray,netcdf,netcdf4
From: 78744917

相关文章

  • 在 Python 中动态定义文字字符串排列的并集
    我有一个字符串列表:strings=['a','b','c']我想声明列表中所有可能的有序对的Union类型。硬编码,这看起来像:Literal我如何动态定义CustomType=Literal['ab','ac','aa','ba','bb','bc�......
  • 关于 Python 中装饰器缓存的困惑
    我正在使用Python装饰器来实现函数的缓存。我了解缓存结果以提高性能的基本概念,但我正在努力解决如何处理不同的函数参数并确保底层数据更改时缓存更新。我已经实现了一个基本装饰器,它将函数结果存储在基于参数的字典。但是,此方法无法处理函数参数可能具有复杂结构(如嵌套列......
  • Python:__add__ 和 +,浮点数和整数的不同行为
    当将整数值添加到浮点值时,我意识到如果在浮点上调用该方法可以正常工作,例如:__add__但如果在整数上调用则不行:>>>n=2.0>>>m=1>>>n.__add__(m)3.0起初我认为|||只是对>>>m.__add__(n)NotImplemented和__add__类型的实现方式不同(例如f......
  • python中scrapy爬取数据get()与getall()区别
    在使用scrapy进行爬取数据的时候,有些时候需要爬取的是一段文本,或者一个div里面有很多内容,这时候我们就要使用到get()或者getall()来获取数据: get():是获取的满足条件的第一个数据。getall():是获取的满足条件的所有数据。scrapyget()getall()原理在Scrapy中,get(......
  • python—NumPy基础(3)
    文章目录算术函数算术函数的使用算术函数中out参数的使用mod()函数的使用统计函数power()函数的使用median()函数的使用mean()函数的使用函数的使用其他常用函数tile()和repeat()函数的使用roll()函数的使用resize()函数的使用replace()和put()函数的使savetxt()和lo......
  • Python爬虫:代理ip电商数据实战
    引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训......
  • python科学计算:加速库numba —— 安装和试用
    安装(anaconda环境下)condainstallnumbaDemo代码:fromnumbaimportjitfromnumpyimportarangeimportnumpyimporttime@jitdefsum2d(arr):M,N=arr.shaperesult=0.0foriinrange(M):forjinrange(N):result+=a......
  • Python - Selenium抓取淘宝直播间评论(可使用无头模式)
    Python-Selenium抓取淘宝直播间评论(可使用无头模式)下面介绍如何使用python中的selenium简单抓取淘宝直播间实时评论。友情提醒,仅供学习交流使用,请勿用于非法用途!一、创建python项目1.在目录下新建main.py和venv虚拟环境:创建虚拟环境:python-mvenvvenv激活虚拟环......
  • 需要帮助来提取此 XML 节点 - Python 中的 Excel 连接字符串
    我有一个Python程序,打开Excel(XLSX)文件,并尝试查找<connection>节点。这是connections.xml文件中的完整XML。<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><connectionsxmlns="http://schemas.op......
  • 【python】Python中采集Prometheus数据,进行数据分析和可视化展示
    ✨✨欢迎大家来到景天科技苑✨✨......