python使用箱型圖剔除異常值的實(shí)現(xiàn)方法
箱型圖

將一組數(shù)據(jù)從大到小排列,分別計(jì)算出,
- 上四分位數(shù)??3: 75%分位點(diǎn)所對(duì)應(yīng)的值
- 中位數(shù)??2: 50%分位點(diǎn)對(duì)應(yīng)的值
- 下四分位數(shù)??1: 25%分位點(diǎn)所對(duì)應(yīng)的值
- 上邊緣(須): Q3+1.5(Q3-Q1)
- 下邊緣(須): Q1-1.5(Q3-Q1)
數(shù)據(jù)??的合理范圍為:
??1 − 1.5(??3 − ??1) ≤ ?? ≤ ??3 + 1.5(??3 − ??1)
和使用3σ準(zhǔn)則剔除異常值相比,箱線圖不需要數(shù)據(jù)服從正態(tài)分布,能真實(shí)直觀的表現(xiàn)數(shù)據(jù)形狀;箱線圖以四分位數(shù)和四分位距作為判斷異常值的標(biāo)準(zhǔn),四分位數(shù)具有一定的耐抗性,多達(dá) 25%的數(shù)據(jù)可以變得任意遠(yuǎn)而不會(huì)很大地?cái)_動(dòng)四分位數(shù),使得異常值無法對(duì)數(shù)據(jù)形狀造成巨大影響,因此箱形圖識(shí)別異常值的結(jié)果比較客觀。
pandas.DataFrame.quantile
對(duì)于dataframe形式的數(shù)據(jù),可以直接調(diào)用DataFrame.quantile(),以快速計(jì)算箱型圖的分位點(diǎn)。
DataFrame.quantile(q=0.5, axis=0, numeric_only=True, interpolation='linear')
參數(shù):
- q:float or array-like, default 0.5 (50% quantile),0 ≤ q ≤ 1之間的值,即要計(jì)算的分位數(shù);
- axis:{0, 1, ‘index’, ‘columns’}, default 0,對(duì)于行,等于0或“索引”,對(duì)于列,等于1或“列”;
- numeric_only:bool, default True,如果為False,則還將計(jì)算日期時(shí)間和時(shí)間增量數(shù)據(jù)的分位數(shù);
- interpolation:{‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’},當(dāng)所需分位數(shù)位于兩個(gè)數(shù)據(jù)點(diǎn)i和j之間時(shí),此可選參數(shù)指定要使用的插值方法。
返回:(Series or DataFrame)
- 如果q是數(shù)組,則將返回DataFrame,其中index為q,列為self的列,值為分位數(shù)。
- 如果q為float,則index是self的列,值為分位數(shù)
示例:
import pandas as pd
import numpy as np
# 生成數(shù)據(jù)
d = pd.DataFrame({"SO2":[-1000, 5, 5, 10, 9, 12, 11, 100],
"NO2":[12, 52, 14, 10, 10, 23, 15, 9],
"CO2":[15, 23, 0, 24, 25, 7, 4, 715],
"O3":[17, 23, 33, 10000, 11, 47, 5, 22] })q 為 float:

q 為 數(shù)組:

代碼實(shí)現(xiàn)
# 箱型圖判斷異常點(diǎn)
def box_outlier(data):
df = data.copy(deep=True)
out_index = []
for col in df.columns: # 對(duì)每一列分別用箱型圖進(jìn)行判斷
Q1 = df[col].quantile(q=0.25) # 下四分位
Q3 = df[col].quantile(q=0.75) # 上四分位
low_whisker = Q1 - 1.5 * (Q3 - Q1) # 下邊緣
up_whisker = Q3 + 1.5 * (Q3 - Q1) # 上邊緣
# 尋找異常點(diǎn),獲得異常點(diǎn)索引值,刪除索引值所在行數(shù)據(jù)
rule = (df[col] > up_whisker) | (df[col] < low_whisker)
out = df[col].index[rule]
out_index += out.tolist()
df.drop(out_index, inplace=True)
return df使用前文創(chuàng)建的數(shù)據(jù)
box_outlier(d)

參考
【PYTHON 機(jī)器學(xué)習(xí)】正態(tài)分布檢驗(yàn)以及異常值處理3Σ原則
總結(jié)
到此這篇關(guān)于python使用箱型圖剔除異常值的文章就介紹到這了,更多相關(guān)python箱型圖剔除異常值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于PyTorch中nn.Module類的簡(jiǎn)介
這篇文章主要介紹了關(guān)于PyTorch中nn.Module類的簡(jiǎn)介,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Python Django 命名空間模式的實(shí)現(xiàn)
這篇文章主要介紹了Python Django 命名空間模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python Selenium網(wǎng)頁自動(dòng)化利器使用詳解
這篇文章主要為大家介紹了使用Python Selenium實(shí)現(xiàn)網(wǎng)頁自動(dòng)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
python如何求數(shù)組連續(xù)最大和的示例代碼
這篇文章主要介紹了python如何求數(shù)組連續(xù)最大和的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python實(shí)現(xiàn)的tcp端口檢測(cè)操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的tcp端口檢測(cè)操作,結(jié)合實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)tcp端口檢測(cè)功能的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
keras訓(xùn)練曲線,混淆矩陣,CNN層輸出可視化實(shí)例
這篇文章主要介紹了keras訓(xùn)練曲線,混淆矩陣,CNN層輸出可視化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python異步與定時(shí)任務(wù)提高程序并發(fā)性和定時(shí)執(zhí)行效率
Python異步與定時(shí)任務(wù)是Python編程中常用的兩種技術(shù),異步任務(wù)可用于高效處理I/O密集型任務(wù),提高程序并發(fā)性;定時(shí)任務(wù)可用于定時(shí)執(zhí)行計(jì)劃任務(wù),提高程序的執(zhí)行效率。這兩種技術(shù)的應(yīng)用有助于提升Python程序的性能和效率2023-05-05
Python提取PDF中的圖片的實(shí)現(xiàn)示例
本文主要介紹了Python提取PDF中的圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

