国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

“AI Earth”人工智能創(chuàng)新挑戰(zhàn)賽:助力精準(zhǔn)氣象和海洋預(yù)測Baseline[1]、NetCDF4使用教學(xué)、Xarray 使用教學(xué),針對氣象領(lǐng)域.nc文件讀取處理

這篇具有很好參考價值的文章主要介紹了“AI Earth”人工智能創(chuàng)新挑戰(zhàn)賽:助力精準(zhǔn)氣象和海洋預(yù)測Baseline[1]、NetCDF4使用教學(xué)、Xarray 使用教學(xué),針對氣象領(lǐng)域.nc文件讀取處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.“AI Earth”人工智能創(chuàng)新挑戰(zhàn)賽:助力精準(zhǔn)氣象和海洋預(yù)測Baseline[1]、NetCDF4使用教學(xué)、Xarray 使用教學(xué),針對氣象領(lǐng)域.nc文件讀取處理

比賽官網(wǎng):https://tianchi.aliyun.com/specials/promotion/aiearth2021?spm=a2c22.12281976.0.0.4d0d19efK2FngK

1.1 背景描述

聚焦全球大氣海洋研究前沿方向,將人工智能技術(shù)應(yīng)用到天氣氣候預(yù)測領(lǐng)域中,提高極端災(zāi)害性天氣的預(yù)報水平,已成為整個行業(yè)研究的熱點方向。發(fā)生在熱帶太平洋上的厄爾尼諾-南方濤動(ENSO)現(xiàn)象是地球上最強(qiáng)、最顯著的年際氣候信號,經(jīng)常會引發(fā)洪澇、干旱、高溫、雪災(zāi)等極端事件,2020年底我國冬季極寒也與ENSO息息相關(guān)。對于ENSO的預(yù)測,氣候動力模式消耗計算資源大且存在春季預(yù)測障礙?;跉v史氣候觀測和模擬數(shù)據(jù),利用T時刻過去12個月(包含T時刻)的時空序列(氣象因子),可以構(gòu)建預(yù)測ENSO的深度學(xué)習(xí)模型,預(yù)測未來1-24個月的Nino3.4指數(shù),這對極端天氣與氣候事件的預(yù)測具有重要意義。

本數(shù)據(jù)集由氣候與應(yīng)用前沿研究院ICAR提供。數(shù)據(jù)包括CMIP5/6模式的歷史模擬數(shù)據(jù)和美國SODA模式重建的近100多年歷史觀測同化數(shù)據(jù)。每個樣本包含以下氣象及時空變量:海表溫度異常(SST),熱含量異常(T300),緯向風(fēng)異常(Ua),經(jīng)向風(fēng)異常(Va),數(shù)據(jù)維度為(year,month,lat,lon)。訓(xùn)練數(shù)據(jù)提供對應(yīng)月份的Nino3.4 index標(biāo)簽數(shù)據(jù)。測試用的初始場數(shù)據(jù)為國際多個海洋資料同化結(jié)果提供的隨機(jī)抽取的n段12個時間序列,數(shù)據(jù)格式采用NPY格式保存。

1.2 歷史氣候觀測和模擬數(shù)據(jù)集數(shù)據(jù)說明

項目鏈接以及碼源見文末

  • 訓(xùn)練數(shù)據(jù)

每個數(shù)據(jù)樣本第一維度(year)表征數(shù)據(jù)所對應(yīng)起始年份,對于CMIP數(shù)據(jù)共4645年,其中1-2265為CMIP6中15個模式提供的151年的歷史模擬數(shù)據(jù)(總共:151年 *15 個模式=2265);2266-4645為CMIP5中17個模式提供的140年的歷史模擬數(shù)據(jù)(總共:140年 *17 個模式=2380)。對于歷史觀測同化數(shù)據(jù)為美國提供的SODA數(shù)據(jù)。

其中每個樣本第二維度(month)表征數(shù)據(jù)對應(yīng)的月份,對于訓(xùn)練數(shù)據(jù)均為36,對應(yīng)的從當(dāng)前年份開始連續(xù)三年數(shù)據(jù)(從1月開始,共36月),比如:

SODA_train.nc中[0,0:36,:,:]為第1-第3年逐月的歷史觀測數(shù)據(jù);

SODA_train.nc中[1,0:36,:,:]為第2-第4年逐月的歷史觀測數(shù)據(jù);
…,
SODA_train.nc中[99,0:36,:,:]為第100-102年逐月的歷史觀測數(shù)據(jù)。


CMIP_train.nc中[0,0:36,:,:]為CMIP6第一個模式提供的第1-第3年逐月的歷史模擬數(shù)據(jù);
…,
CMIP_train.nc中[150,0:36,:,:]為CMIP6第一個模式提供的第151-第153年逐月的歷史模擬數(shù)據(jù);

CMIP_train.nc中[151,0:36,:,:]為CMIP6第二個模式提供的第1-第3年逐月的歷史模擬數(shù)據(jù);
…,
CMIP_train.nc中[2265,0:36,:,:]為CMIP5第一個模式提供的第1-第3年逐月的歷史模擬數(shù)據(jù);
…,
CMIP_train.nc中[2405,0:36,:,:]為CMIP5第二個模式提供的第1-第3年逐月的歷史模擬數(shù)據(jù);
…,
CMIP_train.nc中[4644,0:36,:,:]為CMIP5第17個模式提供的第140-第142年逐月的歷史模擬數(shù)據(jù)。

其中每個樣本第三、第四維度分別代表經(jīng)緯度(南緯55度北緯60度,東經(jīng)0360度),所有數(shù)據(jù)的經(jīng)緯度范圍相同。

  • 訓(xùn)練數(shù)據(jù)標(biāo)簽

標(biāo)簽數(shù)據(jù)為Nino3.4 SST異常指數(shù),數(shù)據(jù)維度為(year,month)。

CMIP(SODA)_train.nc對應(yīng)的標(biāo)簽數(shù)據(jù)當(dāng)前時刻N(yùn)ino3.4 SST異常指數(shù)的三個月滑動平均值,因此數(shù)據(jù)維度與維度介紹同訓(xùn)練數(shù)據(jù)一致

注:三個月滑動平均值為當(dāng)前月與未來兩個月的平均值。

  • 測試數(shù)據(jù)

測試用的初始場(輸入)數(shù)據(jù)為國際多個海洋資料同化結(jié)果提供的隨機(jī)抽取的n段12個時間序列,數(shù)據(jù)格式采用NPY格式保存,維度為(12,lat,lon, 4),12為t時刻及過去11個時刻,4為預(yù)測因子,并按照SST,T300,Ua,Va的順序存放。

測試集文件序列的命名規(guī)則:test_編號_起始月份_終止月份.npy,如test_00001_01_12_.npy。

  • 數(shù)據(jù)(Netcdf文件)讀取方法

(1) https://www.giss.nasa.gov/tools/panoply/ panoply可視化文件

(2) Python中xarray/netCDF4 庫

1.3 評估指標(biāo)如下:

$Score = \frac{2}{3} \times accskill - RMSE$

其中$accskill$為相關(guān)性技巧評分,計算方式如下:

$accskill = \sum_{i=1}^{24} a \times ln(i) \times cor_i \ (i \leq 4, a = 1.5; 5 \leq i \leq 11, a = 2; 12 \leq i \leq 18, a = 3; 19 \leq i, a = 4)$

可以看出,月份$i$增加時系數(shù)$a$也增大,也就是說,模型能準(zhǔn)確預(yù)測的時間越長,評分就越高。

是對于$N$個測試集樣本在時刻$i$的預(yù)測值與實際值的相關(guān)系數(shù),計算公式如下:

$cor_i = \frac{\sum_{j=1}N(y_{truej}-\bar{y}{true})(y{predj}-\bar{y}{pred})}{\sqrt{\sum(y{truej}-\bar{y}{true})2\sum(y{predj}-\bar{y}{pred})^2}}$

其中$y{truej}$為時刻$i$樣本$j$的實際Nino3.4指數(shù),$\bar{y}{true}$為該時刻$N$個測試集樣本的Nino3.4指數(shù)的均值,$y{predj}$為時刻$i$樣本$j$的預(yù)測Nino3.4指數(shù),$\bar{y}_{pred}$為該時刻$N$個測試集樣本的預(yù)測Nino3.4指數(shù)的均值。

為24個月份的累計均方根誤差,計算公式為:

$RMSE = \sum_{i=1}^{24}rmse_i \ rmse = \sqrt{\frac{1}{N}\sum_{j=1}N(y_{truej}-y_{predj})2}$

ENSO現(xiàn)象會在世界大部分地區(qū)引起極端天氣,對全球的天氣、氣候以及糧食產(chǎn)量具有重要的影響,準(zhǔn)確預(yù)測ENSO,是提高東亞和全球氣候預(yù)測水平和防災(zāi)減災(zāi)的關(guān)鍵。Nino3.4指數(shù)是ENSO現(xiàn)象監(jiān)測的一個重要指標(biāo),它是指Nino3.4區(qū)(170°W - 120°W,5°S - 5°N)的平均海溫距平指數(shù),用于反應(yīng)海表溫度異常,若Nino3.4指數(shù)連續(xù)5個月超過0.5℃就判定為一次ENSO事件。本賽題的目標(biāo),就是基于歷史氣候觀測和模式模擬數(shù)據(jù),利用T時刻過去12個月(包含T時刻)的時空序列,預(yù)測未來1 - 24個月的Nino3.4指數(shù)。

# !unzip -d input /home/aistudio/data/data221707/enso_final_test_data_B_labels.zip

2.氣象海洋預(yù)測-氣象數(shù)據(jù)分析常用工具

氣象科學(xué)中的數(shù)據(jù)通常包含多個維度,本賽題中給出的數(shù)據(jù)就包含年、月、經(jīng)度、緯度四個維度,為了便于數(shù)據(jù)的讀取和操作,氣象數(shù)據(jù)通常采用netCDF文件來存儲,文件后綴為.nc。

對于以netCDF文件存儲的氣象數(shù)據(jù),有兩個常用的數(shù)據(jù)分析庫,即NetCDF4和Xarray。首先將學(xué)習(xí)這兩個庫的基本對象和基本操作,掌握用這兩個庫讀取和處理氣象數(shù)據(jù)的基本方法。

2.1 NetCDF4使用教學(xué)

官方文檔

NetCDF4是NetCDF C庫的Python模塊,支持Groups、Dimensions、Variables和Attributes等對象類型及其相關(guān)操作。

  • 安裝NetCDF4
!pip install netCDF4

2.1.1 創(chuàng)建、打開和關(guān)閉netCDF文件

NetCDF4可以通過調(diào)用Dataset創(chuàng)建netCDF文件或打開已存在的文件,并通過查看data_model屬性確定文件的格式。需要注意創(chuàng)建或打開文件后要先關(guān)閉文件才能再次調(diào)用Dataset打開文件。

  • 創(chuàng)建netCDF文件
import netCDF4 as nc
from netCDF4 import Dataset

# Dataset包含三個輸入?yún)?shù):文件名,模式(其中'w', 'r+', 'a'為可寫入模式),文件格式
test = Dataset('test.nc', 'r+', 'NETCDF4')
# test = Dataset('test.nc', 'w', 'NETCDF4')
# - 打開已存在的netCDF文件
# 打開訓(xùn)練樣本中的SODA數(shù)據(jù)
soda= Dataset("SODA_train.nc", "w", format="NETCDF4")

# soda = Dataset('SODA_train.nc')
# - 查看文件格式
print(soda.data_model)
NETCDF4
# - 關(guān)閉netCDF文件
soda.close()

2.1.2 Groups

NetCDF4支持按層級的組(Groups)來組織數(shù)據(jù),類似于文件系統(tǒng)中的目錄,Groups中可以包含Variables、Dimenions、Attributes對象以及其他Groups對象,Dataset會創(chuàng)建一個特殊的Groups,稱為根組(Root Group),類似于根目錄,使用Dataset.createGroup方法創(chuàng)建的組都包含在根組中。

  • 創(chuàng)建Groups
# 接受一個字符串參數(shù)作為Group名稱
group1 = test.createGroup('group1')
group2 = test.createGroup('group2')
# - 查看文件中的所有Groups
# 返回一個Group字典
test.groups
{'group1': <class 'netCDF4._netCDF4.Group'>
 group /group1:
     dimensions(sizes): 
     variables(dimensions): 
     groups: group11,
 'group2': <class 'netCDF4._netCDF4.Group'>
 group /group2:
     dimensions(sizes): 
     variables(dimensions): 
     groups: group21}
# - Groups嵌套
# 在group1和group2下分別再創(chuàng)建一個Group
group1_1 = test.createGroup('group1/group11')
group2_1 = test.createGroup('group2/group21')
test.groups
test.groups.values()
dict_values([<class 'netCDF4._netCDF4.Group'>
group /group1:
    dimensions(sizes): 
    variables(dimensions): 
    groups: group11, <class 'netCDF4._netCDF4.Group'>
group /group2:
    dimensions(sizes): 
    variables(dimensions): 
    groups: group21])
# - 遍歷查看所有Groups
# 定義一個生成器函數(shù)用來遍歷所有目錄樹
def walktree(top):
    values = top.groups.values()
    yield values
    for value in top.groups.values():
        for children in walktree(value):
            yield children
            
for groups in walktree(test):
    for group in groups:
        print(group)
<class 'netCDF4._netCDF4.Group'>
group /group1:
    dimensions(sizes): 
    variables(dimensions): 
    groups: group11
<class 'netCDF4._netCDF4.Group'>
group /group2:
    dimensions(sizes): 
    variables(dimensions): 
    groups: group21
<class 'netCDF4._netCDF4.Group'>
group /group1/group11:
    dimensions(sizes): 
    variables(dimensions): float64 ftemp(time, level, lat, lon)
    groups: 
<class 'netCDF4._netCDF4.Group'>
group /group2/group21:
    dimensions(sizes): 
    variables(dimensions): 
    groups: 

2.1.3 Dimensions

NetCDF4用維度來定義各個變量的大小,例如本賽題中訓(xùn)練樣本的第二維度month就是一個維度對象,每個樣本包含36個月的數(shù)據(jù),因此month維度內(nèi)的變量的大小就是36。變量是包含在維度中的,因此在創(chuàng)建每個變量時要先創(chuàng)建其所在的維度。

  • 創(chuàng)建Dimensions

Dataset.createDimension方法接受兩個參數(shù):維度名稱,維度大小。維度大小設(shè)置為None或0時表示無窮維度。

# 創(chuàng)建無窮維度
level = test.createDimension('level', None)
time = test.createDimension('time', None)
# 創(chuàng)建有限維度
lat = test.createDimension('lat', 180)
lon = test.createDimension('lon', 360)
---------------------------------------------------------------------------

RuntimeError                              Traceback (most recent call last)

/tmp/ipykernel_2348/1064279341.py in <module>
      1 # 創(chuàng)建無窮維度
----> 2 level = test.createDimension('level', None)
      3 time = test.createDimension('time', None)
      4 # 創(chuàng)建有限維度
      5 lat = test.createDimension('lat', 180)


src/netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.createDimension()


src/netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dimension.__init__()


src/netCDF4/_netCDF4.pyx in netCDF4._netCDF4._ensure_nc_success()


RuntimeError: NetCDF: String match to name in use
# - 查看Dimensions
test.dimensions
# 查看維度大小
print(len(lon))
# Dimension對象存儲在字典中
print(level)

# 判斷維度是否是無窮
print(time.isunlimited())
print(lat.isunlimited())

2.1.4 Variables

NetCDF4的Variables對象類似于Numpy中的多維數(shù)組,不同的是,NetCDF4的Variables變量可以存儲在無窮維度中。

  • 創(chuàng)建Variables

Dataset.createVariable方法接受的參數(shù)為:變量名,變量的數(shù)據(jù)類型,變量所在的維度。

變量的有效數(shù)據(jù)類型包括:'f4'(32位浮點數(shù))、'f8'(64位浮點數(shù))、'i1'(8位有符號整型)、'i2'(16位有符號整型)、'i4'(32位有符號整型)、'i8'(64位有符號整型)、'u1'(8位無符號整型)、'u2'(16位無符號整型)、'u4'(32位無符號整型)、'u8'(64位無符號整型)、's1'(單個字符)。

# 創(chuàng)建單個維度上的變量
times = test.createVariable('time', 'f8', ('time',))
levels = test.createVariable('level', 'i4', ('level',))
lats = test.createVariable('lat', 'f4', ('lat',))
lons = test.createVariable('lon', 'f4', ('lon',))

# 創(chuàng)建多個維度上的變量
temp = test.createVariable('temp', 'f4', ('time', 'level', 'lat', 'lon'))
# - 查看Variables
print(temp)
# 通過路徑的方式在Group中創(chuàng)建變量
ftemp = test.createVariable('/group1/group11/ftemp', 'f8', ('time', 'level', 'lat', 'lon'))

# 可以通過路徑查看變量
print(test['/group1/group11/ftemp'])

print(test['/group1/group11'])


# 查看文件中的所有變量
print(test.variables)

2.1.5 Attributes

Attributes對象用于存儲對文件或維變量的描述信息,netcdf文件中包含兩種屬性:全局屬性和變量屬性。全局屬性提供Groups或整個文件對象的信息,變量屬性提供Variables對象的信息,屬性的名稱可以自己設(shè)置,下面例子中的description和history等都是自定義的屬性名稱。

import time

# 設(shè)置對文件的描述
test.description = 'bogus example script'
# 設(shè)置文件的歷史信息
test.history = 'Created' + time.ctime(time.time())
# 設(shè)置文件的來源信息
test.source = 'netCDF4 python module tutorial'
# 設(shè)置變量屬性
lats.units = 'degrees north'
lons.units = 'degrees east'
levels.units = 'hPa'
temp.units = 'K'
times.units = 'hours since 0001-01-01 00:00:00.0'
times.calendar = 'gregorian'
# 查看文件屬性名稱
print(test.ncattrs())
# 查看變量屬性名稱
print(test['lat'].ncattrs())
print(test['time'].ncattrs())


# 查看文件屬性
for name in test.ncattrs():
    print('Global attr {} = {}'.format(name, getattr(test, name)))

2.1.6 寫入或讀取變量數(shù)據(jù)

類似于數(shù)組,可以通過切片的方式向變量中寫入或讀取數(shù)據(jù)。

  • 向變量中寫入數(shù)據(jù)
from numpy.random import uniform

nlats = len(test.dimensions['lat'])
nlons = len(test.dimensions['lon'])
print('temp shape before adding data = {}'.format(temp.shape))
# 無窮維度的大小會隨著寫入的數(shù)據(jù)的大小自動擴(kuò)展
temp[0:5, 0:10, :, :] = uniform(size=(5, 10, nlats, nlons))
print('temp shape after adding data = {}'.format(temp.shape))

print('levels shape after adding pressure data = {}'.format(levels.shape))
  • 讀取變量中的數(shù)據(jù)
print(temp[1, 5, 100, 300])

print(temp[1, 5, 10:20, 100:110].shape)

# 可以用start:stop:step的形式進(jìn)行切片
print(temp[1, 5, 10, 100:110:2])

2.1.7 應(yīng)用

我們嘗試用NetCDF4來操作一下訓(xùn)練樣本中的SODA數(shù)據(jù)。

# 打開SODA文件
soda = Dataset('SODA_train.nc')
# 查看文件格式
print('SODA文件格式:', soda.data_model)
# 查看文件中包含的對象
print(soda)
# 查看維度和變量
print(soda.dimensions)
print(soda.variables)

可以看到,SODA文件中包含year、month、lat、lon四個維度,維度大小分別是100、36、24和72,包含sst、t300、ua、va四個變量,每個變量都定義在(year, month, lat, lon)維度上。

# # 讀取每個變量中的數(shù)據(jù)
# soda_sst = soda['sst'][:]
# print(soda_sst[1, 1, 1, 1])

# soda_t300 = soda['t300'][:]
# print(soda_t300[1, 2, 12:24, 36])

# soda_ua = soda['ua'][:]
# print(soda_ua[1, 2, 12:24:2, 36:38])

# soda_va = soda['va'][:]
# print(soda_va[5:10, 0:12, 12, 36])

# # 關(guān)閉文件
# soda.close()

2.2 Xarray 使用教學(xué)

官方文檔

Xarray是一個開源的Python庫,支持在類似Numpy的多維數(shù)組上引入維度、坐標(biāo)和屬性標(biāo)記并可以直接使用標(biāo)記的名稱進(jìn)行相關(guān)操作,能夠讀寫netcdf文件并進(jìn)行進(jìn)一步的數(shù)據(jù)分析和可視化。

Xarray有兩個基本的數(shù)據(jù)結(jié)構(gòu):DataArray和Dataset,這兩個數(shù)據(jù)結(jié)構(gòu)都是在多維數(shù)組上建立的,其中DataArray用于標(biāo)記的實現(xiàn),Dataset則是一個類似于字典的DataArray容器。

安裝Xarray要求滿足以下依賴包:

  • Python(3.7+)
  • setuptools(40.4+)
  • Numpy(1.17+)
  • Pandas(1.0+)
!pip install xarray

2.2.1 創(chuàng)建DataArray

xr.DataArray接受三個輸入?yún)?shù):數(shù)組,維度,坐標(biāo)。其中維度為數(shù)組的維度名稱,坐標(biāo)以字典的形式給維度賦予坐標(biāo)標(biāo)簽。

import numpy as np
import pandas as pd
import xarray as xr
# 創(chuàng)建一個2x3的數(shù)組,將維度命名為'x'和'y',并賦予'x'維度10和20兩個坐標(biāo)標(biāo)簽
data = xr.DataArray(np.random.randn(2, 3), dims=('x', 'y'), coords={'x': [10, 20]})
data

# 也可以用Pandas的Series或DataFrame數(shù)據(jù)創(chuàng)建DataArray。
# index名稱會自動轉(zhuǎn)換成坐標(biāo)標(biāo)簽
xr.DataArray(pd.Series(range(3), index=list('abc'), name='foo'))
# 查看數(shù)據(jù)
print(data.values)

# 查看維度
print(data.dims)

# 查看坐標(biāo)
print(data.coords)

# 可以用data.attrs字典來存儲任意元數(shù)據(jù)
print(data.attrs)
  • 索引

Xarray支持四種索引方式。

# 通過位置索引,類似于numpy
print(data[0, :], '\n')

# 通過坐標(biāo)標(biāo)簽索引
print(data.loc[10], '\n')

# 通過維度名稱和位置索引,isel表示"integer select"
print(data.isel(x=0), '\n')

# 通過維度名稱和坐標(biāo)標(biāo)簽索引,sel表示"select"
print(data.sel(x=10), '\n')
  • 屬性

和NetCDF4一樣,Xarray也支持自定義DataArray或標(biāo)記的屬性描述。

# 設(shè)置DataArray的屬性
data.attrs['long_name'] = 'random velocity'
data.attrs['units'] = 'metres/sec'
data.attrs['description'] ='A random variable created as an example'
data.attrs['ramdom_attribute'] = 123
# 查看屬性
print(data.attrs)
# 設(shè)置維度標(biāo)記的屬性描述
data.x.attrs['units'] ='x units'
print('Attributes of x dimension:', data.x.attrs, '\n')
  • 計算
    DataArray的計算方式類似于numpy ndarray。
data + 10
np.sin(data)
data.T
data.sum()

可以直接使用維度名稱進(jìn)行聚合操作。

data.mean(dim='x')

DataArray之間的計算操作可以根據(jù)維度名稱進(jìn)行廣播。

a = xr.DataArray(np.random.randn(3), [data.coords['y']])
b = xr.DataArray(np.random.randn(4), dims='z')
print(a, '\n')
print(b, '\n')
print(a+b, '\n')
data - data.T
data[:-1] - data[:1]
  • GroupBy

Xarray支持使用類似于Pandas的API進(jìn)行分組操作。

labels = xr.DataArray(['E', 'F', 'E'], [data.coords['y']], name='labels')
labels
# 將data的y坐標(biāo)對齊labels后按labels的值分組求均值
data.groupby(labels).mean('y')
# 將data的y坐標(biāo)按labels分組后減去組內(nèi)的最小值
data.groupby(labels).map(lambda x: x - x.min())

2.2.2 繪圖

Xarray支持簡單方便的可視化操作,這里只做簡單的介紹,更多的繪圖方法感興趣的同學(xué)們可以自行去探索。

%matplotlib inline
data.plot()
<matplotlib.collections.QuadMesh at 0x7f5bf77c4490>

2.2.3 與Pandas對象互相轉(zhuǎn)換

Xarray可以方便地轉(zhuǎn)換成Pandas的Series或DataFrame,也可以由Pandas對象轉(zhuǎn)換回Xarray。

# 轉(zhuǎn)換成Pandas的Series
series = data.to_series()
series
x   y
10  0   -0.188398
    1    0.612211
    2    0.741517
20  0   -0.547693
    1   -0.021661
    2    0.183370
dtype: float64
# Series轉(zhuǎn)換成Xarray
series.to_xarray()
# 轉(zhuǎn)換成Pandas的DataFrame
df = data.to_dataframe(name='colname')
df

2.2.4 Dataset

Dataset是一個類似于字典的DataArray的容器,可以看作是一個具有多為結(jié)構(gòu)的DataFrame。對比NetCDF4庫中的Dataset,我們可以發(fā)現(xiàn)兩者的作用是相似的,都是作為容器用來存儲其他的對象。

# 創(chuàng)建一個Dataset,其中包含三個DataArray
ds = xr.Dataset({'foo': data, 'bar': ('x', [1, 2]), 'baz': np.pi})
ds

可以通過字典的方式或者點索引的方式來查看DataArray,但是只有采用字典方式時才可以進(jìn)行賦值。

# 通過字典方式查看DataArray
print(ds['foo'], '\n')

# 通過點索引的方式查看DataArray
print(ds.foo)
<xarray.DataArray 'foo' (x: 2, y: 3)>
array([[-0.18839763,  0.6122107 ,  0.74151684],
       [-0.547693  , -0.02166147,  0.18336995]])
Coordinates:
  * x        (x) int64 10 20
Dimensions without coordinates: y
Attributes:
    long_name:         random velocity
    units:             metres/sec
    description:       A random variable created as an example
    ramdom_attribute:  123 

<xarray.DataArray 'foo' (x: 2, y: 3)>
array([[-0.18839763,  0.6122107 ,  0.74151684],
       [-0.547693  , -0.02166147,  0.18336995]])
Coordinates:
  * x        (x) int64 10 20
Dimensions without coordinates: y
Attributes:
    long_name:         random velocity
    units:             metres/sec
    description:       A random variable created as an example
    ramdom_attribute:  123

同樣可以通過坐標(biāo)標(biāo)記來索引。

ds.bar.sel(x=10)

2.2.5 讀/寫netCDF文件

# 寫入到netcdf文件
ds.to_netcdf('xarray_test.nc')

# 讀取已存在的netcdf文件
xr.open_dataset('xarray_test.nc')

2.2.6 應(yīng)用

嘗試用Xarray來操作一下訓(xùn)練樣本中的SODA數(shù)據(jù)。

# 打開SODA文件
soda = xr.open_dataset('SODA_train.nc')
# 查看文件屬性
print(soda.attrs)
# 查看文件中包含的對象
print(soda)
{}
<xarray.Dataset>
Dimensions:  ()
Data variables:
    *empty*
# 查看維度和坐標(biāo)
print(soda.dims)
print(soda.coords)
Frozen(SortedKeysDict({}))
Coordinates:
    *empty*
# # 讀取數(shù)據(jù)
# soda_sst = soda['sst']
# print(soda_sst[1, 1, 1, 1], '\n')

# soda_t300 = soda['t300']
# print(soda_t300[1, 2, 12:24, 36], '\n')

# soda_ua = soda['ua']
# print(soda_ua[1, 2, 12:24:2, 36:38], '\n')

# soda_va = soda['va']
# print(soda_va[5:10, 0:12, 12, 36])

項目鏈接以及碼源見文末

鏈接跳轉(zhuǎn)到文末,歡迎訂閱

更多文章請關(guān)注公重號:汀丶人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-472953.html

到了這里,關(guān)于“AI Earth”人工智能創(chuàng)新挑戰(zhàn)賽:助力精準(zhǔn)氣象和海洋預(yù)測Baseline[1]、NetCDF4使用教學(xué)、Xarray 使用教學(xué),針對氣象領(lǐng)域.nc文件讀取處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ASIC加速技術(shù)在人工智能領(lǐng)域的創(chuàng)新與挑戰(zhàn)

    人工智能 (AI) 是當(dāng)今世界最熱、最受關(guān)注的領(lǐng)域之一。隨著深度學(xué)習(xí)、自然語言處理、計算機(jī)視覺等技術(shù)的發(fā)展,AI 應(yīng)用越來越廣泛,從智能家居到自動駕駛汽車,從醫(yī)療診斷到金融交易,各個領(lǐng)域都需要AI 技術(shù)的加入。但是,AI 的發(fā)展也面臨著許多挑戰(zhàn)。其中,ASIC加速技術(shù)

    2024年02月07日
    瀏覽(30)
  • AIGC 探究:人工智能生成內(nèi)容的技術(shù)原理、廣泛應(yīng)用、創(chuàng)新應(yīng)用、版權(quán)問題與未來挑戰(zhàn)

    AIGC 探究:人工智能生成內(nèi)容的技術(shù)原理、廣泛應(yīng)用、創(chuàng)新應(yīng)用、版權(quán)問題與未來挑戰(zhàn)

    AIGC(Artificial Intelligence Generated Content)即人工智能生成內(nèi)容, 其核心在于利用深度學(xué)習(xí)技術(shù),尤其是基于神經(jīng)網(wǎng)絡(luò)的模型,來模擬人類創(chuàng)作過程 ,自主生成高質(zhì)量的文本、圖像、音頻、視頻等各類內(nèi)容。神經(jīng)網(wǎng)絡(luò)是一種模仿人腦神經(jīng)元結(jié)構(gòu)與功能的計算模型,通過大量數(shù)據(jù)

    2024年04月27日
    瀏覽(33)
  • 中外人工智能專家共話大語言模型與 AI 創(chuàng)新

    中外人工智能專家共話大語言模型與 AI 創(chuàng)新

    ?? CSDN 葉庭云 : https://yetingyun.blog.csdn.net/ 智源社區(qū)活動, 中外人工智能專家共話大語言模型與 AI 創(chuàng)新 。 對談書目: 《大模型時代》,龍志勇、黃雯 著,中譯出版社 2023 年 5 月出版。 《為什么偉大不能被計劃》,[美]肯尼斯·斯坦利、[美]喬爾·雷曼 著,中譯出版社 2023

    2024年02月14日
    瀏覽(51)
  • 從技術(shù)創(chuàng)新到應(yīng)用實踐,百度智能云發(fā)起大模型平臺應(yīng)用開發(fā)挑戰(zhàn)賽!

    從技術(shù)創(chuàng)新到應(yīng)用實踐,百度智能云發(fā)起大模型平臺應(yīng)用開發(fā)挑戰(zhàn)賽!

    大模型已經(jīng)成為未來技術(shù)發(fā)展方向的重大變革,熱度之下更需去虛向?qū)崳尲夹g(shù)走進(jìn)產(chǎn)業(yè)場景。在這樣的背景下,百度智能云于近期發(fā)起了“百度智能云千帆大模型平臺應(yīng)用開發(fā)挑戰(zhàn)賽”。 在不久前的演講中,百度創(chuàng)始人、董事長兼首席執(zhí)行官李彥宏表示,AI 原生應(yīng)用要能解

    2024年02月07日
    瀏覽(31)
  • AI寫作革命:PyTorch如何助力人工智能走向深度創(chuàng)新

    AI寫作革命:PyTorch如何助力人工智能走向深度創(chuàng)新

    身為專注于人工智能研究的學(xué)者,我十分熱衷于分析\\\"AI寫稿\\\"與\\\"PyTorch\\\"這兩項領(lǐng)先技術(shù)。面對日益精進(jìn)的人工智能科技,\\\"AI寫作\\\"已不再是天方夜譚;而\\\"PyTorch\\\"如璀璨明珠般耀眼,作為深度學(xué)習(xí)領(lǐng)域的尖端工具,正有力地推進(jìn)著人工智能化進(jìn)程。于此篇文章中,我將詳細(xì)解析\\\"

    2024年04月13日
    瀏覽(29)
  • 【AI廣延】APS下的人工智能技術(shù)與挑戰(zhàn)

    【AI廣延】APS下的人工智能技術(shù)與挑戰(zhàn)

    自動駕駛時代是指人工智能和相關(guān)技術(shù)在汽車行業(yè)中廣泛應(yīng)用,使得 汽車能夠在不需要人類干預(yù)的情況下自主進(jìn)行駕駛操作 的車輛新時代。在自動駕駛時代,車輛配備了感知、決策和控制系統(tǒng),利用傳感器、攝像頭、雷達(dá)、激光等設(shè)備來獲取周圍環(huán)境信息,并通過人工智能

    2024年02月21日
    瀏覽(20)
  • 人工智能的挑戰(zhàn)與機(jī)遇:如何實現(xiàn)人類智能與AI的和諧共生

    人工智能(Artificial Intelligence, AI)是一門研究如何讓計算機(jī)模擬人類智能的學(xué)科。人類智能包括學(xué)習(xí)、理解自然語言、推理、認(rèn)知、情感、創(chuàng)造等多種能力。人工智能的目標(biāo)是讓計算機(jī)具備這些能力,并且能夠與人類互動和協(xié)作。 人工智能的研究歷史可以追溯到20世紀(jì)50年代,當(dāng)

    2024年02月19日
    瀏覽(23)
  • 《人工智能算法案例大全:基于Python》——實踐AI算法,馭智創(chuàng)新之路

    《人工智能算法案例大全:基于Python》——實踐AI算法,馭智創(chuàng)新之路

    導(dǎo)語 隨著人工智能(AI)技術(shù)的飛速發(fā)展,AI算法成為推動智能化進(jìn)程的核心要素。而在這個領(lǐng)域中,一本名為《人工智能算法案例大全:基于Python》的書籍引起了廣泛關(guān)注。本文將深入探討這本書所呈現(xiàn)的豐富案例,以及它在實踐AI算法、馭智創(chuàng)新之路上的重要作用。 第一

    2024年02月06日
    瀏覽(25)
  • 創(chuàng)新未來,工信部組建【AI應(yīng)用工作組】助力人工智能進(jìn)步

    創(chuàng)新未來,工信部組建【AI應(yīng)用工作組】助力人工智能進(jìn)步

    隨著人工智能大模型技術(shù)的快速發(fā)展和成熟,AI應(yīng)用已經(jīng)從早期的概念階段進(jìn)入了千行百業(yè)的實踐落地階段,三百六十行、行行需AI。如今,AI已經(jīng)成為推動各行各業(yè)創(chuàng)新和發(fā)展的重要引擎,對經(jīng)濟(jì)、社會和文化的發(fā)展產(chǎn)生了深遠(yuǎn)的影響。為了進(jìn)一步推動人工智能應(yīng)用的落地和

    2024年02月07日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包