Python中得可視化:使用Seaborn繪製經常使用圖表


Seaborn是Python中的一個庫,主要用於生成統計圖形。python

Seaborn是構建在matplotlib之上的數據可視化庫,與Python中的pandas數據結構緊密集成。可視化是Seaborn的核心部分,能夠幫助探索和理解數據。微信

要了解Seaborn,就必須熟悉NumpyMatplotlib以及pandas數據結構

Seaborn提供如下功能:app

  1. 面向數據集的API來肯定變量之間的關係。less

  2. 線性迴歸曲線的自動計算和繪製。機器學習

  3. 它支持對多圖像的高級抽象繪製。編輯器

  4. 可視化單變量和雙變量分佈。ide

這些只是Seaborn提供的功能的一部分,還有不少其餘功能,咱們能夠在這裏探索全部的功能。函數

要引入Seaborn庫,使用的命令是:工具

 import seaborn as sns

使用Seaborn,咱們能夠繪製各類各樣的圖形,如:

  1. 分佈曲線

  2. 餅圖和柱狀圖

  3. 散點圖

  4. 配對圖

  5. 熱力圖

在文章中,咱們使用從Kaggle下載的谷歌Playstore數據集。

1.分佈曲線

咱們能夠將Seaborn的分佈圖與Matplotlib的直方圖進行比較。它們都提供很是類似的功能。這裏咱們畫的不是直方圖中的頻率圖,而是y軸上的近似機率密度。

咱們將在代碼中使用sns.distplot()來繪製分佈圖。

在進一步以前,首先,讓咱們訪問咱們的數據集,

 import pandas as pd
 import numpy as np
 pstore = pd.read_csv("googleplaystore.csv")
 pstore.head(10)

從咱們的系統訪問數據集

數據集是這樣的,

從Kaggle得到的谷歌播放商店數據集

如今,讓咱們看看若是咱們繪製來自上述數據集的「Rating」列的分佈圖是怎樣的,

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Create a distribution plot for rating
 sns.distplot(pstore.Rating)
 plt.show()

Rating列分佈圖的代碼

Rating列的分佈圖是這樣的,

在這裏,曲線(KDE)顯示在分佈圖上的是近似的機率密度曲線。

與matplotlib中的直方圖相似,在分佈方面,咱們也能夠改變類別的數量,使圖更容易理解。

咱們只須要在代碼中加上類別的數量,

 #Change the number of bins
 sns.distplot(inp1.Rating, bins=20, kde = False)
 plt.show()

圖像是這樣的,

特定類別數的分佈圖

在上圖中,沒有機率密度曲線。要移除曲線,咱們只需在代碼中寫入' kde = False '

咱們還能夠向分佈圖提供與matplotlib相似的容器的標題和顏色。讓咱們看看它的代碼,

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Create a distribution plot for rating
 sns.distplot(pstore.Rating, bins=20, color="g")
 plt.title("Distribution of app ratings", fontsize=20, color = 'red')
 plt.show()

同一列Rating的分佈圖是這樣的:

有標題的分佈圖

對Seaborn圖形進行樣式化

使用Seaborn的最大優點之一是,它爲圖形提供了普遍的默認樣式選項。

這些是Seaborn提供的默認樣式。

 'Solarize_Light2',
  '_classic_test_patch',
  'bmh',
  'classic',
  'dark_background',
  'fast',
  'fivethirtyeight',
  'ggplot',
  'grayscale',
  'seaborn',
  'seaborn-bright',
  'seaborn-colorblind',
  'seaborn-dark',
  'seaborn-dark-palette',
  'seaborn-darkgrid',
  'seaborn-deep',
  'seaborn-muted',
  'seaborn-notebook',
  'seaborn-paper',
  'seaborn-pastel',
  'seaborn-poster',
  'seaborn-talk',
  'seaborn-ticks',
  'seaborn-white',
  'seaborn-whitegrid',
  'tableau-colorblind10'

咱們只須要編寫一行代碼就能夠將這些樣式合併到咱們的圖中。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Adding dark background to the graph
 plt.style.use("dark_background")
 
 #Create a distribution plot for rating
 sns.distplot(pstore.Rating, bins=20, color="g")
 plt.title("Distribution of app ratings", fontsize=20, color = 'red')
 plt.show()

在將深色背景應用到咱們的圖表後,分佈圖看起來是這樣的,

深色背景的分佈圖

2.餅圖和柱狀圖

餅圖一般用於分析數字變量在不一樣類別之間如何變化。

在咱們使用的數據集中,咱們將分析內容Rating欄中的前4個類別的執行狀況。

首先,咱們將對內容Rating列進行一些數據清理/挖掘,並檢查其中的類別。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Analyzing the Content Rating column
 pstore['Content Rating'].value_counts()

類別列表是,

Rating列數

根據上面的輸出,因爲「只有18歲以上的成年人」和「未分級」的數量比其餘的要少得多,咱們將從內容分級中刪除這些類別並更新數據集。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Remove the rows with values which are less represented
 pstore = pstore[~pstore['Content Rating'].isin(["Adults only 18+","Unrated"])]
 
 #Resetting the index
 pstore.reset_index(inplace=True, drop=True)
 
 #Analyzing the Content Rating column again
 pstore['Content Rating'].value_counts()

更新後在「Rating」欄中出現的類別是:

更新數據集後的Rating計數

如今,讓咱們爲Rating列中出現的類別繪製餅圖。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Plotting a pie chart
 plt.figure(figsize=[9,7])
 pstore['Content Rating'].value_counts().plot.pie()
 plt.show()

上面代碼的餅狀圖以下所示,

用於Rating的餅狀圖

從上面的餅圖中,咱們不能正確的推斷出「全部人10+」和「成熟17+」。當這兩類人的價值觀有點類似的時候,很難評估他們之間的差異。

咱們能夠經過將上述數據繪製成柱狀圖來克服這種狀況。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Plotting a bar chart
 plt.figure(figsize=[9,7])
 pstore['Content Rating'].value_counts().plot.barh()
 plt.show()

柱狀圖以下所示,

Rating欄的條形圖

與餅圖相似,咱們也能夠定製柱狀圖,使用不一樣的柱狀圖顏色、圖表標題等。

3.散點圖

到目前爲止,咱們只處理數據集中的一個數字列,好比評級、評論或大小等。可是,若是咱們必須推斷兩個數字列之間的關係,好比「評級和大小」或「評級和評論」,會怎麼樣呢?

當咱們想要繪製數據集中任意兩個數值列之間的關係時,可使用散點圖。此圖是機器學習領域的最強大的可視化工具。

讓咱們看看數據集評級和大小中的兩個數字列的散點圖是什麼樣子的。首先,咱們將使用matplotlib繪製圖,而後咱們將看到它在seaborn中的樣子。

使用matplotlib的散點圖

 #import all the necessary libraries
 #Plotting the scatter plot
 plt.scatter(pstore.Size, pstore.Rating)
 plt.show()

圖是這樣的

使用Matplotlib的散點圖

使用Seaborn的散點圖

在直方圖和散點圖的代碼中,咱們將使用sn .joinplot()

sns.scatterplot()散點圖的代碼。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 # Plotting the same thing now using a jointplot
 sns.jointplot(pstore.Size, pstore.Rating)
 plt.show()

上面代碼的散點圖以下所示,

使用Seaborn的散點圖

在seaborn中使用散點圖的主要優勢是,咱們將同時獲得散點圖和直方圖。

若是咱們想在代碼中只看到散點圖而不是組合圖,只需將其改成「scatterplot」

迴歸曲線

迴歸圖在聯合圖(散點圖)中創建了2個數值參數之間的迴歸線,並有助於可視化它們的線性關係。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 # Plotting the same thing now using a jointplot
 sns.jointplot(pstore.Size, pstore.Rating, kind = "reg")
 plt.show()

圖是這樣的,

在Seaborn中使用jointplot進行迴歸分析

從上圖中咱們能夠推斷出,當app的價格上升時,評級會穩步上升。

4.配對圖

當咱們想要查看超過3個不一樣數值變量之間的關係模式時,可使用配對圖。例如,假設咱們想要了解一個公司的銷售如何受到三個不一樣因素的影響,在這種狀況下,配對圖將很是有用。

讓咱們爲數據集的評論、大小、價格和評級列建立一對圖。

咱們將在代碼中使用sns.pairplot()一次繪製多個散點圖。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 # Plotting the same thing now using a jointplot
 sns.pairplot(pstore[['Reviews', 'Size', 'Price','Rating']])
 plt.show()

上面圖形的輸出圖形是這樣的,

使用Seaborn的配對圖

  • 對於非對角視圖,圖像是兩個數值變量之間的散點圖

  • 對於對角線視圖,它繪製一個柱狀圖,由於兩個軸(x,y)是相同的。

5.熱力圖

熱圖以二維形式表示數據。熱圖的最終目的是用彩色圖表顯示信息的概要。它利用了顏色強度的概念來可視化一系列的值。

咱們在足球比賽中常常看到如下類型的圖形,

足球運動員的熱圖

在Seaborn中建立這個類型的圖。

咱們將使用sn .heatmap()繪製可視化圖。

當你有如下數據時,咱們能夠建立一個熱圖。

上面的表是使用來自Pandas的透視表建立的。

如今,讓咱們看看如何爲上表建立一個熱圖。

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 ##Plot a heat map
 sns.heatmap(heat)
 plt.show()

在上面的代碼中,咱們已經將數據保存在新的變量「heat」中。

熱圖以下所示,

使用Seaborn建立默認熱圖

咱們能夠對上面的圖進行一些自定義,也能夠改變顏色梯度,使最大值的顏色變深,最小值的顏色變淺。

更新後的代碼是這樣的,

 #importing all the libraries
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 #Applying some customization to the heat map
 sns.heatmap(heat, cmap = "Greens", annot=True)
 plt.show()

上面代碼的熱圖是這樣的,

帶有一些自定義的熱圖代碼

在咱們給出「annot = True」的代碼中,當annot爲真時,圖中的每一個單元格都會顯示它的值。若是咱們在代碼中沒有提到annot,那麼它的默認值爲False

Seaborn還支持其餘類型的圖形,如折線圖、柱狀圖、堆疊柱狀圖等。可是,它們提供的內容與經過matplotlib建立的內容沒有任何不一樣。

結論

這就是Seaborn在Python中的工做方式以及咱們能夠用Seaborn建立的不一樣類型的圖形。正如我已經提到的,Seaborn構建在matplotlib庫之上。所以,若是咱們已經熟悉Matplotlib及其函數,咱們就能夠輕鬆地構建Seaborn圖並探索更深刻的概念。

感謝您的閱讀!!



做者:Kaushik Katari

deephub翻譯組:孟翔傑


DeepHub

微信號 : deephub-imba

每日大數據和人工智能的重磅乾貨

大廠職位內推信息

長按識別二維碼關注 ->

喜歡就請三連暴擊!    


本文分享自微信公衆號 - DeepHub IMBA(deephub-imba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索