建立大數據思維的七大技能》數學好不好,真的不是大數據最重要的問題

6129293752_fd81669783_z

成為數據 Geek,建立自己的數據場需要哪些技能呢?遇到普通的數據,通過 SQL 做分析。如果資料量比較大,可以使用 Hadoop 等大數據框架處理。在深入挖掘上,可用 Python 或者 R 語言進行程式設計。以下為作者雲戒第一人稱寫作分享。

  • 數據 Geek

先前提到,數據科學家是具有數據相關的完整理論和知識的人,自然境界很高。做為一個普通的 IT 界碼農,成為數據科學家需要漫長的過程。那這個……,做不到數據科學家,我們還可以當個數據 Geek(Data Geek)嘛,挑戰數據極限,也是挑戰自己的極限。

那麼,成為數據 Geek,建立自己的數據場需要哪些技能呢?且不說那高深複雜的理論,僅從實用的角度來分析一下,建立數據場的七個方面。

  • 七大技能

SQL 與 NoSQL 技能

二維表格數據是最常用形式了,對二維數據的處理分析也是最基本的。傳統的 SQL 工具與大數據環境下的 NoSQL 工具中,以關聯式的 MySQL 為代表,以文檔型的 MongoDB 為代表,以大數據環境下的 Hive 代表。這都是數據分析的基礎而強大利器,在很多場合下都能快速的解決問題。

擴展的,還會有記憶體型數據庫 Redis,圖數據庫 Neo4j,還有全文索引的 ElasticSearch 和 Solr,還有 Hbase 和 Cassandra,這些根據具體的業務,選擇性的掌握其中一部分。

學到什麼程度並無定論,重點在具體的數據環境下,不至於永遠只知道 MySQL 這一個工具,在不同的場景,其它的數據庫能發揮出強大的優勢。

總結起來說,重點不是工具,而是數據。不僅要能處理結構化數據,還要處理半結構化數據,不僅能單機處理,還要在集群環境下處理。

Linux 工具集

Shell, AWK, sed, grep 等基本工具集,這是很多數據簡單處理的得力助手,包含數據檔案編碼,數據合併,數據拆分,數據規範,格式驗證等等。

Linux 腳本能力,簡單服務配置能力,規則運算式能力,Vim 或者 Emacs 編輯能力,檔案系統常用操作命令,遠端登入 ssh 等等,這些都能快速的處理很多問題。任何的分析或挖掘都會依託與一個系統,而 Linux 是其中最常用的,尤其是在伺服器環境。熟悉一個系統,能讓自己的數據科學工作事半功倍。

簡單的數據收集與處理,很多時候也會依賴於 Linux 系統或者基於其上的一系列工具,比如常用的 Web 伺服器引擎 Nginx 及其產生的日誌,常用的檔案傳輸 scp 或者 rsync,常用的定時任務 crontab 等等這些工具,穩定又實用。

Python 或者 R 語言生態

掌握一門分析專用語言,很有必要。其中以 R 語言和 Python 語言為代表。R 起源於統計學,如今在數據科學領域也佔有強大的陣地。Python 更是一門完整的程式設計語言,不論是 Web 開發、自動化運維、雲計算,還是數據科學領域,都有眾多的用戶。兩者在數據分析中都有完整的生態圈,而且其它環境對這兩者的支持也是非常好的。

無意爭端,全看個人喜好。本人只熟悉 Python 這塊生態,因此只討論這一塊相關的。最為大眾熟悉的一些包為:Numpy,Scipy, Pandas 和 Scikit-learn,Keras,解決了從數據分析到機器學習和深度學習的幾乎所有任務。

Hadoop 與 Spark 生態

大數據平臺,無疑是以 Hadoop 和 Spark 為代表,無論線上處理還是離線分析。Hadoop 比較適合離線處理。而線上處理中,Storm 就是比較有名的。如果需要自己實現 Map-Reduce 或者對接數據之類的開發,程式設計語言中以 Java 和 Scala 為代表。

線上搜索相關,估計會用前面說過的 ElasticSearch 或者 Solr。當然,區別於 hadoop 的 Map-Reduce 流程,Spark 提供的彈性數據集 RDD,能作用於 RDD 上的運算元非常多,使得數據處理與分析更加方便。除此之外,Spark 還提供了即時任務的 Streaming,能即時的對數據進行處理與獲取結果。還有 Spark SQL 功能,尤其以其中的 DataFrame 重為重要。另外,ML 與 MLlib 也是分散式機器學習的重要部分。

Spark 是 Hadoop 生態圈中的有力補充,並非替代品,如果要說替代,那也只是替代了 MapReduce 分散式運算框架而已,分散式調試與管理依然用 Yarn,檔案系統依然會使用 HDFS。

Hadoop 發行版本中,主要以三大廠商的 Hadoop 的為代表。Cloudera 發行的 CDH,Hortonworks 發行的 HDP,這兩個是目前各種大數據框架支援的主流,另外一家是修改了核心的 MapR。

概率、統計與線性代數

對數據進行統計與分析,是需要統計學的基礎知識。另外,很多問題都可以轉化為一個概率問題,並不是要完全確定的結果,只要概率達滿足即可。概率論方面的主要是貝葉斯統計,隱瑪律可夫模型等之類的。這些都是深入理解演算法的基礎。

對數據的運算,很多時候就是直接矩陣運算,而涉及矩陣的各種運算也正是線性代數相關相關的問題。

機器學習之所以有效,是因為模型對數據的處理,最後都會變成一系列的數學優化問題,而且主要和凸優化知識相關。機器學習的各種計算,都是和數學密切相關。除了上面的概率、統計與線性代數,還會和微積分有一定的關係。

當然,但除非你深入研究演算法的核心原理或者寫學術論文需要,也不要被數學嚇到了。在機器學習應用過程中,並不會用到太多的數學知識。而且,也並不需要完全把上面這些課程學好了再來進行機器學習。電腦基於數學,但應用型的演算法,並不需要特別深厚的數學功底。如果以前課程學得不好也沒有太大的關係,很多知識到了關鍵時刻再補一下也不遲。

機器學習與深度學習

數據採擷與人工智慧中和演算法相關的部分,常用的分類演算法,聚類演算法是基礎。推廣開來,就是監督演算法與非監督演算法,監督演算法中,除了分類,還有回歸。非監督演算法中,除了聚類,還有數據降維,還有用於個性推薦的關聯規則。另外,專門處理自然語言的機器學習也即 NLP,或者文本數據採擷,是另外一個側重方向。

對演算法的理解,需要前面的統計與概率等等數學知識,還需要結合編碼能力,最好能自己實現一些演示演算法流程的 Demo 程式來輔助理解。實際應用中,最好以協力廠商庫為准,它們經過大量人員的測試,無論是性能還是演算法完整性上都會更好,自己實現的程式僅僅用於理解演算法流程即可。除非你對演算法理解很徹底,並且編碼能力也非常強,而且覺得現有的框架不能滿足你的使用。

除了演算法及其參數調優外,還有另外兩個重要的內容,特徵提取與模型評估。如何從原始數據中提取出用於演算法的特徵是很關鍵的。很多時候,不同演算法在性能差異上並不明顯,但不同的特徵提取方法,卻能產生比較大的差距。

在某種特徵上應用特定的演算法,還需要做的就是模型評估,如果評估一個模型是好還是壞,在一定程度上也體現了機器學習是否有效的依據。在特徵提取上,一個比較火熱的領域自然是深度學習了。源於多層神經網路,是一種非監督的特徵提取方法,更好的用於圖片、語音與視覺處理。值得一提的是,深度學習在很多地方的性能已經超過傳統的機器學習演算法。

業務及雜項

除上上面的純技術外,還有一些非技術上的技能。業務理解,商業洞察,溝通與交流能力,尤其以業務的理解能力為重要。數據是死的,無法更好的理解業務中的問題,也就無法更好的利用現有數據,甚至無法更好的解讀其中的結論。

理解業務通常需要一些專業的領域知識,比如做網路安全的,需要安全的一些基礎知識;做電商的,需要理解其中各個指標對當前銷售的影響;做二手車估值的,需要對二手車殘值評估有一定的瞭解。

除了業務知識外,還需要一定的文檔與報表技能,比如 Word、PPT 與 Markdown 工具的使用,只有完整的文檔與良好的表達,才更好體現數據所展現出來的效果。

另外,英文能力與寫作也同樣重要,需要經常閱讀一些英文文章。閱讀的主要目的,就是隨時更新自己的技能,擴展知識面。而寫作,就是自己知識積累的一種方式,將紙上的東西,變成自己的技能。

  • 結尾

這兒列出的七項主要技能,和上一篇文章的 7 大技能基本相同。對於高級信號處理,主要用於特徵提取,個人感覺目前可能通過學習神經網路與深度學習來解決,深度學習是專為解決特徵提取的問題而來。

七大技能,總結起來,就是熟悉一門 Linux 系統及其上的常用工具,遇到普通的數據,可以通過 SQL 來做簡單分析或者聚合。如果數據量比較大,可以使用 Hadoop 等大數據框架處理。在深入挖掘上,可用 Python 或者 R 語言進行程式設計,應用以概率統計為支撐的機器學習演算法。

要做好數據 Geek,只有在各種工具與技能基礎上,再加強自己的業務興趣點,配合個人的悟性而修行。果能如此,持之以恆,則天下定有你的天地。

(本文獲作者雲戒授權刊登轉載,原文標題為〈0x0E 大数据职位,数据场技能 (下)〉,圖片來源:Sam Wolff CC Licensed,未經授權請勿轉載。)