【matplotlib 實戰】--箱型圖

wang_yb發表於2023-10-30

箱型圖(Box Plot),也稱為盒須圖或盒式圖,1977年由美國著名統計學家約翰·圖基(John Tukey)發明。
是一種用作顯示一組資料分佈情況的統計圖,因型狀如箱子而得名。

它能顯示出一組資料的最大值、最小值、中位數及上下四分位數。
箱子的頂端和底端,分別代表上下四分位數。
箱子中間的是中位數線,它將箱子一分為二。從箱子延伸出去的線條展現出了上下四分位數以外的資料,由於這兩根延伸出去的線像是鬍鬚,因此箱形圖也被稱為盒須圖。

箱形圖最大的優勢是,它以一種簡單的方式,概括出一個或多個數值變數的分佈,同時又不會佔據太多空間。

1. 主要元素

它主要由以下五個元素組成:

  1. 最大值:表示資料的最大值,排除了異常值後的上限。
  2. 上四分位線:資料的上四分位數,將資料分為四等份,處於上邊緣和中位數之間的資料。也稱為第三四分位數。
  3. 中位數:資料的中位數,將資料分為兩等份,處於上四分位數和下四分位數之間的資料。也稱為第二四分位數。
  4. 下四分位線:資料的下四分位數,將資料分為四等份,處於中位數和下邊緣之間的資料。也稱為第一四分位數。
  5. 最小值:表示資料的最小值,排除了異常值後的下限。

圖片來自 antv 官網

2. 適用的場景

箱型圖適用於以下分析場景:

  • 資料分佈比較:比較不同組資料的分佈情況。透過將多個箱型圖放在一起,可以直觀地比較它們的中位數、四分位數和離群值等資訊,從而瞭解它們之間的差異。
  • 離群值檢測:檢測資料中的離群值。離群值是與其他資料點相比明顯偏離的資料點,它們可能是資料收集或記錄過程中的異常或錯誤。箱型圖中的離群點可以幫助識別這些異常值。
  • 資料中心趨勢和離散程度:透過中位數和四分位距(上四分位數與下四分位數之差)展示了資料的中心趨勢和離散程度。中位數提供了資料的中心位置,四分位距提供了資料的離散程度。
  • 資料分佈形狀:提供關於資料分佈形狀的一些資訊。例如,如果箱型圖的上下邊緣和中位數都接近,箱型圖可能顯示出對稱的分佈。如果箱型圖的上邊緣比下邊緣長,中位數偏向下邊緣,可能顯示出右偏分佈。

3. 不適用的場景

箱型圖不適用於以下分析場景:

  • 資料樣本過小:當資料樣本過小時,箱型圖可能無法提供足夠的資訊來準確描述資料的分佈情況。
  • 資料分佈複雜:當資料分佈非常複雜或包含多個峰值時,箱型圖可能無法完全捕捉到資料的特徵。
  • 資料缺失:如果資料中存在大量缺失值,箱型圖可能無法提供準確的分佈資訊。

4. 分析實戰

本次透過箱型圖分析我國三大產業對GDP的貢獻情況。

4.1. 資料來源

資料來自國家統計局公開的歷年資料,整理好的檔案從下面的地址下載:
https://databook.top/nation/A02

使用的是其中的 A0201.csv 檔案(國內生產總值)

fp = "d:/share/data/A0201.csv"

df = pd.read_csv(fp)
df

image.png

4.2. 資料清理

過濾出三大產業在2013年~2022年的增加值資料。

data = df[df["zb"].isin(["A020103", 
                         "A020104",
                         "A020105"])].copy()
data = data[data["sj"] > 2012]
data

其中,A020103A020104A020105 分別是三大產業的指標編號。

4.3. 分析結果視覺化

透過箱型圖展示三大產業的增加值情況:

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 1, 1])

graph = ax.boxplot(
    [
        data[data["zb"] == "A020103"].loc[:, "value"],
        data[data["zb"] == "A020104"].loc[:, "value"],
        data[data["zb"] == "A020105"].loc[:, "value"],
    ],
    vert=True,
    patch_artist=True,
    labels=["第一產業", "第二產業", "第三產業"]
)
ax.set_title("2013~2022 三大產業對GDP增加值(億元)")

colors = ['pink', 'lightblue', 'lightgreen']
for patch, color in zip(graph['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

image.png

從圖中可以看出,近10年來,第一產業的增加值明顯低於其他兩個產業。
第二第三產業的上下限的值相差比較大,說明增長或者下降比較明顯(看了資料,是增長明顯)。
第一產業的中位數(紅色的橫線)偏下半部分,說明多數的年份增加值比較低
第二產業的中位數(紅色的橫線)偏上半部分,說明多數的年份增加值比較高

相關文章