在新時代,大數據為統計學發展和政府統計提供了新手段、新視角、新要求、新挑戰[1]。近年來,我國政府統計大數據應用取得較大進展,比如利用遙感影像和無人機測量數據完善農業統計,以及利用機器學習方法進行行業智能賦碼等等[2]。普查數據資料開發中應用大數據技術,將進一步拓寬大數據在政府統計領域的應用路徑。
大數據的經典定義是3 個“V”,指包含多樣化(Variety)、體量(Volume)不斷增長并且具有時效性(Velocity)的數據[3]。隨著大數據的進一步發展,行業內對在數據的定義又增加了價值(value)稀疏、真實性(veracity)等多個“V”。對照定義,普查數據不符合大數據的特征,靜態看體量不夠大,動態看有明確體量上限,結構有明確的定義,多樣化有限,價值也不稀疏。普查數據來自于統計機構內部設計,屬于常規數據源[4]。大數據另有一種技術角度的描述性定義:大數據是通過獲取、存儲、分析,從大容量數據中挖掘價值的一種全新的技術架構。按此定義,大數據不僅僅在于數據量大,更在于量變后引發的數據處理思想和技術的全面革新,大數據思想和技術的應用并不受限于數據本身,即使應用在常規數據上,也會帶來效能的極大提升。普查數據雖然仍是常規統計數據,但應用大數據技術進行處理將大幅提升數據處理能力和工作效率。
當前,普查數據資料開發均在數據處理平臺,或專門的數據資料開發平臺上進行。此類平臺均為“服務器-客戶端”,即“BS”架構,在網頁客戶端操作,優點是通用性、適用性廣,操作簡便、直觀,可制作多樣化、個性化的匯總表。但缺陷也很明顯:首先,制作匯總表需要不斷重復相同的操作,枯燥且低效;第二,不同表、不同層級無法共用計算資源,不能有效發揮服務器的計算能力;第三,匯總表計算完成后,距離交付排版印刷仍有很多后續工作。普查數據資料開發傳統模式的缺陷需占用很多人力資源,尤其經普涉及到多個專業,數據資料開發甚至要分到各個專業分頭制作,整個工作流程更加低效。雖然可以完成工作任務,但要使用大量人力資源,假設每個省、市、縣都需要2 個人工作1 個月完成,全國就需要約6000 人月。當前各級統計部門人力資源緊張,按現模式完成普查數據資料開發工作捉襟見肘。
MapReduce 是大數據技術中重要的計算架構,分為兩個基本過程:分解(Map)和歸約(Reduce)[5],即通過分散計算處理海量數據。其基本思想非常簡單,但也非常深刻,甚至我們普查數據資料開發的傳統模式也是基于此思想,只不過是通過對不同專業和層級人力資源分配實現的,而不是通過對計算能力的分配。現各種大數據平臺,框架均是對大規模計算任務的分解和歸約,計算能力非常強大。我們在普查數據資料開發中應用大數據技術,就是摒棄傳統上基于人力資源分配任務的模式,改為基于大數據技術對計算能力分配,從而達到節約人力資源、提高工作效率的目的。
查閱多年各類普查數據資料,會發現,普查數據資料的多樣性非常有限,更明顯的特征是規范性,指標均在普查方案中,普查方案有延續性,匯總方式只有求和、計數、條件計數等若干種,分組同樣是有限且固定若干種。普查數據資料的規范性特征,非常適合使用大數據技術進行處理,可以立桿見影成倍的提高效率。根據普查數據資料的規范性特征,將普查數據資料建模為地區×分組×指標×匯總方式的集合,新架構設計的目標就是將此集合高效的計算出來,再對計算結果進行分割,制作匯數據資料匯總表。根據此模型,普查資料開發可以簡化成幾個標準的操作:計算分組、分組與數據合并、匯總數據,分組數據、匯總結果可以復用,從而達到流程標準化及提高效率的目標。
根據普查數據資料模型,新架構共分為4 個模塊,分別是數據預處理、生成分組、數據匯總和切片制表。預處理對數據結構重整,合并同類數據,使數據處理流程能夠通用化,如合并同一主題數據,為所有數據集添加地區、調查對象代碼等連接鍵變量;生成分組,對定義好的所有分組進行計算,每個分組包含地區和主體鍵變量以及分組值;匯總數據,將分組數據與數據表合并,按地區和分組值對所有適用指標進行各類匯總計算,及后續非匯總操作,如轉置、過濾等,最終生成大匯總表;切片制表,對大匯總表進行指標分塊,并計算比例、結構,編制標題和表號,生成規范可展示的統計匯總表。
第一,整體性,對普查數據資料建模為集合,不但成倍減少了定義分組和匯總表指標的數量,而且提升了數據資料產品完整性、邏輯性和一致性;第二,無需手工制表,計算完成后,直接在匯總好的數據中選取,生成最終產品;第三,調整優化了數據匯總和制表的順序,傳統處理流程是先制表、再匯總,新架構改為先計算集合再分割制表,實現了對全部數據進行大規模計算,提高了計算效率;第四,輸出為最終產品,可直接交付印刷排版,無需導出。新架構模式實現充分發揮計算能力,對普查數據的規模完全勝任,對人力資源的需求大幅減少,人口普查、經濟普查、農業普查等三大普查均適用。
在浙江省第三次農業普查數據資料開發的實踐中,選用的大數據平臺是Spark,Spark 是開源的大規模數據分布式通用計算分析引擎[6],基于彈性分布數據集(RDD,resilient distributed dataset)[7],RDD 是基于內存的分布式抽象數據集[8],RDD 的延遲設計及對分布式內存的使用避免了對磁盤的重復讀寫,大幅提高了迭代計算的效率。因數據量不大,我們采用單臺服務器,配置為8 核英特爾至強E7-4830CPU,64GB 內存,系統為Ubuntu19.0,Spark 布署為本地模式。數據預處理、生成分組和匯總數據等3 個模塊在部署在服務器上運行,使用Spark 平臺的原生程序語言Scala 完成開發。切片制表模塊使用Python 開發,在普通辦公計算機Windows系統運行。
浙江第三次農業普查普查數據,原始數據以CSV 文本格式保存為35個文件,共33GB,數據預處理模塊將全部數據按主題合并為主表、種植表、畜牧業表、服務業表、村表、鄉表等14 張表,以Parquet 列式存儲格式保存為7.3GB。共設計鄉村、人口特征、實際經營耕地規模、農業經營單位屬性等12 個分組,生成分組數據共21GB。共生成82 張大匯總表,以Parquet 列式存儲格式保存近2.1GB,輸出為xlsx 格式共62M,3 個模塊全部運行一遍只要4小時。
匯總表設計時,共分成9 章,每章2到9組不等,每組表數不等,每地區匯總表近600 張,全省、11 個設區市、87 個涉農市(縣、區),共99 個地區,生成匯總表近6 萬張。切片制表模塊布署在普通辦公用臺式計算機上,全部生成一次只要15分鐘。
使用新普查數據資料開發架構,人工參與的工作只有定義分組及設計匯總表標題、編號及包含指標,通過指標號和文字表述,使用XML 格式,定義分組的文檔只有64 行,3000余字;定義匯總表標題、編號及包含指標的文檔包括空行和注釋共500行,4 萬余字。定義文件中大部分字符為格式要求的標記,需要人工輸入的只占十分之一。分組和匯總表定義工作,不包括查詢歷史普查數據資料時間,2 天時間就能全部完成。使用新普查數據資料開發架構,浙江第三次農業普查數據資料開發,只有1人參與了設計,設計加執行時間不超過2 天,人力資源的節約相當明顯,工作效率明顯提高。
新架構在浙江第三次農業普查數據資料開發中的應用實踐,效果良好,不但工作結果標準進一步提高,而且成倍的節約了人力資源。仍有幾個方面可以進一步研究:第一,利用現有BS 架構數據處理平臺,進行資料開發設計及結果的展示;第二,代碼實現仍有優化的空間,計算時間仍可進一步縮短;第三,Spark 配置為集群模式后,計算能力的提高程度。
普查數據資料開發的新架構如果應用于全國普查數據,只要根據數據規模增加計算節點,就可以完成全國數據的計算。如應用于其他普查,只要根據普查方案和數據格式調整數據預處理模塊的設定,針對資料出發需要,參考歷史數據資料,重新定義分組及匯總表標題、編號、和指標,便可使用。新架構可以提高普查數據資料開發的整體效率,可以有效解決基層在普查數據資料開發工作上的負擔,提升政府統計能力建設水平。