前言
大數據的統計計算是進行資料探索和分析採擷的基礎。在實際應用中,隨著資料規模的快速增長,資料會分散式儲存在多台電腦上,即使最簡單的求和操作都需要多台電腦協作完成,並且需要數分鐘的計算時間,因而產生了兩個問題:
需要使用多少資源?即所要付出的成本。
計算需要多少時間?它關係到資料探索分析的效率和效果。
人們都希望花更少的錢,並且希望計算時間更短,但對於某個確定的計算過程,它們是成反比的。這就是我在大數據統計實作中經常遇到的情況,當研究了一個又一個計算效能問題之後,我驚奇地發現,這些不同的演算法間是有共通性的,這就吸引我去深入研究,最後形成了一套完整的理論,包含常用的各種統計量和統計方法。以本書內容開發為基礎的資料分析工具已經在阿里巴巴集團內部的多個部門使用,並取得了顯著效果。
首先舉一個實例,使大家有一個直觀的印象:對於10TB 的資料,大約有1.25MB 個資料,以求和計算為例,使用很多人熟悉的分散式SQL 進行計算:
SELECT SUM(COL1) AS COL1_SUM, COUNT(COL2) AS COL2_CNT, …FROM DATA_TABLE;共執行了4 分44.062 秒,在該SQL 敘述中,每列只算了一個統計量。
然後使用本書的計算方法,計算更多的統計量,包含:總個數、總和、平均值、方差、標準差、標準誤、變異係數、立方和、四次方和、二階原點矩、三階原點矩、四階原點矩、二階中心矩、三階中心矩、四階中心矩、偏度、峰度;最大值、最小值、極差、最大的100 個值、最小的100 個值;資料分佈長條圖、經驗分佈函數、近似百分位元值。如果不同數值的個數小於10000 個,會將其頻數資訊計算出來,並有精確百分位值、中值、眾數;協方差矩陣、相關係數矩陣。獲得所有的這些統計量使用的計算節點數目與用SQL 敘述獲得的大致相同,花費的計算時間為:4 分53.673 秒。
計算這麼多內容才多花約10 秒,說明本書介紹的演算法夠高效吧!但這還只是一個開頭。
接下來,做一個更有挑戰的實驗,除了上面這些統計量,我們再加入一些進階的統計計算,區間估計、參數檢驗、非參數檢驗、線性回歸、共線性分析、方差分析、主成分分析,完成這些需要多久呢?答案是4 分53.766秒。多麼神奇的事情!對這些大數據進行進階統計計算只多用了不到0.1秒。這種計算效率的加強夠顯著了,我們無須再為資源和時間發愁了。
本書透過文字描述、數學運算式和程式碼,將整個統計計算過程清晰地展現在讀者眼前。全書揭示了各種統計概念和方法,以及它們內在的連結,並根據其特點,對各自的計算公式進行恒等轉換,找到更適合大數據的計算方式。書中提供的範例程式碼可以幫助讀者進一步了解演算法細節,便於將書中的方法運用於實際計算。
本書適合對大數據分析有興趣的讀者閱讀,前面的章節比較容易了解,包含了常用統計量的計算;後面的各章節需要讀者具備一些基礎知識,建議讀者根據自己的興趣和工作需要,選擇對應的內容進行參考。
在本書撰寫過程中,感謝初敏、陳一甯、張東暉的支援和幫助,感謝蔡甯、高志涵在演算法方面的討論和交流,感謝鄧鐘強、蔡甯、高志涵、蔣耘、羅毅、譚望達、代斌、周俊、王少萌、姜曉燕、王樂珩、曹傳宇等同事,一同將此理論應用於實際。
因作者水準有限,書中難免有不妥或疏漏之處,敬請廣大專家和讀者批評、指正! 我的電子郵件地址為:yangxu@alibaba-inc.com。
阿里巴巴 楊旭