李 淳
(遼寧省森林經營研究所,遼寧丹東 118002)
隨著科學技術的不斷發展,森林生態氣象和水文的觀測項目逐漸增加,觀測頻率也有了顯著提高。以遼東半島森林生態國家定位研究站為例,遼東半島森林生態國家定位研究站分別在大連莊河仙人洞國家級自然保護區和本溪縣本溪市草河口鎮設立了森林生態觀測站點,森林氣象和水文觀測因子共計300余項,為了提高數據處理過程中的工作效率和質量,需要借助計算機技術來解決實際問題。VBA和Python在很多科學研究領域都得到了廣泛應用[1-8]。本文根據這兩種編輯語言在森林生態氣象和水文工作中的適用性進行了分析和比較,希望能為廣大學者提供幫助。
VBA(Visual Basic For Application) 是 微 軟 公 司1993年開發的一種應用程序共享的自動化語言,是Microsoft Office應用程序下的Visual Basic的子集,“寄生”在EXCEL等應用程序中,通過執行Visual Basic宏命令來實現其功能[9]。在“自定義功能區”添加“開發工具”后便可使用。
Python由Guido van Rossum于1989年創立,其前身為ABC語言。Python是高級編程語言,創立的目的在于通過更加人性化的設計,節約編輯時間。在實際使用中,使用者需要先安裝python程序,再通過“pip install”等方法安裝第三方庫,如“pip install Numpy”,通過第三方庫的方式實現不同的需求。對于森林生態工作,主要依靠NumPy、scipy、matplotlib和pandas等第三方庫。NumPy為科學計算的基礎庫,是scipy、matplotlib和pandas的依托框架;pandas是一個強大的分析結構化數據工具,用于數據挖掘和數據分析,同時也提供數據清洗功能;scipy是一個用于數學、科學、工程領域的常用軟件包,用于科學計算和分析;matplotlib受MATLAB的啟發構建,用于數據繪圖。Python在是近幾年發展勢頭很好的一門語言,近幾年一直居于tiobe流行語言排行榜前五名,相對于其他編程語言,易學、語句更人性話。
2.1 數據存儲管理功能比較 VBA管理存儲數據主要有兩種方式,一是直接對Excel中數據進行存儲和管理。如直接操作所在Excel文件中數據,或使用Workbooks.Open Filename等命令讀取管理其他Excel中的數據。二是通過與其他數據的交互,實現對數據的存儲和管理。如sql server數據庫,可使用 Dim*as CreateObject設施連接屬性,創建與數據庫的連接,再使用INSERT INTO和Open “select*from*”完成數據的上傳和下載,實現對數據的存儲管理。Python本身沒有數據存儲功能,通過對其他數據存儲文件的操作,實現數據存儲和管理。如可通過pandas庫中的read_excel、read_table、read_csv、read_sql和to_excel、to_csv、to_sql實現數據的讀取和存儲功能,也可通過SQLAlchemy等第三方庫實現Python與數據庫之間的數據交互,進而對數據進行存儲管理。需要注意的是,VBA和Python在與不同的數據庫進行交互時,連接工具和命令略有不同。
2.2 數據分析處理能力比較 在分析處理少量數據時,可直接使用Cells(row,column)命令對單元格進行操作。在處理大量數據時,如直接對單元格操作會受硬盤讀取速度影響,嚴重影響數據分析處理速度,此時可使用Dim arr as array命令定義并創建數組,將數據分批次讀取到內存中,在內存中對數組進行計算,最后使用range(Cells(row,column),Cells(row,column))=arr()命令將結果存儲到sheet中。數據量越大,越能體現數組操作的優勢。在數據分析過程中,使用for…next;do…loop;while等命令對單元格數據或數組數據逐一進行遍歷運算,使用if…then…endif在遍歷過程中進行判斷和數據篩選,最后使用sum,max,min等命令實現簡單的統計運算。
Python在分析處理數據時,先使用pandas讀取數據,讀取后數據結構為DataFrame數據結構。在處理過程中,除了可以使用for,if命令進行遍歷循環判斷外,還可以groupby()等命令對數據進行篩選,大大降低了編譯難度和時間。受NumPy、scipy和pandas等第三方庫的支持,Python比VBA的數據統計分析功能更加豐富。
2.3 數據可視化比較 VBA可以較為直觀地在Excel中顯示數據分析處理過程,在sheet頁面直接進行數據展示,也可繪制散點圖、柱狀圖等常用圖形進行數據可視化。Python本身無數據存儲功能,不能直接進行數據展示,只能借助Excel、圖片或其他軟件窗口的方式展示數據。Python使用matplotlib等第三方庫完成數據繪圖,Matplotlib可繪制的圖形樣式基本涵蓋了matlab和R中的所有圖像,因此Python可繪制圖像更加多樣,更加精確地實現數據可視化。
2.4 運算能力比較 在數據處理量方面,VBA是Visual Basic在Office上的應用,受Office框架影響,VBA單次可讀取和處理數據量相對較少。Python脫落框架限制,可處理數據量遠遠大于VBA。在數據處理速度方面,python是較高級的語言,簡單的運算,VBA的速度較為更快。但在處理較為大量復雜的數據時,Python的運算速度和能力表現更為優越。
2.5 擴展功能與應用比較 Excel VBA較為重視數據展示,成品制作過程相對簡單,操作簡單方便,可移植性強。制作出來的成品無需培訓學講即可推廣使用。Python推廣難度相對較大,需要先進行培訓學習。但Python可以制作出更為復雜的數據分析模型,也可制作軟件成品進行推廣使用。Python可以融合多種編程語言進行混合編譯,功能更多,可應用范圍更廣。
從森林生態氣象和水文數據處理實際工作需求出發,Excel VBA和Python語言都有各自優秀的適用性。VBA具有易入門、操作直觀、可傳閱性高的特點,是小型數據和常規研究最高效的選擇,遇到不熟悉的函數命令式,可通過錄制宏的方式進行針對性學習和應用。Python可以完成更復雜的設計方案和計算工作。