1. 程式人生 > 實用技巧 >用Seaborn繪製圖表

用Seaborn繪製圖表

作者|Jenny Dcruz
編譯|VK
來源|Towards Datas Science

Seaborn是一個功能強大的Python庫,用於增強資料視覺化。它為Matplotlib提供了大量高階介面。Seaborn可以很好地處理資料幀,而Matplotlib則不行,它可以讓你以更簡單的方式繪製引人注目的圖表。

為了更好地理解本文,你需要了解pandas和matplotlib的基礎知識。如果沒有,可以參考以下文章:

  1. 用Pandas進行資料分析:https://towardsdatascience.com/pandas-for-data-analysis-142be71f63dc

  2. 使用Matplotlib進行視覺化:

    https://towardsdatascience.com/visualizations-with-matplotlib-4809394ea223

確保系統中安裝了必要的庫:

使用conda:

conda install pandas
conda install matplotlib
conda install seaborn

使用pip:

pip install pandas
pip install matplotlib
pip install seaborn

讓我們首先匯入所需的Python庫和資料集。

你可以在這裡找到本教程的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設定為0,這表示我們將第一列視為索引。

使用seaborn和Pokemon(口袋妖怪)資料集的屬性,我們將建立一些非常有趣的視覺化效果。我們首先要看的是散點圖。

散點圖

散點圖使用點來表示不同數值變數的值。每個點在水平軸和垂直軸上的位置表示單個數據點的值。它們用於觀察變數之間的關係。

在seaborn中製作散點圖只需要使用“lmplot”函式。為此,我們將dataframe傳遞給data引數,然後傳入x和y軸的列名。

預設情況下,散點圖還顯示一條迴歸線,它是一條最適合資料的直線。

sns.lmplot(x=’Attack’, y=’Defense’, data=df)
plt.show()

在這裡你可以看到我們的散點圖,它顯示了進攻得分與防守得分的比較。

我們的迴歸線基本上顯示了兩軸之間的相關性。在這種情況下,它是向上傾斜的。也就是說當進攻得分越來越高,防守得分也會越來越高。要刪除迴歸線,可以將“fitreg”引數設定為false。

此外,我們可以通過設定hue引數來在Pokemon的進化階段著色。這個色調的引數是非常有用的,因為它允許你用顏色來表達第三維度的資訊。

sns.lmplot(x=’Attack’, y=’Defense’, data=df, fit_reg=False, hue=’Stage’)
plt.show()

散點圖看起來和之前的一樣,除了中間沒有迴歸線,而且每個點的顏色也不同。這些顏色只是顯示了每個小精靈的階段。Stage只是我們之前看到的資料中的另一個屬性。

通過這張圖,我們可以得出這樣的結論:在第一階段的pokemon(藍點)通常比在更高階段的pokemon得分更低。

箱線圖

箱線圖是常用於顯示資料分佈的重要圖之一。在seaborn中只需要一行程式碼就可以使用boxplot函式顯示箱線圖。在本例中,我們將使用除total、stage和legendary屬性之外的整個dataframe。

df_copy = df.drop([‘Total’, ‘Stage’, ‘Legendary’], axis=1)
sns.boxplot(data=df_copy)

在這裡我們可以看到每個屬性都有其各自的箱線圖。

箱線圖基於5個數字摘要,每個摘要以不同的行顯示。中間的線是中值,是資料的中心點。箱線圖末端的最底部和最頂部的線是四分位數1和4的中位數,基本上顯示了分佈的最小值和最大值。中間的另外兩條線是四分位數2和3的中位數,它們顯示了值與中位數之間的差異。超出此範圍的單點表示資料中的異常值。

小提琴圖

小提琴圖與箱線圖相似。小提琴圖是箱線圖非常有用的替代品。它們通過小提琴的厚度來顯示分佈,而不只是簡要的統計。眾所周知,小提琴圖在分析和視覺化資料集中不同屬性的分佈時非常方便。

在本例中,我們將使用上一個示例中的相同資料幀副本。

sns.violinplot(data=df_copy)
plt.show()

我們可以觀察到口袋妖怪每個屬性的值分佈。小提琴較厚的區域意味著值的密度更高。小提琴圖的中間部分通常比較厚,這意味著那裡的值密度很高。我們比較了下一個口袋妖怪的攻擊型別。為此,讓我們使用相同的小提琴繪圖方法。

plt.figure(figsize=(10,6))\sns.violinplot(x='Type 1', y='Attack', data=df)
plt.show()

這個圖顯示了每個口袋妖怪的主要型別的攻擊分數分佈。如你所見,“龍”型口袋妖怪的攻擊得分最高,但它們也有較高的方差,這意味著它們的攻擊分數也非常低。“Ghost”主型別的方差非常低,這意味著它們的大多數資料值都集中在中心。

熱圖

熱圖幫助你視覺化矩陣型別的資料。例如,我們可以將口袋妖怪不同屬性之間的所有關聯視覺化。

讓我們通過呼叫“corr”函式來計算資料幀的相關性,並使用“heatmap”函式繪製熱圖。

corr = df_copy.corr()
sns.heatmap(corr)

上面的熱圖顯示了我們資料幀的相關性。

長方體的顏色越淺,這兩個屬性之間的相關性就越高。例如,血量和口袋妖怪的整體速度之間的相關性非常低。因此,盒子的顏色是深色的。HP和防禦速度之間的相關性非常高,因此我們可以在熱圖中看到一個紅色方塊。我們可以看到,當一個屬性變高時,其他屬性也會變高,比如防守速度。

直方圖

直方圖允許你繪製數值分佈圖。如果我們要使用matplotlib來建立柱狀圖,那麼與使用seaborn建立柱狀圖相比,這將需要更多的工作。對於seaborn,只需要一行程式碼就可以建立。

例如,我們可以建立一個直方圖來繪製帶有攻擊屬性的分佈。

sns.distplot(df.Attack, color=’blue’)

我們可以看到大多數口袋妖怪都在50-100之間。我們可以看到,攻擊值大於100或小於50的口袋妖怪要少得多。

Calplots公司

與條形圖類似,calplots允許你視覺化每個類別變數的分佈。我們可以使用calplot來檢視每種主要型別中有多少口袋妖怪。

sns.countplot(x=’Type 1', data=df)
plt.xticks(rotation=-45)

我們可以看到,“水”類的口袋妖怪最多,而“仙女”和“冰”類的口袋妖怪最少。

密度圖

密度圖顯示兩個變數之間的分佈。例如,我們可以使用密度圖來比較口袋妖怪的兩個屬性:攻擊值、防禦值。我們將使用'jointplot'函式來完成此操作。

sns.jointplot(df.Attack, df.Defense, kind=’kde’, color=’lightblue’)

“kde”表示我們需要一個密度圖。

如你所見,繪圖區域在黑暗中的變化取決於區域中的值的數量。黑暗區域預示著一種非常牢固的關係。從這個圖中我們可以看出,當攻擊值在50到75之間時,防禦值在50左右。

關於這篇文章。我希望你喜歡用seaborn視覺化資料。

你可以在這裡找到本文的程式碼和資料集: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

歡迎關注磐創AI部落格站:
http://panchuang.net/

sklearn機器學習中文官方文件:
http://sklearn123.com/

歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/