從 Matplotlib 中查詢異常值點


異常值,或與其他觀測值明顯不同的資料點,在資料分析中經常遇到。為了防止它們歪曲統計分析的結果,識別和處理這些異常值至關重要。在本技術部落格文章中,我們將研究如何使用 Matplotlib(一個著名的 Python 資料視覺化庫)查詢異常值點。

安裝和語法

流行的 Python 模組 Matplotlib 用於建立靜態、動畫和互動式視覺化。可以使用 Python 包安裝程式 pip 來安裝它。在您的終端中執行以下行來安裝 Matplotlib:

pip install matplotlib

Matplotlib 提供了多種查詢和顯示資料異常值的方法。最常用的方法是建立箱線圖的 boxplot() 函式,它提供了大量的自定義選項,並接受以下引數:

plt.boxplot(data, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None)

演算法

  • 使用 Matplotlib 的 boxplot() 函式生成資料的箱線圖。

  • 箱線圖中的框顯示資料的四分位距 (IQR),水平線顯示中位數。

  • 四分位距 (IQR) 是透過將第三四分位數 (Q3) 減去第一四分位數 (Q1) 來計算的 (Q3 - Q1)。使用公式 上限 = Q3 + 1.5*IQR下限 = Q1 - 1.5*IQR 來估計異常值的上限和下限。

  • 超出上限和下限的觀測值是異常值,箱線圖可以識別這些異常值。

  • annotate() 函式允許您命名異常值並在圖形中顯示其值或索引。

示例 1

import numpy as np
import matplotlib.pyplot as plt
# Generate random data
data = np.random.normal(size=100)
# Create boxplot
plt.boxplot(data)
# Show plot
plt.show()

在這個例子中,我們使用 NumPy 的 random.normal() 函式從正態分佈中生成 100 個隨機資料點。然後,我們使用 boxplot() 函式生成資料的箱線圖,並使用 show() 函式顯示它。生成的圖形顯示資料的分佈,並突出顯示超出須線的任何異常值。

輸出

示例 2

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Generate sample data
np.random.seed(42)
data = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C'])

# Create boxplot
plt.boxplot(data['B'])

# Show plot
plt.show()

建立一個包含 100 行和 3 列(名為 data (A、B 和 C))的 Pandas DataFrame。使用 NumPy 庫中的 np.random.randn() 方法,並生成隨機整數來填充 DataFrame。然後,Matplotlib 的 plt.boxplot() 生成 B 列的箱線圖,然後顯示生成的圖表。

輸出

示例 3

import seaborn as sns
import matplotlib.pyplot as plt
# Load data
tips = sns.load_dataset("tips")

# Create boxplot
sns.boxplot(x=tips["total_bill"])

# Show plot
plt.show()

在這個例子中,我們從 Seaborn 庫的內建 tips 資料集中載入資料。然後,我們使用 Seaborn 庫的 boxplot() 函式建立資料中特定列的箱線圖,並使用 show() 函式顯示它。

輸出

import numpy as np
import matplotlib.pyplot as plt

# Generate random data
np.random.seed(123)
data = np.random.normal(size=50)

# Add outliers
data = np.concatenate([data, [6, -7, 8]])

# Create boxplot
fig, ax = plt.subplots()
ax.boxplot(data)

# Set title and labels
ax.set_title('Boxplot of Data')
ax.set_xlabel('Data')
ax.set_ylabel('Values')

#Calculate and print outliers
q1, q3 = np.percentile(data, [25, 75])
iqr = q3 - q1
lower_bound = q1 - (1.5 * iqr)
upper_bound = q3 + (1.5 * iqr)
outliers = [x for x in data if x < lower_bound or x > upper_bound]
print("Outliers:", outliers)

#Show plot
plt.show()

輸出

Outliers: [6.0, -7.0, 8.0]

在這個例子中,我們首先使用 NumPy 的 `random.normal()` 方法生成 50 個來自正態分佈的隨機資料點。然後,我們向資料中新增三個異常值點,以演示 `boxplot()` 函式如何檢測異常值。我們使用 `boxplot()` 函式建立資料的箱線圖,並將圖形和軸物件分別儲存在變數 `fig``ax` 中。我們使用軸物件的 `set_title()`、`set_xlabel()``set_ylabel()` 方法設定標題和軸標籤。

為了計算異常值,我們首先使用 NumPy 的 `percentile()` 方法計算第一和第三四分位數 (Q1 和 Q3) 和四分位距 (IQR)。然後,我們使用公式 `下限 = Q1 - (1.5 * IQR)``上限 = Q3 + (1.5 * IQR)` 計算須線的上下限。最後,我們使用列表推導式列印位於須線之外的異常值。

應用

在資料分析和視覺化中,查詢異常值是一個關鍵步驟。異常值可能是罕見或異常事件、資料收集錯誤、資料輸入錯誤或測量錯誤,或者兩者兼而有之。透過識別和有效地處理異常值,我們可以確保統計研究和預測模型的準確性和可靠性。

結論

在本技術部落格文章中,我們研究瞭如何在 Matplotlib(一個著名的 Python 資料視覺化包)中識別異常值點。我們展示瞭如何建立資料的箱線圖以及如何使用四分位距方法識別異常值。我們還提供了使用 Matplotlib 識別和顯示資料中異常值的各種示例。透過使用這些方法,您可以確保資料分析和視覺化工作的準確性和可靠性。

更新於:2023年8月21日

1K+ 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.