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