前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xarray | 如何将ORA-S5西太数据mat格式转为nc格式

xarray | 如何将ORA-S5西太数据mat格式转为nc格式

作者头像
用户11172986
发布2024-07-31 12:26:08
720
发布2024-07-31 12:26:08
举报
文章被收录于专栏:气python风雨

如何将ORA-S5西太数据mat格式转为nc格式

前言

本文旨在展示如何将 ORA-S5 西太平洋区域的 MATLAB (.mat) 格式数据转换为 NetCDF (.nc) 格式,以便于进一步的数据分析和可视化。通过使用 Python 中的 scipy.io.loadmat 和 xarray 库,我们将构建一个 xarray.Dataset 对象,并最终保存为 NetCDF 文件。此过程涉及数据解析、坐标系统设置以及数据变量的组织。

数据地址:

http://msdc.qdio.ac.cn/data/metadata-special-detail?id=1457906617809981442&otherId=1457906623216439298

打开网格文件

代码语言:javascript
复制
from scipy.io import loadmat
# 打开数据
file_path = '/home/mw/input/07251377/ORA-S5西太数据/grid_oras5.mat'

# 使用loadmat函数加载.mat文件
grid_data = loadmat(file_path)

print(list(grid_data.keys()))
代码语言:javascript
复制
['__header__', '__version__', '__globals__', 'lat', 'lon', 'depth']
代码语言:javascript
复制
# 数据中包含 'lon', 'lat' 'depth',为二维数据(如1x100),为了方便转换reshape成一维
lons = grid_data['lon'].reshape(221)
lats = grid_data['lat'].reshape(121)
depths = grid_data['depth'].reshape(75)
代码语言:javascript
复制
lons.shape,lats.shape,depths.shape

现在我们知道各个维度的大小,下面看看有什么变量

打开变量文件

代码语言:javascript
复制
# 打开数据
file1 = '/home/mw/input/07251377/ORA-S5西太数据/oras5_201205.mat'

# 使用loadmat函数加载.mat文件
mat_data = loadmat(file1)
print(list(mat_data.keys()))
代码语言:javascript
复制
['__header__', '__version__', '__globals__', 'salt', 'temp', 'u', 'v']
代码语言:javascript
复制
salt = mat_data['salt']
temp = mat_data['temp']
u = mat_data['u']
v = mat_data['v']
代码语言:javascript
复制
salt.shape,temp.shape,u.shape,v.shape
代码语言:javascript
复制
((121, 221, 54), (121, 221, 54), (121, 221, 54), (121, 221, 54))

如此得知维度顺序是纬度、经度、深度

出现一个问题,数据是54层,但是网格设置有75层,那么取前54个深度好了

获取数据时间

代码语言:javascript
复制
from datetime import datetime

def parse_filename_to_datetime(filename):
    """
    解析文件名中的日期并返回对应的 datetime 对象。
    
    参数:
    filename (str): 包含日期信息的文件名,例如 'oras5_199301.mat'。
    
    返回:
    datetime: 解析出的日期时间对象。
    """
    # 提取文件名中的日期部分
    date_str = filename.split('_')[1].split('.')[0]
    
    # 将字符串转换为 datetime 对象
    date_obj = datetime.strptime(date_str, '%Y%m')
    
    return date_obj

filename = '/home/mw/input/07251377/ORA-S5西太数据/oras5_199301.mat'
parsed_date = parse_filename_to_datetime(filename)
parsed_date
代码语言:javascript
复制
datetime.datetime(1993, 1, 1, 0, 0)

组装数据为xarray

代码语言:javascript
复制
import xarray as xr
ds = xr.Dataset(
    data_vars=dict(
        salt=([ "lat", "lon","depth"], salt),
        temp=([ "lat", "lon","depth"], temp),
        u=(["lat", "lon","depth"], u),
        v=([ "lat", "lon","depth"], v),
    ),
    coords=dict(
        lon=(["lon"], lons),
        lat=(["lat"], lats),
        time=(["time"], [parsed_date]),
        depth=(["depth"], depths[0:54]),
    ),
)
ds
代码语言:javascript
复制
<xarray.Dataset> Size: 46MB
Dimensions:  (lat: 121, lon: 221, depth: 54, time: 1)
Coordinates:
• lon      (lon) float64 2kB 110.0 110.2 110.5 110.8 ... 164.5 164.8 165.0• lat      (lat) float64 968B -10.0 -9.75 -9.5 -9.25 ... 19.25 19.5 19.75 20.0• time     (time) datetime64[ns] 8B 1993-01-01• depth    (depth) float32 216B 0.5058 1.556 2.668 ... 1.796e+03 1.945e+03
Data variables:
salt     (lat, lon, depth) float64 12MB 33.59 33.59 33.59 ... 34.61 34.62
temp     (lat, lon, depth) float64 12MB 28.59 28.59 28.59 ... 2.255 2.097
u        (lat, lon, depth) float64 12MB -0.2183 -0.2178 ... 0.006228
v        (lat, lon, depth) float64 12MB -0.02843 -0.02843 ... -0.0123

剩下的自己to_netcdf即可

小结

本文介绍了如何将 ORA-S5 西太平洋区域的 MATLAB (.mat) 数据文件转换为 NetCDF (.nc) 格式。通过使用 Python 的 scipy.io.loadmat 和 xarray 库,我们成功地构建了一个 xarray.Dataset 对象,其中包含了诸如盐度 (salt)、温度 (temp)、u-方向速度分量 (u) 和 v-方向速度分量 (v) 等关键海洋学变量。

布置个小练习吧,你试试写一个脚本将多个mat文件批量转为nc

布置个小练习吧,你试试写一个脚本将多个mat文件批量转为nc

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何将ORA-S5西太数据mat格式转为nc格式
    • 前言
      • 打开网格文件
        • 打开变量文件
          • 获取数据时间
            • 组装数据为xarray
              • 小结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档