首頁 > 軟體

Python+Seaborn繪製分佈圖的範例詳解

2022-05-28 18:01:28

前言

在本文中,我們將介紹10個範例,以掌握如何使用用於Python的Seaborn庫建立圖表。

任何資料產品的第一步都應該是理解原始資料。對於成功和高效的產品,這一步驟佔據了整個工作流程的很大一部分。

有幾種方法用於理解和探索資料。其中之一是建立資料視覺化。它們幫助我們探索和解釋資料。

通過建立適當和設計良好的視覺化,我們可以發現資料中的底層結構和關係。

分佈區在資料分析中起著至關重要的作用。它們幫助我們檢測異常值和偏態,或獲得集中趨勢(平均值、中值和模態)度量的概述。

對於範例,我們將使用Kaggle上可用的墨爾本住房資料集中的一個小樣本。

我們從匯入庫並將資料集讀入Pandas資料框開始。

import pandas as pd 
import seaborn as sns 
sns.set(style="darkgrid", font_scale=1.2) 
df = pd.read_csv( 
  "/content/melb_housing.csv",  
  usecols=["Regionname", "Type", "Rooms", "Distance", "Price"] 
) 
df.head()

該資料集包含了墨爾本房屋的一些特徵及其價格。

Seaborn的離散函數允許建立3種不同型別的分佈區,分別是:

  • 柱狀圖
  • Kde(核密度估計)圖
  • Ecdf圖

我們只需要調整kind引數來選擇plot的型別。

範例 1

第一個例子是建立一個基本直方圖。它將連續變數的取值範圍劃分為離散的箱子,並顯示每個箱子中有多少個值。

sns.displot( 
  data=df, 
  x="Price", 
  kind="hist", 
  aspect=1.4 
)

我們將df的名稱傳遞給資料引數。引數x接受要繪製的列名。aspect引數調整大小的寬高比。它也可以改變高度。

範例 2

在第一個例子中,我們可以清楚地看到價格欄中有一些異常值。柱狀圖在右邊有一條長尾,這表明價格非常高的房子很少。

減少這種異常值影響的一種方法是對值取對數。displot函數可以使用log_scale引數執行此操作。

sns.displot( 
  data=df, 
  x="Price", 
  kind="hist", 
  aspect=1.4, 
  log_scale=10 
)

價格以10的冪表示。現在我們對房價的分佈有了一個更好的概述。

範例 3

我們還可以調整直方圖中的箱數量。在某些情況下,最好使用較少的箱數量,這樣我們就可以得到一個更結構化的概述。

用於此調整的引數是box。

sns.displot( 
  data=df, 
  x="Price", 
  kind="hist", 
  aspect=1.4, 
  log_scale=10, 
  bins=20 
)

範例 4

資料集還包含分類變數。例如,型別列有3個類別,分別是h(房屋)、t(聯排房屋)和u(單位)。我們可能需要分別檢查每款的分佈情況。

一種選擇是在相同的視覺化中用不同的顏色顯示它們。我們只需要將列的名稱傳遞給hue引數。

sns.displot( 
  data=df, 
  x="Price", 
  hue="Type", 
  kind="hist", 
  aspect=1.4, 
  log_scale=10, 
  bins=20 
)

這個圖為我們提供了2條資訊:

  • 每個類別的大小與房屋的數量有關。h類是最大的一類。
  • 每類房屋的價格分佈。

範例 5

另一個檢查每個類別分佈的選項是建立單獨的子圖。我們可以對這個任務使用col或row引數。給定列中的每個類別都有一個子圖。

sns.displot( 
  data=df, 
  x="Price", 
  col="Type", 
  kind="hist", 
  aspect=1.4, 
  log_scale=10, 
  bins=20 
)

例子 6

displot函數還允許生成二維直方圖。因此,我們得到了關於兩列中值的觀察值(即行)分佈的概述。

我們使用價格和距離列建立一個。我們只是將列名傳遞給x和y引數。

sns.displot( 
  data=df, 
  x="Price", 
  y="Distance", 
  col="Type", 
  kind="hist", 
  height=5, 
  aspect=1.2, 
  log_scale=(10,0), 
  bins=20 
)

較暗的區域密度更大,所以它們包含了更多的觀測資料。兩列看起來都是正態分佈,因為密集的區域在中心。

你可能已經注意到,我們使用了一個元組作為log_scale引數的引數。因此,我們可以為每個列傳遞不同的比例。

例子 7

Kde圖還可以用於視覺化變數的分佈。它們和直方圖很相似。然而,kde圖使用連續的概率密度曲線來表示分佈,而不是使用離散的箱。

kind引數設定為“kde”,以生成kde圖。

sns.displot( 
  data=df, 
  x="Price", 
  kind="kde", 
  aspect=1.4, 
  log_scale=10 
)

範例 8

與直方圖類似,可以為不同的類別分別繪製kde圖。我們的資料集包含房屋的區域資訊。我們看看不同地區的價格變化。

sns.displot( 
  data=df, 
  x="Price", 
  hue="Regionname", 
  kind="kde", 
  height=6, 
  aspect=1.4, 
  log_scale=10 
)

南方大都市區的平均房價似乎最高。

範例 9

另一種檢查變數分佈的方法是使用ecdf圖。它表示低於給定列中每個唯一值的觀察值的比例或計數。

這是一種視覺化的累計和。因此,我們能夠看到更密集的值範圍。

sns.displot( 
  data=df, 
  x="Distance", 
  kind="ecdf", 
  height=6, 
  aspect=1.4, 
  stat="count" 
)

曲線斜率高的值範圍有更多的觀測值。例如,我們沒有很多房子的距離超過30。與此相反,在10到15的距離範圍內有很多房子。

範例10

ecdf圖也支援hue、col和row引數。因此,我們可以在一個列中區分不同類別之間的分佈。

sns.displot( 
  data=df, 
  x="Distance", 
  kind="ecdf", 
  hue="Type", 
  height=6, 
  aspect=1.4, 
  stat="count" 
)

對於資料分析或機器學習任務,瞭解變數(即特徵)的分佈是非常重要的。我們如何處理給定的任務可能取決於分佈。

在這篇文章中,我們看到了如何使用Seaborn的displot函數來分析價格和距離欄的分佈。

以上就是Python+Seaborn繪製分佈圖的範例詳解的詳細內容,更多關於Python Seaborn分佈圖的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com