任 鵬, 王廷偉, Christos Grecos
(1. 中國石油大學(華東) 信息與控制工程學院, 山東 青島 266580; 2. 中央華盛頓大學 計算機科學系,華盛頓州, WA 98926; 3. 青島市海洋災害預防檢測信息國際聯合研究中心, 山東 青島 266580)
美國國家大氣與海洋管理局[1](NOAA)是全球最大的、開放的海洋數據管理平臺,其海洋浮標數據中心[2](NDBC)免費提供全球范圍內的風向、風速、溫度、鹽度等海洋浮標監測數據。這些數據覆蓋范圍廣、更新速度快、記錄時間長、監測種類多,具有顯著的大數據特征。R語言[3-4]是數據挖掘和大數據處理方面優秀的編程語言,可以實現對數據規律的充分挖掘。同時Shiny具有強大的地圖操作功能和可視化能力,能夠更加直觀地展現數據處理結果。
R是針對R語言開發的一個自由、免費、源代碼完全開放的軟件和操作環境,它是應用于統計、計算和制圖的優秀工具,是一套完整的數據分析、處理和可視化軟件系統。因為源碼開放,R允許用戶開發屬于自己的程序包并將其托管到GitHub或者CRAN上。目前CRAN官方網站上已收錄5 000余個工具包,內容涵蓋基礎統計學、社會學、經濟學、生態學、空間分析、生物信息學等諸多方面。通過調用這些工具包,能夠方便地進行數據挖掘相關工作,對海洋浮標大數據進行有效分析和處理。
Shiny是Rstudio團隊針對R語言開發的網頁應用開發框架,允許用戶使用純R語言開發界面簡潔、功能強大、可發布的網頁應用,實現網頁應用與數據處理的無縫銜接。Shiny具有以下特性:① 具有豐富的控件,如文本框、日期輸入、按鈕、復選按鈕等,方便搭建內容豐富、界面精美的網頁;② 地圖操作方便,可以調用開放的地圖API,方便開發類似于谷歌地圖式的交互性強、界面簡潔、功能強大的地圖應用,將美國國家大氣與海洋管理局海洋浮標位置信息顯示在地圖上,更加直觀高效;③ 允許使用純R語言進行編程,即使沒有掌握HTML、CSS、JavaScript等相關知識也可以開發頁面精美、功能強大的網頁應用。
除此之外,Shiny提供了兩種網頁發布途徑:① Shiny開發團隊提供了官方服務器,部署簡單方便,但是不能進行自行配置,無法訪問本地文件。② 官方提供私有服務器配置方法,用戶可以在本地部署、發布,靈活性強。Shiny具有出色的數據可視化能力,地圖操作功能強,使用方便靈活,適合用于數據可視化操作和網頁平臺的搭建。
本文所設計的實驗平臺將R語言、Oracle數據庫[5]和Shiny網頁框架結合起來,能夠實現海洋浮標監測大數據的可視化和數據內在關系的挖掘。該實驗平臺有助于學生深入了解數據獲取、存儲、可視化和數據分析與挖掘領域的問題分析方法和解決方案,鍛煉學生分析問題和解決問題的能力,并且能夠培養和提升他們的創新能力和工程實踐能力,使他們能夠更快地適應將來的工作和學習。
本文所設計的海洋浮標監測數據處理實驗平臺主要包括數據獲取、數據存儲、數據處理和可視化顯示四部分。其中數據分析和可視化平臺的搭建是系統設計過程中考察學生分析問題和解決問題的關鍵環節和核心單元,實驗平臺總體結構如圖1所示。

圖1 海洋浮標監測數據處理實驗平臺結構示意圖
實驗平臺的搭建首先需要海量的數據,但是從網絡上手動獲取海洋浮標的監測數據是一件繁瑣而枯燥的任務。CRAN收錄的RCurl[6]、RVEST等網絡爬蟲工具包,允許用戶自動從網絡上獲取想要的數據和資源。
NOAA海洋浮標數據中心提供了風力、風速、溫度、氣壓、海浪等監測數據供下載和使用,并且這些數據以表格形式呈現。因此指定好網址*http://www.ndbc.noaa.gov/data/realtime2/32ST0.txt之后利用R語言中表格讀取函數read.table()能夠直接從網頁上將數據抓取到本地。獲取的數據以字符格式存儲,對于后續處理帶來不利影響,因此需要利用as.numeric()函數將字符格式的數據轉換為數字格式,利用name()函數為數據的每一列指定對應名稱,最后使用write.csv()函數將數據存為CSV文件,方便后續將數據導入到Oracle數據庫中。
數據獲取和預處理工作是數據分析的前提和基礎,通過網絡爬蟲程序能夠從網絡上獲取海量的數據,鍛煉學生數據獲取和預處理的能力,培養其主動獲取資源的意識。
NOAA海洋浮標數據中心提供的浮標監測數據更新速度快、數據量大。如果從網絡獲取的數據直接進行處理和顯示,不僅占用內存大,時間上也不存在連貫性,不利于數據挖掘和后續的處理。數據庫能夠對數據進行有效組織和管理,方便數據進行高效存取和查詢,因此可以通過構建數據庫對數據進行存儲。數據庫結構設計框圖如圖2所示。
R與Oracle數據庫之間能夠通過數據接口進行連接。通過調用接口程序,R可以嵌入標準的SQL數據庫管理語言,從而實現數據寫入、查詢、刪除等功能。ROracle是Denis Mukhin等開發的R與Oracle之間的接口工具包,允許R與ORACLE數據庫之間建立聯系。建立聯系之前首先需要使用dbDriver()函數加載驅動程序,加載驅動程序完成之后使用dbConnect()建立R與Oracle數據庫之間的聯系。dbConnect()函數主要有四個參數:drv為加載的驅動;username是數據庫的登錄用戶名;password是登錄密碼;dbname為目標數據庫的名稱。目標數據庫名稱由數據庫IP、端口號、數據庫名稱組成,一般形式為IP:端口號/數據庫名稱。

圖2 數據庫結構設計框圖
利用ROracle工具包建立R與Oracle數據庫之間的聯系,通過在R語言中嵌入標準的SQL數據庫操作語言,實現數據的高效存取、查詢工作,方便數據的管理和使用。
海洋浮標監測數據的處理工作全部在Shiny網頁應用框架下Server處理部分進行,Shiny網頁應用框架將在2.4進行詳細闡述。從網絡上自動獲取海洋浮標監測數據導入數據庫中后,使用ROracle[7]工具包建立R與Oracle之間的聯系。通過在R語言中嵌入標準SQL語言實現數據的查詢、刪寫等功能,保證數據處理和可視化工作的正常進行。
以數據查詢為例,建立與數據庫的聯系之后通過dbSendQuery()函數將SQL語言嵌入到R語言中。dbSendQuery()函數有連接名和SQL語言兩個參數,連接名即為2.2節中描述的dbConnect連接指定的連接名,SQL語言指定需要進行的操作。Oracle數據庫接收到請求之后將結果返回,R中利用fetch函數進行解譯,最終完成數據查詢操作。
從數據庫獲取數據之后需要進行相關數據處理工作,常用的數據分析方法有相關性分析、卡方差分析等。SFA算法[8]作為一種新的無監督學習算法能夠從快速變化的輸入信號中找到緩慢變化的特征即驅動力。慢特征分析算法最初應用于視神經學領域[9],現已經被廣泛應用于盲源信號分離[10]、人類行為識別[11]、手寫數字識別[12]和大型發電廠或者化工廠的故障監測和診斷[13]等領域。
RSFA工具包是基于R語言針對SFA算法開發的工具包,使用sfa函數能夠對海洋數據進行分析,從快速變化的信號中獲取緩慢變化的特征,并且使用圖形的形式對結果進行展示。通過將分析結果與海洋環境變化情況的對比,探究影響海洋環境變化的影響因素。通過對海洋浮標監測數據的分析,學生不僅能夠掌握相關性分析、卡方差分析等傳統數據分析方法,并且能夠將慢特征分析等機器學習方法應用到數據分析和挖掘上面去,拓展學生視野,提升能力。
數據分析可視化[14]對于實驗教學來說是一個重要的環節。Shiny網頁應用框架提供了便捷、豐富的數據可視化手段和方法,通過調用LeafLet包[15]可以方便地對地圖進行操作,以圖形或者表格的形式將數據分析結果直觀展示出來。網頁應用設計框圖如圖3所示。

圖3 可視化網頁應用設計框架
一個Shiny網頁應用程序主要包括UI和Server兩大部分,UI部分為網頁前端,主要涉及網頁布局,時間框、文本框等控件添加和ID的指定,以及處理結果的顯示。Server為應用的后端,主要進行UI控件變量值的接收,數據挖掘和可視化處理。通過UI和Server的配合,能夠搭建界面簡潔,功能強大的網頁應用。
1.4.1UI界面設計
海洋浮標監測數據在線處理平臺用戶界面主要包括海洋浮標分布圖、監測數據歷史趨勢圖、原始觀測數據表和數據處理結果圖。
tabPanel功能能夠定義多個子窗口,將用戶界面不同的部分在不同的界面顯示。每個界面中主要包括時間選擇控件、文本框控件、輸入選擇控件等,Shiny提供了相關函數供用戶調用,方便快捷。mainPanel用于顯示Server后端處理的結果和可視化操作結果。
1.4.2Server處理功能設計
海洋浮標位置的標記需要對地圖進行加載和操作,LeafLet[16]是一個JavaScript的包,通過LeafLet能夠加載開源世界地圖,并且能夠對地圖進行地點標記、縮放、交互式信息框等操作。通過調用leaflet()函數能夠自動加載世界地圖,地圖自帶縮放功能。加載地圖之后需要對海洋浮標的位置進行標記和顯示,addCircles()函數能夠在地圖上對指定經緯度的點進行標記,利用SQL語言從數據庫中獲取海洋浮標的經緯度之后利用addCircles()函數可以將海洋浮標的位置在地圖上標記。Setview()函數可以設定地圖的中心位置和縮放比例。
showZipcodePopup()是LeafLet工具包另一個強大功能,能夠在鼠標單擊指定位置時顯示指定信息。當點擊海洋浮標標記點時,系統能夠自動從數據庫中獲取當前浮標最新監測數據,并且以對話框的形式顯示在地圖上,高效方便。
歷史觀測數據變化趨勢能夠顯示當前海洋浮標的監測數據歷史變化趨勢,通過使用時間選擇控件、輸入選擇控件指定顯示時間、浮標編號、顯示內容等信息之后以折線圖的形式將浮標監測數據的變化趨勢進行展示,便于發現監測海域海況變化情況。
海洋浮標原始監測數據對于數據進一步分析和發掘具有重要意義。DT::datatable()函數能夠實現對數據的高效管理和顯示,DT:datatable生成的數據表格能夠進行數據排序、查詢等操作,方便對數據進行對比。同時利用downloadHandler()函數能夠實現數據表格的下載功能。
通過數據獲取、存儲、處理和可視化操作,結合大數據處理方法和網頁應用開發手段,最終完成海洋浮標大數據處理實驗平臺,整體效果圖如圖4所示。

圖4 海洋浮標大數據處理實驗平臺
學生可以通過指定數據庫名稱、用戶名、密碼、IP地址來對數據庫的連接進行配置,掌握數據庫連接和配置的基本步驟。通過指定監測日期、浮標編號、監測數據類型來觀察某一觀測數據在1 d當中的變化規律。通過指定地圖的中心位置和放大倍數,將海洋浮標以點的形式在地圖上進行標記,能夠直觀地了解海洋浮標在全球的分布情況。
通過數據獲取、數據存儲、數據挖掘和可視化等四個方面,學生全面掌握了數據分析領域的流程和方法,形成一種全局意識和全局觀念,對于培養學生的分析能力和解決問題的能力有非常重要的意義。
本文以海洋環境監測基礎,以數據處理和可視化為出發點,設計了一個基于R語言的Shiny框架下海洋浮標數據實驗平臺。該實驗平臺能夠獲取海洋浮標監測數據并對其進行處理,整個實驗內容涵蓋了海洋浮標監測數據自動獲取、監測數據存儲和數據庫搭建,多源海洋數據處理和數據可視化四大領域。該實驗平臺有助于學生深入了解數據處理的重要方法和流程,有助于培養和提高其創新能力和工程實踐能力,使他們將來能夠更好地勝任在數據分析和研究領域的相關工作。