亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python對NetCDF數據做空間相關分析

發布時間:2021-04-25 09:58:36 來源:億速云 閱讀:1029 作者:小新 欄目:開發技術

這篇文章主要介紹了怎么使用Python對NetCDF數據做空間相關分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

引言:我一直想理解空間相關分析的計算思維,于是今天又拿起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()
# 顯示出圖形

那么就運行看看效果吧

怎么使用Python對NetCDF數據做空間相關分析

怎么使用Python對NetCDF數據做空間相關分析

如果覺得這個color不喜歡的話,就換一下ncl的來吧,ncl的顏色多而漂亮,喜歡啥就換啥

怎么使用Python對NetCDF數據做空間相關分析

怎么使用Python對NetCDF數據做空間相關分析

想要理解這個方法的計算思維,有必要觀察原始數據和數據處理之后的樣式,理解了數據樣式之后可能更有助于我們理解整個程序

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

怎么使用Python對NetCDF數據做空間相關分析

看看格網化后的經緯度多規范啊。畫張圖來看看可能也會直觀一些。

怎么使用Python對NetCDF數據做空間相關分析

感謝你能夠認真閱讀完這篇文章,希望小編分享的“怎么使用Python對NetCDF數據做空間相關分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绵阳市| 珲春市| 丰台区| 永吉县| 沅陵县| 新巴尔虎右旗| 五寨县| 河南省| 眉山市| 芒康县| 泰兴市| 南宁市| 抚顺市| 肃宁县| 和平县| 沙田区| 辉县市| 科尔| 临安市| 谢通门县| 翼城县| 确山县| 信宜市| 望都县| 清丰县| 宿松县| 壤塘县| 丰都县| 镇雄县| 仪陇县| 呼玛县| 文水县| 疏勒县| 秦安县| 富宁县| 高安市| 栖霞市| 股票| 阳西县| 阿鲁科尔沁旗| 龙泉市|