掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
本文將介紹3個在數(shù)據(jù)集中查找離群值的Python方法。

新鄉(xiāng)網(wǎng)站建設公司創(chuàng)新互聯(lián)建站,新鄉(xiāng)網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經驗。已為新鄉(xiāng)上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿網(wǎng)站制作要多少錢,請找那個售后服務好的新鄉(xiāng)做網(wǎng)站的公司定做!
離群值(Outliers)是指在數(shù)據(jù)集中與其他數(shù)據(jù)點明顯不同或者異常的數(shù)據(jù)點。這些數(shù)據(jù)點可能比其他數(shù)據(jù)點要遠離數(shù)據(jù)集的中心,或者具有異常的數(shù)值。離群值可能是由于數(shù)據(jù)采集錯誤、異常事件、測量誤差或者其他未知因素引起的。
離群值的存在可以對數(shù)據(jù)分析和統(tǒng)計建模產生重要影響,因為它們可能導致模型不準確或者產生誤導性的結果。
我們先創(chuàng)建一個演示的數(shù)據(jù)
import pandas as pd
import matplotlib.pyplot as plt
name = ['John', 'Victor', 'Carlos', 'Leo', 'Kevin', 'Silva', 'Johnson', 'Lewis', 'George', 'Daniel', 'Harry', 'Jordan', 'James']
salary = [4000, 1000, 2000, 100000, 3500, 6000, 1500, 3000, 2500, 3600, 2100, 1700, 1600]
df = pd.DataFrame({'Name': name, 'Salary': salary})
plt.boxplot(df['Salary'])
plt.show()可以看到上面的點就是離群值,下面我們將介紹快速找到它的方法。
首先找到第一和第三個四分位數(shù)值,通常記為Q1和Q3。然后用Q3減去Q1計算四分位差(IQR)。
通過減去/增加1.5倍IQR來計算下界和上界。上下邊界外的值就是離群值
q1 = df['Salary'].quantile(0.25)
q3 = df['Salary'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
outliers = df[(df['Salary'] < lower_bound) | (df['Salary'] > upper_bound)]1.5倍IQR的閾值通常是一種常用的標準,閾值的選擇可以根據(jù)具體情況進行調整。有時候,也可以選擇更嚴格或更寬松的閾值,以適應特定的數(shù)據(jù)分析需求。
標準偏差法(Standard Deviation Method)使用數(shù)據(jù)的標準差來判斷數(shù)據(jù)點是否偏離了數(shù)據(jù)。上界和下界是均值和3倍標準差的加減。
他的方法如下:
計算平均值和標準偏差:首先,計算數(shù)據(jù)的平均值(Mean)和標準偏差(Standard Deviation)。平均值代表了數(shù)據(jù)的中心位置,標準偏差衡量了數(shù)據(jù)的分散程度。
確定閾值:定義一個閾值,通常是標準偏差的倍數(shù)(通常為2或3倍標準偏差)。這個閾值決定了什么樣的數(shù)據(jù)點被認為是離群值。
識別離群值:計算每個數(shù)據(jù)點與平均值之間的差值,然后將這個差值與閾值比較。如果差值超過了閾值,數(shù)據(jù)點被認為是離群值。
mean = df.Salary.mean()
std = df.Salary.std()
upper_bound = mean + 3 * std
lower_bound = mean - 3 * std
outliers = df[(df['Salary'] < lower_bound) | (df['Salary'] > upper_bound)]標準偏差法的優(yōu)點在于簡單易懂,而且不需要假設數(shù)據(jù)分布的形狀。但需要注意以下幾點:
Z-分數(shù)(Z-Score)法測量了數(shù)據(jù)點與數(shù)據(jù)集平均值之間的偏差,以標準化方式表示這個偏差。對于每個數(shù)據(jù)點,計算它與平均值之間的差值,然后將這個差值除以標準偏差,得到Z-分數(shù)。如果z-score大于3.0或小于-3.0,則該值可歸類為離群值。
我們可以直接使用scipy提供的函數(shù)來進行計算
from scipy import stats
df['Salary_zscore'] = stats.zscore(df['Salary'])
filtered_df = df[(df['Salary_zscore'] <= 3) & (df['Salary_zscore'] >= -3)]Z-分數(shù)法適用于各種類型的數(shù)據(jù)分布,不需要假設數(shù)據(jù)分布的形狀。并且提供了標準化的度量,使得不同數(shù)據(jù)集之間的離群值比較更加容易。
以上是可以快速找到離群值的統(tǒng)計學方法,除此以外,還有一些機器學習的方法例如:
DBSCAN(Density-Based Spatial Clustering of Applications with Noise):DBSCAN是一種密度聚類算法,也可用于檢測離群值。它根據(jù)數(shù)據(jù)點的密度來識別離群值,將密度較低的點視為離群值。
LOF(Local Outlier Factor):LOF是一種局部離群值因子方法,用于檢測局部區(qū)域內的離群值。它考慮了每個數(shù)據(jù)點周圍的局部密度與相鄰點的密度之間的比率,從而識別離群值。
Isolation Forest:Isolation Forest是一種基于隨機森林的離群值檢測方法,它通過構建樹結構來識別離群值。由于使用了隨機性,它對高維數(shù)據(jù)和大數(shù)據(jù)集非常有效。
但是這些方法執(zhí)行的速度會很慢,如果對于速度要求比較嚴格還是需要謹慎選擇。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流