用Seaborn繪製圖表

做者|Jenny Dcruz
編譯|VK
來源|Towards Datas Sciencegit

Seaborn是一個功能強大的Python庫,用於加強數據可視化。它爲Matplotlib提供了大量高級接口。Seaborn能夠很好地處理數據幀,而Matplotlib則不行,它可讓你以更簡單的方式繪製引人注目的圖表。github

爲了更好地理解本文,你須要瞭解pandas和matplotlib的基礎知識。若是沒有,能夠參考如下文章:bash

  1. 用Pandas進行數據分析:https://towardsdatascience.com/pandas-for-data-analysis-142be71f63dc機器學習

  2. 使用Matplotlib進行可視化:https://towardsdatascience.com/visualizations-with-matplotlib-4809394ea223函數

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

使用conda:.net

conda install pandas
conda install matplotlib
conda install seaborn

使用pip:3d

pip install pandas
pip install matplotlib
pip install seaborn

讓咱們首先導入所需的Python庫和數據集。code

你能夠在這裏找到本教程的CSV文件:https://github.com/jendcruz22/Medium-articles/tree/master/Plotting charts with Seabornblog

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/

相關文章
相關標籤/搜索