-
1 # 蝙蝠俠IT
-
2 # 機器之心Pro
Apache Mahout:Mahout 提供了一個用於機器學習和資料探勘的預製演算法庫,也可用作建立更多演算法的環境。 換句話說,機器學習極客的最佳環境。
Apache Oozie:在任何程式設計環境中,你都需要一些工作流系統透過預定義的方式和定義的依賴關係,安排和執行工作。Oozie 為 pig、MapReduce 以及 Hive 等語言編寫的大資料工作所提供正是這個。
Apache Drill, Apache Impala, Apache Spark SQL
這三個開源專案都提供快速和互動式的 SQL,如與Apache Hadoop資料的互動。 如果你已經知道SQL並處理以大資料格式儲存的資料(即HBase或HDFS),這些功能將非常有用。抱歉,這裡說的有點奇怪
Apache Hive:知道SQL嗎? 如果知道那你就很好上手Hive了。 Hive有助於使用SQL讀取、寫入和管理駐留在分散式儲存中的大型資料集。
Apache Pig:Pig 是在大型分散式資料集上建立、查詢、執行例程的平臺。 所使用的指令碼語言叫做Pig Latin(我絕對不是瞎說,相信我)。 據說Pig很容易理解和學習。 但是我很懷疑有多少是可以學習的?
Apache Sqoop:一個用於將資料從Hadoop轉移到非Hadoop資料儲存(如資料倉庫和關係資料庫)的工具。
Apache Storm:一個免費開源的實時分散式計算系統。 它使得使用Hadoop進行批處理的同時可以更容易地處理非結構化資料。
人工智慧(AI) - 為什麼AI出現在這裡? 你可能會問,這不是一個單獨的領域嗎? 所有這些技術發展趨勢緊密相連,所以我們最好靜下心來繼續學習,對吧? AI以軟硬體結合的方式開發智慧機器和軟體,這種硬體和軟體的結合能夠感知環境並在需要時採取必要的行動,不斷從這些行動中學習。是不是聽起來很像機器學習?跟我一起“困惑”吧。
行為分析(Behavioral Analytics):你有沒有想過谷歌是如何為你需要的產品/服務提供廣告的?行為分析側重於理解消費者和應用程式所做的事情,以及如何與為什麼它們以某種方式起作用。這涉及瞭解我們的上網模式,社交媒體互動行為,以及我們的網上購物活動(購物車等),連線這些無關的資料點,並試圖預測結果。舉一個例子,在我找到一家酒店並清空購物車後,我收到了度假村假期線路的電話。 我還要說多點嗎?
Brontobytes-- 1後面27個零,這是未來數字世界儲存單位的大小 。而我們在這裡,來談談Terabyte、Petabyte、Exabyte、Zetabyte、Yottabyte 和 Brontobyte。你一定要讀這篇文章才能深入瞭解這些術語。
商業智慧(Business Intelligence):我將重用 Gartner 對 BI 的定義,因為它解釋的很好。 商業智慧是一個總稱,包括應用程式、基礎設施、工具以及最佳實踐,它可以訪問和分析資訊,從而改善和最佳化決策及績效。
生物測定學(Biometrics):這是一項James Bondish技術與分析技術相結合的透過人體的一種或多種物理特徵來識別人的技術,如面部識別,虹膜識別,指紋識別等。
聚類分析(Cluster Analysis)是一個試圖識別資料結構的探索性分析,也稱為分割分析或分類分析。 更具體地說,它試圖確定案例的同質組(homogenous groups),即觀察、參與者、受訪者。 如果分組以前未知,則使用聚類分析來識別案例組。 因為它是探索性的,確實對依賴變數和獨立變數進行了區分。 SPSS提供的不同的聚類分析方法可以處理二進位制、標稱、序數和規模(區間或比率)資料。
比較分析(Comparative Analytics):因為大資料的關鍵就在於分析,所以本文中我將深入講解分析的意義。顧名思義,比較分析是使用諸如模式分析、過濾和決策樹分析等統計技術來比較多個程序、資料集或其他物件。我知道它涉及的技術越來越少,但是我仍無法完全避免使用術語。 比較分析可用於醫療保健領域,透過比較大量的醫療記錄、檔案、影象等,給出更有效和更準確的醫療診斷。
關聯分析(Connection Analytics):你一定看到了像圖表一樣的蜘蛛網將人與主題連線起來,從而確定特定主題的影響者。關聯分析分析可以幫助發現人們、產品、網路之中的系統,甚至是資料與多個網路結合之間的相關連線和影響。
資料清洗(Data Cleansing):顧名思義,資料清洗涉及到檢測並更正或者刪除資料庫中不準確的資料或記錄,然後記住「髒資料」。藉助於自動化或者人工工具和演算法,資料分析師能夠更正並進一步豐富資料,以提高資料質量。請記住,髒資料會導致錯誤的分析和糟糕的決策。
資料即服務(DaaS):我們有軟體即服務(SaaS),平臺即服務(PaaS),現在我們又有DaaS,它的意思是:資料即服務。透過給使用者提供按需訪問的雲端資料,DaaS提供商能夠幫助我們快速地得到高質量的資料。
資料虛擬化(Data virtualization):這是一種資料管理方法,它允許某個應用在不知道技術細節(如資料存放在何處,以什麼格式)的情況下能夠抽取並操作資料。例如,社交網路利用這個方法來儲存我們的照片。
髒資料(Dirty Data):既然大資料這麼吸引人,那麼人們也開始給資料加上其他的形容詞來形成新的術語,例如黑資料(dark data)、髒資料(dirty data)、小資料(small data),以及現在的智慧資料(smart data)。髒資料就是不乾淨的資料,換言之,就是不準確的、重複的以及不一致的資料。顯然,你不會想著和髒資料攪在一起。所以,儘快地修正它。
模糊邏輯(Fuzzy logic):我們有多少次對一件事情是確定的,例如100%正確?很稀少!我們的大腦將資料聚合成部分的事實,這些事實進一步被抽象為某種能夠決定我們決策的閾值。模糊邏輯是一種這樣的計算方式,與像布林代數等等中的「0」和「1」相反,它旨在透過漸漸消除部分事實來模仿人腦。
遊戲化(Gamification):在一個典型的遊戲中,你會有一個類似於分數一樣的元素與別人競爭,並且還有明確的遊戲規則。大資料中的遊戲化就是使用這些概念來收集、分析資料或者激發玩家。
圖資料庫(Graph Databases):圖資料使用節點和邊這樣的概念來代表人和業務以及他們之間的關係,以挖掘社交媒體中的資料。是否曾經驚歎過亞馬遜在你買一件產品的時候告訴你的關於別人在買什麼的資訊?對,這就是圖資料庫。
Hadoop使用者體驗(Hadoop User Experience /Hue):Hue是一個能夠讓使用Apache Hadoop變得更加容易的開源介面。它是一款基於web的應用;它有一款分散式檔案系統的檔案瀏覽器;它有用於MapReduce的任務設計;它有能夠排程工作流的框架Oozie;它有一個shell、一個Impala、一個Hive UI 以及一組Hadoop API。
高效能分析應用(HANA):這是SAP公司為大資料傳輸和分析設計的一個軟硬體記憶體平臺。
HBase: 一個分散式的面向列的資料庫。它使用HDFS作為其底層儲存,既支援利用MapReduce進行的批次計算,也支援利用事物互動的批次計算。
負載均衡(Load balancing):為了實現最佳的結果和對系統的利用,將負載分發給多個計算機或者伺服器。
元資料(Metadata):元資料就是能夠描述其他資料的資料。元資料總結了資料的基本資訊,這使得查詢和使用特定的資料例項變得更加容易。例如,作者、資料的建立日期、修改日期以及大小,這幾項是基本的文件元資料。除了文件檔案之外,元資料還被用於影象、影片、電子表格和網頁。
MongoDB:MongoDB是一個面向文字資料模型的跨平臺開源資料庫,而不是傳統的基於表格的關係資料庫。這種資料庫結構的主要設計目的是讓結構化資料和非結構化資料在特定型別應用的整合更快、更容易。
Mashup:幸運的是,這個術語和我們在日常生活中使用的「mashup」一詞有著相近的含義,就是混搭的意思。實質上,mashup是一個將不同的資料集合併到一個單獨應用中的方法(例如:將房地產資料與地理位置資料、人口資料結合起來)。這確實能夠讓視覺化變得很酷。
多維資料庫(Multi-Dimensional Databases):這是一個為了資料線上分析處理(OLAP)和資料倉庫最佳化而來的資料庫。如果你不知道資料倉庫是什麼,我可以解釋一下,資料倉庫不是別的什麼東西,它只是對多個數據源的資料做了集中儲存。
多值資料庫(MultiValue Databases):多值資料庫是一種非關係型資料庫,它能夠直接理解三維資料,這對直接操作HTML和XML字串是很好的。
自然語言處理(Natural Language Processing):自然語言處理是被設計來讓計算機更加準確地理解人類日常語言的軟體演算法,能夠讓人類更加自然、更加有效地和計算機互動。
神經網路(Neural Network):根據這個描述(http://neuralnetworksanddeeplearning.com/),神經網路是一個受生物學啟發的非常漂亮的程式設計正規化,它能夠讓計算機從觀察到的資料中學習。已經好久沒有一個人會說一個程式設計正規化很漂亮了。實際上,神經網路就是受現實生活中腦生物學啟發的模型.......與神經網路緊密關聯的一個術語就是深度學習。深度學習是神經網路中一系列學習技術的集合。
模式識別(Pattern Recognition):當演算法需要在大規模資料集或者在不同的資料集上確定迴歸或者規律的時候,就出現了模式識別。它與機器學習和資料探勘緊密相連,甚至被認為是後兩者的代名詞。這種可見性可以幫助研究者發現一些深刻的規律或者得到一些可能被認為很荒謬的結論。
射頻識別(Radio Frequency Identification/RFID):射頻識別是一類使用非接觸性無線射頻電磁場來傳輸資料的感測器。隨著物聯網的發展,RFID標籤能夠被嵌入到任何可能的「東西里面」,這能夠生成很多需要被分析的資料。歡迎來到資料世界。
軟體即服務(SaaS):軟體即服務讓服務提供商把應用託管在網際網路上。SaaS提供商在雲端提供服務。
半結構化資料(Semi-structured data):半結構化資料指的是那些沒有以傳統的方法進行格式化的資料,例如那些與傳統資料庫相關的資料域或者常用的資料模型。半結構化資料也不是完全原始的資料或者完全非結構化的資料,它可能會包含一些資料表、標籤或者其他的結構元素。半結構化資料的例子有圖、表、XML文件以及電子郵件。半結構化資料在全球資訊網上十分流行,在面向物件資料庫中經常能夠被找到。
情感分析(Sentiment Analysis):情感分析涉及到了對消費者在社交媒體、顧客代表電話訪談和調查中存在的多種型別的互動和文件中所表達的情感、情緒和意見的捕捉、追蹤和分析。文字分析和自然語言處理是情感分析過程中的典型技術。情感分析的目標就是要辨別或評價針對一個公司、產品、服務、人或者時間所持有的態度或者情感。
空間分析(Spatial analysis):空間分析指的是對空間資料作出分析,以識別或者理解分佈在幾何空間中的資料的模式和規律,這類資料有幾何資料和拓撲資料。
流處理(Stream processing):流處理被設計用來對「流資料」進行實時的「連續」查詢和處理。為了對大量的流資料以很快的速度持續地進行實時的數值計算和統計分析,社交網路上的流資料對流處理的需求很明確。
智慧資料(Smart Data)是經過一些演算法處理之後有用並且可操作的資料。
Terabyte:這是一個相對大的數字資料單位,1TB等於1000GB。據估計,10TB能夠容納美國國會圖書館的所有印刷品,而1TB則能夠容納整個百科全書Encyclopedia Brittanica。
視覺化(Visualization):有了合理的視覺化之後,原始資料就能夠使用了。當然這裡的視覺化並不止簡單的圖表。而是能夠包含資料的很多變數的同時還具有可讀性和可理解性的複雜圖表。
Yottabytes:接近1000 Zettabytes,或者2500萬億張DVD。現在所有的數字儲存大概是1 Yottabyte,而且這個數字每18個月會翻一番。
Zettabytes :接近1000 Exabytes,或者10億Terabytes。
-
3 # 西線學院
大多數資料科學家每天都使用組合技能,其中一些是他們在工作當中自學的,也有可能透過其他途徑學到的。他們有各自不同的背景。不是說你非要有什麼學位證書才能證明你是資料科學家。你可以把本文的內容看作是指導你如何成為一名資料科學家。
數學
數學是資料科學的重要組成部分。從微積分到線性代數這些大學數學的基礎知識,要確保你都能知道。你知道的越多,你也會越來越好。
當資料變得越來越龐大,也就意味著它越來越難處理。這時候你就必須使用數學來處理資料了。
別以為你在大學沒上過這些課,你就可以不知道了。說到底你還得需要了解如何操作資料矩陣,演算法數學背後的大致思路你也得知道。
統計學
你必須得知道從一些小的資料集裡如何利用統計學從而得出同樣適用於大資料的理論。這是資料科學的基本法則。統計學將為你如何成為一名資料科學家鋪平道路。
你需要知道統計是基於資料的,有了資料才能進行統計。統計能夠讓你更好地理解從資料中觀察到的模式,並提取你需要的觀點來做出合理的結論。例如,理解推論統計學可以幫助你去證實取自於小人群中的觀點放到所有人群中的每一個個體也同樣適用。
要了解資料科學,你必須瞭解假設檢驗的基礎知識,並設計實驗以瞭解資料的含義和上下文。
演算法
理解如何使用機器來完成工作對於處理和分析資料集來說是至關重要的,因為這些資料集已經遠遠超出了人類的思維能夠處理的範圍。
如果你想在資料科學方面做出重大的改進,那你就必須瞭解演算法選擇和最佳化背後的理論。你必須決定問題是否需要回歸分析,還需要決定是否需要一個能夠幫助你將不同資料點分類到已經定義好的類別裡面去的演算法。
這樣以後,你自己就會主動的去了解很多不同的演算法以及機器學習的基本原理。機器學習就好比是允許亞馬遜根據你的購買歷史從而給你推薦產品,並且不需要任何直接的人工干預。這是一套演算法,它是利用機器的能力去挖掘你的思維。
為了處理這些大量的資料集,你到時候就得使用機器了,因為這樣你才能擴充套件你的思維。
資料視覺化
完成資料分析只是這場戰役的一半。 要想推動影響,你必須說服他人相信並採納你的觀點。
人類是視覺生物。 據3M和Zabisco透露,傳遞給大腦的幾乎90%的資訊本質上是視覺的,透過視覺進行處理的速度比透過文字將近快6萬倍。
資料視覺化是一種透過圖表和其他視覺化工具來呈現資訊的藝術,這樣觀眾就可以很容易地理解資料並從中獲取資訊。使用條形圖展示什麼資訊最好?我們在散點圖中應該展示什麼型別的資料?
人類天生就會對視覺線索作出反應。你能夠透過資料把你的觀點表達得越好,別人就越有可能根據這些資料從而採取行動。
商業知識
資料在沒有上下文的情況下是沒有意義的。你必須瞭解正在分析的業務。清晰度是如何成為資料科學家的核心。
大多數公司之所以依賴於他們的資料科學家,不僅僅是希望他們能夠挖掘資料集,而且還希望他們能夠將其結果傳達給各種利益相關者,並提出可行的建議。
最好的資料科學家不僅有能力處理大型複雜的資料集,而且還能理解他們所工作的業務或組織的複雜性。
擁有一般的業務知識可以讓他們提出正確的問題,並提出有見地的解決方案和建議。
專業領域
作為一名資料科學家,你應該瞭解你所從事的行業以及它所處的行業。
除了對所在公司需要深入瞭解之外,你還必須瞭解它在你的商業洞察力中所起的作用。來自生物學研究的資料可能與精心設計的心理學研究中收集的資料具有截然不同的背景。 你應該足夠了解行業行話。
-
4 # 翊文化
計算機的基本工作就是處理資料,包括磁碟檔案中的資料,透過網路傳輸的資料流或資料包,資料庫中的結構化資料等。隨著網際網路、物聯網等技術得到越來越廣泛的應用,資料規模不斷增加,TB、PB量級成為常態,對資料的處理已無法由單臺計算機完成,而只能由多臺機器共同承擔計算任務。而在分散式環境中進行大資料處理,除了與儲存系統打交道外,還涉及計算任務的分工,計算負荷的分配,計算機之間的資料遷移等工作,並且要考慮計算機或網路發生故障時的資料安全,情況要複雜得多。
舉一個簡單的例子,假設我們要從銷售記錄中統計各種商品銷售額。在單機環境中,我們只需把銷售記錄掃描一遍,對各商品的銷售額進行累加即可。如果銷售記錄存放在關係資料庫中,則更省事,執行一個SQL語句就可以了。現在假定銷售記錄實在太多,需要設計出由多臺計算機來統計銷售額的方案。為保證計算的正確、可靠、高效及方便,這個方案需要考慮下列問題:
如何為每臺機器分配任務,是先按商品種類對銷售記錄分組,不同機器處理不同商品種類的銷售記錄,還是隨機向各臺機器分發一部分銷售記錄進行統計,最後把各臺機器的統計結果按商品種類合併?
上述兩種方式都涉及資料的排序問題,應選擇哪種排序演算法?應該在哪臺機器上執行排序過程?
如何定義每臺機器處理的資料從哪裡來,處理結果到哪裡去?資料是主動傳送,還是接收方申請時才傳送?如果是主動傳送,接收方處理不過來怎麼辦?如果是申請時才傳送,那傳送方應該儲存資料多久?
會不會任務分配不均,有的機器很快就處理完了,有的機器一直忙著?甚至,閒著的機器需要等忙著的機器處理完後才能開始執行?
如果增加一臺機器,它能不能減輕其他機器的負荷,從而縮短任務執行時間?
如果一臺機器掛了,它沒有完成的任務該交給誰?會不會遺漏統計或重複統計?
統計過程中,機器之間如何協調,是否需要專門的一臺機器指揮排程其他機器?如果這臺機器掛了呢?
(可選)如果銷售記錄在源源不斷地增加,統計還沒執行完新記錄又來了,如何保證統計結果的準確性?能不能保證結果是實時更新的?再次統計時能不能避免大量重複計算?
(可選)能不能讓使用者執行一句SQL就可以得到結果?
上述問題中,除了第1個外,其餘的都與具體任務無關,在其他分散式計算的場合也會遇到,而且解決起來都相當棘手。即使第1個問題中的分組、統計,在很多資料處理場合也會涉及,只是具體方式不同。如果能把這些問題的解決方案封裝到一個計算框架中,則可大大簡化這類應用程式的開發。
2004年前後,Google先後發表三篇論文分別介紹分散式檔案系統GFS、平行計算模型MapReduce、非關係資料儲存系統BigTable,第一次提出了針對大資料分散式處理的可重用方案。在Google論文的啟發下,Yahoo的工程師Doug Cutting和Mike Cafarella開發了Hadoop。在借鑑和改進Hadoop的基礎上,又先後誕生了數十種應用於分散式環境的大資料計算框架。本文在參考業界慣例的基礎上,對這些框架按下列標準分類:
如果不涉及上面提出的第8、9兩個問題,則屬於批處理框架。批處理框架重點關心資料處理的吞吐量,又可分為非迭代式和迭代式兩類,迭代式包括DAG(有向無環圖)、圖計算等模型。
若針對第8個問題提出來應對方案,則分兩種情況:如果重點關心處理的實時性,則屬於流計算框架;如果側重於避免重複計算,則屬於增量計算框架。
如果重點關注的是第9個問題,則屬於互動式分析框架。
批處理框架
Hadoop
Hadoop最初主要包含分散式檔案系統HDFS和計算框架MapReduce兩部分,是從Nutch中獨立出來的專案。在2.0版本中,又把資源管理和任務排程功能從MapReduce中剝離形成YARN,使其他框架也可以像MapReduce那樣執行在Hadoop之上。與之前的分散式計算框架相比,Hadoop隱藏了很多繁瑣的細節,如容錯、負載均衡等,更便於使用。
Hadoop也具有很強的橫向擴充套件能力,可以很容易地把新計算機接入到叢集中參與計算。在開源社群的支援下,Hadoop不斷髮展完善,並集成了眾多優秀的產品如非關係資料庫HBase、資料倉庫Hive、資料處理工具Sqoop、機器學習演算法庫Mahout、一致性服務軟體ZooKeeper、管理工具Ambari等,形成了相對完整的生態圈和分散式計算事實上的標準。
圖2. Hadoop生態圈(刪減版)
MapReduce可以理解為把一堆雜亂無章的資料按照某種特徵歸併起來,然後處理並得到最後的結果。基本處理步驟如下:
把輸入檔案按照一定的標準分片,每個分片對應一個map任務。一般情況下,MapReduce和HDFS執行在同一組計算機上,也就是說,每臺計算機同時承擔儲存和計算任務,因此分片通常不涉及計算機之間的資料複製。
按照一定的規則把分片中的內容解析成鍵值對。通常選擇一種預定義的規則即可。
執行map任務,處理每個鍵值對,輸出零個或多個鍵值對。
MapReduce獲取應用程式定義的分組方式,並按分組對map任務輸出的鍵值對排序。預設每個鍵名一組。
待所有節點都執行完上述步驟後,MapReduce啟動Reduce任務。每個分組對應一個Reduce任務。
執行reduce任務的程序透過網路獲取指定組的所有鍵值對。
把鍵名相同的值合併為列表。
執行reduce任務,處理每個鍵對應的列表,輸出結果。
圖3. MapReduce處理過程
在上面的步驟中,應用程式主要負責設計map和reduce任務,其他工作均由框架負責。在定義map任務輸出資料的方式時,鍵的選擇至關重要,除了影響結果的正確性外,也決定資料如何分組、排序、傳輸,以及執行reduce任務的計算機如何分工。前面提到的商品銷售統計的例子,可選擇商品種類為鍵。MapReduce執行商品銷售統計的過程大致如下:
把銷售記錄分片,分配給多臺機器。
每條銷售記錄被解析成鍵值對,其中值為銷售記錄的內容,鍵可忽略。
執行map任務,每條銷售記錄被轉換為新的鍵值對,其中鍵為商品種類,值為該條記錄中商品的銷售額。
MapReduce把map任務生成的資料按商品種類排序。
待所有節點都完成排序後,MapReduce啟動reduce任務。每個商品種類對應一個reduce任務。
執行reduce任務的程序透過網路獲取指定商品種類的各次銷售額。
MapReduce把同一種商品下的各次銷售額合併到列表中。
執行reduce任務,累加各次銷售額,得到該種商品的總銷售額。
上面的過程還有最佳化的空間。在傳輸各種商品每次的銷售額資料前,可先在map端對各種商品的銷售額進行小計,由此可大大減少網路傳輸的負荷。MapReduce透過一個可選的combine任務支援該型別的最佳化。
DAG模型
現在假設我們的目標更進一步,希望知道銷售得最好的前10種商品。我們可以分兩個環節來計算:
對商品種類按銷售額排名。可以透過一個排序過程完成。假定商品種類非常多,需要透過多臺計算機來加快計算速度的話,我們可以用另一個MapReduce過程來實現,其基本思路是把map和reduce分別當作小組賽和決賽,先計算各分片的前10名,彙總後再計算總排行榜的前10名。
從上面的例子可以看出,透過多個MapReduce的組合,可以表達複雜的計算問題。不過,組合過程需要人工設計,比較麻煩。另外,每個階段都需要所有的計算機同步,影響了執行效率。
為克服上述問題,業界提出了DAG(有向無環圖)計算模型,其核心思想是把任務在內部分解為若干存在先後順序的子任務,由此可更靈活地表達各種複雜的依賴關係。Microsoft Dryad、Google FlumeJava、Apache Tez是最早出現的DAG模型。Dryad定義了串接、全連線、融合等若干簡單的DAG模型,透過組合這些簡單結構來描述複雜的任務,FlumeJava、Tez則透過組合若干MapReduce形成DAG任務。
圖4. MapReduce(左)與Tez(右)
執行復雜任務時對比
MapReduce的另一個不足之處是使用磁碟儲存中間結果,嚴重影響了系統的效能,這在機器學習等需要迭代計算的場合更為明顯。加州大學伯克利分校AMP實驗室開發的Spark克服了上述問題。Spark對早期的DAG模型作了改進,提出了基於記憶體的分散式儲存抽象模型RDD(Resilient Distributed Datasets,可恢復分散式資料集),把中間資料有選擇地載入並駐留到記憶體中,減少磁碟IO開銷。與Hadoop相比,Spark基於記憶體的運算要快100倍以上,基於磁碟的運算也要快10倍以上。
圖5. MapReduce與Spark中間結果
儲存方式對比
Spark為RDD提供了豐富的操作方法,其中map、 filter、 flatMap、 sample、groupByKey、 reduceByKey、union、join、cogroup、mapValues、sort、partionBy用於執行資料轉換,生成新的RDD,而count、collect、 reduce、lookup、save用於收集或輸出計算結果。如前面統計商品銷售額的例子,在Spark中只需要呼叫map和reduceByKey兩個轉換操作就可以實現,整個程式包括載入銷售記錄和儲存統計結果在內也只需要寥寥幾行程式碼,並且支援Java、Scala、Python、R等多種開發語言,比MapReduce程式設計要方便得多。下圖說明reduceByKey的內部實現。
圖6. RDD reduceByKey內部實現
RDD由於把資料存放在記憶體中而不是磁碟上,因此需要比Hadoop更多地考慮容錯問題。分散式資料集的容錯有兩種方式:資料檢查點和記錄資料的更新。處理海量資料時,資料檢查點操作成本很高, 因此Spark預設選擇記錄更新的方式。不過如果更新粒度太細太多,記錄更新成本也不低。因此,RDD只支援粗粒度轉換,即只記錄單個塊上執行的單個操作,然後將建立RDD的一系列變換序列記錄下來,類似於資料庫中的日誌。
當RDD的部分分割槽資料丟失時,Spark根據之前記錄的演變過程重新運算,恢復丟失的資料分割槽。Spark生態圈的另一專案Alluxio(原名Tachyon)也採用類似的思路,使資料寫入速度比HDFS有數量級的提升。
下面總結Spark對MapReduce的改進:
MapReduce抽象層次低,需要手工編寫程式碼完成;Spark基於RDD抽象,使資料處理邏輯的程式碼非常簡短。
MapReduce只提供了map和reduce兩個操作,表達力欠缺;Spark提供了很多轉換和動作,很多關係資料庫中常見的操作如JOIN、GROUP BY已經在RDD中實現。
MapReduce中,只有map和reduce兩個階段,複雜的計算需要大量的組合,並且由開發者自己定義組合方式;Spark中,RDD可以連續執行多個轉換操作,如果這些操作對應的RDD分割槽不變的話,還可以放在同一個任務中執行。
MapReduce處理邏輯隱藏在程式碼中,不直觀;Spark程式碼不包含操作細節,邏輯更清晰。
MapReduce中間結果放在HDFS中;Spark中間結果放在記憶體中,記憶體放不下時才寫入本地磁碟而不是HDFS,這顯著提高了效能,特別是在迭代式資料處理的場合。
MapReduce中,reduce任務需要等待所有map任務完成後才可以開始;在Spark中,分割槽相同的轉換構成流水線放到同一個任務中執行。
流計算框架
流計算概述
在大資料時代,資料通常都是持續不斷動態產生的。在很多場合,資料需要在非常短的時間內得到處理,並且還要考慮容錯、擁塞控制等問題,避免資料遺漏或重複計算。流計算框架則是針對這一類問題的解決方案。流計算框架一般採用DAG(有向無環圖)模型。圖中的節點分為兩類:一類是資料的輸入節點,負責與外界互動而向系統提供資料;另一類是資料的計算節點,負責完成某種處理功能如過濾、累加、合併等。從外部系統不斷傳入的實時資料則流經這些節點,把它們串接起來。如果把資料流比作水的話,輸入節點好比是噴頭,源源不斷地出水,計算節點則相當於水管的轉介面。如下圖所示。
圖7. 流計算DAG模型示意圖
為提高併發性,每一個計算節點對應的資料處理功能被分配到多個任務(相同或不同計算機上的執行緒)。在設計DAG時,需要考慮如何把待處理的資料分發到下游計算節點對應的各個任務,這在實時計算中稱為分組(Grouping)。最簡單的方案是為每個任務複製一份,不過這樣效率很低,更好的方式是每個任務處理資料的不同部分。隨機分組能達到負載均衡的效果,應優先考慮。不過在執行累加、資料關聯等操作時,需要保證同一屬性的資料被固定分發到對應的任務,這時應採用定向分組。在某些情況下,還需要自定義分組方案。
圖8. 流計算分組
由於應用場合的廣泛性,目前市面上已經有不少流計算平臺,包括Google MillWheel、Twitter Heron和Apache專案Storm、Samza、S4、Flink、Apex、Gearpump。
Storm及Trident
在流計算框架中,目前人氣最高,應用最廣泛的要數Storm。這是由於Storm具有簡單的程式設計模型,且支援Java、Ruby、Python等多種開發語言。Storm也具有良好的效能,在多節點叢集上每秒可以處理上百萬條訊息。Storm在容錯方面也設計得很優雅。下面介紹Storm確保訊息可靠性的思路。
在DAG模型中,確保訊息可靠的難點在於,原始資料被當前的計算節點成功處理後,還不能被丟棄,因為它生成的資料仍然可能在後續的計算節點上處理失敗,需要由該訊息重新生成。而如果要對訊息在各個計算節點的處理情況都作跟蹤記錄的話,則會消耗大量資源。
Storm的解決思路,是為每條訊息分派一個ID作為唯一性標識,並在訊息中包含原始輸入訊息的ID。同時用一個響應中心(Acker)維護每條原始輸入訊息的狀態,狀態的初值為該原始輸入訊息的ID。每個計算節點成功執行後,則把輸入和輸出訊息的ID進行異或,再異或對應的原始輸入訊息的狀態。由於每條訊息在生成和處理時分別被異或一次,則成功執行後所有訊息均被異或兩次,對應的原始輸入訊息的狀態為0。因此當狀態為0後可安全清除原始輸入訊息的內容,而如果超過指定時間間隔後狀態仍不為0,則認為處理該訊息的某個環節出了問題,需要重新執行。
圖9. Storm保證訊息可靠性過程示意圖
Storm還實現了更高層次的抽象框架Trident。Trident以微批處理的方式處理資料流,比如每次處理100條記錄。Trident提供了過濾、分組、連線、視窗操作、聚合、狀態管理等操作,支援跨批次進行聚合處理,並對執行過程進行最佳化,包括多個操作的合併、資料傳輸前的本地聚合等。以微批處理方式處理資料流的框架還有Spark Streaming。
(1) 實時流處理
(2) 微批處理
圖10. 實時流處理與微批處理比較
下面是Storm、Trident與另外幾種流計算框架的對比:
互動式分析框架
概述
在解決了大資料的可靠儲存和高效計算後,如何為資料分析人員提供便利日益受到關注,而最便利的分析方式莫過於互動式查詢。這幾年互動式分析技術發展迅速,目前這一領域知名的平臺有十餘個,包括Google開發的Dremel和PowerDrill,Facebook開發的Presto, Hadoop服務商Cloudera和HortonWorks分別開發的Impala和Stinger,以及Apache專案Hive、Drill、Tajo、Kylin、MRQL等。
一些批處理和流計算平臺如Spark和Flink也分別內建了互動式分析框架。由於SQL已被業界廣泛接受,目前的互動式分析框架都支援用類似SQL的語言進行查詢。早期的互動式分析平臺建立在Hadoop的基礎上,被稱作SQL-on-Hadoop。後來的分析平臺改用Spark、Storm等引擎,不過SQL-on-Hadoop的稱呼還是沿用了下來。SQL-on-Hadoop也指為分散式資料儲存提供SQL查詢功能。
Hive
Apache Hive是最早出現的架構在Hadoop基礎之上的大規模資料倉庫,由Facebook設計並開源。Hive的基本思想是,透過定義模式資訊,把HDFS中的檔案組織成類似傳統資料庫的儲存系統。Hive 保持著 Hadoop 所提供的可擴充套件性和靈活性。Hive支援熟悉的關係資料庫概念,比如表、列和分割槽,包含對非結構化資料一定程度的 SQL 支援。它支援所有主要的原語型別(如整數、浮點數、字串)和複雜型別(如字典、列表、結構)。它還支援使用類似 SQL 的宣告性語言 Hive Query Language (HiveQL) 表達的查詢,任何熟悉 SQL 的人都很容易理解它。HiveQL被編譯為MapReduce過程執行。下圖說明如何透過MapReduce實現JOIN和GROUP BY。
(1) 實現JOIN
(2) 實現GROUP BY
圖11. 部分HiveQL操作的實現方式
Hive與傳統關係資料庫對比如下:
Hive的主要弱點是由於建立在MapReduce的基礎上,效能受到限制。很多互動式分析平臺基於對Hive的改進和擴充套件,包括Stinger、Presto、Kylin等。其中Kylin是中國團隊提交到Apache上的專案,其與眾不同的地方是提供多維分析(OLAP)能力。Kylin對多維分析可能用到的度量進行預計算,供查詢時直接訪問,由此提供快速查詢和高併發能力。Kylin在eBay、百度、京東、網易、美團均有應用。
SQL引擎Calcite
對於互動式分析,SQL查詢引擎的優劣對效能的影響舉足輕重。Spark開發了自己的查詢引擎Catalyst,而包括Hive、Drill、Kylin、Flink在內的很多互動式分析平臺及資料倉庫使用Calcite(原名optiq)作為SQL引擎。Calcite是一個Apache孵化專案,其建立者Julian Hyde曾是Oracle資料庫SQL引擎的主要開發者。Calcite具有下列幾個技術特點:
支援標準SQL語言。
支援OLAP。
支援對流資料的查詢。
獨立於程式語言和資料來源,可以支援不同的前端和後端。
支援關係代數、可定製的邏輯規劃規則和基於成本模型最佳化的查詢引擎。
支援物化檢視(materialized view)的管理。
由於分散式場景遠比傳統的資料儲存環境更復雜,Calcite和Catalyst都還處於向Oracle、MySQL等經典關係資料庫引擎學習的階段,在效能最佳化的道路上還有很長的路要走。
其他型別的框架
除了上面介紹的幾種型別的框架外,還有一些目前還不太熱門但具有重要潛力的框架型別。圖計算是DAG之外的另一種迭代式計算模型,它以圖論為基礎對現實世界建模和計算,擅長表達資料之間的關聯性,適用於PageRank計算、社交網路分析、推薦系統及機器學習。這一類框架有Google Pregel、Apache Giraph、Apache Hama、PowerGraph、,其中PowerGraph是這一領域目前最傑出的代表。很多圖資料庫也內建圖計算框架。
另一類是增量計算框架,探討如何只對部分新增資料進行計算來極大提升計算過程的效率,可應用到資料增量或週期性更新的場合。這一類框架包括Google Percolator、Microsoft Kineograph、阿里Galaxy等。
另外還有像Apache Ignite、Apache Geode(GemFire的開源版本)這樣的高效能事務處理框架。
總結與展望
從Hadoop橫空出世到現在10餘年的時間中,大資料分散式計算技術得到了迅猛發展。不過由於歷史尚短,這方面的技術遠未成熟。各種框架都還在不斷改進,並相互競爭。
效能最佳化毫無疑問是大資料計算框架改進的重點方向之一。而效能的提高很大程度上取決於記憶體的有效利用。這包括前面提到的記憶體計算,現已在各種型別的框架中廣泛採用。記憶體資源的分配管理對效能也有重要影響,JVM垃圾回收在給開發人員帶來便利的同時,也制約了記憶體的有效利用。另外,Java的物件建立及序列化也比較浪費資源。在記憶體最佳化方面做足功夫的代表是Flink。出於效能方面的考慮,Flink很多元件自行管理記憶體,無需依賴JVM垃圾回收機制。Flink還用到開闢記憶體池、用二進位制資料代替物件、量身定製序列化、定製快取友好的演算法等最佳化手段。Flink還在任務的執行方面進行最佳化,包括多階段並行執行和增量迭代。
擁抱機器學習和人工智慧也是大資料計算的潮流之一。Spark和Flink分別推出機器學習庫Spark ML和Flink ML。更多的平臺在第三方大資料計算框架上提供機器學習,如Mahout、Oryx及一干Apache孵化專案SystemML、HiveMall、PredictionIO、SAMOA、MADLib。這些機器學習平臺一般都同時支援多個計算框架,如Mahout同時以Spark、Flink、H2O為引擎,SAMOA則使用S4、Storm、Samza。在深度學習掀起熱潮後,又有社群探索把深度學習框架與現有分散式計算框架結合起來,這樣的專案有SparkNet、Caffe on Spark、TensorFrames等。
在同一平臺上支援多種框架也是發展趨勢之一,尤其對於那些開發實力較為雄厚的社群。Spark以批處理模型為核心,實現了互動式分析框架Spark SQL、流計算框架Spark Streaming(及正在實現的Structured Streaming)、圖計算框架GraphX、機器學習庫Spark ML。而Flink在提供低延遲的流計算的同時,批處理、關係計算、圖計算、機器學習,一個也沒落下,目標直奔大資料通用計算平臺。Google的BEAM(意為Batch+strEAM)則試圖把Spark、Flink、Apex這樣的計算框架納入自己制定的標準之下,頗有號令江湖之意。
Google的那幾篇論文這裡就不一一列出了,網上很容易搜到。其他推薦的論文如下:
-
5 # 23手
1.linux基本操作,懂shell指令碼更好
2.java 基礎紮實, j2se
如果1會,基本搭建伺服器都沒問題
2.基本寫程式碼,讀程式碼沒問題
-
6 # 薄利軒1
大資料包括兩個層次,一是資料分析,二是技術實現。如果是做資料分析,需要掌握機率統計,時間數列分析,組合最最佳化,模糊數學,數字訊號處理,資料結構,計算方法等內容,主要是數學。如果是做技術實現,則需要掌握資料庫,一些演算法語言及工具。這兩者最好都能有所瞭解。
-
7 # 你看我獨角獸嗎
Python大資料開發的思維導圖如下:
程式語言比較適合大資料程式語言的有以下幾種:C/C++、Java、Scala和Python等,如果本身有技術棧,那麼按照自己熟悉的語言走。假如沒有那麼我建議從Python這門語言入手,其學習反饋週期短,很容易上手。
Python相關學習資料可參考我另一回答:
https://www.wukong.com/question/6462208594099044621/
深度學習深度學習是近年來熱門的概念之一,源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習透過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現數據的分散式特徵表示。
這裡我只推薦一本書,MIT的《深度學習》,這本書已經能夠全面地介紹深度學習的方方面面且被不少人奉為“聖經”。
大資料工具Hadoop:
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構,工業上大資料熱門的工具之一。其中最核心的設計就是HDFS和MapReduce。HDFS為海量的資料提供了儲存,則MapReduce為海量的資料提供了計算。
對於Hadoop的學習,我推薦阿里雲的一篇很優秀的帖子——Hadoop學習資源集合-部落格-雲棲社群-阿里雲,連結:https://yq.aliyun.com/articles/47860
Spark:
Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈資料集,除了能夠提供互動式查詢外,它還可以最佳化迭代工作負載。
學習資料自行搜尋:
Spark官方文件-快速入門,連結:http://ifeve.com/spark/
Spark官方文件-Spark程式設計指南,連結:http://download.csdn.net/download/u011500720/9157521
相關書籍資源:
《Spark大資料處理 技術、應用與效能最佳化 高彥傑》
《深入理解Spark核心思想與原始碼分析 耿嘉安》
其他相關知識學習資料方面必要要有一定的數理統計知識,如果大學有學習足夠的數學課程那麼足夠了,也可以去可汗學院參考以下課程去複習這些知識點——機率和統計和線性代數。然後有空時可刷下這本書《Python資料探勘入門與實踐》,大概梳理一遍以上的知識點,對大資料入門就有一定基礎知識和自己的瞭解。
-
8 # 尚矽谷IT教育
學習大資料需要的預備知識,其實也沒有大家想象的那麼多,接觸過大資料技術的人都是知道,在大資料開發中用到的一些元件許多底層的一些知識都是用Java語言進行開發的,所以,這也是導致現在的大資料開發培訓的課程很多都是以Java語言的學習開始的。
這裡既然提到了學習大資料要預備哪些知識,我感覺需要預備的知識那就是最好有一些掌握Java相關的一下技術知識,當然,最好是能夠在Java開發行業有一定的工作經驗的人是更好的。
如果,是零基礎的學員大家也不用過於擔心害怕,因為現在的大多數的培訓機構都是針對於這樣的學員設計的大資料開發培訓課程,只要是達到了大資料學習需求的學歷和一定的思維邏輯的考察,那麼學習大資料也是沒有任何問題的。
-
9 # 海牛學院大資料培訓
初期需要學習java和linux,這是學習大資料的基礎
此課程為順序學習,有不瞭解的可以聯絡我
-
10 # IT人劉俊明
大資料是我的研究方向之一,所以我來回答一下這個問題。
大資料產業鏈圍繞資料展開,有資料採集、整理、傳輸、儲存、安全、分析、呈現和應用,涉及到諸多學科的綜合使用,不同的崗位需要的基礎知識也不盡相同。下面我以大資料工程師崗位,粗粒度的介紹一下大資料的基礎知識。
第一,作業系統知識。大資料平臺往往搭建在Linux作業系統之上,所以大資料工程師要有Linux系列作業系統的知識。
第二,資料庫基礎。大資料一個重要的內容是資料儲存,要掌握傳統資料庫知識,包括建庫、建表、Sql語句的使用等等。當然在學習大資料的時候還要學習Nosql資料產品。
第四,程式設計基礎。在大資料領域使用比較廣泛的程式語言有Python、R、Java、Scala等語言,這些程式語言也是比較常見的,所以掌握其中一門語言對學習大資料來說是至關重要的。
第五,演算法基礎。大資料分析需要使用到很多演算法,學習大資料要了解常見的演算法,比如k近鄰、決策樹、樸素貝葉斯、支援向量機、迴歸等。
如果有大資料方面的問題,也可以諮詢我。
回覆列表
雖然題主問的是大資料的入門,但在我看來“大資料”就是資料科學的一個高階狀態。以下內容中除個別情況,我基本上都會使用“資料科學”這個概念。
資料科學並沒有一個獨立的學科體系,統計學,機器學習,資料探勘,資料庫,分散式計算,雲計算,資訊視覺化等技術或方法來對付資料。但從狹義上來看,我認為資料科學就是解決三個問題:
1. data pre-processing;
2. data interpretation; 3.data modeling and analysis.
這也就是我們做資料工作的三個大步驟:
1、原始資料要經過一連串收集、提取、清洗、整理等等的預處理過程,才能形成高質量的資料;2、我們想看看資料“長什麼樣”,有什麼特點和規律;3、按照自己的需要,比如要對資料貼標籤分類,或者預測,或者想要從大量複雜的資料中提取有價值的且不易發現的資訊,都要對資料建模,得到output。
這三個步驟未必嚴謹,每個大步驟下面可能依問題的不同也會有不同的小步驟,但按我這幾年的經驗來看,按照這個大思路走,資料一般不會做跑偏。
這樣看來,資料科學其實就是門複合型的技術,既然是技術就從程式語言談起吧,為了簡練,只說說R和Python。但既然是薦資料科學方面的書,我這裡就不提R/Python程式設計基礎之類的書了,直接上跟資料科學相關的。
1.R programming
如果只是想初步瞭解一下R語言已經R在資料分析方面的應用,那不妨就看看這兩本:
R in action:我的R語言大資料101。其實對於一個沒有任何程式設計基礎的人來說,一開始就學這本書,學習曲線可能會比較陡峭。但如果配合上一些輔助材料,如官方釋出的 R basics (http://cran.r-project.org/doc/contrib/usingR.pdf),stackoverflow上有tag-R的問題集(Newest "r" Questions),遇到複雜的問題可在上面搜尋,總會找到解決方案的。這樣一來,用這本書拿來入門學習也問題不大。而且這本書作者寫得也比較輕鬆,緊貼實戰。
Data analysis and graphics using R:使用R語言做資料分析的入門書。這本書的特點也是緊貼實戰,沒有過多地講解統計學理論,所以喜歡透過情境應用來學習的人應該會喜歡這本入門書。而且這本書可讀性比較強,也就是說哪怕你手頭沒電腦寫不了程式碼,有事沒事拿出這本書翻一翻,也能讀得進去。
但如果你先用R來從事實實在在的資料工作,那麼上面兩本恐怕不夠,還需要這些:
Modern applied statistics with S:這本書裡統計學的理論就講得比較多了,好處就是你可以用一本書既複習了統計學,又學了R語言。(S/Splus和R的關係就類似於Unix和Linux,所以用S教程學習R,一點問題都沒有)。
Data manipulation with R:這本書實務性很強,它教給你怎麼從不同格式的原始資料檔案裡讀取、清洗、轉換、整合成高質量的資料。當然和任何一本注重實戰的書一樣,本書也有豐富的真實資料或模擬資料供你練習。對於真正從事資料處理工作的人來說,這本書的內容非常重要,因為對於任何研究,一項熟練的資料預處理技能可以幫你節省大量的時間和精力。否則,你的研究總是要等待你的資料。
R Graphics Cookbook:想用R做視覺化,就用這本書吧。150多個recipes,足以幫你應付絕大多數型別的資料。以我現在極業餘的視覺化操作水平來看,R是最容易做出最漂亮的圖表的工具了。
An introduction to statistical learning with application in R:這本書算是著名的the element of statistical learning的姊妹篇,後者更注重統計(機器)學習的模型和演算法,而前者所涉及的模型和演算法原沒有後者全面或深入,但卻是用R來學習和應用機器學習的很好的入口。
A handbook of statistical analysis using R:這本書內容同樣非常紮實,很多統計學的學生就是用這本書來學習用R來進行統計建模的。
2.Python
Think Python,Think Stats,Think Bayes:這是Allen B. Downey寫的著名的Think X series三大卷。其實是三本精緻的小冊子,如果想快速地掌握Python在統計方面的操作,好好閱讀這三本書,認真做習題,答案連結在書裡有。這三本書學通了,就可以上手用Python進行基本的統計建模了。
Python For Data Analysis:作者是pandas的主要開發者,也正是Pandas使Python能夠像R一樣擁有dataframe的功能,能夠處理結構比較複雜的資料。這本書其實analysis講得不多,說成資料處理應該更合適。掌握了這本書,處理各種糟心的資料就問題不大了。
Introduction to Python for Econometrics, Statistics and Data Analysis:這本書第一章就告訴你要安裝Numpy, Scipy, Matplotlib, Pandas, IPython等等。然後接下來的十好幾章就是逐一介紹這幾個庫該怎麼用。很全面,但讀起來比較枯燥,可以用來當工具書。
Practical Data Analysis:這本書挺奇葩,貌似很暢銷,但作者把內容安排得東一榔頭西一棒子,什麼都講一點,但一個都沒講透。這本書可以作為我們學習資料分析的一個索引,看到哪塊內容有意思,就順著它這個藤去摸更多的瓜。
Python Data Visualization Cookbook:用Python做視覺化的教材肯定不少,我看過的也就這一本,覺得還不錯。其實這類書差別都不會很大,咬住一本啃下來就是王道。
3.Exploratory Data Analysis 和 Data Visualization
Exploratory Data Analysis:John Tukey寫於1977年的經典老教材,是這一領域的開山之作。如今EDA已經是統計學裡的重要一支,但當時還是有很多人對他的工作不屑一顧。可他愛資料,堅信資料可以以一種出人意料的方式呈現出來。正是他的努力,讓資料視覺化成為一門無比迷人的技術。但這本書不推薦閱讀了,內容略過時。要想完整地瞭解EDA,推薦下一本:
Exploratory Data Analysis with MATLAB:這本書雖然標題帶了個MATLAB,但實際上內容幾乎沒怎麼講MATLAB,只是每講一個方法的時候就列出對應的MATALB函式。這本書的重要之處在於,這是我讀過的講EDA最系統的一本書,除了對visualization有不輸於John Tucky的講解外,對於高維的資料集,透過怎樣的方法才能讓我們從中找到潛在的pattern,這本書也做了詳盡的講解。全書所以案例都有對應的MATALB程式碼,而且還提供了GUI(圖形使用者介面)。所以這本書學起來還是相當輕鬆愉悅的。
Visualize This:中譯本叫“鮮活的資料”,作者是個“超級資料迷”,建立了一個叫http://flowingdata.com的網頁展示他的資料視覺化作品,這本書告訴你該選擇什麼樣的視覺化工具,然後告訴你怎樣visualize關係型資料、時間序列、空間資料等,最後你就可以用資料講故事了。
4.Machine Learning & Data Mining
這一塊就不多說了,不是因為它不重要,而是因為它太太太重要。所以這一部分就推兩本書,都是”世界名著“,都比較難讀,需要一點點地啃。這兩本書拿下,基本就算是登堂入室了。其實作為機器學習的延伸和深化,機率圖模型(PGM)和深度學習(deep learning)同樣值得研究,特別是後者現在簡直火得不得了。但PGM偏難,啃K.Daphne那本大作實在太燒腦,也沒必要,而且在資料領域的應用也不算很廣。deep learning目前工業界的步子邁得比學術界的大,各個domain的應用如火如荼,但要有公認的好教材問世則還需時日,所以PGM和deep learning這兩塊就不薦書了。
The Element of Statistical Learning:要學機器學習,如果讓我只推薦一本書,我就推薦這本鉅著。Hastie、Tibshirani、Friedman這三位大牛寫書寫得太用心了,大廈建得夠高夠大,結構也非常嚴謹,而且很有前瞻性,納入了很多前沿的內容,而不僅僅是一部綜述性的教材。(圖表也做得非常漂亮,應該是用R語言的ggplot2做的。)這本書注重講解模型和演算法本身,所以需要具備比較紮實的數理基礎,啃起這本書來才不會太吃力。事實上掌握模型和演算法的原理非常重要。機器學習(統計學習)的庫現在已經非常豐富,即使你沒有完全搞懂某個模型或演算法的原理和過程,只要會用那幾個庫,機器學習也能做得下去。但你會發現你把資料代進去,效果永遠都不好。但是,當你透徹地理解了模型和演算法本身,你再呼叫那幾個庫的時候,心情是完全不一樣的,效果也不一樣。
Data Mining: Concepts and Techniques, by Jiawei Han and Micheline Kamber。資料探勘的教材汗牛充棟,之所以推薦這本韓家煒爺爺的,是因為雖然他這本書的出發點是應用,但原理上的內容也一點沒有落下,內容非常完整。而且緊跟時代,更新的很快,我看過的是第二版,就已經加進去了social network analysis這種當時的前沿內容。現在已經有第三版了,我還沒看過,但應該也加入了不少新內容。其實這本書並不難讀,只是篇幅較長,啃起來比較耗時。其實這兩本書裡單拎出來一塊內容可能又是幾本書的節奏,比如bayesian方法,再拿出兩三本書來講也不為過,我個人用到的比較多,而且也確實有不少好書。但並非是所有data scientist都要用到,所以這一塊就不再細說。
還有一些印象比較深刻的書:
Big Data Glossary:主要講解大資料處理技術及工具,內容涵蓋了NoSQL,MapReduce,Storage,Servers,NLP庫與工具包,機器學習工具包,資料視覺化工具包,資料清洗,序列化指南等等。總之,是一本辭典式的大資料入門指導。
Mining of Massive Datasets:這本書是斯坦福大學Web Mining的講義,裡面很多內容與韓家煒的Data Mining那本書重合,但這本書裡詳細地講了MapReduce的設計原理,PageRank(Google創業時期的核心排序演算法,現在也在不斷最佳化更新)講解得也比較詳細。
Developing Analytic Talent:作者是個從事了十幾年資料工作的geek,技術部落格寫得很有個人風格,寫的內容都比較偏門,通常只有具備相關資料處理經驗的人能體會出來,絲毫不照顧初學者的感受。比如他會談到當資料流更新太快時該怎麼辦,或者MapReduce在什麼時候不好用的問題,才不管你懂不懂相關基礎原理。所以這本書不太適合初學者閱讀。這本書其實是作者的部落格文章的集結,用how to become a data scientist的邏輯把他近幾年的部落格文章串聯了起來。
Past, Present and Future of Statistical Science:這本書是由COPSS(統計學社主席委員會,由國際各大統計學會的帶頭人組成)在50週年出版的一本紀念冊,裡面有50位統計學家每人分別貢獻出的一兩篇文章,有的回憶了自己當年如何走上統計學這條路,有的探討了一些統計學的根本問題,有的談了談自己在從事的前沿研究,有的則給年輕一代寫下了寄語。非常有愛的一本書。
5.其它資料
Harvard Data Science:這是H大的Data science線上課,我沒有修過,但口碑很好。這門課需要費用8千刀左右,比起華盛頓大學的4千刀的Data science線上課雖貴一倍,但比斯坦福的14千刀要便宜將近一半(而且斯坦福的更偏計算機)。如果想自學,早有好心人分享了slides: (https://drive.google.com/folderview?id=0BxYkKyLxfsNVd0xicUVDS1dIS0k&usp=sharing)和homeworks and solutions: (https://github.com/cs109/content)。
PyData:PyData是來自各個domain的用Python做資料的人每年舉行一次的聚會,期間會有各路牛人舉行一些規模不大的seminar或workshop,有好心人已經把video上傳到github,有興趣的去認領吧(DataTau/datascience-anthology-pydata · GitHub)。
6.工具
R/Python/MATLAB(必備):如果是做資料分析和模型開發,以我的觀察來看,使用這三種工具的最多。R生來就是一個統計學家開發的軟體,所做的事也自然圍繞統計學展開。MATLAB雖然算不上是個專業的資料分析工具,但因為很多人不是專業做資料的,做資料還是為了自己的domain expertise(特別是科學計算、訊號處理等),而MATLAB又是個強大無比的Domain expertise工具,所以很多人也就順帶讓MATLAB也承擔了資料處理的工作,雖然它有時候顯得效率不高。Python雖然不是做資料分析的專業軟體,但作為一個面向物件的高階動態語言,其開源的生態使Python擁有無比豐富的庫,Numpy, Scipy 實現了矩陣運算/科學計算,相當於實現了MATLAB的功能,Pandas又使Python能夠像R一樣處理dataframe,scikit-learn又實現了機器學習。
SQL(必備):雖然現在人們都說傳統的關係型資料庫如Oracle、MySQL越來越無法適應大資料的發展,但對於很多人來說,他們每天都有處理資料的需要,但可能一輩子都沒機會接觸TB級的資料。不管怎麼說,不論是用關係型還是非關係型資料庫,SQL語言是必須要掌握的技能,用什麼資料庫視具體情況而定。
Hadoop/Spark/Storm(可選):MapReduce是當前最著名也是運用最廣泛的分散式計算框架,由Google建立。Hadoop是基於MapReduce的框架建立起來的分散式計算系統,Spark更進一步,在MapReduce的思路上利用有向無環圖構建了RDD,這樣就減少了Map和Reduce之間傳遞的資料,所以非常適合反覆迭代計算的場景。至於儲存方面,他們之間的區別就是,Hadoop用硬碟儲存資料,Spark用記憶體儲存資料,Storm只接受實時資料流而不儲存資料。
OpenRefine(可選):Google開發的一個易於操作的資料清洗工具,可以實現一些基本的清洗功能。
Tableau(可選):一個可互動的資料視覺化工具,操作簡單,開箱即用。而且圖表都設計得非常漂亮。專業版1999美刀,終身使用。媒體和公關方面用得比較多。
Gephi(可選):跟Tableau類似,都是那種可互動的視覺化工具,不需要程式設計基礎,生成的圖表在美學和設計上也是花了心血的。更擅長複雜網路的視覺化。