概述
介紹一個精心設(shè)計的可視化程序有一些特別之處。顏色突出,層次很好地融合在一起,整個輪廓流動,整個程序不僅有一個很好的美學(xué)質(zhì)量,它也為我們提供了有意義的技術(shù)洞察力。 這在數(shù)據(jù)科學(xué)中非常重要,因為我們經(jīng)常處理大量雜亂的數(shù)據(jù)。對于數(shù)據(jù)科學(xué)家來說,具有可視化的能力是至關(guān)重要的。我們的利益相關(guān)者或客戶將更多地依賴于視覺提示,而不是復(fù)雜的機器學(xué)習(xí)模型。 有大量優(yōu)秀的Python可視化庫可用,包括內(nèi)置的matplotlib。但Seaborn對我來說很重要。它將美學(xué)魅力與技術(shù)洞察力無縫地結(jié)合在一起,我們很快就會看到這一點。 在本文中,我們將了解什么是seaborn以及為什么應(yīng)該使用它而不是matplotlib。然后我們將使用seaborn在Python中為數(shù)據(jù)生成各種不同的可視化。 目錄
什么是Seaborn?你曾經(jīng)在R中使用過ggplot2庫嗎?它是任何工具或語言中最好的可視化包之一。Seaborn給了我同樣的感覺。
它使我們能夠創(chuàng)建放大的數(shù)據(jù)視覺效果。這有助于我們理解數(shù)據(jù),通過在可視上下文中顯示數(shù)據(jù)來發(fā)現(xiàn)變量或趨勢之間的任何隱藏相關(guān)性,而這些相關(guān)性最初可能并不明顯。與Matplotlib的低級接口相比,Seaborn具有高級接口。 為什么應(yīng)該使用Seaborn而不是matplotlib?我一直在談?wù)揝eaborn是多么的棒,所以你可能想知道我為什么這么大驚小怪。 當(dāng)我們使用seaborn生成圖時,我將以實際的方式全面地回答這個問題?,F(xiàn)在,讓我們快速討論一下seaborn為什么在matplotlib之上。 Seaborn使我們的圖表和繪圖看起來很吸引人,并支持一些常見的數(shù)據(jù)可視化需求(比如將顏色映射到變量或使用分面(faceting))。從根本上說,它使數(shù)據(jù)可視化和探索變得很容易。相信我,這在數(shù)據(jù)科學(xué)中不是一件容易的事。
在matplotlib中有幾個(很大的)限制是Seaborn已經(jīng)修復(fù)的:
這第二點在數(shù)據(jù)科學(xué)中很突出,因為我們經(jīng)常使用數(shù)據(jù)模型。 搭建環(huán)境seaborn庫具有四個必需的必需依賴項:
要安裝Seaborn并有效地使用它,首先需要安裝前面提到的依賴項。一旦這一步完成,我們都準(zhǔn)備安裝Seaborn和享受其迷人的繪圖。要安裝Seaborn,可以使用以下代碼 要安裝最新版本的seaborn,你可以使用pip: pip install seaborn 你也可以使用conda安裝最新版本的seaborn:
要在代碼中導(dǎo)入依賴項和seaborn本身,可以使用以下代碼 import numpy as np 就是這樣!我們都準(zhǔn)備好了詳細地探索seaborn。 用于數(shù)據(jù)可視化的數(shù)據(jù)集我們將主要處理兩個數(shù)據(jù)集:
之所以選擇這兩個,是因為它們包含多個變量,因此我們有很多選擇可以使用。這兩個數(shù)據(jù)集還可以模擬現(xiàn)實情況,因此你將了解數(shù)據(jù)可視化和了解業(yè)內(nèi)的數(shù)據(jù)可視化方式。 你可以在DataHack平臺上查看這個和其他高質(zhì)量的數(shù)據(jù)集。因此,請在繼續(xù)之前下載上述兩個數(shù)據(jù)集。我們將一起使用它們。 使用Seaborn進行數(shù)據(jù)可視化讓我們開始吧!我已將此實現(xiàn)部分分為兩類:
我們將研究每個類別的多個示例,以及如何使用seaborn對其進行繪制。 可視化統(tǒng)計關(guān)系統(tǒng)計關(guān)系表示理解數(shù)據(jù)集中不同變量之間的關(guān)系以及這種關(guān)系如何影響或依賴于其他變量的過程。 在這里,我們將使用seaborn生成以下圖:
我選擇了預(yù)測投票數(shù)數(shù)據(jù)集。所以,讓我們導(dǎo)入數(shù)據(jù)集:
使用Seaborn繪制散點圖散點圖可能是可視化兩個變量之間關(guān)系的最常見的例子。每個點在數(shù)據(jù)集中顯示一個觀察值,這些觀察值用點狀結(jié)構(gòu)表示。圖中顯示了兩個變量的聯(lián)合分布。 為了繪制散點圖,我們將使用seaborn庫的relplot()函數(shù)。它是可視化統(tǒng)計關(guān)系的圖形級角色。默認情況下,使用relplot會生成散點圖: sns.relplot(x='Views', y='Upvotes', data = df) Seaborn的SNS.relplotSNS.relplot是來自SNS類的relplot函數(shù),SNS類是我們在上面與其他依賴項一起導(dǎo)入的一個seaborn類。 這里,參數(shù)是x、y,數(shù)據(jù)有在X,Y軸上表示的變量和我們要分別畫出來的數(shù)據(jù)點,通過圖片,我們發(fā)現(xiàn)了views和upvotes之間的關(guān)系。 接下來,如果我們想要看到與數(shù)據(jù)相關(guān)的標(biāo)簽,我們可以使用下面的代碼:
Hue圖我們可以在色調(diào)(Hue)的幫助下在我們的圖片中添加另一個維度,通過為點賦予顏色來實現(xiàn),每種顏色都有一些附加的意義。 在上圖中,色調(diào)代表是樣本類別,這就是為什么它有一個不同的顏色。如果色調(diào)代表的只是數(shù)字,那么色調(diào)就應(yīng)該是連續(xù)的(因為數(shù)字是連續(xù)的,樣本類別不是連續(xù)的)。 sns.relplot(x='Views', y='Upvotes', hue = 'Answers', data = df); 我們還可以更改每個點的大小:
我們還可以手動更改大小,方法是使用另一個參數(shù)size=(15,200)。 用分類數(shù)據(jù)繪圖
在上面的小節(jié)中,我們了解了如何使用不同的視圖表示來顯示多個變量之間的關(guān)系。我們繪制了兩個數(shù)值變量之間的關(guān)系圖。在本節(jié)中,我們將看到兩個變量之間的關(guān)系。例子中的數(shù)據(jù)是已分類的(分為不同的組)。 我們將使用seaborn庫的catplot()函數(shù)來繪制分類數(shù)據(jù)圖。就讓我們一探究竟吧 抖動圖對于抖動圖,我們將使用另一個數(shù)據(jù)集人力資源分析來分析,讓我們現(xiàn)在導(dǎo)入該數(shù)據(jù)集。 df2 = pd.read_csv(r'train.csv') 現(xiàn)在,我們將使用catplot()函數(shù)查看education列和avg_training_score列之間的關(guān)系。
我們可以看到圖表是散開的,所以為了處理這個問題,我們可以將抖動設(shè)置為false。抖動是偏離真實值。因此,我們將使用另一個參數(shù)將抖動設(shè)置為false。 sns.catplot(x='education', y='avg_training_score', jitter = False, data=df2) ![]() Hue圖接下來,如果我們想在我們的圖中引入另一個變量或另一個維度,我們可以使用hue參數(shù),就像我們在上一節(jié)中使用的一樣。假設(shè)我們希望看到教育和avg_training_score圖中的性別分布,為此,我們可以使用以下代碼
![]() 在上面的圖中,我們可以看到這些點是相互重疊的,為了消除這種情況,我們可以設(shè)置kind = 'swarm', swarm使用一種算法來防止這些點重疊,并且沿著分類軸調(diào)整這些點。我們看看它是怎樣的 sns.catplot(x='education', y='avg_training_score', kind = 'swarm', data=df2) ![]() 很神奇,對吧?如果我們想要看到引入swarmed作為第三維的版本呢?讓我們將is_promoted作為一個新變量引入
![]() 顯然,分數(shù)更高的人得到了提升。 使用Seaborn的箱線圖我們可以繪制的另一種繪圖是箱線圖 ,它顯示了分布的三個四分位值以及最終值。箱圖中的每個值都對應(yīng)于數(shù)據(jù)中的實際觀察值。讓我們現(xiàn)在繪制箱線圖 sns.catplot(x='education', y='avg_training_score', kind = 'box', data=df2) ![]() 當(dāng)我們將Hue與boxplot一起使用時,它會沿著分類軸對齊,因此它們不會重疊。帶有Hue的箱線圖看起來是
![]() 使用seaborn繪制小提琴圖我們也可以通過使用小提琴圖來不同地表示上述變量。讓我們嘗試一下 sns.catplot(x='education', y='avg_training_score', hue = 'is_promoted', kind = 'violin', data=df2) ![]() 小提琴圖結(jié)合了箱線圖和核密度估計程序,以提供更豐富的值分布描述。四分位數(shù)值顯示在小提琴內(nèi)部。當(dāng)色調(diào)語義參數(shù)是二值時,我們還可以拆分小提琴,這也可能有助于節(jié)省繪圖空間。讓我們看一下具有不同值色調(diào)的小提琴圖。
![]() 我開始使用seaborn的原因就是這些美妙的圖表。它為你提供了很多顯示數(shù)據(jù)的選項。另一個例子是箱線圖。 使用Seaborn繪制箱線圖Boxplot對整個數(shù)據(jù)集進行操作,默認情況下獲取平均值。 sns.catplot(x='education', y='avg_training_score', hue = 'is_promoted', kind = 'bar', data=df2) ![]() 使用Seaborn繪制Pointplot另一種類型的圖是pointplot,這個圖指出估計值和置信區(qū)間。Pointplot連接來自相同色調(diào)類別的數(shù)據(jù)。這有助于識別特定色調(diào)類別中的關(guān)系如何變化。你可以查看pointplot如何顯示下面的信息。
這不是結(jié)束,seaborn是一個巨大的庫,有許多用于不同目的的繪圖函數(shù)。其中一個目的是引入多維度。我們也可以想象高維的關(guān)系。讓我們用群圖來檢驗一下。 使用Seaborn的群圖sns.catplot(x='education', y='avg_training_score', hue='is_promoted', ![]() 當(dāng)我們將多個概念組合成一個概念時,我們很容易將這個概念形象化。這里群圖將色調(diào)語義屬性和性別屬性作了分面處理。 可視化數(shù)據(jù)集的分布無論何時處理數(shù)據(jù)集,我們都想知道數(shù)據(jù)或變量是如何分布的。數(shù)據(jù)的分布可以告訴我們很多關(guān)于數(shù)據(jù)性質(zhì)的信息,所以讓我們深入研究一下。 繪制單變量分布
在研究變量分布時,最常見的一個圖是柱狀圖。默認情況下,distplot()函數(shù)繪制柱狀圖并適合內(nèi)核密度估計。讓我們看看年齡是如何分布在數(shù)據(jù)中的。
![]() 這清楚地表明,大多數(shù)人都在二十多歲和三十多歲。 使用Seaborn的直方圖另一種用于單變量分布的圖是直方圖。 直方圖以箱子的形式表示數(shù)據(jù)的分布,并使用條形圖來顯示每個箱子下的觀察次數(shù)。我們還可以在其中添加一個加固圖,而不是使用KDE(核密度估計),這意味著在每次觀察時,它都會畫一個小的垂直標(biāo)尺。 sns.distplot(df2.age, kde=False, rug = True) ![]() 繪制雙變量分布
除了可視化單個變量的分布外,我們還可以看到兩個獨立變量是如何相互分布的。雙變量表示關(guān)節(jié),為了將其形象化,我們使用了seaborn庫的jointplot()函數(shù)。默認情況下,jointplot繪制散點圖。讓我們看看年齡和avg_training_score之間的二元分布。
![]() 有多種方式可視化雙變量分布。讓我們再看幾個。 使用Seaborn的HexplotHexplot是一個雙變量的直方圖,因為它顯示了在六邊形區(qū)域內(nèi)的觀察次數(shù)。這是一個非常容易處理大數(shù)據(jù)集的圖。為了繪制Hexplot,我們將把kind屬性設(shè)置為hex。我們現(xiàn)在就去看看。 sns.jointplot(x=df2.age, y=df2.avg_training_score, kind='hex', data = df2) ![]() 使用Seaborn的KDE圖這還不是結(jié)束,接下來是KDE繪圖。這是另一個很好的方法來可視化雙變量分布。讓我們看看如何使用jointplot()函數(shù)并將屬性kind設(shè)置為KDE來實現(xiàn)上述觀察。
![]() 使用Seaborn繪制Heatmaps現(xiàn)在讓我們來談?wù)勎易钕矚g的圖表Heatmaps。Heatmaps中每個變量都表示為一種顏色。 讓我們來生成一個: corrmat = df2.corr() ![]() 使用Seaborn的Boxen圖另一個我們可以用來表示二元分布的圖是boxen圖。Boxen plot最初被命名為letter value plot(字母值圖),因為它顯示了一個變量大量的值,也稱為分位數(shù)。這些分位數(shù)也被定義為字母值。通過繪制大量的分位數(shù),可以對分布的形狀有更多的了解。這些類似于箱形圖,讓我們看看如何使用它們。
![]() 使用Seaborn繪制Ridge圖下一個圖表相當(dāng)引人入勝。叫做Ridge圖。它也被稱為joy圖。Ridge圖有助于可視化幾個組的數(shù)值分布。這些分布可以用KDE圖或直方圖來表示?,F(xiàn)在,我們試著畫一個Ridge圖來表示年齡和性別的關(guān)系。 # 初始化FacetGrid對象 ![]() 可視化數(shù)據(jù)集中的成對關(guān)系我們還可以使用seaborn庫的pairplot()函數(shù)來繪制數(shù)據(jù)集中的多個二元分布。這顯示了數(shù)據(jù)庫中每一列之間的關(guān)系。并繪制各變量在對角線上的單變量分布圖。讓我們看看它是什么樣子。
![]() 結(jié)尾我們已經(jīng)講了很多圖表了。我們看到了seaborn庫在可視化和研究數(shù)據(jù)(尤其是大型數(shù)據(jù)集)時是如何如此有效的。我們還討論了如何為不同類型的數(shù)據(jù)繪制seaborn庫的不同函數(shù)。 正如我前面提到的,學(xué)習(xí)seaborn的最佳方法是實踐它。你自己實踐產(chǎn)生的新的視圖越多,你就會變得越自信。 ![]() 如需聯(lián)系EasyCharts團隊 請加微信:EasyCharts |
|