于紅明 劉寶君 宋志龍
摘 要:風廓線雷達產(chǎn)品數(shù)據(jù)在氣象上應用廣泛,對其產(chǎn)品數(shù)據(jù)資料的分析、處理和可視化十分重要。本文利用免費的開源軟件R語言,對雷達資料產(chǎn)品數(shù)據(jù)進行批量讀取、計算和繪圖。展示了R語言在處理風廓線雷達資料的特點:簡潔、易學。
關鍵詞:R語言 風廓線雷達產(chǎn)品數(shù)據(jù) 風廓線圖
中圖分類號:P49 文獻標識碼:A 文章編號:1672-3791(2014)08(c)-0039-03
風廓線雷達作為中小尺度天氣系統(tǒng)有效的探測工具,能夠24小時不間斷的提供:水平風向、風速、垂直氣流等氣象要素隨高度的分布,是進行邊界層和高空氣象探測的重要設備,能對現(xiàn)有的氣象觀測進行補充。其觀測資料在氣象上應用廣泛:對高影響天氣的監(jiān)測和預警;對災害天氣系統(tǒng)的天氣學分析;用于數(shù)值預報中的觀測資料同化和數(shù)據(jù)后處理等。因此開展風廓線雷達的處理十分必要[1~4]。
現(xiàn)有的氣象數(shù)據(jù)處理一般使用Fortran,C等高級編程語言。雖然有著處理速度快,計算結(jié)果可靠等優(yōu)點。但是其使用并不便:需要掌握編程語法和算法,不同計算機平臺可能需要不同的編譯系統(tǒng)等。所以本文針對風廓線雷達資料,使用R語言來對其進行簡單處理。R語言的全稱:為統(tǒng)計計算和圖形展示而設計的一種編程語言和統(tǒng)計環(huán)境。目前有一個R核心開發(fā)團隊對其進行定期維護和更新[5]。其主要的特點在于:(1)完全免費:可以在其官方網(wǎng)站(http://cran.r-project.org)下載到完整的安裝包并免費使用;(2)開源軟件:R語言源代碼完全公開,任何人均能提供各種數(shù)據(jù)處理模塊,下載相應模塊后能迅速地完成數(shù)據(jù)處理等工作;(3)圖形顯示:可以利用R語言處理數(shù)據(jù)后,直接獲取各種統(tǒng)計分析圖形;(4)多平臺使用:R語言可以在Windows、mac、Unix這些操作系統(tǒng)上安裝,不需要重復編譯,其腳本在不同操作系統(tǒng)間可以任意使用。針對風廓線雷達資料,我們可以利用R語言對其進行簡要的數(shù)據(jù)處理,統(tǒng)計分析,然后利用圖形顯示系統(tǒng)得到各種分析圖片。
本文將在第二部分介紹R語言讀取和儲存風廓線雷達產(chǎn)品數(shù)據(jù)資料;文章第三部分對資料進行簡要處理,最后會利用R語言的圖形顯示功能作圖。
1 雷達產(chǎn)品數(shù)據(jù)的讀取
測站觀測的風廓線雷達資料有兩種數(shù)據(jù)[6]:原始數(shù)據(jù)和產(chǎn)品數(shù)據(jù)。其中原始數(shù)據(jù)為二進制格式,主要包含功率譜數(shù)據(jù)文件,瞬時徑向譜數(shù)據(jù)文件。產(chǎn)品數(shù)據(jù)文件為文本格式,包括實時的采樣高度上的、半小時平均的采樣高度上的、一小時平均的采樣高度上的產(chǎn)品數(shù)據(jù)文件。本文所處理資料為實時的采樣高度上的產(chǎn)品數(shù)據(jù)文件。R語言也能讀取處理二進制格式文件,對雷達原始數(shù)據(jù)資料的處理會在以后的工作中進行。
1.1 單個產(chǎn)品數(shù)據(jù)的讀取
R語言有許多函數(shù)能夠直接從文本文件中讀取數(shù)據(jù),比較常用的有:read.table(),read.csv(),read.fwf()。其中和Fortran比較接近的是read.fwf(),可以指定讀取數(shù)據(jù)的長度和格式。于Fortran不同的是,R語言在讀取數(shù)據(jù)的時候,不用先給定數(shù)據(jù)類型,程序會直接讀取數(shù)據(jù),并存儲到一個數(shù)據(jù)框(data.frame)里。例如針對本文要處理的雷達產(chǎn)品數(shù)據(jù),可以直接使用read.table()命令讀取產(chǎn)品數(shù)據(jù):
raw_data<-read.table(fname,fill=TRUE)
其中raw_data為一個數(shù)據(jù)框(data.frame),用于儲存我們需要處理的雷達產(chǎn)品數(shù)據(jù),fname 為要讀取的雷達數(shù)據(jù)文件名字;“header=FALSE”表示該實體數(shù)據(jù)中沒有數(shù)據(jù)說明頭文件;由于本文要處理的雷達產(chǎn)品數(shù)據(jù)不是規(guī)則的表格形式,所以需要使用參數(shù):“fill=TRUE”,來自動填滿不是數(shù)據(jù)表格的部分。產(chǎn)品數(shù)據(jù)文件的前三行為測站基本參數(shù),最后一行為結(jié)束行,中間部分為實際數(shù)據(jù),包含:采樣高度,水平風向,水平風速,垂直風速,水平方向可信度,垂直方向可信度,Cn2。為了便于資料處理,將實體數(shù)據(jù)單獨儲存到一個名為r_data的新數(shù)據(jù)框中:
r_data<-raw_data[4:(length(raw_data[,1])-1),]
其中使用“l(fā)ength(raw_data[,1])”函數(shù)判斷raw_data一共有多少行,通過“4:(length(raw_data[,1])-1)”截取其第四行到倒數(shù)第二行到新的數(shù)據(jù)框r_data中。
值得注意的是,產(chǎn)品數(shù)據(jù)文件中一般含有缺測值,本文件中用“////////”表示。R在讀取其數(shù)據(jù)的時候?qū)⑺械臄?shù)據(jù)的數(shù)據(jù)類型默認為因子(factor,一種R的數(shù)據(jù)類型)。而在數(shù)據(jù)處理計算中,我們使用的數(shù)據(jù)類型為數(shù)值形(numeric),通過如下簡單語句即可實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換:
r_data<-lapply(r_data,as.character)
r_data<-lapply(r_data,as.numeric)
r_data<-as.data.frame(r_data)
先使用函數(shù)“l(fā)apply”和“as.character”把每列元素轉(zhuǎn)換為字符型,再使用as.numeric轉(zhuǎn)換為數(shù)值型,最后再用as.data.frame把r_data轉(zhuǎn)換成一個數(shù)據(jù)框。從這些處理過程中不難看出,R語言能十分方便的利用“l(fā)apply”函數(shù)實現(xiàn)整列(整行)的數(shù)據(jù)處理,相應的apply類函數(shù)還有許多,從而省去了程序中的循環(huán)語句編寫;而且R的數(shù)據(jù)類型使用十分靈活,能夠方便的將其轉(zhuǎn)換為不同的數(shù)據(jù)類型,類似的函數(shù)還有as.matrix,as.logical等。R在使用as.numeric時,會自動將無法轉(zhuǎn)換成數(shù)值的字符,轉(zhuǎn)換成R的缺測值(NA),本數(shù)據(jù)中的“//////”在經(jīng)過轉(zhuǎn)換后全部轉(zhuǎn)換為了“NA”?!癗A”在R語言中可以參與計算,也可以使用一個簡單的函數(shù)將數(shù)據(jù)中的“NA”去除。例如針對本文中的數(shù)據(jù):endprint
m_data<-r_data[complete.cases(r_data),]
其中complete.case函數(shù)能夠獲取數(shù)據(jù)中不含缺測的所有列,進而賦值后的數(shù)據(jù)框m_data中剔除了r_data的缺測值。
1.2 批量數(shù)據(jù)文件的讀取
通過1.1中幾個簡單的語句即可完成單個雷達產(chǎn)品數(shù)據(jù)讀取和初始化,而在業(yè)務運行中,雷達產(chǎn)品數(shù)據(jù)肯定是大批量的生成,也需要程序腳本具有批處理功能。
我們將1.1中單個文件的雷達產(chǎn)品數(shù)據(jù)處理過程,整合成一個R語言函數(shù)readradar:
readradar <- function(dir,fname){… …}
readradar只需要給定路徑和文件名,即可讀取雷達產(chǎn)品數(shù)據(jù)資料并去除缺測值。函數(shù)最后返還一個數(shù)據(jù)框,其中包含該文件中所有非缺測產(chǎn)品數(shù)據(jù)。給定所有需要處理的路徑和文件名后,即可完成資料的批處理。
而R語言能夠十分便利的獲取文件名,因為其能通過腳本語言進入當前運行的操作系統(tǒng)。簡單的說,R語言能夠在程序內(nèi)部完成操作系統(tǒng)的文件、文件夾處理、安裝包的安裝等。例如可以直接使用file.create(create.dir)函數(shù)直接在R語言中生成新的文件(文件夾)等。 本文只需要R語言讀取要處理的文件名:
fname<-list.files(path="./Qingdao/"
fname中存儲了所有“./Qingdao”下的雷達數(shù)據(jù)文件名。通過循環(huán)即可完成雷達數(shù)據(jù)的批量讀取:
for (i in 1:length(fname)) {
m_data<-readradar(dir,fname[i])
}
別的批量處理過程(資料簡要處理,雷達風廓線圖等)和讀取類似,只需要加入循環(huán)即可。
2 雷達資料的簡要處理和畫圖
第二節(jié)中給出了R語言對雷達產(chǎn)品數(shù)據(jù)文件的批讀取。R語言最為實用的優(yōu)點在于其計算和畫圖功能。
2.1 雷達風廓線的簡要計算
為了便于處理資料。我們利用names函數(shù)將m_data數(shù)據(jù)框的每一列分別命名:
names(m_data)<-c("hgt","h_dir","h_speed","w_speed","h_rel","w_rel","cn2")
每一列表示對應的資料的采樣高度,水平風向,水平風速,垂直風速,水平方向可信度,垂直方向可信度,Cn2。
水平風的u分量計算如下:
m_data$u <- m_data$h_speed * cos((270 - m_data$h_dir)* pi/180)
其中pi為R語言中自帶的圓周率的取值3.141593。而計算出來的u風速可以直接存儲到數(shù)據(jù)框m_data的新的一列中。
同理可以計算出水平風速的v分量:
m_data$v <- m_data$h_speed * sin((270 - m_data$h_dir)* pi/180)
上述計算過程可以看出,R語言中數(shù)據(jù)框的計算處理十分方便,不需要使用循環(huán)語句計算不同高度上的u/v分量,而且計算結(jié)果可以直接作為數(shù)據(jù)框新的一列存到原數(shù)據(jù)框中。而R語言除了基本的計算外,還能使用內(nèi)部函數(shù)做各種復雜數(shù)學計算,例如矩陣的求逆、線性回歸分析、抽樣分布、顯著性試驗等。如果R語言自帶的函數(shù)已經(jīng)不能解決當前數(shù)學問題,還能上網(wǎng)搜索下載對應函數(shù)包。
2.2 雷達風廓線圖
R語言主要有三種繪圖函數(shù):高級、低級和交互式。通過調(diào)用高級繪圖函數(shù),能在R語言中直接繪制各種統(tǒng)計圖;低級繪圖函數(shù)能夠?qū)ΜF(xiàn)有的圖進行修改;交互式繪圖能夠讓用戶直接利用鼠標修改圖形。大量的內(nèi)置函數(shù)讓繪圖變得十分的簡易。例如本文需要的u風場隨高度變化圖可以通過以下函數(shù)實現(xiàn):
plot(m_data$u,m_data$hgt)
在plot函數(shù)中增加各種參數(shù),能夠優(yōu)化所繪圖形。例如本文中使用如下命令獲取風廓線圖:
plot(m_data$u,m_data$hgt,type="b",
main=title,xlim=c(-20,20),ylim=c(0,5000),
xlab="風速(m/s)",ylab="采樣高度(m)",pch=16,col=2)
其中tpye=“b”表示曲線為點畫線;main為主標題;xlim和ylim表示橫縱坐標取值范圍;xlab、ylab表示橫、縱坐標標題;pch=16表示點為實心圓圈,col=12表示顏色為紅色。
通過使用低級繪圖命令如points、lines等,可以在剛畫的u風場廓線后增加v風場廓線:
points(m_data$v,m_data$hgt)
lines(m_data$v,m_data$hgt)
圖例則可以用lengend函數(shù)添加:
legend("topleft",pch=c(16,17),col=c(2,19),lty=c(1,1),legend=c("u","v"),bty="n")
R語言還能使用par函數(shù)對圖片進行設置,例如本文中使用如下函數(shù)將2014年4月26日每隔3小時的風廓線顯示到同一圖片中:
par(mfrow=c(2,4),mar=c(5, 4, 4, 2) + 0.1,oma=c(0.1,0.1,0.4,0.1))
其中mfrow=c(2,4)表示圖片分割為兩行四列,參數(shù)mar和oma指定了圖片的間距。
將上述命令和第二節(jié)的數(shù)據(jù)讀取函數(shù)整合到一個R腳本中,運行腳本即可得到如圖1風廓線圖。
R語言的繪圖函數(shù)很多,除了文中繪制風廓線圖外還能繪制:直方圖、散點圖、餅圖等。在安裝繪圖包后還能繪制3D圖等。其繪圖功能,能滿足大部分氣象資料統(tǒng)計分析的出圖需求。
3 結(jié)語和討論
免費的開源軟件R語言,能夠用于數(shù)據(jù)分析和圖形顯示。文中使用其對風廓線雷達資料進行了批量讀取、計算和繪圖。
使用read.table函數(shù)簡潔的實現(xiàn)資料讀取。
R語言的操作系統(tǒng)函數(shù),能便利的實現(xiàn)資料的批處理。
R語言的各種繪圖函數(shù),能迅速地繪制較為美觀的風廓線圖。
R語言的統(tǒng)計計算功能十分強大,本文只是簡單的使用基礎計算,在隨后的工作中,可以使用R語言實現(xiàn),雷達數(shù)據(jù)的質(zhì)量控制,統(tǒng)計分析等。
本文只分析了雷達產(chǎn)品數(shù)據(jù),R語言也能處理二進制數(shù)據(jù)資料,以后的工作中可以利用R語言分析其他類型的氣象資料。
參考文獻
[1] Green,J.L.,Atmospheric measurements by VHF pulsed Doppler radar.IEEE Trans.On Geoscience electronics.GE-17(4):262-280.1979
[2] 何平.相控陣風廓線雷達[M].氣象出版社,2006:104—122.
[3] 王欣,卞林根,彭浩,李劍東.風廓線儀系統(tǒng)探測試驗與應用[J].應用氣象學報,2005,16(5):693-698.
[4] 胡明寶.風廓線雷達數(shù)據(jù)處理和應用研究[D].南京信息工程大學博士論文,2012.
[5] John M.Chambers.Facets of R.The R Journal,1(1):5-8,2009.
[6] 關于進行風廓線雷達數(shù)據(jù)傳輸?shù)耐ㄖ?氣測函[2011]61號.內(nèi)部資料endprint
m_data<-r_data[complete.cases(r_data),]
其中complete.case函數(shù)能夠獲取數(shù)據(jù)中不含缺測的所有列,進而賦值后的數(shù)據(jù)框m_data中剔除了r_data的缺測值。
1.2 批量數(shù)據(jù)文件的讀取
通過1.1中幾個簡單的語句即可完成單個雷達產(chǎn)品數(shù)據(jù)讀取和初始化,而在業(yè)務運行中,雷達產(chǎn)品數(shù)據(jù)肯定是大批量的生成,也需要程序腳本具有批處理功能。
我們將1.1中單個文件的雷達產(chǎn)品數(shù)據(jù)處理過程,整合成一個R語言函數(shù)readradar:
readradar <- function(dir,fname){… …}
readradar只需要給定路徑和文件名,即可讀取雷達產(chǎn)品數(shù)據(jù)資料并去除缺測值。函數(shù)最后返還一個數(shù)據(jù)框,其中包含該文件中所有非缺測產(chǎn)品數(shù)據(jù)。給定所有需要處理的路徑和文件名后,即可完成資料的批處理。
而R語言能夠十分便利的獲取文件名,因為其能通過腳本語言進入當前運行的操作系統(tǒng)。簡單的說,R語言能夠在程序內(nèi)部完成操作系統(tǒng)的文件、文件夾處理、安裝包的安裝等。例如可以直接使用file.create(create.dir)函數(shù)直接在R語言中生成新的文件(文件夾)等。 本文只需要R語言讀取要處理的文件名:
fname<-list.files(path="./Qingdao/"
fname中存儲了所有“./Qingdao”下的雷達數(shù)據(jù)文件名。通過循環(huán)即可完成雷達數(shù)據(jù)的批量讀?。?/p>
for (i in 1:length(fname)) {
m_data<-readradar(dir,fname[i])
}
別的批量處理過程(資料簡要處理,雷達風廓線圖等)和讀取類似,只需要加入循環(huán)即可。
2 雷達資料的簡要處理和畫圖
第二節(jié)中給出了R語言對雷達產(chǎn)品數(shù)據(jù)文件的批讀取。R語言最為實用的優(yōu)點在于其計算和畫圖功能。
2.1 雷達風廓線的簡要計算
為了便于處理資料。我們利用names函數(shù)將m_data數(shù)據(jù)框的每一列分別命名:
names(m_data)<-c("hgt","h_dir","h_speed","w_speed","h_rel","w_rel","cn2")
每一列表示對應的資料的采樣高度,水平風向,水平風速,垂直風速,水平方向可信度,垂直方向可信度,Cn2。
水平風的u分量計算如下:
m_data$u <- m_data$h_speed * cos((270 - m_data$h_dir)* pi/180)
其中pi為R語言中自帶的圓周率的取值3.141593。而計算出來的u風速可以直接存儲到數(shù)據(jù)框m_data的新的一列中。
同理可以計算出水平風速的v分量:
m_data$v <- m_data$h_speed * sin((270 - m_data$h_dir)* pi/180)
上述計算過程可以看出,R語言中數(shù)據(jù)框的計算處理十分方便,不需要使用循環(huán)語句計算不同高度上的u/v分量,而且計算結(jié)果可以直接作為數(shù)據(jù)框新的一列存到原數(shù)據(jù)框中。而R語言除了基本的計算外,還能使用內(nèi)部函數(shù)做各種復雜數(shù)學計算,例如矩陣的求逆、線性回歸分析、抽樣分布、顯著性試驗等。如果R語言自帶的函數(shù)已經(jīng)不能解決當前數(shù)學問題,還能上網(wǎng)搜索下載對應函數(shù)包。
2.2 雷達風廓線圖
R語言主要有三種繪圖函數(shù):高級、低級和交互式。通過調(diào)用高級繪圖函數(shù),能在R語言中直接繪制各種統(tǒng)計圖;低級繪圖函數(shù)能夠?qū)ΜF(xiàn)有的圖進行修改;交互式繪圖能夠讓用戶直接利用鼠標修改圖形。大量的內(nèi)置函數(shù)讓繪圖變得十分的簡易。例如本文需要的u風場隨高度變化圖可以通過以下函數(shù)實現(xiàn):
plot(m_data$u,m_data$hgt)
在plot函數(shù)中增加各種參數(shù),能夠優(yōu)化所繪圖形。例如本文中使用如下命令獲取風廓線圖:
plot(m_data$u,m_data$hgt,type="b",
main=title,xlim=c(-20,20),ylim=c(0,5000),
xlab="風速(m/s)",ylab="采樣高度(m)",pch=16,col=2)
其中tpye=“b”表示曲線為點畫線;main為主標題;xlim和ylim表示橫縱坐標取值范圍;xlab、ylab表示橫、縱坐標標題;pch=16表示點為實心圓圈,col=12表示顏色為紅色。
通過使用低級繪圖命令如points、lines等,可以在剛畫的u風場廓線后增加v風場廓線:
points(m_data$v,m_data$hgt)
lines(m_data$v,m_data$hgt)
圖例則可以用lengend函數(shù)添加:
legend("topleft",pch=c(16,17),col=c(2,19),lty=c(1,1),legend=c("u","v"),bty="n")
R語言還能使用par函數(shù)對圖片進行設置,例如本文中使用如下函數(shù)將2014年4月26日每隔3小時的風廓線顯示到同一圖片中:
par(mfrow=c(2,4),mar=c(5, 4, 4, 2) + 0.1,oma=c(0.1,0.1,0.4,0.1))
其中mfrow=c(2,4)表示圖片分割為兩行四列,參數(shù)mar和oma指定了圖片的間距。
將上述命令和第二節(jié)的數(shù)據(jù)讀取函數(shù)整合到一個R腳本中,運行腳本即可得到如圖1風廓線圖。
R語言的繪圖函數(shù)很多,除了文中繪制風廓線圖外還能繪制:直方圖、散點圖、餅圖等。在安裝繪圖包后還能繪制3D圖等。其繪圖功能,能滿足大部分氣象資料統(tǒng)計分析的出圖需求。
3 結(jié)語和討論
免費的開源軟件R語言,能夠用于數(shù)據(jù)分析和圖形顯示。文中使用其對風廓線雷達資料進行了批量讀取、計算和繪圖。
使用read.table函數(shù)簡潔的實現(xiàn)資料讀取。
R語言的操作系統(tǒng)函數(shù),能便利的實現(xiàn)資料的批處理。
R語言的各種繪圖函數(shù),能迅速地繪制較為美觀的風廓線圖。
R語言的統(tǒng)計計算功能十分強大,本文只是簡單的使用基礎計算,在隨后的工作中,可以使用R語言實現(xiàn),雷達數(shù)據(jù)的質(zhì)量控制,統(tǒng)計分析等。
本文只分析了雷達產(chǎn)品數(shù)據(jù),R語言也能處理二進制數(shù)據(jù)資料,以后的工作中可以利用R語言分析其他類型的氣象資料。
參考文獻
[1] Green,J.L.,Atmospheric measurements by VHF pulsed Doppler radar.IEEE Trans.On Geoscience electronics.GE-17(4):262-280.1979
[2] 何平.相控陣風廓線雷達[M].氣象出版社,2006:104—122.
[3] 王欣,卞林根,彭浩,李劍東.風廓線儀系統(tǒng)探測試驗與應用[J].應用氣象學報,2005,16(5):693-698.
[4] 胡明寶.風廓線雷達數(shù)據(jù)處理和應用研究[D].南京信息工程大學博士論文,2012.
[5] John M.Chambers.Facets of R.The R Journal,1(1):5-8,2009.
[6] 關于進行風廓線雷達數(shù)據(jù)傳輸?shù)耐ㄖ?氣測函[2011]61號.內(nèi)部資料endprint
m_data<-r_data[complete.cases(r_data),]
其中complete.case函數(shù)能夠獲取數(shù)據(jù)中不含缺測的所有列,進而賦值后的數(shù)據(jù)框m_data中剔除了r_data的缺測值。
1.2 批量數(shù)據(jù)文件的讀取
通過1.1中幾個簡單的語句即可完成單個雷達產(chǎn)品數(shù)據(jù)讀取和初始化,而在業(yè)務運行中,雷達產(chǎn)品數(shù)據(jù)肯定是大批量的生成,也需要程序腳本具有批處理功能。
我們將1.1中單個文件的雷達產(chǎn)品數(shù)據(jù)處理過程,整合成一個R語言函數(shù)readradar:
readradar <- function(dir,fname){… …}
readradar只需要給定路徑和文件名,即可讀取雷達產(chǎn)品數(shù)據(jù)資料并去除缺測值。函數(shù)最后返還一個數(shù)據(jù)框,其中包含該文件中所有非缺測產(chǎn)品數(shù)據(jù)。給定所有需要處理的路徑和文件名后,即可完成資料的批處理。
而R語言能夠十分便利的獲取文件名,因為其能通過腳本語言進入當前運行的操作系統(tǒng)。簡單的說,R語言能夠在程序內(nèi)部完成操作系統(tǒng)的文件、文件夾處理、安裝包的安裝等。例如可以直接使用file.create(create.dir)函數(shù)直接在R語言中生成新的文件(文件夾)等。 本文只需要R語言讀取要處理的文件名:
fname<-list.files(path="./Qingdao/"
fname中存儲了所有“./Qingdao”下的雷達數(shù)據(jù)文件名。通過循環(huán)即可完成雷達數(shù)據(jù)的批量讀?。?/p>
for (i in 1:length(fname)) {
m_data<-readradar(dir,fname[i])
}
別的批量處理過程(資料簡要處理,雷達風廓線圖等)和讀取類似,只需要加入循環(huán)即可。
2 雷達資料的簡要處理和畫圖
第二節(jié)中給出了R語言對雷達產(chǎn)品數(shù)據(jù)文件的批讀取。R語言最為實用的優(yōu)點在于其計算和畫圖功能。
2.1 雷達風廓線的簡要計算
為了便于處理資料。我們利用names函數(shù)將m_data數(shù)據(jù)框的每一列分別命名:
names(m_data)<-c("hgt","h_dir","h_speed","w_speed","h_rel","w_rel","cn2")
每一列表示對應的資料的采樣高度,水平風向,水平風速,垂直風速,水平方向可信度,垂直方向可信度,Cn2。
水平風的u分量計算如下:
m_data$u <- m_data$h_speed * cos((270 - m_data$h_dir)* pi/180)
其中pi為R語言中自帶的圓周率的取值3.141593。而計算出來的u風速可以直接存儲到數(shù)據(jù)框m_data的新的一列中。
同理可以計算出水平風速的v分量:
m_data$v <- m_data$h_speed * sin((270 - m_data$h_dir)* pi/180)
上述計算過程可以看出,R語言中數(shù)據(jù)框的計算處理十分方便,不需要使用循環(huán)語句計算不同高度上的u/v分量,而且計算結(jié)果可以直接作為數(shù)據(jù)框新的一列存到原數(shù)據(jù)框中。而R語言除了基本的計算外,還能使用內(nèi)部函數(shù)做各種復雜數(shù)學計算,例如矩陣的求逆、線性回歸分析、抽樣分布、顯著性試驗等。如果R語言自帶的函數(shù)已經(jīng)不能解決當前數(shù)學問題,還能上網(wǎng)搜索下載對應函數(shù)包。
2.2 雷達風廓線圖
R語言主要有三種繪圖函數(shù):高級、低級和交互式。通過調(diào)用高級繪圖函數(shù),能在R語言中直接繪制各種統(tǒng)計圖;低級繪圖函數(shù)能夠?qū)ΜF(xiàn)有的圖進行修改;交互式繪圖能夠讓用戶直接利用鼠標修改圖形。大量的內(nèi)置函數(shù)讓繪圖變得十分的簡易。例如本文需要的u風場隨高度變化圖可以通過以下函數(shù)實現(xiàn):
plot(m_data$u,m_data$hgt)
在plot函數(shù)中增加各種參數(shù),能夠優(yōu)化所繪圖形。例如本文中使用如下命令獲取風廓線圖:
plot(m_data$u,m_data$hgt,type="b",
main=title,xlim=c(-20,20),ylim=c(0,5000),
xlab="風速(m/s)",ylab="采樣高度(m)",pch=16,col=2)
其中tpye=“b”表示曲線為點畫線;main為主標題;xlim和ylim表示橫縱坐標取值范圍;xlab、ylab表示橫、縱坐標標題;pch=16表示點為實心圓圈,col=12表示顏色為紅色。
通過使用低級繪圖命令如points、lines等,可以在剛畫的u風場廓線后增加v風場廓線:
points(m_data$v,m_data$hgt)
lines(m_data$v,m_data$hgt)
圖例則可以用lengend函數(shù)添加:
legend("topleft",pch=c(16,17),col=c(2,19),lty=c(1,1),legend=c("u","v"),bty="n")
R語言還能使用par函數(shù)對圖片進行設置,例如本文中使用如下函數(shù)將2014年4月26日每隔3小時的風廓線顯示到同一圖片中:
par(mfrow=c(2,4),mar=c(5, 4, 4, 2) + 0.1,oma=c(0.1,0.1,0.4,0.1))
其中mfrow=c(2,4)表示圖片分割為兩行四列,參數(shù)mar和oma指定了圖片的間距。
將上述命令和第二節(jié)的數(shù)據(jù)讀取函數(shù)整合到一個R腳本中,運行腳本即可得到如圖1風廓線圖。
R語言的繪圖函數(shù)很多,除了文中繪制風廓線圖外還能繪制:直方圖、散點圖、餅圖等。在安裝繪圖包后還能繪制3D圖等。其繪圖功能,能滿足大部分氣象資料統(tǒng)計分析的出圖需求。
3 結(jié)語和討論
免費的開源軟件R語言,能夠用于數(shù)據(jù)分析和圖形顯示。文中使用其對風廓線雷達資料進行了批量讀取、計算和繪圖。
使用read.table函數(shù)簡潔的實現(xiàn)資料讀取。
R語言的操作系統(tǒng)函數(shù),能便利的實現(xiàn)資料的批處理。
R語言的各種繪圖函數(shù),能迅速地繪制較為美觀的風廓線圖。
R語言的統(tǒng)計計算功能十分強大,本文只是簡單的使用基礎計算,在隨后的工作中,可以使用R語言實現(xiàn),雷達數(shù)據(jù)的質(zhì)量控制,統(tǒng)計分析等。
本文只分析了雷達產(chǎn)品數(shù)據(jù),R語言也能處理二進制數(shù)據(jù)資料,以后的工作中可以利用R語言分析其他類型的氣象資料。
參考文獻
[1] Green,J.L.,Atmospheric measurements by VHF pulsed Doppler radar.IEEE Trans.On Geoscience electronics.GE-17(4):262-280.1979
[2] 何平.相控陣風廓線雷達[M].氣象出版社,2006:104—122.
[3] 王欣,卞林根,彭浩,李劍東.風廓線儀系統(tǒng)探測試驗與應用[J].應用氣象學報,2005,16(5):693-698.
[4] 胡明寶.風廓線雷達數(shù)據(jù)處理和應用研究[D].南京信息工程大學博士論文,2012.
[5] John M.Chambers.Facets of R.The R Journal,1(1):5-8,2009.
[6] 關于進行風廓線雷達數(shù)據(jù)傳輸?shù)耐ㄖ?氣測函[2011]61號.內(nèi)部資料endprint