通俗解讀《8步成為數據科學家》
作者:羅賓
世界500強全球化IT項目中國區負責人,服務於快速消費品、零售行業十餘年。某領先BI公司大中華區高級顧問,豐富的BI行業知識以及BI項目諮詢、管理和實施經驗。
這張完美的圖,囤了好久了,今天拿出來,仔細研讀一下,分享給大家。
先把全文整體瀏覽一遍……,主要是走這8步:
- 學好統計、數學和機器學習
- 學會編程
- 理解資料庫
- 探索數據科學工作流
- 提升到大數據層面
- 成長、交流和學習
- 全身心投入工作
- 混社會(社區和論壇)
好了,先來熱個身,什麼是數據科學(家)?
2010的解讀和2015的還不太一樣,2010認為是「數學好,業務精,技術強」,也就是說:
- 理論基礎要紮實——數學和統計學要掌握的好
- 豐富的行業知識——對所在的業務領域、行業知識要精通
- 技術牛人或大神——裝的了機,調的通網,寫的了代碼,玩的轉數據……
以上是修成正果的節奏,要是跑偏了呢,一般會這樣:
- 數學不太好——很危險!沒有嚴謹的方法論(理論依據),就有可能在瞎折騰;
- 業務不太熟——運用不到工業界(企業),就只會是個紙上談兵的理論家;
- 技術不太強——沒有現代IT技術的武裝,就只會是個搞傳統研究的老專家;
下面這張圖,很好的解釋了這些細節:
但是2015這張圖,又是幾個意思呢?
- 人工智慧包含機器學習,機器學習又包含了深度學習;大數據領域跟三者都有交叉,但又是另外一個全新的領域。
- 數據挖掘(Data Mining),是AI人工智慧和Big Data都會涉及到的領域,主要就是那些基礎演算法,預測、分類、聚類、關聯等。
- 數據科學,就在此應運而生,跟AI和Big Data都有交叉,但不涉及深度學習。
太混亂了,一句話解釋:數據科學(家)就是人工智慧、機器學習和大數據領域的複合型學科(人才)
再來看看需要什麼樣的學歷背景:
一句話概括:技校就行,本科不錯,碩士最好,博士當然可以,但人不多(總人頭就不多)
下面那句名言,說數據科學家基本就是這種人:你跟他談技術,他和你談業務;你要談業務,他就搬理論……想不到,你是這樣的數據科學家。
小結一下,數據科學家就是複合型人才,差不多智商的都可以上。但是,以我敏銳的洞察和經驗,注意到這是DataCamp做的宣傳圖,它會把這事描述的相對容易,門檻低嘛大家都有興趣來學,這樣的圖,其實也是軟文的一種(老外的軟文)。下圖是DataCamp的首頁,主要是提供在線的、收費的數據科學課程的
好,我們把書翻到第1頁,先來看第1步——學好統計、數學和機器學習(走遍天下都不怕)
首先,關於數學,有一些非常好的資源可以利用:
- 可汗學院
官網是https://www.khanacademy.org
網易公開課(可汗學院)也有部分翻譯過的課程
- 麻省理工學院MIT的OCW
https://ocw.mit.edu/index.htm
其次,關於統計學:
- 優達學城的統計學入門(Intro to Statistics)
https://cn.udacity.com/
- OpenIntro的Statistics
https://www.openintro.org/
- DataCamp自己也有幾門課程
最後,關於機器學習
- 斯坦福在線的ML課程,應該就是大大牛Andrew Ng的課程
- Coursera的practical machine learning
這裡搜一下就有:https://www.coursera.org/
約翰霍普金斯大學的課程
- DataCamp自己也有幾門課程
好了,發散一下思路,現在好的課程,在網上已經是鋪天蓋地了,只要你有本事,想學什麼都可以。所以,現在擠破頭的學區房,10年以後可能會是個大笑話;當然,擠進名校,還有提升圈子、階層的作用,這樣看,又不好笑了……
翻到第2頁,再來看第2步——學會編程
想起一個說法,說以後編程可能會是像英語一樣的,每個人的最基礎的技能了,所以,程序員可以先偷著樂一下。
- 首先你要具備一些計算機科學的基礎知識
- 然後嘗試一些基礎性的開發工作
- 再選定一門好的(或你喜歡的)編程語言
開源的R和Python(當前最火)
商業工具:SAS, SPSS 等等
- 互動式的去學吧!就是學習、練習、交流、實踐、思考,反覆學習,刻意練習。(DataCamp剛才還很含蓄,現在憋不住要推自己的課程了……)
好,再來看第3步——理解資料庫
既然要跟數據打交道,那麼對數據存放和管理的地方——資料庫的深刻理解,一定必不可少:
- MySQL:經典的關係型資料庫,開源,體積小,速度快,成本低;中小型網站或企業開發之必備;同Linux,Apache,PHP形成最高效、經典的開發環境LAMP
- Oracle:領先的企業級資料庫,高效率,功能強大,可移植性好,高可靠性,高吞吐量
- Cassandra:高可用性和高可擴展性的NoSQL資料庫(屬於列式存儲),支持大規模分散式數據存儲和高並發數據訪問
- CouchDB:一個Erlang語言開發的Apache的頂級開源項目,是一個面向文檔的NoSQL資料庫
- PostgreSQL:加州大學伯克利分校研發的對象關係型資料庫管理系統(ORDBMS)
- MongoDB:也是一個面向文檔的NoSQL資料庫,非關係資料庫中最像關係資料庫的,對數據結構要求不嚴格
需要對資料庫加深理解的,可以移步至:
- MongoDB University
https://university.mongodb.com/
- 斯坦福在線(又來了)
Introduction to Database
- Datastax
https://www.datastax.com/
- TutorialsPoint
http://www.tutorialspoint.com/
好,再來看第4步——探索數據科學工作流
此處,對於數據科學家的日常,我們又分為6小步走:
- 數據收集
運用各種方法(複製、導出,爬蟲等),將原始數據收集起來,存儲到一個地方(文本文件,Excel,資料庫等)。
- 數據探索
使用一些基本的數據可視化工具,對數據做一個初步探查,看看大致的狀況和數據分布情況。
- 數據清理
對重複數據,錯誤數據進行處理;對數據格式、規範進行統一;對部分數據進行分拆或者合併。
- 數據建模
根據需要求解的問題,選用合適的數據模型進行建模,並輸出數據分析的結果。
- 數據驗證
選用合適的統計分析工具,對數據分析輸出的結果進行驗證,確認分析結果在合理的誤差範圍或精度要求之內。
- 製作報告
將數據分析的結果和由此得出的結論,結合業務實際,製作出合理的數據分析報告。
這裡,需要了解幾個通俗的說法:
- 程序——幾行代碼,完成一個輸入到輸出的函數,或者過程,我們叫程序。
- 程序包(或者庫)——預先寫好的,通用的,規範的一堆程序文件,可以在我們的程序里調用。
- 工具(開發環境,IDE,軟體)——通常是圖形化界面下的,可以進行程序開發的一整套工具(軟體)。
那麼,對於以上6個步驟,就可以簡單的解釋了:
- 數據收集
Python:可以調用Numpy和Pandas等科學計算的「庫」來做
R語言:可以調用readxl, data.table等「庫」來做
- 數據探索
Python:可以調用Bokeh或Matplotlib等數據可視化「庫」來做
R語言:可以調用ggvis, ggplot2等「庫」來做
其它:可以使用可視化軟體vega來實現
- 數據清理
Python:可以調用Pandas等「庫」來做
R語言:可以調用dplyr, data.table等「庫」來做
其它:可以使用數據清理和轉化軟體Data Wrangler來實現
- 數據建模
Python:可以使用開源機器學習框架Scikit-learn來做
R語言:可以調用caret這個機器學習「包」來做
其它:可以使用數據挖掘工具rapidminer來實現
- 數據驗證
Python:可以調用statsmodels庫來做
R語言:可以調用statmod庫來做
其它:可以使用開源數據挖掘軟體KNIME來實現
- 製作報告
Python:可以使用Jupyter工具來實現
R語言:可以使用R Studio自帶的R Markdown來實現
其它:可以使用商業化BI軟體Tableau, Spotfire等來實現
不錯,已經走完一半了,接下來,我們走第5步——提升到大數據層面
首先,我們來理解,所謂的「大數據」到底比「小數據」,大在哪裡?
流行的說法有4V和3V之說,其中3個V是指:
- Velocity——更快的數據產生速度。主要歸因於進入新的數據時代(比如從PC時代-->互聯網-->移動互聯網-->物聯網),數據產生速度的量級開始猛增
- Volume——更大、更多的數據量。數據產生快了,量自然就多了
- Variety——更多樣的數據種類。除了以前的結構化數據,還有文本、文檔;圖片、圖像;音頻、視頻;XML、HTML等等大量的非結構化數據
4V就是在此基礎上增加了一個Value,數據的價值。
其次,我們來看看最經典的大數據框架——Hadoop,曾經這個以「黃色小象」為logo的hadoop,就幾乎是大數據的代名詞。簡單理解hadoop,它就是一個分散式的大數據系統基礎架構:
- 因為數據「大」了,一台伺服器(單機)處理不過來了,所以需要團結一個個的伺服器(集群),來協同處理;或者說,把一個大的數據任務,分解出來,處理完成,再合併起來。Hadoop就把這個分散式系統的框架,搭好了。
- 計算機的兩個重要組成部分,處理器CPU負責計算,內存(硬碟)負責存儲,所以,對應的,MapReduce就是Hadoop的分散式計算框架;HDFS就是Hadoop的分散式文件存儲系統。
最後,關於Spark,業界其實一直流傳著Hadoop是一個大坑的說法,實施起來並沒有傳說中那麼好,(當然也造就了一大批hadoop填坑的工作崗位)。主要問題在於MapReduce,計算引擎這塊,Spark算是第二代引擎,對大數據計算時的中間輸出結果,使用內存計算進行了優化,大大提升了數據處理速度(號稱提升了100倍),所以可用於大規模的實時數據流處理和互動式分析。
接下來,我們再來看第6步——成長、交流和學習
學了這麼多,也該出來練練手了:
- 參加一些數據挖掘或演算法挑戰競賽
最著名的是Kaggle,國內有阿里的天池。將所學的技能,去解決工業界(企業)遇到的實際問題,並獲取一定的獎金,何樂而不為?
- 結交各路豪傑(現在叫大牛/大神)
一個人學容易閉門造車,或者一個問題卡死在哪裡,無從下手。多認識一些志同道合的朋友,可以增長見識,開拓思路,學習進度也可以大大提升。
- 參與一些實際項目(積累項目經驗)
跟幾個人創建一個合作小團隊,實打實的去完成一個實際的小項目,會在很大程度上提升你的個人資歷和背景,實踐出真知。
- 提升你的直覺(心理表徵)
反覆的學習、演練、實踐、再學習,便可以讓個人知識、技能和經驗不斷螺旋式上升,慢慢的,以前棘手的問題,已經可以下意識的給出結論或者解決辦法,就像可以完全依靠直覺來處理一樣,其實,這就是刻意練習所強化出來的心理表徵的作用。
下面看第7步——全身心投入工作
演練完了,就找一份全職的工作吧,可以從實習生做起,一路打怪升級,做到真正的數據科學家。你的實踐經驗也會在這個過程中,繼續得到更大的提升。
另外,類似Kaggle這樣的平台,也提供數據科學家的工作招聘,你可以把競賽的成績直接顯示到你的簡歷里。能力如果足夠出色,薪水從來不是問題。
居然要寫完了……來看最後一步,天龍8步——混社會(社區和論壇)
工作也有了,收入也杠杠的,那麼……好山好水好無聊啊,總得找點事情做做,那就去混社會吧(當然是數據科學家的社會),有好多種操作方式:
- 時刻關注行業或領域最新資訊,保證不落伍,談資滿滿。
- 不能一味索取,也要貢獻一些產出,知識經驗分享,代碼共享,思路分享……不一而足。
- 可以加入一些社區,微信群,線上線下均可,總要找到組織嘛,個人總要有些群體歸屬感(我又突然想起那句「適當離群,才能保證足夠優秀」的話……)。
- 當你還是一個小白時,記得粉大牛/大神,虛心請教,背後痛下苦功,爭取早日成為另一個大牛;成為大牛後,也記得對小白好一點。:)
推薦閱讀: