1. 程式人生 > >R資料科學(中文完整版).pdf

R資料科學(中文完整版).pdf

 

下載地址

資料科學是一門激動人心的學科,它可以將原始資料轉化為認識、見解和知識。本書的目標是幫助你學習使用R 語言中最重要的資料科學工具。讀完本書後,你將掌握R 語言的精華,並能夠熟練使用多種工具來解決各種資料科學難題。

你將學到什麼

資料科學是一個極其廣闊的領域,僅靠一本書是不可能登堂入室的。本書的目標是教會你使用最重要的資料科學工具。在一個典型的資料科學專案中,需要的工具模型大體如下圖所示。

首先,你必須將資料匯入R。這實際上就是讀取儲存在檔案、資料庫或Web API 中的資料,再載入到R 的資料框中。如果不能將資料匯入R,那麼資料科學就根本無從談起。

匯入資料後,就應該對資料進行整理。資料整理就是將資料儲存為一致的形式,以滿足其所在資料集在語義上的要求。簡而言之,如果資料是整潔的,那麼每列都是一個變數,每行都是一個觀測。整潔的資料非常重要,因為一致的資料結構可以讓你將工作重點放在與資料有關的問題上,而不用再費盡心思地將資料轉換為各種形式以適應不同的函式。

一旦擁有了整潔的資料,通常下一步就是對資料進行轉換。資料轉換包括選取出感興趣的觀測(如居住在某個城市裡的所有人,或者去年的所有資料)、使用現有變數建立新變數(如根據距離和時間計算出速度),以及計算一些摘要統計量(如計數或均值)。資料整理和資料轉換統稱為資料處理。 一旦使用需要的變數完成了資料整理,那麼生成知識的方式主要有兩種:視覺化與建模。 這兩種方式各有利弊,相輔相成。因此,所有實際的資料分析過程都要在這兩種方式間多次重複。

視覺化本質上是人類活動。良好的視覺化會讓你發現意料之外的現象,或對資料提出新的問題。你還可以從良好的視覺化中意識到自己提出了錯誤的問題,或者需要收集不同的資料。視覺化能夠帶給你驚喜,但不要期望過高,因為畢竟還是需要人來對其進行解釋。

模型是彌補視覺化缺點的一種工具。如果已經將問題定義得足夠清晰,那麼你就可以使用一個模型來回答問題。因為模型本質上是一種數學工具或計算工具,所以它們的擴充套件性一 般非常好。即使擴充套件性出現問題,購買更多計算機也比僱用更多聰明的人便宜!但是每個 模型都有前提假設,而且模型本身不會對自己的前提假設提出疑問,這就意味著模型本質上不能給你帶來驚喜。

資料科學的最後一個步驟就是溝通。對於任何資料分析專案來說,溝通絕對是一個極其重 要的環節。如果不能與他人交流分析結果,那麼不管模型和視覺化讓你對資料理解得多麼透徹,這都是沒有任何實際意義的。

圍繞在這些技能之外的是程式設計。程式設計是貫穿資料科學專案各個環節的一項技能。資料科學 家不一定是程式設計專家,但掌握更多的程式設計技能總是有好處的,因為這樣你就能夠對日常任務進行自動處理,並且非常輕鬆地解決新的問題。

你將在所有的資料科學專案中用到這些工具,但對於多數專案來說,這些工具還不夠。這大致符合 80/20 定律:你可以使用從本書中學到的工具來解決每個專案中 80% 的問題,但你還需要其他工具來解決其餘 20% 的問題。我們將在本書中為你提供資源,讓你能夠學到更多的技能。

本書的組織結構

前面對資料科學工具的描述大致是按照我們在分析中使用它們的順序來組織的(儘管你肯 定會多次使用它們)。然而,根據我們的經驗,這並不是學習它們的最佳方式,具體原因 如下。

• 從資料匯入和資料整理開始學習並不是最佳方式,因為對於匯入和整理資料來說,80% 的時間是乏味和無聊的,其餘 20% 的時間則是詭異和令人沮喪的。在學習一項新技術時, 這絕對是一個糟糕的開始!相反,我們將從資料視覺化和資料轉換開始,此時的資料已經匯入並且是整理完畢的。這樣一來,當匯入和整理自己的資料時,你就會始終保持高 昂的鬥志,因為你知道這種痛苦終有回報。

• 有些主題最好結合其他工具來解釋。例如,如果你已經瞭解視覺化、資料整理和程式設計,那麼我們認為你會更容易理解模型是如何工作的。

• 程式設計工具本身不一定很有趣,但它們確實可以幫助你解決更多非常困難的問題。在本書 的中間部分,我們會介紹一些程式設計工具,它們可以與資料科學工具結合起來以解決非常 有趣的建模問題。

我們儘量在每一章中使用同一種模式:先給出一些引人入勝的示例,以便你大體瞭解這一章 的內容,然後再深入細節。本書的每一節都配有習題,以幫助你實踐所學到的知識。雖然跳 過這些習題是個非常有誘惑力的想法,但使用真實問題進行練習絕對是最好的學習方式。

本書未包含的內容

本書並未涉及一些重要主題。我們深信,重要的是將注意力堅定地集中在最基本的內容上, 這樣你就可以儘快入門並開展實際工作。這也就是說,本書不會涵蓋每一個重要主題。

大資料

本書主要討論那些小規模的、能夠駐留在記憶體中的資料集。這是開始學習資料科學的正確方式,因為只有處理過小資料集,你才能處理大資料集。你從本書中學到的工具可以輕鬆地處理幾百兆位元組的資料,處理 1~2 GB 的資料也不會有什麼大問題。如果你的日常工作是處理更大的資料(如 10~100 GB),那麼你應該更多地學習一下 data.table(https://github."target="_blank">https://github.</a>com/Rdatatable/data.table)。本書不會介紹 data.table,因為它的介面太過簡潔,幾乎沒有語言提示,這使得學習起來很困難。但是如果你需要處理大資料,為了獲得性能上的回報,多付出一些努力來學習它還是值得的。

如果你的資料比這還大,那麼就需要仔細思考一下了,這個大資料問題是否其實就是一個小資料問題。雖然整體資料非常大,但回答特定問題所需要的資料通常較小。你可以找出一個子集、子樣本或者摘要資料,該資料既適合在記憶體中處理,又可以回答你感興趣的問題。此時的挑戰就是如何找到合適的小資料,這通常需要多次迭代。

另外一種可能是,你的大資料問題實際上就是大量的小資料問題。每一個問題都可以在記憶體中處理,但你有數百萬個這樣的問題。舉例來說,假設你想為資料集中的每個人都擬合一個模型。如果只有 10 人或 100 人,那這是小菜一碟,但如果有 100 萬人,情況就完全不同了。好在每個問題都是獨立於其他問題的(這種情況有時稱為高度並行,embarrassingly parallel),因此你只需要一個可以將不同資料集傳送到不同計算機上進行處理的系統(如 Hadoop 或 Spark)即可。如果已經知道如何使用本書中介紹的工具來解決獨立子集的問題,那麼你就可以學習一下新的工具(比如 sparklyr、rhipe 和 ddr)來解決整個資料集的問題。

Python、Julia以及類似的語言

在本書中,你不會學到有關 Python、Julia 以及其他用於資料科學的程式語言的任何內容。這並不是因為我們認為這些工具不好,它們都很不錯!實際上,多數資料科學團隊都會使用多種語言,至少會同時使用 R 和 Python。

但是,我們認為最好每次只學習並精通一種工具。如果你潛心研究一種工具,那麼會比同時泛泛地學習多個工具掌握得更快。這並不是說你只應該精通一種工具,而是說每次專注於一件事情時,通常你會進步得更快。在整個職業生涯中,你都應該努力學習新事物,但是一定要在充分理解原有知識後,再去學習感興趣的新知識。

我們認為 R 是你開始資料科學旅程的一個非常好的起點,因為它從根本上說就是一種用來支援資料科學的環境。R 不僅僅是一門程式語言,它還是進行資料科學工作的一種互動式環境。為了支援互動性,R 比多數同類語言靈活得多。雖然會導致一些缺點,但這種靈活性的一大好處是,可以非常容易地為資料科學過程中的某些環節量身定製語法。這些微型語言有助於你從資料科學家的角度來思考問題,還可以在你的大腦和計算機之間建立流暢的交流方式。

非矩形資料

本書僅關注矩形資料。矩形資料是值的集合,集合中的每個值都與一個變數和一個觀測相關。很多資料集天然地不符合這種規範,比如影象、聲音、樹結構和文字。但是矩形資料框架在科技與工業領域是非常普遍的。我們認為它是開始資料科學旅途的一個非常好的起點。

假設驗證

資料分析可以分為兩類:假設生成和假設驗證(有時稱為驗證性分析)。無須掩飾,本書的重點就在於假設生成,或者說是資料探索。我們將對資料進行深入研究,並結合專業知識生成多種有趣的假設來幫助你對資料的行為方式作出解釋。你可以對這些假設進行非正式的評估,憑藉自己的懷疑精神從多個方面向資料發起挑戰。

假設驗證與假設生成是互補的。假設驗證比較困難,原因如下。

•你需要一個精確的數學模型來生成可證偽的預測,這通常需要深厚的統計學修養。

•為了驗證假設,每個觀測只能使用一次。一旦使用觀測的次數超過了一次,那麼就回到了探索性分析。這意味著,若要進行假設驗證,你需要“預先註冊”(事先擬定好)自己的分析計劃,而且看到資料後也不能改變計劃。在本書的第四部分中,我們將討論一些相關的策略,你可以使用它們讓假設驗證變得更容易。

經常有人認為建模是用來進行假設驗證的工具,而視覺化是用來進行假設生成的工具。這種簡單的二分法是錯誤的:模型經常用於資料探索;只需稍作處理,視覺化也可以用來進行假設驗證。核心區別在於你使用每個觀測的頻率:如果只用一次,那麼就是假設驗證;如果多於一次,那麼就是資料探索。

準備工作

為了最有效地利用本書,我們對你的知識結構做了一些假設。你應該具有一定的數學基礎,如果有一些程式設計經驗也會有所幫助。如果從來沒有編寫過程式,那麼你應該學習一下Garrett 所著的《R 語言入門與實踐》1,它可以作為本書的有益補充。

為了執行本書中的程式碼,你需要 4 個工具:R、RStudio、一個稱為 tidyverse 的 R 包集合,以及另外幾個 R 包。包是可重用 R 程式碼的基本單位,它們包括可重用的函式、描述函式使用方法的文件以及示例資料。