DataFrame存储的网格数据转换成数组或Tensor 存储(xr.Dataset 用法学习)
NOAA 下载.csv 模型数据 转换成 Tensor 处理
(1) 从NOAA 下载需要的数据
(2) .csv数据格式转换
(3) 保存成.npy或.nc 数据
NOAA下载数据
通常可以通过以下链接(NOAA)下载需要的气象数据/海洋数据等
NWW3 模型数据
台风天海洋数据
.csv 格式数据转换成 一般气象数据格式或array
import torch
import numpy as np
import pandas as pd
import xarray as xr
# 读取数据
df = pd.read_csv('\data_process\2021.csv')
# 检查并删除多余的单位行
df = df.drop(index=(df.loc[(df['time']=='UTC')].index))
df = df.drop(index=(df.loc[(df['time']=='time')].index))
# 先检查数据,将所有的nan替换成0
df = df.fillna(0)
# 定义提取的列名(需要使用的变量)
"""
Tdir:peak wave direction, degrees
Tper:peak wave period, second
Thgt:significant wave height, meters
sdir:swell peak wave direction, degrees
sper:swell peak wave period, seconds
shgt:swell significant wave height, meters
wdir:wind peak wave direction, degrees
wper:wind peak wave period, seconds
whgt:wind significant wave height, meters
"""
col_list = ['time','latitude','longitude','Thgt']
df = df.loc[:,col_list]
# 把经纬度中的字符串信息转为数字
df['latitude'] = df['latitude'].apply(pd.to_numeric, errors='coerce')
df['longitude'] = df['longitude'].apply(pd.to_numeric, errors='coerce')
df['Thgt'] = df['Thgt'].apply(pd.to_numeric, errors='coerce')
# 丢掉重复项
df=df.drop_duplicates()
# 对数据集进行归一化处理
Max = np.max(df['Thgt'])
Min = np.min(df['Thgt'])
df['Thgt'] = (df['Thgt'] - Min)/(Max - Min)
# 创建网格(T×lat×lon)
df_rows = pd.DataFrame(df).set_index(['time','latitude','longitude'])
ds = xr.Dataset.from_dataframe(df_rows)
# 直接存储成.nc 文件
ds.to_netcdf('tght_2011.nc')
'''
# 检查数据是否正确转换,可以绘制图片
# 快速绘图
ds['Thgt'][1].plot.pcolormesh()
'''
print(ds)
"""
xr.Dataset 格式数据转换成多维数组
"""
# 计算张量的维度
z = len(ds['time'])
x = len(ds['latitude'])
y = len(ds['longitude'])
# 数据读入numpy.array
arr = [];
for item in range(z):
temp = ds['Thgt'][item].values
temp.swapaxes(1,0)
temp.flatten()
arr = np.append(arr,temp)
# 数据转成需要的维度
arr.resize(z,x,y)
# 保存数据
np.save('2021_series.npy',arr)