我的數據科學教學生涯始于2013年第一次參加SoftwareCarpentry研討班。此后,就一直在從事這方面的教學工作。2019年,我有幸成為RStudio(現為PBC Posit)教育集團的一名實習生。那時,數據科學教育方興未艾。實習結束之后,我想將教學與醫學的結合作為我的博士學位論文選題。幸運的是,我認識學校的一位圖書管理員Andi Ogier,她把我介紹給了Anne M.Brown,Anne也對健康科學中的數據科學教學很感興趣。之后的故事大家都知道了。Anne成為了我的博士生導師,我和指導委員會的其他成員,包括Dave Higdon、Alex Hanlon和Nikki Lewis,一起研究醫學和生物醫學領域中的數據科學教育。本書第1版為我的學位論文研討班要講授哪些數據科學的相關內容奠定了基礎。本書第2版納入了我在學習和研究教育和教學法時學到的許多內容。
簡而言之,一定要交個圖書管理員做朋友,他的工作與數據之間聯系緊密。
2013年,我甚至對數據科學這個詞聞所未聞。當時我還在攻讀流行病學的MPH學位,對于本科專業背景為心理學和神經科學的我來說,t檢驗、方差分析以及線性回歸之外的各種統計學方法深深吸引了我。也正是在2013年秋天,我第一次參加了SoftwareCarpentry研討班,并擔任了MPH項目的定量方法(Quantitative Methods)課程(該課程是第一學期流行病學和生物統計學的一門綜合課)的助教,并第一次開始授課。自此,我便一直在從事數據科學領域的教學工作。
當年,我學習的第一門數據科學導論課程由Rachel Schutt博士、Kayur Patel博士和Jared Lander三位老師講授,回顧多年來走過的路程,感觸良多。三位老師打開了我的眼界。對我來說,之前那些貌似不可思議的事情都變得稀松平常,沒有做不到的,只有想不到的(盡管能做到的不一定是最好的)。數據科學的技術細節編碼方面是由Jared用R語言講授的。
當年,我一直想學R語言,Python和R語言之爭從未動搖過我的決心。一方面,我認為Python只是一種編程語言; 另一方面,我并不知道Python有大量的分析工具(從那時起我已經學會了很多工具,并取得了長足的進步)。在了解了SciPy堆棧和Pandas后,我認為它們就像橋梁一樣連通了我學到的Python知識,以及我在流行病學研究和數據科學的學習中獲得的知識。當精通R語言后,我發現其與Python有很多相似之處。我也意識到很多數據清理任務(以及常規的編程任務)都涉及思考如何得到所需的東西,剩下的基本都是語法問題而已。在進行數據分析時,最重要的是設計好分析的步驟,不要被編程細節所困擾。我用過很多種編程語言,從來不糾結于哪種語言更好。話雖如此,本書面向的是Python數據分析領域的新手。
在過去的幾年中,我認識了很多人,參加了很多活動,也學到了很多的技能,本書就是對這些年經驗的總結。其中,我學到的比較重要的一件事情(除了先要搞清楚問題到底是什么,以便用谷歌來搜索相關的Stack Overflow(IT問答網站,面向編程人員群體)頁面之外)是: 閱讀文檔非常必要。作為一個參與過協作課程并編寫過Python庫和R軟件包的人,我可以負責任地說,編寫文檔確實需要花費大量的時間和精力,這就是為什么整本書中不斷引用相關文檔頁面的原因。有些函數有非常多的參數,應用的場景也不相同,一一介紹是不現實的。如果本書過于關注這些細節,那么書名要改成Loading Data Into Python了。當然,隨著處理數據的增多、對各種數據結構越來越熟悉,你最終將會具備一定的預測能力。即使對之前從未見過的代碼,也可以合理地推斷出其執行結果。希望本書能為讀者提供一個堅實的基礎,助其自己進行探索,從而成為一個自學成才的學習者。
在撰寫本書的過程中,我遇到了很多人,也從他們身上學到了很多東西,其中很多都是關于最佳實踐的,比如編寫向量化語句以替代循環語句、測試代碼,以及組織項目目錄結構等。從實際的教學過程中我也學到了很多關于教學的知識,以教促學確實是學習新知識的最佳方法。在過去的幾年里,我學到的很多東西都是在我試圖弄清楚如何教別人時獲得的。一旦掌握了基礎知識,學習新內容就相對容易了。教與學的過程多次重復后,會驚訝于自己學會了很多,比如學會了用于谷歌搜索的很多術語,并能解讀Stack Overflow頁面的解答。很多高手也在搜索他人提出的問題。無論這是你學習的第幾種編程語言,希望本書都能為你提供一個堅實的基礎,為你搭建一座通往其他數據分析語言的橋梁。
本書結構
本書共分為五部分,還包括一系列的附錄。
第一部分
該部分基于真實的數據集介紹Pandas基礎知識。
第1章首先介紹如何使用Pandas加載數據集,并查看數據的行和列,還大致講解Python和Pandas的語法,最后給出若干具有啟發性的示例,展示Pandas的用途。
第2章深入探討Pandas的DataFrame和Series對象,還介紹布爾子集、刪除值以及導入和導出數據的不同方式。
第3章主要介紹使用Matplotlib、Seaborn和Pandas的繪圖方法以及如何創建探索性數據分析的繪圖。
第4章討論Hadley Wickham的論文《整潔數據》(Tidy Data),該論文涉及常見的數據重塑和清理問題。
第5章側重于介紹對數據應用函數的內容,這是一項重要的技能,涵蓋了許多編程主題。當需要擴展數據操作的規模時,了解.apply()的工作原理將有助于編寫并行和分布式代碼。
第二部分
該部分重點介紹加載數據后如何進一步處理數據。
第6章側重于數據集的合并,即要么將它們連接在一起,要么合并不同的數據。
第7章介紹規范化數據以更穩健地存儲數據。
第8章介紹.groupby()操作(即拆分應用組合)。這些強大的概念,如.apply(),通常是擴展數據所必需的,也是高效聚合、轉換或過濾數據的好方法。
第三部分
該部分涵蓋存儲在列中的數據類型。
第9章介紹數據缺失會引發的問題、如何創建數據以填充缺失數據,以及如何處理缺失數據,特別是當對這些數據進行計算時可能會出現的問題。
第10章介紹數據類型,以及如何在DataFrame列中轉換類型。
第11章介紹字符串操作,這是數據清理任務中經常遇到的問題,因為數據通常被編碼為文本。
第12章探討Pandas強大的日期和時間功能。
第四部分
在數據全部清洗完畢并準備就緒后,下一步就是擬合模型。模型不僅可用于預測、聚類和推斷,還可用于探索性的目的。該部分的目標不是講授統計學(這方面的書已經很多了),而是想展示這些模型的擬合方法,以及它們是如何與Pandas交互的。該部分內容對于使用其他編程語言進行模型擬合也頗具借鑒意義。
第13章的線性模型是一種較簡單的擬合模型。本章介紹如何使用statsmodels庫和Scikitlearn庫來擬合這些模型。
第14章的廣義線性模型,顧名思義,是更廣義上的一種線性模型。通過該模型我們可以用不同的響應變量來擬合模型,例如二元數據或計數數據。
第15章介紹生存模型,當出現數據刪失時需要用到它。
第16章,在擬合好核心模型之后需要進行模型診斷,對多個模型進行比較,并選出最佳模型。
第17章,當擬合的模型過于復雜或出現過擬合時,就要用到正則化技術。
第18章,當不知道數據中隱含的真實答案時可以使用聚類技術,但需要一種方法將相似的數據點聚類或進行分組。
第五部分
本書最后部分主要介紹Python的生態系統,并提供了一些額外的參考資料。
第19章簡單介紹Python的計算堆棧,并開啟了代碼性能和擴展的學習之路。
第20章提供一些額外的鏈接和參考資料。
附錄
可以將附錄視為Python編程的入門教程。雖然它們并不是Python的完整介紹,但各個附錄確實是對本書某些主題的有益補充。
附錄A為介紹性章節,提供了概念圖,以幫助分解概念并將其相互關聯。
附錄B~附錄J涵蓋與運行Python代碼相關的所有任務,從安裝Python到使用命令行執行腳本,再到組織代碼,還包括創建Python環境和安裝庫。
附錄K~附錄Y涵蓋與Python和Pandas相關的編程概念,是本書主要的補充參考。
附錄Z復制了R中的一些建模代碼,作為比較類似結果的參考。
如何閱讀本書
無論是Python新手還是經驗豐富的Python程序員,都建議從頭至尾閱讀整本書。擬將本書用作教材的讀者會發現,本書的章節安排很適合研討班或課堂教學。
對于初學者
對于初學者來說,建議先瀏覽附錄A~附錄J,因為這些附錄中講解了如何安裝Python并使其正常工作。完成這些步驟后,讀者就可以學習本書的主要內容了。前幾章在必要時均引用了相關附錄,并在開頭給出了概念圖和學習目標,有助于讀者了解該章要介紹的主要內容,同時指出了需提前閱讀的相關附錄。
對于經驗豐富的Python程序員
對于經驗豐富的Python程序員來說,前兩章的內容足以入門并掌握Pandas的語法,可以將本書其余的部分作為參考。前幾章開頭部分的學習目標指出了本章涵蓋的主題。第一部分中關于整潔數據的章節和第三部分的章節對數據操作特別有幫助。
對于培訓講師
對于培訓講師來說,若將本書用作教學參考可按書中順序來講授每一章。每章的教學時長約為45~60分鐘。本書在結構安排上盡量使各章不引用后續章節的內容,從而最大限度地減少學生的學擔但可以根據實際需要靈活調整章節的順序。
附錄A中的概念圖和前幾章中列出的學習目標有助于了解概念之間的關系。
設置
每個人的計算機設置都會有所不同,因此,要想獲得有關設置環境的最新說明可以訪問本書在GitHub的頁面,或者參考附錄B以獲取有關如何在計算機上安裝Python的信息。
獲取數據
獲取本書所有數據和代碼的最簡單方法是掃描下方二維碼。有關如何下載本書數據的最新說明可以在本書的存儲庫中找到,存儲庫及有關如何獲得本書的更詳細說明參見附錄B.3。
安裝Python
附錄G和附錄H分別給出了環境和安裝軟件包,可以從中找到如何設置Python的URL(Uniform Resource locator,URL,統一資源定位系統)和命令,以便編寫代碼。同樣,本書的存儲庫中始終包含最新的說明。
全書代碼