面對(duì)新數(shù)據(jù)集時(shí)面臨的最大挑戰(zhàn)之一就是知道從哪里開(kāi)始以及應(yīng)該關(guān)注什么。能夠快速匯總成百上千的行和列可以節(jié)省大量時(shí)間和精力。數(shù)據(jù)透視表是您可以用來(lái)實(shí)現(xiàn)此目的的簡(jiǎn)單工具,它可以幫助您以查詢的速度對(duì)數(shù)據(jù)進(jìn)行切片,過(guò)濾和分組,并以視覺(jué)上有吸引力的方式表示信息。
數(shù)據(jù)透視表有什么用?
您可能已經(jīng)熟悉Excel中的數(shù)據(jù)透視表的概念,該概念在1994年由商標(biāo)名稱PivotTable引入。使用此工具,用戶可以自動(dòng)對(duì)一個(gè)表中存儲(chǔ)的數(shù)據(jù)進(jìn)行排序,計(jì)數(shù),總計(jì)或平均。在下圖中,我們使用了數(shù)據(jù)透視表功能來(lái)快速匯總Titanic數(shù)據(jù)集。下面較大的表顯示了數(shù)據(jù)集的前30行,較小的表是我們創(chuàng)建的數(shù)據(jù)透視表。
左側(cè)的數(shù)據(jù)透視表根據(jù)Sex和Survived列對(duì)數(shù)據(jù)進(jìn)行了分組。結(jié)果,此表顯示了每種性別在不同生存狀態(tài)中所占的百分比(0::未生存,1::生存)。這使我們能夠迅速看到女性比男性擁有更好的生存機(jī)會(huì)。右側(cè)的表格也使用該Survived列,但是這次數(shù)據(jù)按分組Class。
介紹我們的數(shù)據(jù)集:《世界幸福報(bào)告》
在上面的示例中,我們使用了Excel,但是大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表將演示內(nèi)置熊貓函數(shù)內(nèi)置的功能pivot_table。我們將使用《世界幸福報(bào)告》,該報(bào)告是有關(guān)全球幸福狀況的調(diào)查。該報(bào)告按其幸福等級(jí)對(duì)150多個(gè)國(guó)家/地區(qū)進(jìn)行排名,自2012年以來(lái)幾乎每年都會(huì)發(fā)布。我們將使用2015年,2016年和2017年收集的數(shù)據(jù),如果您想了解的話可以下載。沿。我們正在運(yùn)行python 3.6和pandas 0.19。
我們可能要回答的一些有趣的問(wèn)題是:
1)世界上最幸福和最不開(kāi)心的國(guó)家和地區(qū)是?
2)幸福會(huì)受到地區(qū)的影響嗎?
3)在過(guò)去三年中,幸福感分?jǐn)?shù)是否發(fā)生了顯著變化?
讓我們導(dǎo)入數(shù)據(jù)并快速瀏覽一下:
每個(gè)國(guó)家/地區(qū)的Happiness Score收入是通過(guò)將表格中的其他七個(gè)變量相加得出的。這些變量中的每一個(gè)都揭示了人口加權(quán)平均得分,范圍從0到10,隨時(shí)間推移進(jìn)行追蹤,并與其他國(guó)家進(jìn)行比較。
這些變量是:
1)Economy:人均實(shí)際GDP
2)Family: 社會(huì)支持
3)Health:健康的預(yù)期壽命
4)Freedom:自由選擇生活
5)Trust:對(duì)腐敗的看法
6)Generosity:慷慨的看法
7)Dystopia:將每個(gè)國(guó)家/地區(qū)與假設(shè)國(guó)家/地區(qū)進(jìn)行比較,該國(guó)家/地區(qū)代表每個(gè)關(guān)鍵變量的最低國(guó)家平均水平,并與殘留誤差一起用作回歸基準(zhǔn)
每個(gè)國(guó)家/地區(qū)都將Happiness Score確定自己的Happiness Rank身份,這是該國(guó)家/地區(qū)在特定年份中的相對(duì)位置。例如,第一行表示瑞士在2015年的幸福分?jǐn)?shù)為7.587,位居最幸福的國(guó)家。瑞士排名第一,僅次于冰島,得分為7.561。丹麥在2015年排名第三,依此類(lèi)推。有趣的是,西歐在2015年的前八名中排名七。
我們將集中在決賽上Happiness Score以演示數(shù)據(jù)透視表的技術(shù)方面。
該描述()方法表明,Happiness Rank范圍從1到158,這意味著調(diào)查的國(guó)家中某一年的數(shù)量最多為158。值得注意的是,Happiness Rank原本類(lèi)型int。它在此處顯示為浮點(diǎn)數(shù)的事實(shí)意味著我們NaN在此列中有值(我們也可以通過(guò)count僅等于470 的行(而不是數(shù)據(jù)集中的495行)來(lái)確定此值)。
該Year列沒(méi)有任何缺失值。首先,因?yàn)樗跀?shù)據(jù)集中顯示為int,但也顯示為-總數(shù)為Year495,即我們數(shù)據(jù)集中的行數(shù)。通過(guò)將的count值Year與其他列進(jìn)行比較,似乎可以預(yù)期每列中有25個(gè)缺失值(YearVS中為495,其他所有列中為470)。
通過(guò)Year和對(duì)數(shù)據(jù)進(jìn)行分類(lèi)Region
熊貓的有趣之pivot_table處在于,您只需要一行代碼就可以在數(shù)據(jù)上獲得另一種觀點(diǎn)。大多數(shù)pivot_table參數(shù)使用默認(rèn)值,因此必須添加的唯一必需參數(shù)是data和index。盡管不是強(qiáng)制性的,但value在下一個(gè)示例中我們還將使用參數(shù)。
1)data 不言自明–這是您要使用的DataFrame
2)index是您要對(duì)數(shù)據(jù)進(jìn)行分組的列,分組器,數(shù)組(或上一個(gè)列表)。它將顯示在索引列中(如果要傳遞列表,則顯示在列中)
3)values(可選)是您要匯總的列。如果您未指定此選項(xiàng),則該函數(shù)將匯總所有數(shù)字列。
讓我們首先看一下輸出,然后解釋該表是如何產(chǎn)生的:
通過(guò)傳遞Year作為index參數(shù),我們選擇將數(shù)據(jù)分組為Year。輸出是數(shù)據(jù)透視表,該數(shù)據(jù)透視表顯示Yearas index和Happiness Scoreas 的三個(gè)不同值values。值得注意的是,聚合默認(rèn)值是平均值(或平均值),因此Happiness Score列中顯示的值是所有國(guó)家/地區(qū)的年度平均值。該表顯示所有國(guó)家/地區(qū)的平均值在2016年最高,目前是過(guò)去三年中的最低水平。
這是有關(guān)如何創(chuàng)建數(shù)據(jù)透視表的詳細(xì)圖表:
接下來(lái),我們將該Region列用作index:
像Happiness Score上面一樣,在數(shù)據(jù)透視表中的列中顯示的數(shù)字是平均值,但這次是所記錄的所有年份(2015、2016、2017)的平均值。通過(guò)此顯示,可以更輕松地查看Australia and New Zealand具有最高平均分的產(chǎn)品,而North America其排名緊隨其后。有趣的是,盡管我們從讀取的數(shù)據(jù)中獲得了最初的印象,但在計(jì)算過(guò)去三年的平均值時(shí)Western Europe,該數(shù)據(jù)Western Europe實(shí)際上排在第三位,該數(shù)據(jù)顯示在大多數(shù)頂部。排名最低的區(qū)域是Sub-Saharan Africa,緊隨其后的是Southern Asia。
創(chuàng)建多索引數(shù)據(jù)透視表
您可能曾經(jīng)使用groupby()過(guò)某些數(shù)據(jù)透視表功能(我們之前已經(jīng)演示了如何使用groupby()分析數(shù)據(jù))。但是,pivot_table()內(nèi)置函數(shù)提供了直接的參數(shù)名稱和默認(rèn)值,可以幫助簡(jiǎn)化諸如多索引之類(lèi)的復(fù)雜過(guò)程。
為了將數(shù)據(jù)按不止一列進(jìn)行分組,我們要做的就是傳遞列名列表。讓我們通過(guò)Region和對(duì)數(shù)據(jù)進(jìn)行分類(lèi)Year。
這些示例還揭示了數(shù)據(jù)透視表的名稱來(lái)源:它允許您旋轉(zhuǎn)或旋轉(zhuǎn)匯總表,并且這種旋轉(zhuǎn)使我們對(duì)數(shù)據(jù)有了不同的認(rèn)識(shí)??梢院芎玫貛椭焖佾@得寶貴見(jiàn)解的觀點(diǎn)。
這是查看數(shù)據(jù)的一種方法,但是我們可以使用columns參數(shù)來(lái)獲得更好的顯示:
columns是您希望將數(shù)據(jù)分組依據(jù)的列,分組器,數(shù)組或上一個(gè)列表。使用它會(huì)水平分散不同的值。
使用Year作為Columns參數(shù)將顯示的不同值year,并使顯示效果更好,如下所示:
使用可視化數(shù)據(jù)透視表 plot()
如果要查看我們創(chuàng)建的上一個(gè)數(shù)據(jù)透視表的外觀,只需plot()在pivot_table函數(shù)調(diào)用的末尾添加即可(您還需要導(dǎo)入相關(guān)的繪圖庫(kù))。
視覺(jué)表示有助于揭示差異很小。話雖如此,這也表明位于美國(guó)的兩個(gè)地區(qū)的幸福感等級(jí)都將持續(xù)下降。
使用以下數(shù)據(jù)處理數(shù)據(jù) aggfunc
到目前為止,我們一直使用平均值來(lái)獲取有關(guān)數(shù)據(jù)的見(jiàn)解,但還需要考慮其他重要值。該aggfunc參數(shù)的實(shí)驗(yàn)時(shí)間:
aggfunc(可選)接受您要在組中使用的功能或功能列表(默認(rèn)值:)numpy.mean。如果傳遞了函數(shù)列表,則生成的數(shù)據(jù)透視表將具有層次結(jié)構(gòu)列,其頂級(jí)是函數(shù)名稱。
讓我們添加每個(gè)區(qū)域的中位數(shù),最小值,最大值和標(biāo)準(zhǔn)偏差。這可以幫助我們?cè)u(píng)估平均值的準(zhǔn)確性,以及它是否真的可以代表真實(shí)情況。
看起來(lái)有些地區(qū)的極端價(jià)值可能會(huì)影響我們的平均水平,而不是我們希望的那樣。例如,Middle East and Northern Africa區(qū)域具有較高的標(biāo)準(zhǔn)偏差,因此我們可能要?jiǎng)h除極值。讓我們看看每個(gè)區(qū)域要計(jì)算多少個(gè)值。這可能會(huì)影響我們所看到的表示形式。例如,Australia and new Zealand標(biāo)準(zhǔn)偏差非常低,并且在過(guò)去三年中排名最高,但是我們也可以假設(shè)它們僅占兩個(gè)國(guó)家/地區(qū)的比例。
應(yīng)用自定義函數(shù)刪除異常值
pivot_table允許您傳遞自己的自定義聚合函數(shù)作為參數(shù)。您可以使用lambda函數(shù),也可以創(chuàng)建一個(gè)函數(shù)。讓我們計(jì)算給定年份中每個(gè)區(qū)域的平均國(guó)家/地區(qū)數(shù)量。我們可以使用lambda函數(shù)輕松完成此操作,如下所示:
具有最低標(biāo)準(zhǔn)偏差的兩個(gè)排名最高的區(qū)域僅僅占兩個(gè)國(guó)家。Sub-Saharan Africa另一方面,具有最低的Happiness score,但它占43個(gè)國(guó)家/地區(qū)的百分比。有趣的下一步是從計(jì)算中刪除極值,以查看排名是否發(fā)生重大變化。讓我們創(chuàng)建一個(gè)僅計(jì)算介于0.25分位數(shù)和0.75分位數(shù)之間的值的函數(shù)。我們將使用此函數(shù)作為一種方法來(lái)計(jì)算每個(gè)區(qū)域的平均值,并檢查排名是否保持不變。
消除異常值主要影響了具有更多國(guó)家的區(qū)域,這是有道理的。我們可以看到Western Europe(每年平均接受調(diào)查的21個(gè)國(guó)家/地區(qū))排名有所提高。不幸的是,Sub-Saharan Africa當(dāng)我們剔除異常值時(shí),(每年接受調(diào)查的平均39個(gè)國(guó)家/地區(qū))獲得的排名甚至更低。
使用字符串操作進(jìn)行分類(lèi)
到目前為止,我們已經(jīng)根據(jù)原始表中的類(lèi)別對(duì)數(shù)據(jù)進(jìn)行了分組。但是,我們可以搜索類(lèi)別中的字符串以創(chuàng)建我們自己的組。例如,按大洲查看結(jié)果將很有趣。我們可以通過(guò)查找包含Asia,Europe等的區(qū)域名稱來(lái)執(zhí)行此操作。為此,我們可以先將數(shù)據(jù)透視表分配給變量,然后添加過(guò)濾器:
讓我們來(lái)看看結(jié)果Europe:
差異表明,兩個(gè)歐洲地區(qū)的幸福感得分差異較大。在大多數(shù)情況下,除去異常值會(huì)使得分更高,但在東亞則不然。
如果要從多個(gè)列中提取特定值,則最好使用df.query該方法,因?yàn)榍耙环N方法不適用于條件化多索引。例如,我們可以選擇查看非洲的特定年份和特定區(qū)域。
在此示例中,差異很小,但是一個(gè)有趣的練習(xí)是比較前幾年的信息,因?yàn)樵撜{(diào)查自2012年以來(lái)都有報(bào)告。
處理丟失的數(shù)據(jù)
我們已經(jīng)介紹了迄今為止最強(qiáng)大的參數(shù),pivot_table因此,如果您在自己的項(xiàng)目中使用此方法進(jìn)行實(shí)驗(yàn),則已經(jīng)可以從中受益匪淺。話雖如此,快速瀏覽其余參數(shù)(它們都是可選的并具有默認(rèn)值)很有用。首先要談的是缺失值。
1)dropna是boolean類(lèi)型,用于指示您不想包括所有條目都是完整的列NaN(默認(rèn)值:True)
2)fill_value 是標(biāo)量類(lèi)型,用于選擇一個(gè)值來(lái)替換缺少的值(默認(rèn)值:無(wú))。
我們沒(méi)有所有條目都在的列NaN,但是值得一提的是,如果我們這樣做,pivot_table則會(huì)默認(rèn)根據(jù)dropna定義將其刪除。
我們一直在根據(jù)默認(rèn)設(shè)置pivot_table對(duì)待NaN。該fill_value默認(rèn)值是None因此,這意味著我們沒(méi)有在我們的數(shù)據(jù)集替換缺失值。為了證明這一點(diǎn),我們需要生成一個(gè)帶有NaN值的數(shù)據(jù)透視表。我們可以將Happiness Score每個(gè)區(qū)域劃分為三個(gè)分位數(shù),并檢查有多少個(gè)國(guó)家屬于這三個(gè)分位數(shù)(希望至少一個(gè)分位數(shù)中有缺失值)。
為此,我們將使用qcut(),它是內(nèi)置的熊貓函數(shù),可讓您將數(shù)據(jù)拆分為任意數(shù)量的分位數(shù)。例如,指定pd.qcut(data["Happiness Score"], 4)將導(dǎo)致四個(gè)分位數(shù):
1)0-25%
2)25%-50%
3)50%-75%
4)75%-100%
沒(méi)有特定分位數(shù)的國(guó)家/地區(qū)顯示NaN。這不是理想的,因?yàn)榈扔贜aN的計(jì)數(shù)不會(huì)提供任何有用的信息。顯示起來(lái)比較容易混淆0,因此讓我們NaN使用fill_value以下數(shù)字替換為零:
添加總行數(shù)/列數(shù)
最后兩個(gè)參數(shù)都是可選的,并且對(duì)于改善顯示效果最有用:
1)margins是布爾類(lèi)型,允許您添加all行/列,例如小計(jì)/總計(jì)(默認(rèn)為False)
2)margins_name 這是字符串類(lèi)型,并接受頁(yè)邊距為T(mén)rue時(shí)將包含總計(jì)的行/列的名稱(默認(rèn)為“全部”)
讓我們總結(jié)一下
如果您正在尋找一種從不同角度檢查數(shù)據(jù)的方法,那么pivot_table答案便是。它易于使用,對(duì)數(shù)值和分類(lèi)值都很有用,并且可以用一行代碼獲得結(jié)果。
如果您喜歡研究這些數(shù)據(jù),并且有興趣進(jìn)一步調(diào)查,那么我們建議您添加前幾年的調(diào)查結(jié)果,并且/或者將其他列與國(guó)家/地區(qū)信息(例如貧困,恐怖,失業(yè)等)結(jié)合使用。請(qǐng)隨時(shí)分享您的信息筆記本,祝您學(xué)習(xí)愉快!
讓我們使用這些將總計(jì)添加到我們的上一張表中。
讓我們總結(jié)一下
如果您正在尋找一種從不同角度檢查數(shù)據(jù)的方法,那么pivot_table答案便是。它易于使用,對(duì)數(shù)值和分類(lèi)值都很有用,并且可以用一行代碼獲得結(jié)果。
如果您喜歡研究這些數(shù)據(jù),并且有興趣進(jìn)一步調(diào)查,那么我們建議您添加前幾年的調(diào)查結(jié)果,并且/或者將其他列與國(guó)家/地區(qū)信息(例如貧困,恐怖,失業(yè)等)結(jié)合使用。請(qǐng)隨時(shí)分享您的信息筆記本,祝您學(xué)習(xí)愉快!
填寫(xiě)下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽(tīng)!怕錢(qián)不夠?可先就業(yè)掙錢(qián)后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc