![]() ![]() |
零基礎(chǔ)入門Pandas—Python數(shù)據(jù)分析 ![]() 基于實(shí)用、易學(xué)的原則,從功能、使用、原理等多個維度對Pandas做了全方位的詳細(xì)講解。本書是Python數(shù)據(jù)分析入門書,每個概念都通過簡單實(shí)例來闡述,便于讀者理解與上手。具體內(nèi)容包括:Python及Pandas基礎(chǔ)知識,加載和查看數(shù)據(jù)集,Pandas的DataFrame對象和Series對象,使用matplotlib、seaborn和Pandas提供的繪圖方法為探索性數(shù)據(jù)分析作圖,連接與合并數(shù)據(jù)集,處理缺失數(shù)據(jù),清理數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)類型,處理字符串,應(yīng)用函數(shù),分組操作,擬合及評估模型,正則化方法與聚類技術(shù)等。 本書特色 我的數(shù)據(jù)科學(xué)教學(xué)生涯始于2013年第一次參加SoftwareCarpentry研討班。此后,就一直在從事這方面的教學(xué)工作。2019年,我有幸成為RStudio(現(xiàn)為PBC Posit)教育集團(tuán)的一名實(shí)習(xí)生。那時,數(shù)據(jù)科學(xué)教育方興未艾。實(shí)習(xí)結(jié)束之后,我想將教學(xué)與醫(yī)學(xué)的結(jié)合作為我的博士學(xué)位論文選題。幸運(yùn)的是,我認(rèn)識學(xué)校的一位圖書管理員Andi Ogier,她把我介紹給了Anne M.Brown,Anne也對健康科學(xué)中的數(shù)據(jù)科學(xué)教學(xué)很感興趣。之后的故事大家都知道了。Anne成為了我的博士生導(dǎo)師,我和指導(dǎo)委員會的其他成員,包括Dave Higdon、Alex Hanlon和Nikki Lewis,一起研究醫(yī)學(xué)和生物醫(yī)學(xué)領(lǐng)域中的數(shù)據(jù)科學(xué)教育。本書第1版為我的學(xué)位論文研討班要講授哪些數(shù)據(jù)科學(xué)的相關(guān)內(nèi)容奠定了基礎(chǔ)。本書第2版納入了我在學(xué)習(xí)和研究教育和教學(xué)法時學(xué)到的許多內(nèi)容。 簡而言之,一定要交個圖書管理員做朋友,他的工作與數(shù)據(jù)之間聯(lián)系緊密。 2013年,我甚至對數(shù)據(jù)科學(xué)這個詞聞所未聞。當(dāng)時我還在攻讀流行病學(xué)的MPH學(xué)位,對于本科專業(yè)背景為心理學(xué)和神經(jīng)科學(xué)的我來說,t檢驗(yàn)、方差分析以及線性回歸之外的各種統(tǒng)計(jì)學(xué)方法深深吸引了我。也正是在2013年秋天,我第一次參加了SoftwareCarpentry研討班,并擔(dān)任了MPH項(xiàng)目的定量方法(Quantitative Methods)課程(該課程是第一學(xué)期流行病學(xué)和生物統(tǒng)計(jì)學(xué)的一門綜合課)的助教,并第一次開始授課。自此,我便一直在從事數(shù)據(jù)科學(xué)領(lǐng)域的教學(xué)工作。 當(dāng)年,我學(xué)習(xí)的第一門數(shù)據(jù)科學(xué)導(dǎo)論課程由Rachel Schutt博士、Kayur Patel博士和Jared Lander三位老師講授,回顧多年來走過的路程,感觸良多。三位老師打開了我的眼界。對我來說,之前那些貌似不可思議的事情都變得稀松平常,沒有做不到的,只有想不到的(盡管能做到的不一定是最好的)。數(shù)據(jù)科學(xué)的技術(shù)細(xì)節(jié)編碼方面是由Jared用R語言講授的。 當(dāng)年,我一直想學(xué)R語言,Python和R語言之爭從未動搖過我的決心。一方面,我認(rèn)為Python只是一種編程語言; 另一方面,我并不知道Python有大量的分析工具(從那時起我已經(jīng)學(xué)會了很多工具,并取得了長足的進(jìn)步)。在了解了SciPy堆棧和Pandas后,我認(rèn)為它們就像橋梁一樣連通了我學(xué)到的Python知識,以及我在流行病學(xué)研究和數(shù)據(jù)科學(xué)的學(xué)習(xí)中獲得的知識。當(dāng)精通R語言后,我發(fā)現(xiàn)其與Python有很多相似之處。我也意識到很多數(shù)據(jù)清理任務(wù)(以及常規(guī)的編程任務(wù))都涉及思考如何得到所需的東西,剩下的基本都是語法問題而已。在進(jìn)行數(shù)據(jù)分析時,最重要的是設(shè)計(jì)好分析的步驟,不要被編程細(xì)節(jié)所困擾。我用過很多種編程語言,從來不糾結(jié)于哪種語言更好。話雖如此,本書面向的是Python數(shù)據(jù)分析領(lǐng)域的新手。 在過去的幾年中,我認(rèn)識了很多人,參加了很多活動,也學(xué)到了很多的技能,本書就是對這些年經(jīng)驗(yàn)的總結(jié)。其中,我學(xué)到的比較重要的一件事情(除了先要搞清楚問題到底是什么,以便用谷歌來搜索相關(guān)的Stack Overflow(IT問答網(wǎng)站,面向編程人員群體)頁面之外)是: 閱讀文檔非常必要。作為一個參與過協(xié)作課程并編寫過Python庫和R軟件包的人,我可以負(fù)責(zé)任地說,編寫文檔確實(shí)需要花費(fèi)大量的時間和精力,這就是為什么整本書中不斷引用相關(guān)文檔頁面的原因。有些函數(shù)有非常多的參數(shù),應(yīng)用的場景也不相同,一一介紹是不現(xiàn)實(shí)的。如果本書過于關(guān)注這些細(xì)節(jié),那么書名要改成Loading Data Into Python了。當(dāng)然,隨著處理數(shù)據(jù)的增多、對各種數(shù)據(jù)結(jié)構(gòu)越來越熟悉,你最終將會具備一定的預(yù)測能力。即使對之前從未見過的代碼,也可以合理地推斷出其執(zhí)行結(jié)果。希望本書能為讀者提供一個堅(jiān)實(shí)的基礎(chǔ),助其自己進(jìn)行探索,從而成為一個自學(xué)成才的學(xué)習(xí)者。
本書結(jié)構(gòu) 本書共分為五部分,還包括一系列的附錄。 第一部分 該部分基于真實(shí)的數(shù)據(jù)集介紹Pandas基礎(chǔ)知識。 第1章首先介紹如何使用Pandas加載數(shù)據(jù)集,并查看數(shù)據(jù)的行和列,還大致講解Python和Pandas的語法,最后給出若干具有啟發(fā)性的示例,展示Pandas的用途。 第2章深入探討Pandas的DataFrame和Series對象,還介紹布爾子集、刪除值以及導(dǎo)入和導(dǎo)出數(shù)據(jù)的不同方式。 第3章主要介紹使用Matplotlib、Seaborn和Pandas的繪圖方法以及如何創(chuàng)建探索性數(shù)據(jù)分析的繪圖。 第4章討論Hadley Wickham的論文《整潔數(shù)據(jù)》(Tidy Data),該論文涉及常見的數(shù)據(jù)重塑和清理問題。 第5章側(cè)重于介紹對數(shù)據(jù)應(yīng)用函數(shù)的內(nèi)容,這是一項(xiàng)重要的技能,涵蓋了許多編程主題。當(dāng)需要擴(kuò)展數(shù)據(jù)操作的規(guī)模時,了解.apply()的工作原理將有助于編寫并行和分布式代碼。 第二部分 該部分重點(diǎn)介紹加載數(shù)據(jù)后如何進(jìn)一步處理數(shù)據(jù)。 第6章側(cè)重于數(shù)據(jù)集的合并,即要么將它們連接在一起,要么合并不同的數(shù)據(jù)。 第7章介紹規(guī)范化數(shù)據(jù)以更穩(wěn)健地存儲數(shù)據(jù)。 第8章介紹.groupby()操作(即拆分應(yīng)用組合)。這些強(qiáng)大的概念,如.apply(),通常是擴(kuò)展數(shù)據(jù)所必需的,也是高效聚合、轉(zhuǎn)換或過濾數(shù)據(jù)的好方法。 第三部分 該部分涵蓋存儲在列中的數(shù)據(jù)類型。 第9章介紹數(shù)據(jù)缺失會引發(fā)的問題、如何創(chuàng)建數(shù)據(jù)以填充缺失數(shù)據(jù),以及如何處理缺失數(shù)據(jù),特別是當(dāng)對這些數(shù)據(jù)進(jìn)行計(jì)算時可能會出現(xiàn)的問題。 第10章介紹數(shù)據(jù)類型,以及如何在DataFrame列中轉(zhuǎn)換類型。 第11章介紹字符串操作,這是數(shù)據(jù)清理任務(wù)中經(jīng)常遇到的問題,因?yàn)閿?shù)據(jù)通常被編碼為文本。 第12章探討Pandas強(qiáng)大的日期和時間功能。 第四部分 在數(shù)據(jù)全部清洗完畢并準(zhǔn)備就緒后,下一步就是擬合模型。模型不僅可用于預(yù)測、聚類和推斷,還可用于探索性的目的。該部分的目標(biāo)不是講授統(tǒng)計(jì)學(xué)(這方面的書已經(jīng)很多了),而是想展示這些模型的擬合方法,以及它們是如何與Pandas交互的。該部分內(nèi)容對于使用其他編程語言進(jìn)行模型擬合也頗具借鑒意義。 第13章的線性模型是一種較簡單的擬合模型。本章介紹如何使用statsmodels庫和Scikitlearn庫來擬合這些模型。 第14章的廣義線性模型,顧名思義,是更廣義上的一種線性模型。通過該模型我們可以用不同的響應(yīng)變量來擬合模型,例如二元數(shù)據(jù)或計(jì)數(shù)數(shù)據(jù)。 第15章介紹生存模型,當(dāng)出現(xiàn)數(shù)據(jù)刪失時需要用到它。 第16章,在擬合好核心模型之后需要進(jìn)行模型診斷,對多個模型進(jìn)行比較,并選出最佳模型。 第17章,當(dāng)擬合的模型過于復(fù)雜或出現(xiàn)過擬合時,就要用到正則化技術(shù)。 第18章,當(dāng)不知道數(shù)據(jù)中隱含的真實(shí)答案時可以使用聚類技術(shù),但需要一種方法將相似的數(shù)據(jù)點(diǎn)聚類或進(jìn)行分組。 第五部分 本書最后部分主要介紹Python的生態(tài)系統(tǒng),并提供了一些額外的參考資料。 第19章簡單介紹Python的計(jì)算堆棧,并開啟了代碼性能和擴(kuò)展的學(xué)習(xí)之路。 第20章提供一些額外的鏈接和參考資料。 附錄 可以將附錄視為Python編程的入門教程。雖然它們并不是Python的完整介紹,但各個附錄確實(shí)是對本書某些主題的有益補(bǔ)充。 附錄A為介紹性章節(jié),提供了概念圖,以幫助分解概念并將其相互關(guān)聯(lián)。 附錄B~附錄J涵蓋與運(yùn)行Python代碼相關(guān)的所有任務(wù),從安裝Python到使用命令行執(zhí)行腳本,再到組織代碼,還包括創(chuàng)建Python環(huán)境和安裝庫。 附錄K~附錄Y涵蓋與Python和Pandas相關(guān)的編程概念,是本書主要的補(bǔ)充參考。 附錄Z復(fù)制了R中的一些建模代碼,作為比較類似結(jié)果的參考。 如何閱讀本書 無論是Python新手還是經(jīng)驗(yàn)豐富的Python程序員,都建議從頭至尾閱讀整本書。擬將本書用作教材的讀者會發(fā)現(xiàn),本書的章節(jié)安排很適合研討班或課堂教學(xué)。 對于初學(xué)者 對于初學(xué)者來說,建議先瀏覽附錄A~附錄J,因?yàn)檫@些附錄中講解了如何安裝Python并使其正常工作。完成這些步驟后,讀者就可以學(xué)習(xí)本書的主要內(nèi)容了。前幾章在必要時均引用了相關(guān)附錄,并在開頭給出了概念圖和學(xué)習(xí)目標(biāo),有助于讀者了解該章要介紹的主要內(nèi)容,同時指出了需提前閱讀的相關(guān)附錄。 對于經(jīng)驗(yàn)豐富的Python程序員 對于經(jīng)驗(yàn)豐富的Python程序員來說,前兩章的內(nèi)容足以入門并掌握Pandas的語法,可以將本書其余的部分作為參考。前幾章開頭部分的學(xué)習(xí)目標(biāo)指出了本章涵蓋的主題。第一部分中關(guān)于整潔數(shù)據(jù)的章節(jié)和第三部分的章節(jié)對數(shù)據(jù)操作特別有幫助。 對于培訓(xùn)講師 對于培訓(xùn)講師來說,若將本書用作教學(xué)參考可按書中順序來講授每一章。每章的教學(xué)時長約為45~60分鐘。本書在結(jié)構(gòu)安排上盡量使各章不引用后續(xù)章節(jié)的內(nèi)容,從而最大限度地減少學(xué)生的學(xué)擔(dān)但可以根據(jù)實(shí)際需要靈活調(diào)整章節(jié)的順序。 附錄A中的概念圖和前幾章中列出的學(xué)習(xí)目標(biāo)有助于了解概念之間的關(guān)系。 設(shè)置 每個人的計(jì)算機(jī)設(shè)置都會有所不同,因此,要想獲得有關(guān)設(shè)置環(huán)境的最新說明可以訪問本書在GitHub的頁面,或者參考附錄B以獲取有關(guān)如何在計(jì)算機(jī)上安裝Python的信息。 獲取數(shù)據(jù) 獲取本書所有數(shù)據(jù)和代碼的最簡單方法是掃描下方二維碼。有關(guān)如何下載本書數(shù)據(jù)的最新說明可以在本書的存儲庫中找到,存儲庫及有關(guān)如何獲得本書的更詳細(xì)說明參見附錄B.3。 安裝Python 附錄G和附錄H分別給出了環(huán)境和安裝軟件包,可以從中找到如何設(shè)置Python的URL(Uniform Resource locator,URL,統(tǒng)一資源定位系統(tǒng))和命令,以便編寫代碼。同樣,本書的存儲庫中始終包含最新的說明。 全書代碼 第一部分引言 第1章Pandas DataFrame基礎(chǔ)知識 1.1引言 1.2加載第一個數(shù)據(jù)集 1.3查看列、行和單元格 1.3.1根據(jù)列名選擇列并進(jìn)行子集化 1.3.2對行進(jìn)行子集化 1.3.3根據(jù)行號子集化行 1.3.4混合 1.3.5子集化行和列 1.4分組和聚合計(jì)算 1.4.1分組方式 1.4.2分組頻率計(jì)數(shù) 1.5基本繪圖 本章小結(jié) 第2章Pandas的數(shù)據(jù)結(jié)構(gòu) 2.1創(chuàng)建數(shù)據(jù) 2.1.1創(chuàng)建Series 2.1.2創(chuàng)建DataFrame 2.2Series 2.2.1類似于ndarray的Series 2.2.2布爾型子集: Series 2.2.3自動對齊并向量化(廣播) 2.3DataFrame 2.3.1DataFrame的組成 2.3.2布爾子集化DataFrames 2.3.3自動對齊和向量化(廣播) 2.4更改Series和DataFrame 2.4.1添加列 2.4.2直接更改列 2.4.3使用.assign()方法修改列 2.4.4刪除值 2.5導(dǎo)出和導(dǎo)入數(shù)據(jù) 2.5.1Pickle 2.5.2逗號分隔值 2.5.3Excel 2.5.4Feather文件格式 2.5.5Arrow 2.5.6Dictionary 2.5.7JavaScript對象表示法 2.5.8其他數(shù)據(jù)的輸出類型 本章小結(jié) 第3章繪圖入門 3.1為什么要將數(shù)據(jù)可視化 3.2Matplotlib基礎(chǔ) 3.2.1圖對象和坐標(biāo)軸子圖 3.2.2圖形剖析 3.3使用Matplotlib繪制統(tǒng)計(jì)圖 3.3.1單變量數(shù)據(jù) 3.3.2雙變量數(shù)據(jù) 3.3.3多變量數(shù)據(jù) 3.4Seaborn 3.4.1單變量數(shù)據(jù) 3.4.2雙變量數(shù)據(jù) 3.4.3多變量數(shù)據(jù) 3.4.4分面 3.4.5Seaborn的樣式和主題 3.4.6如何瀏覽Seaborn文檔 3.4.7下一代Seaborn接口 3.5Pandas繪圖方法 3.5.1直方圖 3.5.2密度圖 3.5.3散點(diǎn)圖 3.5.4蜂巢圖 3.5.5箱線圖 本章小結(jié) 第4章整潔數(shù)據(jù) 4.1包含值而非變量的列 4.1.1固定一列 4.1.2固定多列 4.2包含多個變量的列 4.2.1單獨(dú)拆分和添加列 4.2.2在單個步驟中進(jìn)行拆分和組合 4.3行與列中的變量 本章小結(jié) 第5章函數(shù)的應(yīng)用 5.1函數(shù)入門 5.2函數(shù)應(yīng)用基礎(chǔ) 5.2.1Series的.apply()方法 5.2.2DataFrame的.apply()方法 5.3向量化函數(shù) 5.3.1使用NumPy 5.3.2使用Numba庫 5.4Lambda函數(shù) 本章小結(jié)
第6章數(shù)據(jù)組合 6.1組合數(shù)據(jù)集 6.2連接 6.2.1查看DataFrame的組成 6.2.2添加行 6.2.3添加列 6.2.4不同索引下的連接操作 6.3跨多張表的觀測單元 6.3.1使用循環(huán)加載多個文件 6.3.2使用列表解析加載多個文件 6.4合并多個數(shù)據(jù)集 6.4.1一對一合并 6.4.2多對一合并 6.4.3多對多合并 6.4.4使用assert語句進(jìn)行檢查 本章小結(jié) 第7章數(shù)據(jù)規(guī)范化 7.1一張表中的多個觀測單元 7.2數(shù)據(jù)規(guī)范化過程 本章小結(jié) 第8章分組操作: 分割應(yīng)用組合 8.1聚合 8.1.1基本的單變量分組聚合 8.1.2Pandas內(nèi)置的聚合方法 8.1.3聚合函數(shù) 8.1.4同時傳入多個函數(shù) 8.1.5在.agg()方法中使用dict 8.2轉(zhuǎn)換 8.2.1zscore示例 8.2.2缺失值示例 8.3過濾器 8.4pandas.core.groupby.DataFrameGroupBy對象 8.4.1分組 8.4.2涉及多個變量的分組計(jì)算 8.4.3選擇分組 8.4.4遍歷分組 8.4.5多個分組 8.4.6平鋪結(jié)果 8.5使用多級索引 本章小結(jié)
第9章缺失數(shù)據(jù) 9.1何為NaN值 9.2缺失值從何而來 9.2.1加載數(shù)據(jù) 9.2.2合并數(shù)據(jù) 9.2.3用戶輸入值 9.2.4重建索引 9.3處理缺失數(shù)據(jù) 9.3.1查找和統(tǒng)計(jì)缺失數(shù)據(jù) 9.3.2清理缺失數(shù)據(jù) 9.3.3缺失值計(jì)算 9.4Pandas內(nèi)置的NA缺失值 本章小結(jié) 第10章數(shù)據(jù)類型 10.1常見的數(shù)據(jù)類型 10.2類型轉(zhuǎn)換 10.2.1轉(zhuǎn)換為字符串對象 10.2.2轉(zhuǎn)換為數(shù)值類型 10.3分類數(shù)據(jù) 10.3.1轉(zhuǎn)換為category類型 10.3.2操作分類數(shù)據(jù) 本章小結(jié) 第11章字符串和文本數(shù)據(jù) 11.1字符串 11.1.1子集化和字符串切片 11.1.2獲取字符串的最后一個字符 11.2字符串方法 11.3更多字符串方法 11.3.1.join()方法 11.3.2.splitlines()方法 11.4字符串格式化 11.4.1格式化的文字字符串 11.4.2格式化數(shù)字 11.5正則表達(dá)式 11.5.1匹配模式 11.5.2記住RegEx模式 11.5.3查找模式 11.5.4替換模式 11.5.5編譯模式 11.6regex庫 本章小結(jié) 第12章日期和時間 12.1Python的datetime對象 12.2轉(zhuǎn)換為datetime 12.3加載包含日期的數(shù)據(jù) 12.4提取日期的各個部分 12.5日期運(yùn)算和timedeltas 12.6datetime方法 12.7獲取股票數(shù)據(jù) 12.8基于日期子集化數(shù)據(jù) 12.8.1DatetimeIndex對象 12.8.2TimedeltaIndex對象 12.9日期范圍 12.9.1頻率 12.9.2偏移量 12.10日期變動 12.11重新采樣 12.12時區(qū) 12.13arrow庫 本章小結(jié)
第13章線性回歸 13.1簡單線性回歸 13.1.1使用statsmodels庫 13.1.2使用Scikitlearn庫 13.2多元回歸 13.2.1使用statsmodels庫 13.2.2使用Scikitlearn庫 13.3包含分類變量的模型 13.3.1statsmodels中的分類變量 13.3.2Scikitlearn中的分類變量 13.4帶Transformer Pipelines的Scikitlearn中的onehot編碼 本章小結(jié) 第14章廣義線性模型 14.1邏輯回歸 14.1.1使用statsmodels庫 14.1.2使用Scikitlearn庫 14.1.3注意Scikitlearn默認(rèn)值 14.2泊松回歸 14.2.1使用statsmodels 14.2.2負(fù)二項(xiàng)回歸 14.3更多的GLM 本章小結(jié) 第15章生存分析 15.1生存數(shù)據(jù) 15.2KaplanMeier曲線 15.3Cox比例風(fēng)險模型 本章小結(jié) 第16章模型診斷 16.1比較單個模型 16.1.1殘差 16.1.2QQ圖 16.2比較多個模型 16.2.1比較線性模型 16.2.2比較GLM模型 16.3K折交叉驗(yàn)證 本章小結(jié) 第17章正則化 17.1為什么要正則化 17.2LASSO回歸 17.3嶺回歸 17.4彈性網(wǎng) 17.5交叉驗(yàn)證 本章小結(jié) 第18章聚類 18.1K均值聚類 18.2層次聚類 18.2.1Complete聚類算法 18.2.2Single聚類算法 18.2.3Average聚類算法 18.2.4Centroid聚類算法 18.2.5Ward聚類算法 18.2.6手動設(shè)置閾值 本章小結(jié)
附錄A概念圖 附錄B安裝和設(shè)置 B.1安裝Python B.1.1Anaconda B.1.2Miniconda B.1.3卸載Anaconda或Miniconda B.1.4Pyenv B.2安裝Python包 B.3下載本書數(shù)據(jù) 附錄C命令行 C.1安裝 C.1.1Windows系統(tǒng) C.1.2macOS C.1.3Linux系統(tǒng) C.2基礎(chǔ) 附錄D項(xiàng)目模板 附錄EPython代碼編寫工具 E.1命令行和文本編輯器 E.2Python和iPython E.3Jupyter E.4集成開發(fā)環(huán)境 附錄F工作目錄 附錄G環(huán)境 G.1Conda環(huán)境 G.2Pyenv Pipenv 附錄H安裝程序包 H.1使用Conda安裝Python庫 H.2更新程序包 附錄I導(dǎo)入庫 附錄J代碼風(fēng)格 附錄K容器: 列表、元組和dict K.1列表 K.2元組 K.3dict 附錄L切片值 附錄M循環(huán) 附錄N推導(dǎo)式 附錄O函數(shù) O.1默認(rèn)參數(shù) O.2任意參數(shù) O.2.1*args O.2.2**kwargs 附錄P范圍和生成器 附錄Q多重賦值 附錄Rnumpy.ndarray 附錄S類 附錄TCopyWarning設(shè)置 T.1修改數(shù)據(jù)子集 T.2替換值 T.3更多的資源 附錄U方法鏈 附錄V計(jì)時代碼 附錄W字符串格式化 W.1C語言風(fēng)格 W.2字符串格式化: .format()方法 W.3格式化數(shù)字 附錄X條件語句(ifelifelse) 附錄Y紐約ACS邏輯回歸示例 Y.1準(zhǔn)備數(shù)據(jù) Y.2使用Scikitlearn庫 附錄Z復(fù)制R語言中的結(jié)果 Z.1線性回歸 Z.2邏輯回歸 Z.3泊松回歸
你還可能感興趣
我要評論
|