【matplotlib 實戰】--散點圖

2023-10-18 12:02:10

散點圖,又名點圖、散佈圖、X-Y圖,是將所有的資料以點的形式展現在平面直角座標系上的統計圖表。

散點圖常被用於分析變數之間的相關性。
如果兩個變數的散點看上去都在一條直線附近波動,則稱變數之間是線性相關的;
如果所有點看上去都在某條曲線(非直線)附近波動,則稱此相關為非線形相關的;
如果所有點在圖中沒有顯示任何關係,則稱變數間是不相關的。

散點圖一般需要兩個不同變數,一個沿x軸繪製,另一個沿y軸繪製。
眾多的散點疊加後,有助於展示資料集的「整體景觀」,從而幫助我們分析兩個變數之間的相關性,或找出趨勢和規律。

1. 主要元素

散點圖的主要元素包括:

  1. 橫軸:表示自變數。
  2. 縱軸:表示因變數。
  3. 資料點:每個資料點代表一個觀測值,它在座標軸上的位置表示兩個變數的對應取值。
  4. 趨勢線:趨勢線是通過資料點擬合出的一條線,用於顯示變數之間的趨勢或關聯性。

2. 適用的場景

散點圖適用的分析場景包括:

  • 變數關係探索:幫助我們觀察和理解兩個變數之間的關係。通過觀察資料點的分佈情況和趨勢線的形狀,可以判斷變數之間是否存線上性關係、非線性關係或無關係。
  • 趨勢分析:用於分析趨勢和預測。通過觀察趨勢線的方向和斜率進行預測。
  • 群體分析:散點圖可以幫助我們觀察和識別資料點的聚類情況。
  • 異常值檢測:散點圖可以用於檢測異常值或離群點。

3. 不適用的場景

散點圖不適用的分析場景包括:

  1. 時間序列分析:散點圖主要用於展示兩個變數之間的關係,對於時間序列資料,通常使用折線圖或其他適合展示時間變化的圖表型別。
  2. 多變數分析:散點圖只能展示兩個變數之間的關係,對於多個變數之間的關係分析,需要使用其他圖表型別,如散點矩陣、平行座標圖等。
  3. 分佈分析:散點圖主要關注變數之間的關係,而不是變數本身的分佈情況。如果需要分析變數的分佈特徵,可以使用直方圖、箱線圖等圖表型別。

4. 分析實戰

散點圖適合尋找兩個變數之間的關係,本次分析 **空氣汙染 **方面的資料情況。

4.1. 資料來源

資料來源國家統計局公開的資料。
用到的兩個統計資料分別是:

  1. 工業汙染治理中,每年治理廢氣的投資額
  2. 廢氣中二氧化硫的每年排放量情況

整理好的資料可從下面的地址下載:
https://databook.top/nation/A0C
A0C05.csv(廢氣中主要汙染物排放) 和 A0C0I.csv(工業汙染治理投資) 兩個檔案。

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

df1 = pd.read_csv(fp)
df1

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

df2 = pd.read_csv(fp)
df2

4.2. 資料清理

2022年資料是空的,所以從兩個檔案中分別提取 2012~2021年期間,彙總所有廢氣排放量(萬噸)和**治理廢氣專案完成投資(萬元) **兩類資料繪製圖形。

#所有廢氣的排放量
data_x = df1[(df1["sj"] >= 2012) &
            (df1["sj"] <= 2021)]
data_x = data_x.loc[:, ["sj", "value"]]
data_x = data_x.groupby("sj").sum("value")

#治理廢氣專案投資 A0C0I03是治理廢氣投資的編號
data_y = df2[(df2["sj"] >= 2012) &
            (df2["sj"] <= 2021) &
            (df2["zb"] == "A0C0I03")]
data_y = data_y.sort_index(ascending=False)

4.3. 分析結果視覺化

with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.6, 0.6])

    ax.scatter(data_x["value"], data_y["value"]/10000)
    ax.set_xlabel("廢氣排放量(萬噸)")
    ax.set_ylabel("治理廢氣專案完成投資(億元)")

從分析結果圖中來看,排放的廢氣量越大的時候,治理的投資費用也越高。

但是右下角紅色框內有一個異常值,那個是2012年的資料。
估計那時候還不太重視環保,所以即使那時候廢氣排放量大,用於治理廢氣的投資費用也不高。