作者|Jenny Dcruz
編譯|VK
來源|Towards Datas Science
Seaborn是一個功能強大的Python庫,用于增強數(shù)據(jù)可視化。它為Matplotlib提供了大量高級接口。Seaborn可以很好地處理數(shù)據(jù)幀,而Matplotlib則不行,它可以讓你以更簡單的方式繪制引人注目的圖表。
為了更好地理解本文,你需要了解pandas和matplotlib的基礎(chǔ)知識。如果沒有,可以參考以下文章:
用Pandas進行數(shù)據(jù)分析:https://towardsdatascience.com/pandas-for-data-analysis-142be71f63dc
使用Matplotlib進行可視化:https://towardsdatascience.com/visualizations-with-matplotlib-4809394ea223
確保系統(tǒng)中安裝了必要的庫:
使用conda:
conda install pandas
conda install matplotlib
conda install seaborn
使用pip:
pip install pandas
pip install matplotlib
pip install seaborn
讓我們首先導(dǎo)入所需的Python庫和數(shù)據(jù)集。
你可以在這里找到本教程的CSV文件:https://github.com/jendcruz22/Medium-articles/tree/master/Plotting charts with Seaborn
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
df = pd.read_csv('Pokemon.csv', index_col = 0, encoding='unicode-escape')
df.head()
在上面的代碼中,我們將index_col設(shè)置為0,這表示我們將第一列視為索引。
使用seaborn和Pokemon(口袋妖怪)數(shù)據(jù)集的屬性,我們將創(chuàng)建一些非常有趣的可視化效果。我們首先要看的是散點圖。
散點圖使用點來表示不同數(shù)值變量的值。每個點在水平軸和垂直軸上的位置表示單個數(shù)據(jù)點的值。它們用于觀察變量之間的關(guān)系。
在seaborn中制作散點圖只需要使用“l(fā)mplot”函數(shù)。為此,我們將dataframe傳遞給data參數(shù),然后傳入x和y軸的列名。
默認情況下,散點圖還顯示一條回歸線,它是一條最適合數(shù)據(jù)的直線。
sns.lmplot(x=’Attack’, y=’Defense’, data=df)
plt.show()
在這里你可以看到我們的散點圖,它顯示了進攻得分與防守得分的比較。
我們的回歸線基本上顯示了兩軸之間的相關(guān)性。在這種情況下,它是向上傾斜的。也就是說當進攻得分越來越高,防守得分也會越來越高。要刪除回歸線,可以將“fitreg”參數(shù)設(shè)置為false。
此外,我們可以通過設(shè)置hue參數(shù)來在Pokemon的進化階段著色。這個色調(diào)的參數(shù)是非常有用的,因為它允許你用顏色來表達第三維度的信息。
sns.lmplot(x=’Attack’, y=’Defense’, data=df, fit_reg=False, hue=’Stage’)
plt.show()
散點圖看起來和之前的一樣,除了中間沒有回歸線,而且每個點的顏色也不同。這些顏色只是顯示了每個小精靈的階段。Stage只是我們之前看到的數(shù)據(jù)中的另一個屬性。
通過這張圖,我們可以得出這樣的結(jié)論:在第一階段的pokemon(藍點)通常比在更高階段的pokemon得分更低。
箱線圖是常用于顯示數(shù)據(jù)分布的重要圖之一。在seaborn中只需要一行代碼就可以使用boxplot函數(shù)顯示箱線圖。在本例中,我們將使用除total、stage和legendary屬性之外的整個dataframe。
df_copy = df.drop(['Total’, 'Stage’, 'Legendary’], axis=1)
sns.boxplot(data=df_copy)
在這里我們可以看到每個屬性都有其各自的箱線圖。
箱線圖基于5個數(shù)字摘要,每個摘要以不同的行顯示。中間的線是中值,是數(shù)據(jù)的中心點。箱線圖末端的最底部和最頂部的線是四分位數(shù)1和4的中位數(shù),基本上顯示了分布的最小值和最大值。中間的另外兩條線是四分位數(shù)2和3的中位數(shù),它們顯示了值與中位數(shù)之間的差異。超出此范圍的單點表示數(shù)據(jù)中的異常值。
小提琴圖與箱線圖相似。小提琴圖是箱線圖非常有用的替代品。它們通過小提琴的厚度來顯示分布,而不只是簡要的統(tǒng)計。眾所周知,小提琴圖在分析和可視化數(shù)據(jù)集中不同屬性的分布時非常方便。
在本例中,我們將使用上一個示例中的相同數(shù)據(jù)幀副本。
sns.violinplot(data=df_copy)
plt.show()
我們可以觀察到口袋妖怪每個屬性的值分布。小提琴較厚的區(qū)域意味著值的密度更高。小提琴圖的中間部分通常比較厚,這意味著那里的值密度很高。我們比較了下一個口袋妖怪的攻擊類型。為此,讓我們使用相同的小提琴繪圖方法。
plt.figure(figsize=(10,6))\sns.violinplot(x='Type 1', y='Attack', data=df)
plt.show()
這個圖顯示了每個口袋妖怪的主要類型的攻擊分數(shù)分布。如你所見,“龍”型口袋妖怪的攻擊得分最高,但它們也有較高的方差,這意味著它們的攻擊分數(shù)也非常低?!癎host”主類型的方差非常低,這意味著它們的大多數(shù)數(shù)據(jù)值都集中在中心。
熱圖幫助你可視化矩陣類型的數(shù)據(jù)。例如,我們可以將口袋妖怪不同屬性之間的所有關(guān)聯(lián)可視化。
讓我們通過調(diào)用“corr”函數(shù)來計算數(shù)據(jù)幀的相關(guān)性,并使用“heatmap”函數(shù)繪制熱圖。
corr = df_copy.corr()
sns.heatmap(corr)
上面的熱圖顯示了我們數(shù)據(jù)幀的相關(guān)性。
長方體的顏色越淺,這兩個屬性之間的相關(guān)性就越高。例如,血量和口袋妖怪的整體速度之間的相關(guān)性非常低。因此,盒子的顏色是深色的。HP和防御速度之間的相關(guān)性非常高,因此我們可以在熱圖中看到一個紅色方塊。我們可以看到,當一個屬性變高時,其他屬性也會變高,比如防守速度。
直方圖允許你繪制數(shù)值分布圖。如果我們要使用matplotlib來創(chuàng)建柱狀圖,那么與使用seaborn創(chuàng)建柱狀圖相比,這將需要更多的工作。對于seaborn,只需要一行代碼就可以創(chuàng)建。
例如,我們可以創(chuàng)建一個直方圖來繪制帶有攻擊屬性的分布。
sns.distplot(df.Attack, color=’blue’)
我們可以看到大多數(shù)口袋妖怪都在50-100之間。我們可以看到,攻擊值大于100或小于50的口袋妖怪要少得多。
與條形圖類似,calplots允許你可視化每個類別變量的分布。我們可以使用calplot來查看每種主要類型中有多少口袋妖怪。
sns.countplot(x=’Type 1', data=df)
plt.xticks(rotation=-45)
我們可以看到,“水”類的口袋妖怪最多,而“仙女”和“冰”類的口袋妖怪最少。
密度圖顯示兩個變量之間的分布。例如,我們可以使用密度圖來比較口袋妖怪的兩個屬性:攻擊值、防御值。我們將使用'jointplot'函數(shù)來完成此操作。
sns.jointplot(df.Attack, df.Defense, kind=’kde’, color=’lightblue’)
“kde”表示我們需要一個密度圖。
如你所見,繪圖區(qū)域在黑暗中的變化取決于區(qū)域中的值的數(shù)量。黑暗區(qū)域預(yù)示著一種非常牢固的關(guān)系。從這個圖中我們可以看出,當攻擊值在50到75之間時,防御值在50左右。
關(guān)于這篇文章。我希望你喜歡用seaborn可視化數(shù)據(jù)。
你可以在這里找到本文的代碼和數(shù)據(jù)集:https://github.com/jendcruz22/Medium-articles/tree/master/Plotting charts with Seaborn
感謝你的閱讀!
[1] Seaborn文檔:https://seaborn.pydata.org/
原文鏈接:https://towardsdatascience.com/plotting-charts-with-seaborn-e843c7de2287
聯(lián)系客服