旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習(xí)/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表

時間:2020-09-27來源:lb577.com點擊量:作者:Sissi
時間:2020-09-27點擊量:作者:Sissi


  面對新數(shù)據(jù)集時面臨的最大挑戰(zhàn)之一就是知道從哪里開始以及應(yīng)該關(guān)注什么。能夠快速匯總成百上千的行和列可以節(jié)省大量時間和精力。數(shù)據(jù)透視表是您可以用來實現(xiàn)此目的的簡單工具,它可以幫助您以查詢的速度對數(shù)據(jù)進行切片,過濾和分組,并以視覺上有吸引力的方式表示信息。
 

  數(shù)據(jù)透視表有什么用?
 

  您可能已經(jīng)熟悉Excel中的數(shù)據(jù)透視表的概念,該概念在1994年由商標名稱PivotTable引入。使用此工具,用戶可以自動對一個表中存儲的數(shù)據(jù)進行排序,計數(shù),總計或平均。在下圖中,我們使用了數(shù)據(jù)透視表功能來快速匯總Titanic數(shù)據(jù)集。下面較大的表顯示了數(shù)據(jù)集的前30行,較小的表是我們創(chuàng)建的數(shù)據(jù)透視表。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  左側(cè)的數(shù)據(jù)透視表根據(jù)Sex和Survived列對數(shù)據(jù)進行了分組。結(jié)果,此表顯示了每種性別在不同生存狀態(tài)中所占的百分比(0::未生存,1::生存)。這使我們能夠迅速看到女性比男性擁有更好的生存機會。右側(cè)的表格也使用該Survived列,但是這次數(shù)據(jù)按分組Class。
 

  介紹我們的數(shù)據(jù)集:《世界幸福報告》
 

  在上面的示例中,我們使用了Excel,但是大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表將演示內(nèi)置熊貓函數(shù)內(nèi)置的功能pivot_table。我們將使用《世界幸福報告》,該報告是有關(guān)全球幸福狀況的調(diào)查。該報告按其幸福等級對150多個國家/地區(qū)進行排名,自2012年以來幾乎每年都會發(fā)布。我們將使用2015年,2016年和2017年收集的數(shù)據(jù),如果您想了解的話可以下載。沿。我們正在運行python 3.6和pandas 0.19。
 

  我們可能要回答的一些有趣的問題是:
 

  1)世界上最幸福和最不開心的國家和地區(qū)是?

  2)幸福會受到地區(qū)的影響嗎?

  3)在過去三年中,幸福感分數(shù)是否發(fā)生了顯著變化?
 

  讓我們導(dǎo)入數(shù)據(jù)并快速瀏覽一下:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  每個國家/地區(qū)的Happiness Score收入是通過將表格中的其他七個變量相加得出的。這些變量中的每一個都揭示了人口加權(quán)平均得分,范圍從0到10,隨時間推移進行追蹤,并與其他國家進行比較。
 

  這些變量是:
 

  1)Economy:人均實際GDP

  2)Family: 社會支持

  3)Health:健康的預(yù)期壽命

  4)Freedom:自由選擇生活

  5)Trust:對腐敗的看法

  6)Generosity:慷慨的看法

  7)Dystopia:將每個國家/地區(qū)與假設(shè)國家/地區(qū)進行比較,該國家/地區(qū)代表每個關(guān)鍵變量的最低國家平均水平,并與殘留誤差一起用作回歸基準
 

  每個國家/地區(qū)都將Happiness Score確定自己的Happiness Rank身份,這是該國家/地區(qū)在特定年份中的相對位置。例如,第一行表示瑞士在2015年的幸福分數(shù)為7.587,位居最幸福的國家。瑞士排名第一,僅次于冰島,得分為7.561。丹麥在2015年排名第三,依此類推。有趣的是,西歐在2015年的前八名中排名七。
 

  我們將集中在決賽上Happiness Score以演示數(shù)據(jù)透視表的技術(shù)方面。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  該描述()方法表明,Happiness Rank范圍從1到158,這意味著調(diào)查的國家中某一年的數(shù)量最多為158。值得注意的是,Happiness Rank原本類型int。它在此處顯示為浮點數(shù)的事實意味著我們NaN在此列中有值(我們也可以通過count僅等于470 的行(而不是數(shù)據(jù)集中的495行)來確定此值)。
 

  該Year列沒有任何缺失值。首先,因為它在數(shù)據(jù)集中顯示為int,但也顯示為-總數(shù)為Year495,即我們數(shù)據(jù)集中的行數(shù)。通過將的count值Year與其他列進行比較,似乎可以預(yù)期每列中有25個缺失值(YearVS中為495,其他所有列中為470)。
 

  通過Year和對數(shù)據(jù)進行分類Region
 

  熊貓的有趣之pivot_table處在于,您只需要一行代碼就可以在數(shù)據(jù)上獲得另一種觀點。大多數(shù)pivot_table參數(shù)使用默認值,因此必須添加的唯一必需參數(shù)是data和index。盡管不是強制性的,但value在下一個示例中我們還將使用參數(shù)。
 

  1)data 不言自明–這是您要使用的DataFrame

  2)index是您要對數(shù)據(jù)進行分組的列,分組器,數(shù)組(或上一個列表)。它將顯示在索引列中(如果要傳遞列表,則顯示在列中)

  3)values(可選)是您要匯總的列。如果您未指定此選項,則該函數(shù)將匯總所有數(shù)字列。
 

  讓我們首先看一下輸出,然后解釋該表是如何產(chǎn)生的:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  通過傳遞Year作為index參數(shù),我們選擇將數(shù)據(jù)分組為Year。輸出是數(shù)據(jù)透視表,該數(shù)據(jù)透視表顯示Yearas index和Happiness Scoreas 的三個不同值values。值得注意的是,聚合默認值是平均值(或平均值),因此Happiness Score列中顯示的值是所有國家/地區(qū)的年度平均值。該表顯示所有國家/地區(qū)的平均值在2016年最高,目前是過去三年中的最低水平。
 

  這是有關(guān)如何創(chuàng)建數(shù)據(jù)透視表的詳細圖表:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  接下來,我們將該Region列用作index:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  像Happiness Score上面一樣,在數(shù)據(jù)透視表中的列中顯示的數(shù)字是平均值,但這次是所記錄的所有年份(2015、2016、2017)的平均值。通過此顯示,可以更輕松地查看Australia and New Zealand具有最高平均分的產(chǎn)品,而North America其排名緊隨其后。有趣的是,盡管我們從讀取的數(shù)據(jù)中獲得了最初的印象,但在計算過去三年的平均值時Western Europe,該數(shù)據(jù)Western Europe實際上排在第三位,該數(shù)據(jù)顯示在大多數(shù)頂部。排名最低的區(qū)域是Sub-Saharan Africa,緊隨其后的是Southern Asia。
 

  創(chuàng)建多索引數(shù)據(jù)透視表
 

  您可能曾經(jīng)使用groupby()過某些數(shù)據(jù)透視表功能(我們之前已經(jīng)演示了如何使用groupby()分析數(shù)據(jù))。但是,pivot_table()內(nèi)置函數(shù)提供了直接的參數(shù)名稱和默認值,可以幫助簡化諸如多索引之類的復(fù)雜過程。
 

  為了將數(shù)據(jù)按不止一列進行分組,我們要做的就是傳遞列名列表。讓我們通過Region和對數(shù)據(jù)進行分類Year。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  這些示例還揭示了數(shù)據(jù)透視表的名稱來源:它允許您旋轉(zhuǎn)或旋轉(zhuǎn)匯總表,并且這種旋轉(zhuǎn)使我們對數(shù)據(jù)有了不同的認識??梢院芎玫貛椭焖佾@得寶貴見解的觀點。
 

  這是查看數(shù)據(jù)的一種方法,但是我們可以使用columns參數(shù)來獲得更好的顯示:
 

  columns是您希望將數(shù)據(jù)分組依據(jù)的列,分組器,數(shù)組或上一個列表。使用它會水平分散不同的值。
 

  使用Year作為Columns參數(shù)將顯示的不同值year,并使顯示效果更好,如下所示:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  使用可視化數(shù)據(jù)透視表 plot()
 

  如果要查看我們創(chuàng)建的上一個數(shù)據(jù)透視表的外觀,只需plot()在pivot_table函數(shù)調(diào)用的末尾添加即可(您還需要導(dǎo)入相關(guān)的繪圖庫)。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  視覺表示有助于揭示差異很小。話雖如此,這也表明位于美國的兩個地區(qū)的幸福感等級都將持續(xù)下降。
 

  使用以下數(shù)據(jù)處理數(shù)據(jù) aggfunc
 

  到目前為止,我們一直使用平均值來獲取有關(guān)數(shù)據(jù)的見解,但還需要考慮其他重要值。該aggfunc參數(shù)的實驗時間:
 

  aggfunc(可選)接受您要在組中使用的功能或功能列表(默認值:)numpy.mean。如果傳遞了函數(shù)列表,則生成的數(shù)據(jù)透視表將具有層次結(jié)構(gòu)列,其頂級是函數(shù)名稱。
 

  讓我們添加每個區(qū)域的中位數(shù),最小值,最大值和標準偏差。這可以幫助我們評估平均值的準確性,以及它是否真的可以代表真實情況。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  看起來有些地區(qū)的極端價值可能會影響我們的平均水平,而不是我們希望的那樣。例如,Middle East and Northern Africa區(qū)域具有較高的標準偏差,因此我們可能要刪除極值。讓我們看看每個區(qū)域要計算多少個值。這可能會影響我們所看到的表示形式。例如,Australia and new Zealand標準偏差非常低,并且在過去三年中排名最高,但是我們也可以假設(shè)它們僅占兩個國家/地區(qū)的比例。
 

  應(yīng)用自定義函數(shù)刪除異常值
 

  pivot_table允許您傳遞自己的自定義聚合函數(shù)作為參數(shù)。您可以使用lambda函數(shù),也可以創(chuàng)建一個函數(shù)。讓我們計算給定年份中每個區(qū)域的平均國家/地區(qū)數(shù)量。我們可以使用lambda函數(shù)輕松完成此操作,如下所示:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  具有最低標準偏差的兩個排名最高的區(qū)域僅僅占兩個國家。Sub-Saharan Africa另一方面,具有最低的Happiness score,但它占43個國家/地區(qū)的百分比。有趣的下一步是從計算中刪除極值,以查看排名是否發(fā)生重大變化。讓我們創(chuàng)建一個僅計算介于0.25分位數(shù)和0.75分位數(shù)之間的值的函數(shù)。我們將使用此函數(shù)作為一種方法來計算每個區(qū)域的平均值,并檢查排名是否保持不變。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  消除異常值主要影響了具有更多國家的區(qū)域,這是有道理的。我們可以看到Western Europe(每年平均接受調(diào)查的21個國家/地區(qū))排名有所提高。不幸的是,Sub-Saharan Africa當(dāng)我們剔除異常值時,(每年接受調(diào)查的平均39個國家/地區(qū))獲得的排名甚至更低。
 

  使用字符串操作進行分類
 

  到目前為止,我們已經(jīng)根據(jù)原始表中的類別對數(shù)據(jù)進行了分組。但是,我們可以搜索類別中的字符串以創(chuàng)建我們自己的組。例如,按大洲查看結(jié)果將很有趣。我們可以通過查找包含Asia,Europe等的區(qū)域名稱來執(zhí)行此操作。為此,我們可以先將數(shù)據(jù)透視表分配給變量,然后添加過濾器:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  讓我們來看看結(jié)果Europe:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  差異表明,兩個歐洲地區(qū)的幸福感得分差異較大。在大多數(shù)情況下,除去異常值會使得分更高,但在東亞則不然。
 

  如果要從多個列中提取特定值,則最好使用df.query該方法,因為前一種方法不適用于條件化多索引。例如,我們可以選擇查看非洲的特定年份和特定區(qū)域。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  在此示例中,差異很小,但是一個有趣的練習(xí)是比較前幾年的信息,因為該調(diào)查自2012年以來都有報告。
 

  處理丟失的數(shù)據(jù)
 

  我們已經(jīng)介紹了迄今為止最強大的參數(shù),pivot_table因此,如果您在自己的項目中使用此方法進行實驗,則已經(jīng)可以從中受益匪淺。話雖如此,快速瀏覽其余參數(shù)(它們都是可選的并具有默認值)很有用。首先要談的是缺失值。
 

  1)dropna是boolean類型,用于指示您不想包括所有條目都是完整的列NaN(默認值:True)

  2)fill_value 是標量類型,用于選擇一個值來替換缺少的值(默認值:無)。
 

  我們沒有所有條目都在的列NaN,但是值得一提的是,如果我們這樣做,pivot_table則會默認根據(jù)dropna定義將其刪除。
 

  我們一直在根據(jù)默認設(shè)置pivot_table對待NaN。該fill_value默認值是None因此,這意味著我們沒有在我們的數(shù)據(jù)集替換缺失值。為了證明這一點,我們需要生成一個帶有NaN值的數(shù)據(jù)透視表。我們可以將Happiness Score每個區(qū)域劃分為三個分位數(shù),并檢查有多少個國家屬于這三個分位數(shù)(希望至少一個分位數(shù)中有缺失值)。
 

  為此,我們將使用qcut(),它是內(nèi)置的熊貓函數(shù),可讓您將數(shù)據(jù)拆分為任意數(shù)量的分位數(shù)。例如,指定pd.qcut(data["Happiness Score"], 4)將導(dǎo)致四個分位數(shù):
 

  1)0-25%

  2)25%-50%

  3)50%-75%

  4)75%-100%

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  沒有特定分位數(shù)的國家/地區(qū)顯示NaN。這不是理想的,因為等于NaN的計數(shù)不會提供任何有用的信息。顯示起來比較容易混淆0,因此讓我們NaN使用fill_value以下數(shù)字替換為零:

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
 

  添加總行數(shù)/列數(shù)
 

  最后兩個參數(shù)都是可選的,并且對于改善顯示效果最有用:
 

  1)margins是布爾類型,允許您添加all行/列,例如小計/總計(默認為False)

  2)margins_name 這是字符串類型,并接受頁邊距為True時將包含總計的行/列的名稱(默認為“全部”)
 

  讓我們總結(jié)一下
 

  如果您正在尋找一種從不同角度檢查數(shù)據(jù)的方法,那么pivot_table答案便是。它易于使用,對數(shù)值和分類值都很有用,并且可以用一行代碼獲得結(jié)果。
 

  如果您喜歡研究這些數(shù)據(jù),并且有興趣進一步調(diào)查,那么我們建議您添加前幾年的調(diào)查結(jié)果,并且/或者將其他列與國家/地區(qū)信息(例如貧困,恐怖,失業(yè)等)結(jié)合使用。請隨時分享您的信息筆記本,祝您學(xué)習(xí)愉快!
 

  讓我們使用這些將總計添加到我們的上一張表中。

大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表
大數(shù)據(jù)分析如何利用Python創(chuàng)建數(shù)據(jù)透視表


 

  讓我們總結(jié)一下

  如果您正在尋找一種從不同角度檢查數(shù)據(jù)的方法,那么pivot_table答案便是。它易于使用,對數(shù)值和分類值都很有用,并且可以用一行代碼獲得結(jié)果。

  如果您喜歡研究這些數(shù)據(jù),并且有興趣進一步調(diào)查,那么我們建議您添加前幾年的調(diào)查結(jié)果,并且/或者將其他列與國家/地區(qū)信息(例如貧困,恐怖,失業(yè)等)結(jié)合使用。請隨時分享您的信息筆記本,祝您學(xué)習(xí)愉快!



 

預(yù)約申請免費試聽課

填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ lb577.com 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖