本書從實用的角度較為全面地展現了數據科學的主要內容,并結合大量的實際項目案例,利用R語言詳細地講解了數據項目的開發過程和關鍵技術。本書包括三個部分共11章的內容,主要介紹了數據科學項目的處理過程、選擇合適的建模方法,也討論了bagging算法、隨機森林、廣義加性模型、核和支持向量機等高級建模方法。此外,還討論了文檔編制和結果部署,以及如何向組織內不同的受眾展現項目結果。本書適合作為高等院校高年級本科生和研究生及從事數據管理與分析工程技術人員的主要參考書。
前 言
本書正是我們在自學數據科學時所希望得到的那本書,我們可從中了解哪些主題和技能的集合構成了數據科學。它也是我們希望發給客戶和同行的書。本書的目的是講解統計學、計算機科學和機器學習等學科中對于數據科學極為重要的內容。
數據科學利用了來自實驗科學、統計學、報表技術、分析技術、可視化技術、商務智能、專家系統、機器學習、數據庫、數據倉庫、數據挖掘和大數據技術等各個領域的工具,正是因為我們需要如此多的工具,因此需要一個能夠涵蓋全部內容的學科。數據科學本身與這些工具和技術的區別,在于數據科學的核心目標是將有效的決策支持模型部署到實際生產環境中。
我們的目標是從實用的、面向實踐的角度來展現數據科學,通過在真實數據上的可運行的練習題,我們設法達到這一目標,全書給出了10個重要的數據集。我們認為這種方式能舉例說明我們到底想要講授什么,還能演示說明在真實世界項目中所必需的全部預備步驟。
貫穿全書,我們討論實用的統計學和機器學習概念,給出具體的代碼示例,探索如何與非專業人士開展合作以及如何向他們講解。我們期待,即使你不能在這些主題中發現新意,這本書也能夠在你還未想到的其他一兩個主題上閃出一道靈光。
關于本書本書討論數據科學的概念和方法:數據科學領域主要使用統計學、機器學習和計算機科學的成果來建立預測模型。由于數據科學具有寬泛性,所以有必要對其展開一些討論并對本書所涉及的方法加以界定。
什么是數據科學統計學家William S. Cleveland將數據科學定義為一個比統計學自身大得多的跨學科領域。而我們定義數據科學為一種管理過程,該過程能夠將假設和數據轉換成可應用的預測。典型的預測分析目標例子有:預測誰將在選舉中獲勝、什么樣的商品放在一起銷售更好、哪些貸款將被拖欠或者什么網上廣告將被點擊等。數據科學家負責獲取數據、管理數據、選擇建模技術、編寫代碼以及驗證結果。
由于數據科學領域涉及眾多的學科,所以它通常進行“二次調用”。我們遇到的許多優秀數據科學家原本是程序設計者、統計學家、業務分析師或科技工作者,他們在原有知識儲備的基礎上再多學一些技術,就成為了優秀的數據科學家。這一觀察促成了本書的寫法:通過具體地介紹在真實數據上執行的各個通用的項目開發步驟,來介紹數據科學家所需的實用技能。對于這些開發步驟,有的你將比我們懂得更多,有的你會更快地掌握,有的還需要你進一步深入研究。
數據科學的大多數理論基礎來源于統計學,但正如我們所知,數據科學強烈地受到技術學和軟件工程方法學的影響,并且在計算機科學和信息技術所驅動的各個子領域中得到了極大的發展。下面通過列舉一些著名的案例來體會數據科學的若干工程風格:
Amazon的商品推薦系統Google的廣告評估系統LinkedIn的人脈推薦系統Twitter的趨勢話題Walmart的消費者需求預測系統上述系統有許多共同特點:
所有系統均建立在大規模數據集基礎之上。它們并非一定屬于大數據領域,不過如果僅使用小數據集的話,這些系統將無法成功。為了管理數據,這些系統需要源自計算機科學的概念:數據庫理論、并行程序設計理論、流數據技術以及數據倉庫。
這些系統大多是在線或實時運行的。當數據科學團隊部署一個決策程序或打分程序時,目的是要用于直接做出決策或直接向許多終端用戶展示結果,而非只是產生單一的報表或分析結果。生產部署階段是校正結果的最后機會,因為數據科學家不會長期留在現場來解決存在的缺陷。
所有系統均允許出錯,但出錯率的上限是不容討價還價的。
這些系統不需考慮因果關系,如果它們能發現有用的相關性,就算作是成功的。它們不必非要從結果中正確地找出導致該結果的原因。
本書講授構建這樣的系統時所需要的原理和工具,包括:通用的任務、開發步驟和成功地交付這樣的項目所使用的工具。我們強調整個工作過程—如何進行項目管理,如何與其他人合作,以及如何對非專業人士展現結果。
導讀路線圖本書涵蓋如下內容:
如何對數據科學處理過程本身進行管理。數據科學家必須有能力來衡量和跟蹤他們自己的項目。
如何應用在數據科學項目中常用的最強的統計和機器學習技術?蓪⒈緯醋饕幌盗杏忻鞔_工作目標的練習,需使用程序設計語言R去實現真實的數據科學工作。
如何向各種利益相關者進行結果展現,包括管理人員、用戶、部署團隊等。必須用具體的術語向混合類型的受眾解釋你的工作,并且使用他們所熟悉的語言來表達,而不要堅持使用專門領域的技術術語。對于數據科學項目的結果展現,你無法繞開這一障礙。
我們使用循序漸進的方式來安排本書的內容,其詳細內容組織如下:
第一部分描述數據科學處理過程的主要目標和技術,強調協作和數據。
第1章討論作為一名數據科學家如何開展工作,第2章介紹如何將數據裝載到R系統,并演示如何啟動R系統開始工作。
第3章講授首先要在數據中尋找什么,以及用于刻畫數據特征和理解數據的重要步驟。在做數據分析之前,必須準備好數據,另外必須修正數據中存在的問題,第4章介紹如何處理這些問題。
第二部分從刻畫數據特征轉到如何構建有效的預測模型上來。第5章提供將業務需求映射到技術評價和建模技術的初始詞典。
第6章講授如何通過記憶化訓練數據構建模型。這種記憶化模型雖然概念上簡單卻非常有效。第7章進展到具有顯式加性結構的模型問題,這種功能結構增加了進行有益的內插值和外插值,以及辨識重要變量和效果的能力。
第8章描述當項目中沒有可用的帶標簽的訓練數據時,還能夠做什么。第9章介紹用于改進模型預測性能和修正具體建模問題的高級建模方法。
第三部分從建模問題再回到處理過程上來,展示如何交付建模結果。第10章演示如何管理、文檔編制和部署模型。第11章介紹如何針對不同的受眾給出有效的展現方法。
附錄部分包括關于R系統、統計學和其他可用工具的補充技術細節。附錄A介紹如何安裝R系統、如何啟動工作以及如何運用其他工具(如SQL)。附錄B是關于一些重要統計學思想的最新資料。附錄C討論附加的工具和研究思路。參考文獻提供參考文獻資料并介紹今后的研究機遇。
書中的學習材料是根據目標和任務來組織的,相關的工具在需要時才被引入。每一章的主題均以一個帶有相關數據集的代表性項目為背景展開討論。在學習全書的過程中,你將接觸10個實質性項目。本書提供的所有數據集均保存在本書的GitHub資料庫中(https://github.com/WinVector/zmPDSwR),你可以下載整個資料庫(這是一個zip壓縮文件,GitHub服務之一),然后將該庫復制到你的機器上,也可以根據需要只復制單個文件。
致讀者為學習和運行本書的例子,你需要熟悉一些R語言、統計學以及SQL數據庫(某些例子涉及)的知識,建議你手頭準備一些好的入門教材。在學習這本書之前,你不必是一位R語言、統計學和SQL方面的專家,但應該能夠很輕松地自學本書提及卻不能完整講解的內容。
對于R語言,我們推薦參考Robert Kabacoff的《R in Action,2nd Edition》(www.manning.com/kabacoff2/)以及與本書相關的網站Quick-R(www.statmethods.net)。對于統計學,我們推薦參考David Freedman、Robert Pisani和Roger Purves的《Statistics,4th Edition》。對于SQL,我們推薦參考Joe Celko的《SQL for Smarties,4th Edition》。
總體上,我們所期望的理想讀者應該是這樣的:
對工作示例感興趣。通過學習這些示例,你將至少學會一種方法,能夠完成一個項目的所有步驟。你必須樂于嘗試簡單的腳本編寫和程序設計以充分利用這本書。對于我們給出的每個示例,你應該嘗試改變它,并且預料到會有某些失。愕母淖儾蛔嘈В┖湍承┏晒Γ愕母淖儍炗谑纠
對R語言的統計系統有所了解并且樂于用R語言編寫短的腳本和程序。除Kabacoff的書(《R in Action》)外,我們在參考文獻中還推薦了幾本好書。我們用R語言解決具體的問題。為了理解正在進行什么處理,你需要運行那些示例,并且閱讀額外的文檔以理解那些在本書中沒有展示的變種命令。
對概率、均值、標準差和顯著性等基本的統計學概念有一些經驗。我們在需要時會引入這些概念,對于工作示例,你可能還需要閱讀一些額外的參考文獻。我們給出某些術語的定義,并提供某些主題的參考文獻和合適的博客,但我們認為在某些主題上你需要自己在互聯網上進行搜索。
一臺安裝有R系統和其他工具的計算機(OS X、Linux或Windows),以及用于下載有關工具和數據集的互聯網。我們強烈地建議你進行示例學習,用R系統help()命令學習各種方法,并且跟蹤學習某些補充的參考文獻。
書中沒有什么本書不是一本R語言的使用手冊。我們使用R語言具體地展示數據科學項目的重要步驟,通過示例講授足夠的R語言知識,但不熟悉R語言的讀者需要查閱附錄A以及許多優秀的R語言書籍和使用指南。
本書不是一系列案例研究集合。我們更強調方法和技術,在本書中給出案例數據和代碼僅僅是為了確保我們給出的建議是具體的、可用的。
本書不是一本大數據方面的書。我們認為大多數有意義的數據科學問題出現在數據庫級別或文件級別等可管理的大小規模上(通常比內存更大,但還未大到難以管理的程度)。有價值的數據是能夠將測量到的條件映射到依賴于它們的結果上,但產生這些數據往往是代價高昂的,因而在實際應用中通常會限制這些數據的規模。而對于某些報表生成、數據挖掘和自然語言處理任務,才需要進入大數據領域。
本書不是一本理論方面的書。對于任何一種技術,我們不會強調其絕對嚴格的理論。數據科學的目標應該是支持靈活性,提供很多可用的好技術。并且,當某個技術能夠用于解決手頭問題時,深入地研究該技術。此外,由于要直接使用R語言代碼,所以在本書正文中使用R代碼符號,而沒用美觀的編輯公式。
本書也不是給機器學習多面手使用的。我們只強調那些已經用R語言實現了的方法。對于每種方法,我們介紹其操作的理論并表明該方法有何優點。我們一般不討論如何實現這些方法(即便這種實現是容易的),因為這些信息是隨處可得的。
編碼約定及下載本書是以示例驅動方式敘述的,我們在GitHub資料庫(https://github.com/WinVector/zmPDSwR)中提供了準備好的示例數據,它們用R語言進行編碼并且鏈接到初始源,你可以在線查詢該庫或者將其復制到你自己的機器上。由于從zip壓縮文件中復制代碼比從本書的電子版中復制和粘貼更容易,我們也提供了產生所有結果的程序代碼以及在書中出現的幾乎所有的圖表(作為一個zip文件)(https://github.com/WinVector/zmPDSwR/raw/master/CodeExamples.zip)。你也可以從Manning出版社的網站(www.manning.com/PracticalDataSciencewithR)下載這些代碼。
我們鼓勵你在閱讀本書時盡力實現這些R代碼示例,即便在討論數據科學中相當抽象的概念時,我們也會用具體的數據和代碼來展示示例,在每章均給出了指向該章內容所參考的具體數據集的鏈接。
在本書中,代碼均采用特殊字體書寫,以將它們與正常文字區別開來,具體的變量和值采用類似的格式,抽象的數學符號則采用斜體。R是一種數學語言,許多短語都用到了上述兩種字體。在我們的示例中,任何提示符(如“>”和“$”)都可以忽略掉。內嵌結果用R的注釋符“#”作為前綴來標識。
軟硬件要求為學習示例,需要安裝有Linux、OS X或Windows操作系統的計算機,并且安裝了相關的軟件(安裝方法在附錄A給出),我們推薦的所有軟件都是完全跨平臺的、免費使用的、開源的。
建議至少安裝如下軟件:
R系統:http://cran.r-project.org。
各種來自CRAN的程序包(由R自身使用install.packages()命令安裝并使用library()命令激活)。
版本控制工具Git:http://git-scm.com。
RStudio:一個集成了編輯器、執行和繪圖的開發環境—http://www.rstudio.com。
支持系統命令的bash shell,它嵌入在Linux和OS X系統中,能夠通過安裝Cygwin (http://www.cygwin.com)添加到Windows系統。我們不寫任何腳本,所以對于一個經驗豐富的Windows shell用戶,如果能將我們的bash命令轉換成對應的Windows命令,也可以不安裝Cygwin。
關于封面插圖本書英文版的封面圖片題為“1703年的中國女子服飾”。該插圖是從Thomas Jefferys于1757年至1772年在倫敦出版的《各國古今服飾大全(共4卷)》中得到的,其扉頁上說明這些都是手工著色的銅版畫,用阿拉伯樹膠加固。Thomas Jefferys(1719~1771)被稱作“國王喬治三世時代的地理學家”。他是一名英國繪圖師,是當時頂級的地圖供應商。他為政府和其他公務團體制作和印刷地圖,生產了世界各地、特別是北美地區的商業地圖和地圖集。作為一名繪圖師,他對其曾勘查和繪圖地區的服飾習俗也感興趣,這些服飾均出色地展示在這部4卷本的服飾大全中。
在18世紀,著迷于遙遠的世界并為了愉悅而去旅行還是件新事物,類似這樣的服飾大全很受歡迎,因為它們能夠將其他國家的風土人情介紹給遠行的實際旅行者和足不出戶的空想旅行家。Jefferys卷中各種各樣的繪圖生動地展示了幾百年前世界各國的獨特性,F在,著裝標準發生了變化,在那個時代不同國家和地區之間存在的豐富多彩的差異性已經變得模糊不清,常常難以將一個地區與另一個地區的居民通過服飾區分開來;蛟S,從樂觀角度來看這個問題,我們已經將文化和視覺的多樣性轉換為形形色色的個體生活—或者是一種更多形式的、有趣的知識技術型生活。
在這個很難將兩本不同計算機書籍區分開來的時代,Manning出版社根據Jefferys在3個世紀前的圖畫所重現的國家習俗的豐富多樣性,設計了計算機系列叢書的封面,以贊美計算機行業的創造性和主動性。
致謝感謝所有閱讀過本書草稿并提出意見的評論者及同行等,尤其是Aaron Colcord、Aaron Schumacher、Ambikesh Jayal、Bryce Darling、Dwight Barry、Fred Rahmanian、 Hans Donner、Jeelani Basha、Justin Fister、Kostas Passadis博士、Leo Polovets、Marius Butuc、 Nathanael Adams、Nezih Yigitbasi、Pablo Vaselli、Peter Rabinovitch、Ravishankar Rajagopalan、Rodrigo Abreu、Romit Singhai、Sampath Chaparala和Zekai Otles。他們的意見、質詢和修改大大地改善了這本書的質量。特別感謝George Gaines,他在這本書出版之前對原稿進行了全面的技術審核。
特別感謝開發編輯Cynthia Kane,感謝她在照料我們寫作過程中給予的有益建議和表現出的無比耐心。同樣的感謝送給Benjamin Berg、Katie Tennant、Kevin Sullivan以及Manning出版公司的其他編輯們,他們竭盡全力,消去了書中的粗糙痕跡,剔除了書中的技術瑕疵。
此外,還要感謝我們的同行David Steier、UC Berkeley 信息科學學院的Anno Saxenian教授、Doug Tygar以及所有其他有意使用本書作為教材的教師。
還要感謝Jim Porzak,他邀請作者之一John Mount到Bay Area R Users Group做演講。他作為本書的熱情支持者,還為本書撰寫了序言。在我們疲勞、沮喪甚至懷疑我們為什么要承擔這一艱苦任務的日子里,他的關注不斷地提醒我們:人們需要我們正在做的這件事,也需要我們做這件事的方法。沒有他的鼓勵,這本書將難以完成。