您現在的位置是:首頁 > 運動
機器學習庫—seaborn繪製繪製統計圖形
數集都可以用區間表示嗎
學習目標:
知道seaborn的基本使用
會繪製單變數分佈圖形
會繪製雙變數分佈圖形
會繪製成對的雙變數分佈圖形
Matplotlib雖然已經是比較優秀的繪相簿了,但是它有個今人頭疼的問題,那就是API使用過於複雜,它裡面有上千個函式和引數,屬於典型的那種可以用它做任何事,卻無從下手。
Seaborn基於 Matplotlib核心庫進行了更高階的API封裝,可以輕鬆地畫出更漂亮的圖形,而Seaborn的漂亮主要體現在配色更加舒服,以及圖形元素的樣式更加細膩。
不過,使用Seaborn繪製圖表之前,需要安裝和匯入繪圖的介面,具體程式碼如下:
# 安裝pip3 install seaborn
# 匯入import seaborn as sns
接下來,我們正式進入 Seaborn庫的學習:
1視覺化資料的分佈
當處理一組資料時,通常先要做的就是了解變數是如何分佈的。
對於單變數的資料來說 採用直方圖或核密度曲線是個不錯的選擇,
對於雙變數來說,可採用多面板圖形展現,比如 散點圖、二維直方圖、核密度估計圖形等。
針對這種情況, Seaborn庫提供了對單變數和雙變 量分佈的繪製函式,如 displot()函式、 jointplot()函式,下面來介紹這些函式的使用,具體內容如下:
2繪製單變數分佈
可以採用最簡單的直方圖描述單變數的分佈情況。 Seaborn中提供了 distplot()函式,它預設繪製的是一個帶有核密度估計曲線的直方圖。
distplot()函式的語法格式如下。
seaborn。distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, color=None)
上述函式中常用引數的含義如下:
(1) a:表示要觀察的資料,可以是 Series、一維陣列或列表。
(2) bins:用於控制條形的數量。
(3) hist:接收布林型別,表示是否繪製(標註)直方圖。
(4) kde:接收布林型別,表示是否繪製高斯核密度估計曲線。
(5) rug:接收布林型別,表示是否在支援的軸方向上繪製rugplot。
透過 distplot())函式繪製直方圖的示例如下。
import numpy as npsns。set()np。random。seed(0) # 確定隨機數生成器的種子,如果不使用每次生成圖形不一樣arr = np。random。randn(100) # 生成隨機陣列ax = sns。distplot(arr, bins=10, hist=True, kde=True, rug=True) # 繪製直方圖
上述示例中,首先匯入了用於生成陣列的numpy庫,然後使用 seaborn呼叫set()函式獲取預設繪圖,並且呼叫 random模組的seed函式確定隨
機數生成器的種子,保證每次產生的隨機數是一樣的,接著呼叫 randn()函式生成包含100個隨機數的陣列,最後呼叫 distplot()函式繪製直方圖。
執行結果如下圖所示。
從上圖中看出:
直方圖共有10個條柱,每個條柱的顏色為藍色,並且有核密度估計曲線。
根據條柱的高度可知,位於-1-1區間的隨機數值偏多,小於-2的隨機數值偏少。
通常,採用直方圖可以比較直觀地展現樣本資料的分佈情況,不過,直方圖存在一些問題,它會因為條柱數量的不同導致直方圖的效果有很大
的差異。為了解決這個問題,可以繪製核密度估計曲線進行展現。
核密度估計是在機率論中用來估計未知的密度函式,屬於非引數檢驗方法之一,可以比較直觀地看出資料樣本本身的分佈特徵。
透過 distplot()函式繪製核密度估計曲線的示例如下。
# 建立包含500個位於[0,100]之間整數的隨機陣列array_random = np。random。randint(0, 100, 500)# 繪製核密度估計曲線sns。distplot(array_random, hist=False, rug=True)
上述示例中,首先透過 random。randint()函式返回一個最小值不低於0、最大值低於100的500個隨機整數陣列然後呼叫 displot()函式繪製核密度估計曲線。
執行結果如圖所示:
從上圖中看出,圖表中有一條核密度估計曲線,並且在x軸的上方生成了觀測數值的小細條。
3繪製雙變數分佈
兩個變數的二元分佈視覺化也很有用。在 Seaborn中最簡單的方法是使用
jointplot()
函式,該函式可以建立一個多面板圖形,比如散點圖、二維直方圖、核密度估計等,以顯示兩個變數之間的雙變數關係及每個變數在單座標軸上的單變數分佈。
jointplot()函式的語法格式如下。
seaborn。jointplot(x, y, data=None,kind=‘scatter’, stat_func=None, color=None,ratio=5, space=0。2, dropna=True)
上述函式中常用引數的含義如下:
(1) kind:表示繪製圖形的型別。
(2) stat_func:用於計算有關關係的統計量並標註圖。
(3) color:表示繪圖元素的顏色。
(4) size:用於設定圖的大小(正方形)。
(5) ratio:表示中心圖與側邊圖的比例。該引數的值越大,則中心圖的佔比會越大。
(6) space:用於設定中心圖與側邊圖的間隔大小。
下面以散點圖、二維直方圖、核密度估計曲線為例,為大家介紹如何使用 Seaborn繪製這些圖形。
3。1繪製散點圖
呼叫 seaborn。jointplot()函式繪製散點圖的示例如下。
import numpy as npimport pandas as pdimport seaborn as sns# 建立DataFrame物件dataframe_obj = pd。DataFrame({“x”: np。random。randn(500),“y”: np。random。randn(500)})# 繪製散佈圖sns。jointplot(x=“x”, y=“y”, data=dataframe_obj)
上述示例中,首先建立了一個 DataFrame物件 dataframe_obj作為散點圖的資料,其中x軸和y軸的資料均為500個隨機數,接著呼叫 jointplot0函式繪製一個散點圖,散點圖x軸的名稱為“x”,y軸的名稱為“y”。
執行結果如圖所示。
3。2繪製二維直方圖
二維直方圖類似於
“
六邊形
”
圖,主要是因為它顯示了落在六角形區域內的觀察值的計數,適用於較大的資料集。當呼叫 jointplot()函式時,只
要傳入kind=“hex”,就可以繪製二維直方圖,具體示例程式碼如下。
# 繪製二維直方圖sns。jointplot(x=“x”, y=“y”, data=dataframe_obj, kind=“hex”)
執行結果如圖所示。
從六邊形顏色的深淺,可以觀察到資料密集的程度,另外,圖形的上方和右側仍然給出了直方圖。注意,在繪製二維直方圖時,最好使用白色背景。
3。3繪製核密度估計圖形
利用核密度估計同樣可以檢視二元分佈,其用等高線圖來表示。當呼叫jointplot()函式時只要傳入ind=“kde”,就可以繪製核密度估計圖形,具體示例程式碼如下:
sns。jointplot(x=“x”, y=“y”, data=dataframe_obj, kind=“kde”)
上述示例中,繪製了核密度的等高線圖,另外,在圖形的上方和右側給出了核密度曲線圖。
執行結果如圖所示。
透過觀等高線的顏色深淺,可以看出哪個範圍的數值分佈的最多,哪個範圍的數值分佈的最少
4繪製成對的雙變數分佈
要想在資料集中繪製多個成對的雙變數分佈,則可以使用pairplot()函式實現,該函式會建立一個座標軸矩陣,並且顯示Datafram物件中每對變
量的關係。另外,pairplot()函式也可以繪製每個變數在對角軸上的單變數分佈。
接下來,透過 sns。pairplot()函式繪製資料集變數間關係的圖形,示例程式碼如下 :
# 載入seaborn中的資料集dataset = sns。load_dataset(“iris”)dataset。head()
上述示例中,透過 load_dataset0函式載入了seaborn中內建的資料集,根據iris資料集繪製多個雙變數分佈。
# 繪製多個成對的雙變數分佈sns。pairplot(dataset)
結果如下圖所示。
推薦文章
- 你有幾張睡眠信用卡嗎?注意,再不用銀行要停卡銷戶了
三家銀行發公告將停止長期睡眠卡服務9月9日,浙江民泰商業銀行釋出公告稱,為切實保障客戶名下民泰信用卡的用卡安全和合法權益,該行將陸續對髮卡滿12個月以上仍未啟用或已啟用卻連續滿12個月以上未發生主動交易等情形的睡眠信用卡停止用卡服務並辦理銷...
- 左右互搏術和降龍十八掌,哪個更厲害?為何左右互搏敗給降龍十八掌
《射鵰英雄傳》當中,傳奇武功眾多,周伯通的左右互搏術和洪七公、郭靖的降龍十八掌極為有名,那麼這兩門武功哪個更厲害呢...
- 14人罹難:鄭州暴雨洪水倒灌,地鐵無排水能力?專家詳解原因
據瞭解,關於地鐵進水的原因,鄭州官方給出的說法是,17日以來的罕見特大降雨,造成了地鐵五號線五龍口停車場及其周邊區域嚴重積水,當日傍晚6點左右,積水沖垮出入場線擋水牆進入了正線區間,導致列車停運...