譯者 | Lemon
本文屬於 Seaborn 的基礎教程,介紹了直方圖、聯合分佈圖、矩陣圖、箱形圖等。通過本文可以看出,使用 seaborn 可以輕鬆的進行數據可視化。
Seaborn 是一個數據可視化庫,可幫助在Python中創建有趣的數據可視化。 大多數數據分析需要識別趨勢和建立模型,本文將幫助你開始使用 Seaborn庫創建數據可視化。
首先,你應該在 jupyter notebook 中鍵入以下命令。
import pandas as pd # Pandas
import numpy as np # Numpy
import matplotlib.pyplot as plt # Matplotlibrary
import seaborn as sns # Seaborn Library
%matplotlib inline
sns.set()
直方圖 (Distplot)
sns.distplot()結合直方圖並繪製核密度估計圖。 這裡 bin 區間大小是自動計算的。
sns.distplot(data[“variablename”])
我們將使用以下代碼在 jupyter notebook 中加載數據集:
# Load the Dataset in Python
tips = sns.load_dataset("tips")
tips.head()
現在,由於我們已經加載了數據集,我們將使用 “total_bill” 變量創建第一個圖。讓我們從 tips數據集創建 “total_bill” 變量的 distplot。
sns.distplot(tips["total_bill"], bins=16, color="purple")
# Binsize is calculated using square-root of row count.
現在,我們來對上述代碼進行進一步描述:
- sns.distplot — 這個命令將啟動 distplot 的初始創建;
- tips[“total_bill”] — 從 tips 數據集(數據框)中取出列(total_bill)。在這裡,我們應該觀察一下,可以使用方括號來拉取列值,並且列名應該用引號括起來(雙引號/單引號)都被接受。
我們推測—— “total_bill”變量本質上是傾斜的,大多數帳單值都在 $10 - $20 範圍內。
聯合分佈圖 (Jointplot)
聯合分佈圖 (Jointplot)採用兩個變量並一起創建直方圖和散點圖。讓我們看一下 jointplot 的語法。
sns.jointplot(x = , y =, data=)
讓我們從 tips數據集創建 total_bill 和 tip變量的聯合分佈圖。通常,任何餐廳的小費金額取決於總賬單/賬單大小。代碼如下:
sns.jointplot(x = "total_bill", y = "tip", data = tips, color="purple")
如上所述,散點圖似乎顯示總賬單和小費金額之間的強相關性。在它的頂部,我們可以看到各個變量的直方圖。
2.1 Jointplot :: kind =”hex”
直方圖的雙變量類比稱為“hexbin”圖,因為它顯示了六邊形區間內的觀察計數。此圖對於相對較大的數據集最有效,也稱為Hexbin Plots。
sns.jointplot(x = , y =, data=, kind=”hex”)
# Jointplot - Scatterplot and Histogram
sns.jointplot(x = "total_bill", y = "tip", data = tips, kind ="hex",
color="lightcoral")ips, kind ="hex",color="lightcoral")
有幾種類型的值可以放在 sns.jointplot 中來創建不同的圖。 默認情況下,聯合分佈圖顯示散點圖。 現在,在上面的情節圖中,它顯示了六邊形。六邊形的深色表示數據點的高密度,其中較淺的顏色表示較少的點。
kind 參數值可以是以下取值:
kind : { "scatter" | "reg" | "resid" | "kde" | "hex" }
下面,我們來看看 kind="kde" 的情形。
2.2 Jointplot :: kind =”kde”
# Jointplot - Scatterplot and Histogram
sns.jointplot(x = tips["total_bill"], y = tips["tip"],kind = "kde",
color="purple") # contour plot
上面顯示的圖表稱為輪廓圖。 輪廓圖(有時稱為“水平圖”)是一種在二維平面上顯示三維表面的方法。 它繪製了y軸上的兩個預測變量X Y和輪廓的響應變量Z。
矩陣圖 (Pairplot)
矩陣圖基本上繪製了變量之間的成對關係。 它支持用 “hue” 來為類別變量繪圖著色。
sns.pairplot(“dataframe”)
# Pairplot of Tips
sns.pairplot(tips, hue = "sex", palette="Set2")
# this will color the plot gender wise
下面我們來了解下矩陣圖的含義。對角線部分顯示了具有核密度估計的 distplot圖或直方圖,矩陣圖的上部和下部顯示散點圖。 “hue”使用列的類別為繪圖著色。
- hue = “sex” — 設置為按不同的性別進行著色;
- palette = “Set2” - “Set2” 是顏色的一個系列。
條形圖 (Barplot)
條形圖用於繪製分類列和數字列。 它在可視化中創建了條形。 讓我們用“性別”創建一個“total_bill”的條形圖,讓我們看看哪類人支付更多。
sns.barplot(x = , y =, data=)
# Barplot
sns.barplot(x ="sex" , y ="total_bill" , data=tips)
# Inference - Total Bill Amount for males is more than Females.
# Lets Plot Smoker Vs Total Bill :: The purpose is to find out if
# Smokers pay more bill than Non Smokers
sns.barplot(x = "smoker", y = "total_bill", data =tips)
# Inference - More Bill for Smokers
# Lets Find If There is more Bill In Weekend or Weekdays
sns.barplot(x = "day", y = "total_bill", data =tips)
# People tend to visit more on weekends
箱形圖 (Boxplot)
箱形圖 (Boxplot)是給定數據集的五點彙總統計的直觀表示,五個數字摘要包括:
- Minimum 最小值;
- First Quartile 1/4 值;
- Median (Second Quartile) 中位數;
- Third Quartile 3/4 值;
- Maximum 最大值。
此外,值得注意的一點是,為分類 - 連續變量創建了一個箱線圖,這意味著如果x軸是分類的並且y軸是連續的,則應創建箱線圖或小提琴圖。
讓我們從 tips數據集創建一個 “day” 和 “total_bill” 的箱線圖。
sns.boxplot(x = , y =, data=)
# Boxplot
sns.boxplot(x = "day", y = "total_bill", data=tips)
# Add hue to split the barplot. Making it more fancier
sns.boxplot(x = "day", y = "total_bill", data=tips, hue = "smoker")
# On Friday people have more bill if they are a Non smoker vs smoker
hue =“smoker”: - 它為吸菸者和非吸菸者創造了一個箱線圖。 例如: 在星期五的情況下,可以清楚地看到,與當天的吸菸者相比,非吸菸者的食物費用更多。
# Violin Plots
sns.violinplot(x = "day", y = "total_bill", data = tips)
小提琴圖跟箱形圖有些類似。他們之間的描述可以參考下面的圖示內容:
sns.lmplot 是繪製一個在散點圖中進行線性迴歸擬合的直線。 它遵循普通的最小二乘法,線代表最佳擬合線。為了更好地理解這一點,建議進一步瞭解一下線性迴歸的相關知識。
代碼如下:
# LM PLot
sns.lmplot(x = "total_bill", y = "tip", data = tips, hue="day")
上圖顯示了不同日期的total_bill變量的線性迴歸擬合,如圖例中所示,這是在 sns.lmplot 中使用 hue =“day” 獲得的。
恭喜! 你已完成 Seaborn 初學者教程。希望這篇文章能夠提供有關 Seaborn 的基本知識,並且可以幫助你創建所有這些圖。
作者:Lemon,氣候變化及新能源領域從業者,跨界玩Python,秉承“讓數據更有價值”的理念,希望能透過數據感知世界。
閱讀更多 CSDN 的文章