摘要: 如何快速創(chuàng)建強大的可視化探索性數(shù)據(jù)分析,這對于現(xiàn)在的商業(yè)社會來說,變得至關(guān)重要。今天我們就來,談一談如何使用python來進行數(shù)據(jù)的可視化!
如何快速創(chuàng)建強大的可視化探索性數(shù)據(jù)分析,這對于現(xiàn)在的商業(yè)社會來說,變得至關(guān)重要。今天我們就來,談一談如何使用python來進行數(shù)據(jù)的可視化!
一旦你有了一個很好的被清理過的數(shù)據(jù)集,下一步就是探索性數(shù)據(jù)分析(EDA)。EDA是確定數(shù)據(jù)可以告訴我們的過程,我們使用EDA來查找模式、關(guān)系或異常情況,以便指導(dǎo)我們后續(xù)的工作。然而在EDA中有很多的方法,但最有效的工具之一是對圖(也稱為散點圖矩陣)。散點圖矩陣讓我們看到了兩個變量之間的關(guān)系。散點圖矩陣是識別后續(xù)分析趨勢的好方法,幸運的是,它們很容易用Python實現(xiàn)!
在本文中,我們將通過使用seaborn可視化庫在Python中進行對圖的繪制和運行。我們將看到如何創(chuàng)建默認(rèn)配對圖以快速檢查我們的數(shù)據(jù),以及如何自定義可視化以獲取更深入的洞察力。該項目的代碼在GitHub上以Jupyter Notebook的形式提供。在這個項目中,我們將探索一個真實世界的數(shù)據(jù)集,由GapMinder收集的國家級社會經(jīng)濟數(shù)據(jù)組成。
在開始之前,我們需要知道我們有什么數(shù)據(jù)。我們可以將社會經(jīng)濟數(shù)據(jù)用熊貓(Pandas)數(shù)據(jù)框加載并查看列:
每行數(shù)據(jù)代表一個國家在一年內(nèi)的結(jié)果,列中包含變量(這種格式的數(shù)據(jù)稱為整潔數(shù)據(jù))。有2個分類專欄(國家和大陸)和4個數(shù)字專欄。這些專欄包括:life_exp是幾年出生時的預(yù)期壽命,pop是人口,gdp_per_cap是以國際美元為單位的人均國內(nèi)生產(chǎn)總值。
雖然后面我們將使用分類變量進行著色,但seaborn中的默認(rèn)對圖僅繪制了數(shù)字列。創(chuàng)建默認(rèn)的散點圖矩陣很簡單:我們加載到seaborn庫并調(diào)用pairplot函數(shù),將它傳遞給我們的數(shù)據(jù)框:
我仍然驚訝于一行簡單的代碼就可以完成我們整個需求!散點圖矩陣建立在兩個基本圖形上,直方圖和散點圖。對角線上的直方圖允許我們看到單個變量的分布,而上下三角形上的散點圖顯示了兩個變量之間的關(guān)系。例如,第二行中最左邊的圖表顯示life_exp與年份的散點圖。
默認(rèn)的散點圖矩陣圖經(jīng)常給我們提供有價值的見解。我們看到人均預(yù)期壽命和人均GDP是正相關(guān)的,這表明高收入國家的人們傾向于更長壽(盡管這當(dāng)然不能證明導(dǎo)致其他人也是如此)。它也似乎看起來是全世界的預(yù)期壽命隨著時間的推移而上升。為了在未來的圖中更好地顯示這些變量,我們可以通過取這些值的對數(shù)來轉(zhuǎn)換這些列:
雖然這種制圖本身可以用于分析,但我們可以發(fā)現(xiàn),通過對諸如大陸這樣的分類變量進行數(shù)字著色,使其更有價值。這在seaborn中非常簡單!我們所需要做的就是在hue中使用sns.pairplot函數(shù)調(diào)用使用關(guān)鍵字:
現(xiàn)在我們看到大洋洲和歐洲的人均預(yù)期壽命最高,亞洲人口最多。請注意,我們對人口和gdp的日志轉(zhuǎn)換使這些變量正態(tài)分布,從而更全面地表示值。
上圖更具信息性,但仍然存在一些問題:找不到疊加的直方圖,就像在對角線上那樣,它非常易于理解。顯示來自多個類別的單變量分布的更好方法是密度圖。我們可以在函數(shù)調(diào)用中交換柱狀圖的密度圖。當(dāng)我們處理它時,我們會將一些關(guān)鍵字傳遞給散點圖,以更改點的透明度,大小和邊緣顏色。
對角線上的密度圖比堆積條更容易比較各大洲之間的分布。改變散點圖的透明度可以提高可讀性,因為這些數(shù)字有相當(dāng)多的重疊(稱為重疊繪圖)。
作為pairplot默認(rèn)的最后一個例子,讓我們通過繪制2000年后的年份來減少數(shù)據(jù)混亂。我們?nèi)匀粫凑沾箨懛植贾?,但現(xiàn)在我們不會繪制年份列。為了限制繪制的列,我們將一個列表傳遞vars給函數(shù)。為了說明情節(jié),我們還可以添加標(biāo)題。
這開始看起來很不錯!如果我們要進行建模,我們可以使用這些圖中的信息來幫助我們進行選擇。例如,我們知道log_gdp_per_cap與life_exp正相關(guān),所以我們可以創(chuàng)建一個線性模型來量化這種關(guān)系。對于這篇文章,我們將堅持繪圖,如果我們想要更多地探索我們的數(shù)據(jù),我們可以使用PairGrid類自定義散點圖矩陣。
使用PairGrid進行自定義與sns.pairplot函數(shù)相反,sns.PairGrid是一個類,它意味著它不會自動填充我們的網(wǎng)格plot。相反,我們創(chuàng)建一個類實例,然后將特定函數(shù)映射到網(wǎng)格的不同部分。要用我們的數(shù)據(jù)創(chuàng)建一個PairGrid實例,我們使用下面的代碼,這也限制了我們將顯示的變量:
如果我們要顯示它,我們會得到一個空白圖,因為我們沒有將任何函數(shù)映射到網(wǎng)格部分。有三個網(wǎng)格部分填寫PairGrid:上三角形、下三角形和對角線。要將網(wǎng)格映射到這些部分,我們使用grid.map 部分中的方法。例如,要將散點圖映射到我們使用的上三角形:
該map_upper方法接受任何兩個變量數(shù)組(如plt.scatter)和關(guān)聯(lián)的關(guān)鍵字(如color)的函數(shù)。該map_lower方法完全相同,但填充網(wǎng)格的下三角形。因為它需要在接受單個陣列(記住對角線僅示出了一個變量)的函數(shù)略有不同。一個例子是plt.hist我們用來填寫下面的對角線部分:
在這種情況下,我們在下三角形中使用2-D(密度圖)的核密度估計值。放在一起,這段代碼給了我們下面的圖:
使用PairGrid類的真正好處在于我們想要創(chuàng)建自定義函數(shù)來將不同的信息映射到圖上。例如,我可能想要將兩個變量之間的Pearson相關(guān)系數(shù)添加到散點圖中。為此,我會編寫一個函數(shù),它接受兩個數(shù)組、計算統(tǒng)計量,然后在圖上繪制它。下面的代碼顯示了這是如何完成的(歸功于這個Stack Overflow答案):
我們的新函數(shù)映射到上三角形,因為我們需要兩個數(shù)組來計算相關(guān)系數(shù)(還要注意我們可以將多個函數(shù)映射到網(wǎng)格部分)。這會產(chǎn)生以下圖形:
相關(guān)系數(shù)現(xiàn)在出現(xiàn)在散點圖上方。這是一個相對直接的例子,但我們可以使用PairGrid將我們想要的任何函數(shù)映射到圖上。我們可以根據(jù)需要添加盡可能多的信息,只要我們能夠弄清楚如何編寫函數(shù)!作為最后一個例子,這里是一個顯示對角線而不是網(wǎng)格的匯總統(tǒng)計圖。
它顯示了我們只做圖標(biāo)的總體思路,除了使用庫中的任何現(xiàn)有功能(例如matplotlib將數(shù)據(jù)映射到圖上)之外,我們還可以編寫自己的函數(shù)來顯示自定義信息。
散點圖矩陣是快速探索數(shù)據(jù)集中的分布和關(guān)系的強大工具。Seaborn提供了一個簡單的默認(rèn)方法,可以通過Pair Grid類來定制和擴展散點圖矩陣。在一個數(shù)據(jù)分析項目中,價值的主要部分往往不在于浮華的機器學(xué)習(xí),而在于直觀的數(shù)據(jù)可視化。散點圖舉證為我們提供了全面的數(shù)據(jù)分析,是數(shù)據(jù)分析項目的一個很好的起點。
本文由阿里云云棲社區(qū)組織翻譯。
文章原標(biāo)題《visualizing-data-with-pair-plots-in-python》,
譯者:虎說八道,審校:袁虎。
聯(lián)系客服