最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python數據分析實戰(zhàn)指南之異常值處理

 更新時間:2022年01月24日 11:16:11   作者:sharon@zhang  
數據預處理是明確分析目標與思路之后進行數據分析的第一步,也是整個項目中最基礎、花費時間較長的工作,下面這篇文章主要給大家介紹了關于python數據分析實戰(zhàn)指南之異常值處理的相關資料,需要的朋友可以參考下

異常值

異常值是指樣本中的個別值,其數值明顯偏離其余的觀測值。異常值也稱離群點,異常值的分析也稱為離群點的分析。

常用的異常值分析方法為3σ原則、箱型圖分析、機器學習算法檢測,一般情況下對異常值的處理都是刪除和修正填補,即默認為異常值對整個項目的作用不大,只有當我們的目的是要求準確找出離群點,并對離群點進行分析時有必要用到機器學習算法,其他情況下不用費精力去分析他們

1、異常值定義

在統(tǒng)計學中,離群點是并不屬于特定族群的數據點,是與其它值相距甚遠的異常觀測。離群點是一種與其它結構良好的數據不同的觀測值。

例如,你可以很清楚地看到這個列表中的離群點:[20,24,22,19,29,18,4300,30,18]

當觀測值是一堆數字且都是一維時,辨別離群點很容易,但如果有數以千計的觀測值或數據是多維的,你可能會需要更機智的方法來檢測這些離群點。

2、異常值處理方式

2.1 均方差

3σ原則
如果數據服從正態(tài)分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過三倍標準差的值。
在正態(tài)分布下,距離平均值3σ之外的值出現的概率為 P(|x-μ|>3σ)<=0.003,屬于極個別的小概率事件。
如果數據不服從正態(tài)分布,也可以用遠離平均值的多少倍標準差來描述

這個原則有個前提條件:數據需要服從正態(tài)分布

在3∂原則下,如果觀測值與平均值的差值超過3倍標準差,那么可以將其視為異常值。
正負3∂的概率是99.7%,那么距離平均值3∂之外的值出現的概率為P(|x-u| > 3∂) <= 0.003,屬于極個別的小概率事件。

import numpy as np
import pandas as pd

def detect_outliers(data,threshold=3):
    mean_d = np.mean(data)
    std_d = np.std(data)
    outliers = []
    
    for y in data_d:
        z_score= (y - mean_d)/std_d 
        if np.abs(z_score) > threshold:
            outliers.append(y)
    return outliers

2.2 箱形圖

四分位間距 (IQR) 的概念被用于構建箱形圖。IQR 是統(tǒng)計學中的一個概念,通過將數據集分成四分位來衡量統(tǒng)計分散度和數據可變性。

簡單來說,任何數據集或任意一組觀測值都可以根據數據的值以及它們與整個數據集的比較情況被劃分為四個確定的間隔。四分位數會將數據分為三個點和四個區(qū)間。

四分位間距對定義離群點非常重要。它是第三個四分位數和第一個四分位數的差 (IQR = Q3 -Q1)。在這種情況下,離群點被定義為低于箱形圖下觸須(或 Q1 − 1.5x IQR)或高于箱形圖上觸須(或 Q3 + 1.5x IQR)的觀測值。

IQR是統(tǒng)計分散程度的一個度量,分散程度通過需要借助箱線圖來觀察,通常把小于 Q1 - 1.5 * IQR 或者大于 Q3 + 1.5 * IQR的數據點視作離群點,探測離群點的公式是:

outliers =  value < ( Q1 - 1.5 * IQR )  or value > ( Q3 + 1.5 * IQR )

這種探測離群點的方法,是箱線圖默認的方法,箱線圖提供了識別異常值/離群點的一個標準:

異常值通常被定義為小于 QL - l.5 IQR 或者 大于 Qu + 1.5 IQR的值,QL稱為下四分位數, Qu稱為上四分位數,IQR稱為四分位數間距,是Qu上四分位數和QL下四分位數之差,其間包括了全部觀察值的一半。

def detect_outliers(sr):
    q1 = sr.quantile(0.25)
    q3 = sr.quantile(0.75)
    iqr = q3-q1 #Interquartile range
    fence_low  = q1-1.5*iqr
    fence_high = q3+1.5*iqr
    outliers = sr.loc[(sr < fence_low) | (sr > fence_high)]
    return outliers

3、實戰(zhàn)

上面數據基礎知識的介紹了,下面我們進入今天的正題,也就是利用python與pandas進行數據分析,今天的主要目標就是找到數據中的異常值。(我們使用的是前面介紹的第一種方法)

3.1 加載數據

首先,我們需要加載進行分析的數據,同樣使用beer的數據,不過這里的數據是經過處理的,可以看到abv屬性列的值中大部分都是0.0*,基本都不超過1,但是也有數據是55,也就是說這些數據是遠大于其他數據的,我們主要是對這部分數據進行處理。

class Repair_Dirty(object):
    __init_data = 0

    def __init__(self, filename):
        self.filename = filename

    def get_data(self):
        if self.filename == " ":
            # print("您輸入的文件路徑為空")
            return
        else:
            self.__init_data = pd.read_csv(self.filename)

        return self.__init_data

#主函數定義一個對象,并實現對方法的調用
if __name__ == "__main__":
    file_path = 'dirty_beer_last.csv'
    data_cla = Repair_Dirty(file_path)
    data = data_cla.get_data()#得到數據

形如下面的數據圖,紅色框內數據為55的,就是我們所說的異常值,我們的目標就是通過第一種方法,將此類數據找出來。

3.2 檢測異常值數據

使用第一種檢測方式來檢測異常值,我們主要是定義一個函數find_outlier(),并且函數是在類的內部實現的。

    # 找到異常值,abv列
    def find_outlier(self, attribute):
        data_att = self.__init_data[attribute]
        # 找到異常值
        outlier = data_att[np.abs(data_att - data_att.mean()) > 3 * data_att.std()]
        print(data.loc[data[attribute] == 55])#對abv屬性的異常值進行輸出
        #print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引
        return outlier

下面的圖片中可以看到整個數據表中有108行數據中abv值為55的,所以很明顯,我們基本上已經達到了想要的目標,找到了數據中的異常值,根據索引或者id我們便可以將其進行值替換操作,對異常值進行修復。

3.3 顯示異常值的索引位置

既然已經找到了異常值,那我們再對其進行索引顯示就比較簡單了,也就是一行代碼的事,其實在上面代碼中也可以看到,只不過上面這行代碼被我們給注釋掉了,下面將其單獨拿出來顯示。

print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引

這行代碼就是對異常值索引進行顯示了。

至此,我們今天的數據分析異常值處理的博文就寫到這里了,小張同學仍在馬不停蹄的進行學習,希望這篇文章能夠幫助正在學習數據分析的小伙伴!?。?br />奧利給

最后,將源代碼附上,有需要的小伙伴可以自取。

import pandas as pd
import numpy as np
import re

class Repair_Dirty(object):
    __init_data = 0

    def __init__(self, filename):
        self.filename = filename

    def get_data(self):
        if self.filename == " ":
            # print("您輸入的文件路徑為空")
            return
        else:
            self.__init_data = pd.read_csv(self.filename)

        return self.__init_data
        
	# 找到異常值,abv列
    def find_outlier(self, attribute):
        data_att = self.__init_data[attribute]
        # 找到異常值
        outlier = data_att[np.abs(data_att - data_att.mean()) > 3 * data_att.std()]
        print(data.loc[data[attribute] == 55])#對abv屬性的異常值進行輸出
        print(np.where(self.__init_data[attribute] == 55))  # 返回指定位置的索引
        return outlier
        
if __name__ == "__main__":
    file_path = 'dirty_beer_last.csv'
    data_cla = Repair_Dirty(file_path)
    data = data_cla.get_data()
    print((data))
    if data is None:
        print("路徑為空,程序退出?。?!")
    else:
        data = data_cla.fill_na()
        outlier = data_cla.find_outlier()
        print(outlier)





總結

到此這篇關于python數據分析實戰(zhàn)指南之異常值處理的文章就介紹到這了,更多相關python異常值處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何安裝多版本python python2和python3共存以及pip共存

    如何安裝多版本python python2和python3共存以及pip共存

    這篇文章主要為大家詳細介紹了python多版本的安裝方法,解決python2和python3共存以及pip共存問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python變量作用范圍實例分析

    Python變量作用范圍實例分析

    這篇文章主要介紹了Python變量作用范圍,實例分析了Python中變量的定義與相關作用域,是Python學習中非常重要的基本技巧,需要的朋友可以參考下
    2015-07-07
  • python+pytest自動化測試函數測試類測試方法的封裝

    python+pytest自動化測試函數測試類測試方法的封裝

    這篇文章主要介紹了python+pytest自動化測試函數測試類測試方法的封裝,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • 基于Python的tkinter庫開發(fā)一個計算器的完整代碼

    基于Python的tkinter庫開發(fā)一個計算器的完整代碼

    Python是一種非常適合快速開發(fā)的編程語言,它有著豐富的庫來支持圖形用戶界面(GUI)的開發(fā),在本教程中,我們將使用tkinter庫來創(chuàng)建一個簡單計算器,tkinter是Python的標準GUI庫,它是跨平臺的,并且內置于大多數Python安裝中,需要的朋友可以參考下
    2025-07-07
  • 詳解如何通過Python實現批量數據提取

    詳解如何通過Python實現批量數據提取

    每天面對成堆的發(fā)票,無論是發(fā)票還是承兌單據,抑或是其他各類公司數據要從照片、PDF等不同格式的內容中提取,我們都有必要進行快速辦公的能力提升。本文就教你如何利用Python實現批量數據提取吧
    2023-03-03
  • AI與Python計算機視覺教程

    AI與Python計算機視覺教程

    這篇文章主要為大家介紹了AI與Python計算機視覺教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 解決keras加入lambda層時shape的問題

    解決keras加入lambda層時shape的問題

    這篇文章主要介紹了解決keras加入lambda層時shape的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python用函數思想完成哥德巴赫猜想代碼分析

    Python用函數思想完成哥德巴赫猜想代碼分析

    在本篇文章里小編給大家整理的是一篇關于Python用函數思想完成哥德巴赫猜想代碼分析,有興趣的朋友們可以參考下。
    2021-06-06
  • Python @overload 裝飾器的具體使用

    Python @overload 裝飾器的具體使用

    本文主要介紹了Python @overload 裝飾器的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-04-04
  • python:目標檢測模型預測準確度計算方式(基于IoU)

    python:目標檢測模型預測準確度計算方式(基于IoU)

    今天小編就為大家分享一篇python:目標檢測模型預測準確度計算方式(基于IoU),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論

万州区| 临猗县| 怀柔区| 洞口县| 西盟| 石渠县| 宣恩县| 天镇县| 封开县| 乌恰县| 建湖县| 泰顺县| 修水县| 舞阳县| 舞钢市| 荣成市| 阳朔县| 德州市| 白城市| 墨江| 千阳县| 万全县| 平谷区| 金昌市| 西昌市| 南城县| 台东市| 河源市| 唐河县| 互助| 资兴市| 江都市| 乌兰县| 马鞍山市| 闻喜县| 邵阳县| 沁源县| 许昌市| 西藏| 兰西县| 丰都县|