通俗解讀《8步成為數據科學家》

作者:羅賓

世界500強全球化IT項目中國區負責人,服務於快速消費品、零售行業十餘年。某領先BI公司大中華區高級顧問,豐富的BI行業知識以及BI項目諮詢、管理和實施經驗。

這張完美的圖,囤了好久了,今天拿出來,仔細研讀一下,分享給大家。

先把全文整體瀏覽一遍……,主要是走這8步:

  1. 學好統計、數學和機器學習
  2. 學會編程
  3. 理解資料庫
  4. 探索數據科學工作流
  5. 提升到大數據層面
  6. 成長、交流和學習
  7. 全身心投入工作
  8. 混社會(社區和論壇)

好了,先來熱個身,什麼是數據科學(家)?

2010的解讀和2015的還不太一樣,2010認為是「數學好,業務精,技術強」,也就是說:

  1. 理論基礎要紮實——數學和統計學要掌握的好
  2. 豐富的行業知識——對所在的業務領域、行業知識要精通
  3. 技術牛人或大神——裝的了機,調的通網,寫的了代碼,玩的轉數據……

以上是修成正果的節奏,要是跑偏了呢,一般會這樣:

  1. 數學不太好——很危險!沒有嚴謹的方法論(理論依據),就有可能在瞎折騰;
  2. 業務不太熟——運用不到工業界(企業),就只會是個紙上談兵的理論家;
  3. 技術不太強——沒有現代IT技術的武裝,就只會是個搞傳統研究的老專家;

下面這張圖,很好的解釋了這些細節:

但是2015這張圖,又是幾個意思呢?

  1. 人工智慧包含機器學習,機器學習又包含了深度學習;大數據領域跟三者都有交叉,但又是另外一個全新的領域。
  2. 數據挖掘(Data Mining),是AI人工智慧和Big Data都會涉及到的領域,主要就是那些基礎演算法,預測、分類、聚類、關聯等。
  3. 數據科學,就在此應運而生,跟AI和Big Data都有交叉,但不涉及深度學習。

太混亂了,一句話解釋:數據科學(家)就是人工智慧、機器學習和大數據領域的複合型學科(人才)

再來看看需要什麼樣的學歷背景:

一句話概括:技校就行,本科不錯,碩士最好,博士當然可以,但人不多(總人頭就不多)

下面那句名言,說數據科學家基本就是這種人:你跟他談技術,他和你談業務;你要談業務,他就搬理論……想不到,你是這樣的數據科學家。

小結一下,數據科學家就是複合型人才,差不多智商的都可以上。但是,以我敏銳的洞察和經驗,注意到這是DataCamp做的宣傳圖,它會把這事描述的相對容易,門檻低嘛大家都有興趣來學,這樣的圖,其實也是軟文的一種(老外的軟文)。下圖是DataCamp的首頁,主要是提供在線的、收費的數據科學課程的

好,我們把書翻到第1頁,先來看第1步——學好統計、數學和機器學習(走遍天下都不怕)

首先,關於數學,有一些非常好的資源可以利用:

  1. 可汗學院

官網是khanacademy.org

網易公開課(可汗學院)也有部分翻譯過的課程

  1. 麻省理工學院MIT的OCW

ocw.mit.edu/index.htm

其次,關於統計學:

  1. 優達學城的統計學入門(Intro to Statistics)

cn.udacity.com/

  1. OpenIntro的Statistics

openintro.org/

  1. DataCamp自己也有幾門課程

最後,關於機器學習

  1. 斯坦福在線的ML課程,應該就是大大牛Andrew Ng的課程
  2. Coursera的practical machine learning

這裡搜一下就有:coursera.org/

約翰霍普金斯大學的課程

  1. DataCamp自己也有幾門課程

好了,發散一下思路,現在好的課程,在網上已經是鋪天蓋地了,只要你有本事,想學什麼都可以。所以,現在擠破頭的學區房,10年以後可能會是個大笑話;當然,擠進名校,還有提升圈子、階層的作用,這樣看,又不好笑了……

翻到第2頁,再來看第2步——學會編程

想起一個說法,說以後編程可能會是像英語一樣的,每個人的最基礎的技能了,所以,程序員可以先偷著樂一下。

  1. 首先你要具備一些計算機科學的基礎知識
  2. 然後嘗試一些基礎性的開發工作
  3. 再選定一門好的(或你喜歡的)編程語言

開源的R和Python(當前最火)

商業工具:SAS, SPSS 等等

  1. 互動式的去學吧!就是學習、練習、交流、實踐、思考,反覆學習,刻意練習。(DataCamp剛才還很含蓄,現在憋不住要推自己的課程了……)

好,再來看第3步——理解資料庫

既然要跟數據打交道,那麼對數據存放和管理的地方——資料庫的深刻理解,一定必不可少:

  1. MySQL:經典的關係型資料庫,開源,體積小,速度快,成本低;中小型網站或企業開發之必備;同Linux,Apache,PHP形成最高效、經典的開發環境LAMP
  2. Oracle:領先的企業級資料庫,高效率,功能強大,可移植性好,高可靠性,高吞吐量
  3. Cassandra:高可用性和高可擴展性的NoSQL資料庫(屬於列式存儲),支持大規模分散式數據存儲和高並發數據訪問
  4. CouchDB:一個Erlang語言開發的Apache的頂級開源項目,是一個面向文檔的NoSQL資料庫
  5. PostgreSQL:加州大學伯克利分校研發的對象關係型資料庫管理系統(ORDBMS)
  6. MongoDB:也是一個面向文檔的NoSQL資料庫,非關係資料庫中最像關係資料庫的,對數據結構要求不嚴格

需要對資料庫加深理解的,可以移步至:

  1. MongoDB University

university.mongodb.com/

  1. 斯坦福在線(又來了)

Introduction to Database

  1. Datastax

datastax.com/

  1. TutorialsPoint

tutorialspoint.com/

好,再來看第4步——探索數據科學工作流

此處,對於數據科學家的日常,我們又分為6小步走:

  1. 數據收集

運用各種方法(複製、導出,爬蟲等),將原始數據收集起來,存儲到一個地方(文本文件,Excel,資料庫等)。

  1. 數據探索

使用一些基本的數據可視化工具,對數據做一個初步探查,看看大致的狀況和數據分布情況。

  1. 數據清理

對重複數據,錯誤數據進行處理;對數據格式、規範進行統一;對部分數據進行分拆或者合併。

  1. 數據建模

根據需要求解的問題,選用合適的數據模型進行建模,並輸出數據分析的結果。

  1. 數據驗證

選用合適的統計分析工具,對數據分析輸出的結果進行驗證,確認分析結果在合理的誤差範圍或精度要求之內。

  1. 製作報告

將數據分析的結果和由此得出的結論,結合業務實際,製作出合理的數據分析報告。

這裡,需要了解幾個通俗的說法:

  1. 程序——幾行代碼,完成一個輸入到輸出的函數,或者過程,我們叫程序。
  2. 程序包(或者庫)——預先寫好的,通用的,規範的一堆程序文件,可以在我們的程序里調用。
  3. 工具(開發環境,IDE,軟體)——通常是圖形化界面下的,可以進行程序開發的一整套工具(軟體)。

那麼,對於以上6個步驟,就可以簡單的解釋了:

  1. 數據收集

Python:可以調用Numpy和Pandas等科學計算的「庫」來做

R語言:可以調用readxl, data.table等「庫」來做

  1. 數據探索

Python:可以調用Bokeh或Matplotlib等數據可視化「庫」來做

R語言:可以調用ggvis, ggplot2等「庫」來做

其它:可以使用可視化軟體vega來實現

  1. 數據清理

Python:可以調用Pandas等「庫」來做

R語言:可以調用dplyr, data.table等「庫」來做

其它:可以使用數據清理和轉化軟體Data Wrangler來實現

  1. 數據建模

Python:可以使用開源機器學習框架Scikit-learn來做

R語言:可以調用caret這個機器學習「包」來做

其它:可以使用數據挖掘工具rapidminer來實現

  1. 數據驗證

Python:可以調用statsmodels庫來做

R語言:可以調用statmod庫來做

其它:可以使用開源數據挖掘軟體KNIME來實現

  1. 製作報告

Python:可以使用Jupyter工具來實現

R語言:可以使用R Studio自帶的R Markdown來實現

其它:可以使用商業化BI軟體Tableau, Spotfire等來實現

不錯,已經走完一半了,接下來,我們走第5步——提升到大數據層面

首先,我們來理解,所謂的「大數據」到底比「小數據」,在哪裡?

流行的說法有4V和3V之說,其中3個V是指:

  1. Velocity——更快的數據產生速度。主要歸因於進入新的數據時代(比如從PC時代-->互聯網-->移動互聯網-->物聯網),數據產生速度的量級開始猛增
  2. Volume——更大、更多的數據量。數據產生快了,量自然就多了
  3. Variety——更多樣的數據種類。除了以前的結構化數據,還有文本、文檔;圖片、圖像;音頻、視頻;XML、HTML等等大量的非結構化數據

4V就是在此基礎上增加了一個Value,數據的價值。

其次,我們來看看最經典的大數據框架——Hadoop,曾經這個以「黃色小象」為logo的hadoop,就幾乎是大數據的代名詞。簡單理解hadoop,它就是一個分散式的大數據系統基礎架構:

  1. 因為數據「大」了,一台伺服器(單機)處理不過來了,所以需要團結一個個的伺服器(集群),來協同處理;或者說,把一個大的數據任務,分解出來,處理完成,再合併起來。Hadoop就把這個分散式系統的框架,搭好了。
  2. 計算機的兩個重要組成部分,處理器CPU負責計算,內存(硬碟)負責存儲,所以,對應的,MapReduce就是Hadoop的分散式計算框架;HDFS就是Hadoop的分散式文件存儲系統。

最後,關於Spark,業界其實一直流傳著Hadoop是一個大坑的說法,實施起來並沒有傳說中那麼好,(當然也造就了一大批hadoop填坑的工作崗位)。主要問題在於MapReduce,計算引擎這塊,Spark算是第二代引擎,對大數據計算時的中間輸出結果,使用內存計算進行了優化,大大提升了數據處理速度(號稱提升了100倍),所以可用於大規模的實時數據流處理和互動式分析。

接下來,我們再來看第6步——成長、交流和學習

學了這麼多,也該出來練練手了:

  1. 參加一些數據挖掘或演算法挑戰競賽

最著名的是Kaggle,國內有阿里的天池。將所學的技能,去解決工業界(企業)遇到的實際問題,並獲取一定的獎金,何樂而不為?

  1. 結交各路豪傑(現在叫大牛/大神)

一個人學容易閉門造車,或者一個問題卡死在哪裡,無從下手。多認識一些志同道合的朋友,可以增長見識,開拓思路,學習進度也可以大大提升。

  1. 參與一些實際項目(積累項目經驗)

跟幾個人創建一個合作小團隊,實打實的去完成一個實際的小項目,會在很大程度上提升你的個人資歷和背景,實踐出真知。

  1. 提升你的直覺(心理表徵)

反覆的學習、演練、實踐、再學習,便可以讓個人知識、技能和經驗不斷螺旋式上升,慢慢的,以前棘手的問題,已經可以下意識的給出結論或者解決辦法,就像可以完全依靠直覺來處理一樣,其實,這就是刻意練習所強化出來的心理表徵的作用。

下面看第7步——全身心投入工作

演練完了,就找一份全職的工作吧,可以從實習生做起,一路打怪升級,做到真正的數據科學家。你的實踐經驗也會在這個過程中,繼續得到更大的提升。

另外,類似Kaggle這樣的平台,也提供數據科學家的工作招聘,你可以把競賽的成績直接顯示到你的簡歷里。能力如果足夠出色,薪水從來不是問題。

居然要寫完了……來看最後一步,天龍8步——混社會(社區和論壇)

工作也有了,收入也杠杠的,那麼……好山好水好無聊啊,總得找點事情做做,那就去混社會吧(當然是數據科學家的社會),有好多種操作方式:

  1. 時刻關注行業或領域最新資訊,保證不落伍,談資滿滿。
  2. 不能一味索取,也要貢獻一些產出,知識經驗分享,代碼共享,思路分享……不一而足。
  3. 可以加入一些社區,微信群,線上線下均可,總要找到組織嘛,個人總要有些群體歸屬感(我又突然想起那句「適當離群,才能保證足夠優秀」的話……)。
  4. 當你還是一個小白時,記得粉大牛/大神,虛心請教,背後痛下苦功,爭取早日成為另一個大牛;成為大牛後,也記得對小白好一點。:)

推薦閱讀:

TAG:数据科学家 | R编程语言 | 数据分析 |