本文目錄一覽:
Python氣象數據處理與繪圖(2):常用數據計算方法
對於氣象繪圖來講,第一步是對數據的處理,通過各類公式,或者統計方法將原始數據處理為目標數據。
按照氣象統計課程的內容,我給出了一些常用到的統計方法的對應函數:
在計算氣候態,區域平均時均要使用到求均值函數,對應NCL中的dim_average函數,在python中通常使用np.mean()函數
numpy.mean(a, axis, dtype)
假設a為[time,lat,lon]的數據,那麼
需要特別注意的是,氣象數據中常有缺測,在NCL中,使用求均值函數會自動略過,而在python中,當任意一數與缺測(np.nan)計算的結果均為np.nan,比如求[1,2,3,4,np.nan]的平均值,結果為np.nan
因此,當數據存在缺測數據時,通常使用np.nanmean()函數,用法同上,此時[1,2,3,4,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的,求某數組最大最小值時也有np.nanmax(), np.nanmin()函數來補充np.max(), np.min()的不足。
其他很多np的計算函數也可以通過在前邊加‘nan’來使用。
另外,
也可以直接將a中缺失值全部填充為0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求數據標準化的函數dim_standardize()
其實也就是一行的事,根據需要指定維度即可。
皮爾遜相關係數:
相關可以說是氣象科研中最常用的方法之一了,numpy函數中的np.corrcoef(x, y)就可以實現相關計算。但是在這裡我推薦scipy.stats中的函數來計算相關係數:
這個函數缺點和有點都很明顯,優點是可以直接返回相關係數R及其P值,這避免了我們進一步計算置信度。而缺點則是該函數只支持兩個一維數組的計算,也就是說當我們需要計算一個場和一個序列的相關時,我們需要循環來實現。
其中a[time,lat,lon],b[time]
(NCL中為regcoef()函數)
同樣推薦Scipy庫中的stats.linregress(x,y)函數:
slop: 回歸斜率
intercept:回歸截距
r_value: 相關係數
p_value: P值
std_err: 估計標準誤差
直接可以輸出P值,同樣省去了做置信度檢驗的過程,遺憾的是仍需同相關係數一樣循環計算。
03_Python 使用Matplotlib繪圖
不知不覺,已經進入第12周了,Python數據分析的學習現今也已經進入了中後期,在繼上周進行了Numpy的康威生命遊戲的編寫之後;緊接着進行的學習就是利用Python的Matplotlib模塊來練習繪圖。 這次由於涉及到圖像,所以引用了一些丁燁老師的pdf的截圖。主要是進行用Matplotlib模塊來進行MATLAB能做的數據分析繪圖工作,並結合Numpy和Matplotlib來做一個掃雷小遊戲。
matplotlib官網
Python 數據可視化:數據分布統計圖和熱圖
本課將繼續介紹 Seaborn 中的統計圖。一定要牢記,Seaborn 是對 Matplotlib 的高級封裝,它優化了很多古老的做圖過程,因此才會看到一個函數解決問題的局面。
在統計學中,研究數據的分布情況,也是一個重要的工作,比如某些數據是否為正態分布——某些機器學習模型很在意數據的分布情況。
在 Matplotlib 中,可以通過繪製直方圖將數據的分布情況可視化。在 Seaborn 中,也提供了繪製直方圖的函數。
輸出結果:
sns.distplot 函數即實現了直方圖,還順帶把曲線畫出來了——曲線其實代表了 KDE。
除了 sns.distplot 之外,在 Seaborn 中還有另外一個常用的繪製數據分布的函數 sns.kdeplot,它們的使用方法類似。
首先看這樣一個示例。
輸出結果:
① 的作用是設置所得圖示的背景顏色,這樣做的目的是讓下面的 ② 繪製的圖像顯示更清晰,如果不設置 ①,在顯示的圖示中看到的就是白底圖像,有的部分看不出來。
② 最終得到的是坐標網格,而且在圖中分為三部分,如下圖所示。
相對於以往的坐標網格,多出了 B 和 C 兩個部分。也就是說,不僅可以在 A 部分繪製某種統計圖,在 B 和 C 部分也可以繪製。
繼續操作:
輸出結果:
語句 ③ 實現了在坐標網格中繪製統計圖的效果,jp.plot 方法以兩個繪圖函數為參數,分別在 A 部分繪製了回歸統計圖,在 B 和 C 部分繪製了直方圖,而且直方圖分別表示了對應坐標軸數據的分布,即:
我們把有語句 ② 和 ③ 共同實現的統計圖,稱為聯合統計圖。除了用 ② ③ 兩句可以繪製這種圖之外,還有一個函數也能夠“兩步並作一步”,具體如下:
輸出結果:
python繪圖小結(2)
#例題1繪製一個四葉草
import turtle
turtle.color(“green”,”green”)
turtle.setheading(90)
turtle.begin_fill()
for i in range(4):
turtle.circle(-100,180)
turtle.left(90)
turtle.end_fill()
turtle.done()
#例題2繪製一個四角星
import turtle
turtle.color(“yellow”,”yellow”)
turtle.begin_fill()
for i in range(4):
turtle.circle(100,90)
turtle.right(180)
turtle.end_fill()
turtle.done()
#例題3繪製一個四葉花瓣
import turtle
turtle.color(“pink”,”pink”)
turtle.begin_fill()
turtle.circle(-100,90)
turtle.right(90)
turtle.circle(-100,90)
turtle.circle(100, 90)
turtle.right(90)
turtle.circle(-100, -90)
turtle.right(90)
turtle.circle(-100, 90)
turtle.right(90)
turtle.circle(-100, 90)
turtle.circle(100, 90)
turtle.right(90)
turtle.circle(-100, -90)
turtle.end_fill()
turtle.done()
#例題4輸入一個數字,繪製以該數字為邊數的正多邊形
import turtle
a=int(turtle.textinput(“繪製正多邊形”,”請輸入邊數:”))
turtle.circle(100,360,a)
turtle.done()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238002.html