數(shù)據(jù)科學(xué)并沒有一個獨立的學(xué)科體系,統(tǒng)計學(xué),機器學(xué)習(xí),數(shù)據(jù)挖掘,數(shù)據(jù)庫,分布式計算,云計算,信息可視化等技術(shù)或方法來對付數(shù)據(jù)。
但從狹義上來看,我認(rèn)為數(shù)據(jù)科學(xué)就是解決三個問題: 1. data pre-processing; 2. data interpretation; 3.data modeling and analysis. 這也就是我們做數(shù)據(jù)工作的三個大步驟:
1、原始數(shù)據(jù)要經(jīng)過一連串收集、提取、清洗、整理等等的預(yù)處理過程,才能形成高質(zhì)量的數(shù)據(jù);
2、我們想看看數(shù)據(jù)“長什么樣”,有什么特點和規(guī)律;
3、按照自己的需要,比如要對數(shù)據(jù)貼標(biāo)簽分類,或者預(yù)測,或者想要從大量復(fù)雜的數(shù)據(jù)中提取有價值的且不易發(fā)現(xiàn)的信息,都要對數(shù)據(jù)建模,得到output。 這三個步驟未必嚴(yán)謹(jǐn),每個大步驟下面可能依問題的不同也會有不同的小步驟,但按我這幾年的經(jīng)驗來看,按照這個大思路走,數(shù)據(jù)一般不會做跑偏。
這樣看來,大數(shù)據(jù)科學(xué)其實就是門復(fù)合型的技術(shù),既然是技術(shù)就從編程語言談起吧,為了簡練,只說說R和Python。但既然是薦數(shù)據(jù)科學(xué)方面的書,我這里就不提R/Python編程基礎(chǔ)之類的書了,直接上跟數(shù)據(jù)科學(xué)相關(guān)的。
R programming 如果只是想初步了解一下R語言已經(jīng)R在數(shù)據(jù)分析方面的應(yīng)用,那不妨就看看這兩本:
R in action:我的R語言大數(shù)據(jù)101。其實對于一個沒有任何編程基礎(chǔ)的人來說,一開始就學(xué)這本書,學(xué)習(xí)曲線可能會比較陡峭。但如果配合上一些輔助材料,如官方發(fā)布的R basicsstackoverflow上有tag-R的問題集(Newest 'r' Questions),遇到復(fù)雜的問題可在上面搜索,總會找到解決方案的。這樣一來,用這本書拿來入門學(xué)習(xí)也問題不大。而且這本書作者寫得也比較輕松,緊貼實戰(zhàn)。
Data analysis and graphics using R:使用R語言做數(shù)據(jù)分析的入門書。這本書的特點也是緊貼實戰(zhàn),沒有過多地講解統(tǒng)計學(xué)理論,所以喜歡通過情境應(yīng)用來學(xué)習(xí)的人應(yīng)該會喜歡這本入門書。而且這本書可讀性比較強,也就是說哪怕你手頭沒電腦寫不了代碼,有事沒事拿出這本書翻一翻,也能讀得進去。
但如果你先用R來從事實實在在的數(shù)據(jù)工作,那么上面兩本恐怕不夠,還需要這些: Modern applied statistics with S:這本書里統(tǒng)計學(xué)的理論就講得比較多了,好處就是你可以用一本書既復(fù)習(xí)了統(tǒng)計學(xué),又學(xué)了R語言。(S/Splus和R的關(guān)系就類似于Unix和Linux,所以用S教程學(xué)習(xí)R,一點問題都沒有)
Data manipulation with R:這本書實務(wù)性很強,它教給你怎么從不同格式的原始數(shù)據(jù)文件里讀取、清洗、轉(zhuǎn)換、整合成高質(zhì)量的數(shù)據(jù)。當(dāng)然和任何一本注重實戰(zhàn)的書一樣,本書也有豐富的真實數(shù)據(jù)或模擬數(shù)據(jù)供你練習(xí)。對于真正從事數(shù)據(jù)處理工作的人來說,這本書的內(nèi)容非常重要,因為對于任何研究,一項熟練的數(shù)據(jù)預(yù)處理技能可以幫你節(jié)省大量的時間和精力。否則,你的研究總是要等待你的數(shù)據(jù)。 R Graphics Cookbook:想用R做可視化,就用這本書吧。150多個recipes,足以幫你應(yīng)付絕大多數(shù)類型的數(shù)據(jù)。以我現(xiàn)在極業(yè)余的可視化操作水平來看,R是最容易做出最漂亮的圖表的工具了。
An introduction to statistical learning with application in R:這本書算是著名的the element of statistical learning的姊妹篇,后者更注重統(tǒng)計(機器)學(xué)習(xí)的模型和算法,而前者所涉及的模型和算法原沒有后者全面或深入,但卻是用R來學(xué)習(xí)和應(yīng)用機器學(xué)習(xí)的很好的入口。 A handbook of statistical analysis using R:這本書內(nèi)容同樣非常扎實,很多統(tǒng)計學(xué)的學(xué)生就是用這本書來學(xué)習(xí)用R來進行統(tǒng)計建模的。
Python Think Python,Think Stats,Think Bayes:這是Allen B. Downey寫的著名的Think X series三大卷。 其實是三本精致的小冊子,如果想快速地掌握Python在統(tǒng)計方面的操作,好好閱讀這三本書,認(rèn)真做習(xí)題,答案鏈接在書里有。這三本書學(xué)通了,就可以上手用Python進行基本的統(tǒng)計建模了。
Python For Data Analysis: 作者是pandas的主要開發(fā)者,也正是Pandas使Python能夠像R一樣擁有dataframe的功能,能夠處理結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)。這本書其實analysis講得不多,說成數(shù)據(jù)處理應(yīng)該更合適。掌握了這本書,處理各種糟心的數(shù)據(jù)就問題不大了。
Introduction to Python for Econometrics, Statistics and Data Analysis:這本書第一章就告訴你要安裝Numpy, Scipy, Matplotlib, Pandas, IPython等等。然后接下來的十好幾章就是逐一介紹這幾個庫該怎么用。很全面,但讀起來比較枯燥,可以用來當(dāng)工具書。
Practical Data Analysis: 這本書挺奇葩,貌似很暢銷,但作者把內(nèi)容安排得東一榔頭西一棒子,什么都講一點,但一個都沒講透。這本書可以作為我們學(xué)習(xí)數(shù)據(jù)分析的一個索引,看到哪塊內(nèi)容有意思,就順著它這個藤去摸更多的瓜。
Python Data Visualization Cookbook: 用Python做可視化的教材肯定不少,我看過的也就這一本,覺得還不錯。其實這類書差別都不會很大,咬住一本啃下來就是王道。
Exploratory Data Analysis 和 Data Visualization Exploratory Data Analysis:John Tukey寫于1977年的經(jīng)典老教材,是這一領(lǐng)域的開山之作。如今EDA已經(jīng)是統(tǒng)計學(xué)里的重要一支,但當(dāng)時還是有很多人對他的工作不屑一顧。可他愛數(shù)據(jù),堅信數(shù)據(jù)可以以一種出人意料的方式呈現(xiàn)出來。正是他的努力,讓數(shù)據(jù)可視化成為一門無比迷人的技術(shù)。但這本書不推薦閱讀了,內(nèi)容略過時。要想完整地了解EDA,
推薦下一本: Exploratory Data Analysis with MATLAB:這本書雖然標(biāo)題帶了個MATLAB,但實際上內(nèi)容幾乎沒怎么講MATLAB,只是每講一個方法的時候就列出對應(yīng)的MATALB函數(shù)。這本書的重要之處在于,這是我讀過的講EDA最系統(tǒng)的一本書,除了對visualization有不輸于John Tucky的講解外,對于高維的數(shù)據(jù)集,通過怎樣的方法才能讓我們從中找到潛在的pattern,這本書也做了詳盡的講解。全書所以案例都有對應(yīng)的MATALB代碼,而且還提供了GUI(圖形用戶界面)。所以這本書學(xué)起來還是相當(dāng)輕松愉悅的。 Visualize This:中譯本叫“鮮活的數(shù)據(jù)”,作者是個“超級數(shù)據(jù)迷”,建立了一個叫http://flowingdata.com的網(wǎng)頁展示他的數(shù)據(jù)可視化作品,這本書告訴你該選擇什么樣的可視化工具,然后告訴你怎樣visualize關(guān)系型數(shù)據(jù)、時間序列、空間數(shù)據(jù)等,最后你就可以用數(shù)據(jù)講故事了。如果你只想感受一下數(shù)據(jù)可視化是個什么,可以直接點開下面這個鏈接感受下吧!A tour through the visualization zoo(A Tour Through the Visualization Zoo)
Machine Learning & Data Mining 這一塊就不多說了,不是因為它不重要,而是因為它太太太重要。所以這一部分就推兩本書,都是”世界名著“,都比較難讀,需要一點點地啃。這兩本書拿下,基本就算是登堂入室了。其實作為機器學(xué)習(xí)的延伸和深化,概率圖模型(PGM)和深度學(xué)習(xí)(deep learning)同樣值得研究,特別是后者現(xiàn)在簡直火得不得了。但PGM偏難,啃K.Daphne那本大作實在太燒腦,也沒必要,而且在數(shù)據(jù)領(lǐng)域的應(yīng)用也不算很廣。
deep learning目前工業(yè)界的步子邁得比學(xué)術(shù)界的大,各個domain的應(yīng)用如火如荼,但要有公認(rèn)的好教材問世則還需時日,所以PGM和deep learning這兩塊就不薦書了。 The Element of Statistical Learning:要學(xué)機器學(xué)習(xí),如果讓我只推薦一本書,我就推薦這本巨著。Hastie、Tibshirani、Friedman這三位大牛寫書寫得太用心了,大廈建得夠高夠大,結(jié)構(gòu)也非常嚴(yán)謹(jǐn),而且很有前瞻性,納入了很多前沿的內(nèi)容,而不僅僅是一部綜述性的教材。(圖表也做得非常漂亮,應(yīng)該是用R語言的ggplot2做的。)這本書注重講解模型和算法本身,所以需要具備比較扎實的數(shù)理基礎(chǔ),啃起這本書來才不會太吃力。事實上掌握模型和算法的原理非常重要。機器學(xué)習(xí)(統(tǒng)計學(xué)習(xí))的庫現(xiàn)在已經(jīng)非常豐富,即使你沒有完全搞懂某個模型或算法的原理和過程,只要會用那幾個庫,機器學(xué)習(xí)也能做得下去。但你會發(fā)現(xiàn)你把數(shù)據(jù)代進去,效果永遠都不好。但是,當(dāng)你透徹地理解了模型和算法本身,你再調(diào)用那幾個庫的時候,心情是完全不一樣的,效果也不一樣。
Data Mining: Concepts and Techniques, by Jiawei Han and Micheline Kamber 數(shù)據(jù)挖掘的教材汗牛充棟,之所以推薦這本韓家煒爺爺?shù)模且驗殡m然他這本書的出發(fā)點是應(yīng)用,但原理上的內(nèi)容也一點沒有落下,內(nèi)容非常完整。而且緊跟時代,更新的很快,我看過的是第二版,就已經(jīng)加進去了social network analysis這種當(dāng)時的前沿內(nèi)容?,F(xiàn)在已經(jīng)有第三版了,我還沒看過,但應(yīng)該也加入了不少新內(nèi)容。其實這本書并不難讀,只是篇幅較長,啃起來比較耗時。 其實這兩本書里單拎出來一塊內(nèi)容可能又是幾本書的節(jié)奏,比如bayesian方法,再拿出兩三本書來講也不為過,我個人用到的比較多,而且也確實有不少好書。但并非是所有data scientist都要用到,所以這一塊就不再細(xì)說。
還有一些印象比較深刻的書: Big Data Glossary: 主要講解大數(shù)據(jù)處理技術(shù)及工具,內(nèi)容涵蓋了NoSQL,MapReduce,Storage,Servers,NLP庫與工具包,機器學(xué)習(xí)工具包,數(shù)據(jù)可視化工具包,數(shù)據(jù)清洗,序列化指南等等??傊?,是一本辭典式的大數(shù)據(jù)入門指導(dǎo)。 Mining of Massive Datasets:這本書是斯坦福大學(xué)Web Mining的講義,里面很多內(nèi)容與韓家煒的Data Mining那本書重合,但這本書里詳細(xì)地講了MapReduce的設(shè)計原理,PageRank(Google創(chuàng)業(yè)時期的核心排序算法,現(xiàn)在也在不斷優(yōu)化更新)講解得也比較詳細(xì)。
Developing Analytic Talent: 作者是個從事了十幾年數(shù)據(jù)工作的geek,技術(shù)博客寫得很有個人風(fēng)格,寫的內(nèi)容都比較偏門,通常只有具備相關(guān)數(shù)據(jù)處理經(jīng)驗的人能體會出來,絲毫不照顧初學(xué)者的感受。比如他會談到當(dāng)數(shù)據(jù)流更新太快時該怎么辦,或者MapReduce在什么時候不好用的問題,才不管你懂不懂相關(guān)基礎(chǔ)原理。所以這本書不太適合初學(xué)者閱讀。這本書其實是作者的博客文章的集結(jié),用how to become a data scientist的邏輯把他近幾年的博客文章串聯(lián)了起來。
Past, Present and Future of Statistical Science:這本書是由COPSS(統(tǒng)計學(xué)社主席委員會,由國際各大統(tǒng)計學(xué)會的帶頭人組成)在50周年出版的一本紀(jì)念冊,里面有50位統(tǒng)計學(xué)家每人分別貢獻出的一兩篇文章,有的回憶了自己當(dāng)年如何走上統(tǒng)計學(xué)這條路,有的探討了一些統(tǒng)計學(xué)的根本問題,有的談了談自己在從事的前沿研究,有的則給年輕一代寫下了寄語。非常有愛的一本書。 其它資料 Harvard Data Science:這是H大的Data science在線課,我沒有修過,但口碑很好。這門課需要費用8千刀左右,比起華盛頓大學(xué)的4千刀的Data science在線課雖貴一倍,但比斯坦福的14千刀要便宜將近一半(而且斯坦福的更偏計算機)。
如果想自學(xué),早有好心人分享了slides:id=0BxYkKyLxfsNVd0xicUVDS1dIS0k&usp=sharing)和homeworks and solutions: PyData:PyData是來自各個domain的用Python做數(shù)據(jù)的人每年舉行一次的聚會,期間會有各路牛人舉行一些規(guī)模不大的seminar或workshop,有好心人已經(jīng)把video上傳到github,有興趣的去認(rèn)領(lǐng)吧(DataTau/datascience-anthology-pydata · GitHub) 工具 R/Python/MATLAB(必備):如果是做數(shù)據(jù)分析和模型開發(fā),以我的觀察來看,使用這三種工具的最多。R生來就是一個統(tǒng)計學(xué)家開發(fā)的軟件,所做的事也自然圍繞統(tǒng)計學(xué)展開。MATLAB雖然算不上是個專業(yè)的數(shù)據(jù)分析工具,但因為很多人不是專業(yè)做數(shù)據(jù)的,做數(shù)據(jù)還是為了自己的domain expertise(特別是科學(xué)計算、信號處理等),而MATLAB又是個強大無比的Domain expertise工具,所以很多人也就順帶讓MATLAB也承擔(dān)了數(shù)據(jù)處理的工作,雖然它有時候顯得效率不高。
Python雖然不是做數(shù)據(jù)分析的專業(yè)軟件,但作為一個面向?qū)ο蟮母呒墑討B(tài)語言,其開源的生態(tài)使Python擁有無比豐富的庫,Numpy, Scipy 實現(xiàn)了矩陣運算/科學(xué)計算,相當(dāng)于實現(xiàn)了MATLAB的功能,Pandas又使Python能夠像R一樣處理dataframe,scikit-learn又實現(xiàn)了機器學(xué)習(xí)。 SQL(必備):雖然現(xiàn)在人們都說傳統(tǒng)的關(guān)系型數(shù)據(jù)庫如Oracle、MySQL越來越無法適應(yīng)大數(shù)據(jù)的發(fā)展,但對于很多人來說,他們每天都有處理數(shù)據(jù)的需要,但可能一輩子都沒機會接觸TB級的數(shù)據(jù)。不管怎么說,不論是用關(guān)系型還是非關(guān)系型數(shù)據(jù)庫,SQL語言是必須要掌握的技能,用什么數(shù)據(jù)庫視具體情況而定。
MongoDB(可選):目前最受歡迎的非關(guān)系型數(shù)據(jù)庫NoSQL之一,不少人認(rèn)為MongoDB完全可以取代mySQL。確實MongoDB方便易用,擴展性強,Web2.0時代的必需品。 Hadoop/Spark/Storm(可選): MapReduce是當(dāng)前最著名也是運用最廣泛的分布式計算框架,由Google建立。Hadoop是基于MapReduce的框架建立起來的分布式計算系統(tǒng),Spark在Map Reduce的基礎(chǔ)上利用有向無環(huán)圖構(gòu)建了RDD,目的就是為了減少Map和Reduce之間的數(shù)據(jù)交換次數(shù),所以速度就快了。另一個區(qū)別就是,Hadoop用硬盤存儲數(shù)據(jù),Spark用內(nèi)存存儲數(shù)據(jù),Storm只接受實時數(shù)據(jù)流而不存儲數(shù)據(jù)。Hadoop因為“歷史”最為悠久,有不少技術(shù)和產(chǎn)品都是基于Hadoop開發(fā)的,所以在較長的時間內(nèi)Hadoop并不會不會被淘汰。而Spark是目前生態(tài)最好,最活躍的分布式框架。如果剛剛起步研究分布式計算,可從Spark入手。
OpenRefine(可選):Google開發(fā)的一個易于操作的數(shù)據(jù)清洗工具,可以實現(xiàn)一些基本的清洗功能。 Tableau(可選):一個可交互的數(shù)據(jù)可視化工具,操作簡單,開箱即用。而且圖表都設(shè)計得非常漂亮。專業(yè)版1999美刀,終身使用。媒體和公關(guān)方面用得比較多。 Gephi(可選):跟Tableau類似,都是那種可交互的可視化工具,不需要編程基礎(chǔ),生成的圖表在美學(xué)和設(shè)計上也是花了心血的。更擅長復(fù)雜網(wǎng)絡(luò)的可視化。