全文連接程序員
現在數據科學書籍、認證和文憑,如雨後春筍般層出不窮。但許多僅僅是×××水月:許多人鑽了這一新名詞的空子,將舊酒(好比統計學和R編程)放在了「數據科學」這個新瓶裏。
本文選自《數據天才:數據科學家修煉之道》。算法
R語言編程跟僞數據科學爲什麼扯上了關係?數據庫
R是一種有20多年曆史的開源統計編程語言及編譯環境,是商業化產品S+的後繼者。R一直以來都侷限於內存數據處理,在統計圈子裏很是流行,並因其出色的可視化效果爲人稱道。一些新型的開發環境經過建立R程序包或者將其擴展到分佈式架構裏(好比將R與Hadoop結合的RHadoop),將R(限於在內存裏處理數據)的能力擴大。其餘程序語言固然也存在跟僞數據科學沾邊的狀況,好比說SAS,但不及R這麼流行。說到SAS,它價格高昂,在政府機構或者實體企業的應用更爲普遍。但在過去10年數據快速增加的領域(如搜索引擎、社交媒體、移動數據、協同過濾推薦等)運用很少。R跟C、Perl或者Python的語法不同(後三者語法根源同樣),其簡易性使得寫R的程序員比較普遍。R還有不少程序包和不錯的用戶界面,SAS卻難學不少。編程
管理決策層在搭建其數據科學家團隊時,有時也不是很清楚他們想要的究竟是什麼。服務器
他們每每最終招募的是很純粹的技術極客、計算機科學家,或者缺少恰當大數據經驗的人。人力資源部門對於數據科學的瞭解也不會好到哪裏,所以致使更爲嚴重的問題,他們給出的招聘廣告就是不斷重複相似的關鍵詞:Java、Python、MapReduce、R、Hadoop和NoSQL。網絡
數據科學真的就是這些技能的混合嗎?架構
**MapReduce**只是一個將數據分解爲子集,在不一樣機器上分開處理,並把全部結果集合起來,從而處理大數據的泛化框架。所以它涉及的是處理大數據的分佈式框架,用到的這些服務器和設備則組成雲(Cloud)。框架
**Hadoop**是MapReduce的一種實現,就像C++是面向對象編程的實現同樣。編程語言
**NoSQL**意味着「Not Only SQL(意爲不單只是SQL)」,是指能更新穎、更高效地訪問(好比MapReduce)數據的數據庫或數據庫管理系統,有時它是做爲SQL(標準數據庫查詢語言)之下的隱藏層而存在的。分佈式
除了MapReduce之外,還有其餘框架——例如,圖形數據庫和環境,它們依賴於節點和邊這類概念,來管理和訪問數據(一般是空間數據)。這些概念並不必定是新的。在谷歌存在以前,分佈式體系結構已被應用到搜索技術環境中了。15年前,我寫Perl腳本進行哈希鏈接(一種NoSQL鏈接,用來鏈接或合併數據庫中的兩個表)。然而,如今一些數據庫廠商提供的哈希鏈接,是SQL鏈接的一個快速替代品。哈希鏈接在本書後面還會討論到。它們使用哈希表,並依賴於名稱-值對的形式。我想說的結論是,有時MapReduce、NoSQL、Hadoop、Python(一種優秀的腳本語言,每每用於處理文本和非結構化數據)會被認爲是Perl的後繼者,但它們根源於幾十年前就開發出的系統和技術,只是在過去的10年裏變得更成熟而已,但數據科學並不僅是這些。
事實上,你能夠成爲一名真正的數據科學家,且不須要掌握這些技能。NoSQL和MapReduce不是新概念——在這些關鍵詞被建立以前,就有不少人接觸到它們。
成爲一名數據科學家,你須要如下能力。
敏銳的商業頭腦。
真正的大數據專業知識(例如,能夠在幾個小時內快速地處理一個5 000萬行的數據集)。
認知數據的能力。
對模型具備猜疑精神。
瞭解大數據「詛咒」。
有能力溝通並理解管理人員正在試圖解決哪些問題。
能正確評估付你工資所能帶來的回報(ROI)或效益提高(lift)。
可以快速地識別一個簡單的、健壯的、可擴展的解決方案。
可以說服並推進管理人員,即便不情願,也要爲了公司、用戶和股東的利益,轉到正確的方向上。
真正熱愛數據分析。
成功案例的實際應用經驗。
數據架構知識。
數據收集和清理技能。
計算複雜度的基礎知識——如何開發健壯的、高效的、可擴展的、可移植的架構。
良好的算法知識。
數據科學家在商業分析、統計學和計算機科學等領域也是通才,好比會掌握這些專業知識:健壯性、實驗設計、算法複雜度、儀表盤和數據可視化。一些數據科學家也是數據策略師——他們能夠開發數據收集策略,並使用數據來發現可操做的、能對商業產生影響的看法。這就要求數據科學傢俱備創造性,能根據業務要求,制定分析、提出解決方案。
要理解數據科學,所需的基本數學知識包括:
代數,若是可能的話,包括基本矩陣理論。
微積分入門課程。要掌握的理論很少,只須要理解計算的複雜度和O標記法便可。瞭解特殊函數,包括對數、指數、冪函數。微分方程、積分和複數不是必要的。
統計與機率的入門課程,要了解隨機變量、機率、均值、方差、百分位數、實驗設計、交叉驗證、擬合度和穩健統計的概念(不須要了解技術細節,而是達到本書介紹的程度便可)。
從技術的角度,要掌握的重要技能和知識有R、Python(或Perl)、Excel、SQL、圖形(可視化)、FTP、基本的UNIX命令(sort、grep、head、tail、管道和重定向操做符、cat、cron定時等),以及對如何設計和訪問數據庫有基本瞭解。瞭解分佈式系統如何工做和在哪裏能發現瓶頸(是在硬盤和內存之間的數據傳輸,仍是在互聯網上),這也很重要。最後,要了解網絡爬蟲基本知識,這有助於獲取互聯網上能找到的非結構化數據。
僞數據科學的例子
這裏有個僞數據科學的例子,說明數據科學家要開展工做,爲何須要遵循標準和最佳實踐。這裏討論的例子,並非說它們是很差的產品——實際上,它們有不少的內在價值——但跟真的數據科學無關。緣由有如下兩點:
首先,部分統計學家沒有參與到大數據革命中。雖然有些人還寫了關於應用數據科學的書,但只是從新包裝原來的統計課程。
第二,適合大數據集的方法須要變化——按2005年的大數據定義,當有2 000萬行數據時,纔有資格成爲大數據——但2010年後不能再這樣劃分,由於大數據至少是TB級的。
很多人認爲數據科學是統計學的一個新名字,他們把數據科學和僞數據科學,以及2005年的大數據定義與2013年的大數據定義弄混淆了。現代數據也有很大的不一樣,已經被描述爲3個V:速度(velocity)(實時、快速流動)、多樣化(variety)(結構化、非結構化,如微博內容)和大數據量(volume)。我會增長真實性(veracity)和價值(value)。