Python知識(shí)分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))
發(fā)布于:2023-06-27 11:20:33

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖1

1.無效數(shù)據(jù)的概念
        無效數(shù)據(jù)是指不符合數(shù)據(jù)收集目的或數(shù)據(jù)收集標(biāo)準(zhǔn)的數(shù)據(jù)。這些數(shù)據(jù)可能來自于不準(zhǔn)確的測量、缺失值、錯(cuò)誤標(biāo)注、虛假的數(shù)據(jù)源或其他問題。無效數(shù)據(jù)可能會(huì)對數(shù)據(jù)分析結(jié)果產(chǎn)生誤導(dǎo),因此需要在數(shù)據(jù)分析之前進(jìn)行過濾和處理。

無效數(shù)據(jù)的類型包括但不限于以下幾種:

缺失值:缺失值是指在數(shù)據(jù)集中沒有收集到足夠的信息來完全確定其值的數(shù)據(jù)點(diǎn)。缺失值可以是由于數(shù)據(jù)收集過程中的誤差、數(shù)據(jù)源的不確定性、數(shù)據(jù)點(diǎn)之間的相互作用等原因產(chǎn)生的。在數(shù)據(jù)分析中,缺失值可能會(huì)對數(shù)據(jù)集的質(zhì)量和模型的準(zhǔn)確性產(chǎn)生負(fù)面影響。

重復(fù)值:重復(fù)值是指在數(shù)據(jù)集中重復(fù)出現(xiàn)的數(shù)據(jù)點(diǎn)。在數(shù)據(jù)集中,每個(gè)數(shù)據(jù)點(diǎn)都應(yīng)該是唯一的,即不存在兩個(gè)相同的數(shù)據(jù)點(diǎn)。重復(fù)值可能會(huì)對數(shù)據(jù)分析和建模產(chǎn)生負(fù)面影響,因?yàn)樗鼈兛赡軙?huì)掩蓋數(shù)據(jù)集中的重要信息。

異常值:異常值是指在數(shù)據(jù)集中偏離平均值或常見值的數(shù)據(jù)點(diǎn)。異常值可以是由于數(shù)據(jù)收集過程中的誤差、數(shù)據(jù)源的不確定性、數(shù)據(jù)點(diǎn)之間的相互作用等原因產(chǎn)生的。異常值可能會(huì)對數(shù)據(jù)分析和建模產(chǎn)生負(fù)面影響,因?yàn)樗鼈兛赡軙?huì)掩蓋數(shù)據(jù)集中的重要信息,或者導(dǎo)致模型產(chǎn)生錯(cuò)誤的結(jié)論。

 

2.無效數(shù)據(jù)的處理方法


2.1缺失值處理
        缺失值處理是指在數(shù)據(jù)分析過程中,針對數(shù)據(jù)集中存在缺失值的數(shù)據(jù)點(diǎn)進(jìn)行的處理和重新處理。缺失值處理的目的是消除缺失值對數(shù)據(jù)集的影響,提高數(shù)據(jù)集的質(zhì)量和模型的準(zhǔn)確性。

缺失值處理的方法包括以下幾種:

填充均值:將缺失值填充為數(shù)據(jù)集中該值所在列的均值。

填充中位數(shù):將缺失值填充為數(shù)據(jù)集中該值所在列的中位數(shù)。

填充最大最小值:將缺失值填充為數(shù)據(jù)集中該值所在列的最大最小值。

使用其他數(shù)據(jù)點(diǎn)的信息填充缺失值:根據(jù)數(shù)據(jù)集中的其他數(shù)據(jù)點(diǎn)的信息,使用統(tǒng)計(jì)方法或其他算法來填充缺失值。

刪除缺失值:將缺失值所在的數(shù)據(jù)點(diǎn)從數(shù)據(jù)集中刪除。

        在處理缺失值時(shí),需要根據(jù)具體情況進(jìn)行決策。填充均值和使用其他數(shù)據(jù)點(diǎn)的信息填充缺失值通常適用于數(shù)據(jù)集中存在少量缺失值的情況。使用其他數(shù)據(jù)點(diǎn)的信息填充缺失值和刪除缺失值適用于數(shù)據(jù)集中存在大量缺失值的情況。此外,缺失值處理的方法也需要考慮到數(shù)據(jù)集的完整性和一致性,以確保數(shù)據(jù)分析和建模的準(zhǔn)確性。

案例演示

首先導(dǎo)入我們演示的數(shù)據(jù)集

 

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv('test.csv')
data


Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖2

我們可以使用isnull來查看缺失值個(gè)數(shù)

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖3

可以看出姓名列是沒有缺失值,年齡列有1個(gè)缺失值,余額列有兩個(gè)缺失值。

1.填充均值 

比如我們想要將年齡列中的缺失值用均值來填充,首先可以看一下年齡列均值是多少

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖4

接著使用fillna()函數(shù)填充缺失值,第一個(gè)參數(shù)是填充的值,這里我們使用年齡的均值,也就是前面的24.25,可以使用int()轉(zhuǎn)化為整數(shù),inplace=True表示在原數(shù)據(jù)上修改,默認(rèn)為False。修改之后我們再次查看數(shù)據(jù)發(fā)現(xiàn)年齡列的缺失值已經(jīng)使用均值24填充。

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖5

 2.填充中位數(shù)

還是以年齡為例,查看年齡列的中位數(shù)

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))  圖6

使用中位數(shù)進(jìn)行填充 

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖7

3.填充最大最小值

以年齡為例,查看最大最小值

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖8

使用最大最小值填充 

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖9

4.前向填充/后向填充

前向填充就是將缺失值所在位置的上一個(gè)值作為填充值填充缺失數(shù)據(jù)。

后向填充就是將缺失值所在位置的下一個(gè)值作為填充值填充缺失數(shù)據(jù)。

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖10

 但是如果我們在使用后向填充的時(shí)候,最后一個(gè)數(shù)據(jù)是缺失值的話,那么最后一個(gè)缺失值將會(huì)遺漏。所以我們可以前向和后向結(jié)合起來就可以做到萬無一失,比如下面的示范:

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖11

5.刪除缺失值

刪除的話直接使用dropna即可,需要在原數(shù)據(jù)上操作的話可以加個(gè)inplace=True。

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖12

2.2重復(fù)值處理

重復(fù)值的話一般都是采取刪除處理,因?yàn)橄嗤臄?shù)據(jù)出現(xiàn)了n次都是沒有意義的,一次就夠。

案例演示

首先導(dǎo)入演示數(shù)據(jù)集

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖13

我們可以先使用any函數(shù)和duplicated函數(shù)來檢測數(shù)據(jù)是否存在重復(fù)值,如果返回結(jié)果為True說明數(shù)據(jù)存在重復(fù)值;如果返回結(jié)果為False說明數(shù)據(jù)不存在重復(fù)值。

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))  圖14

 前面我們導(dǎo)入數(shù)據(jù)的時(shí)候就發(fā)現(xiàn)李四數(shù)據(jù)是有重復(fù)的,所以這里檢測的結(jié)果為True。刪除的話直接使用drop_duplicates函數(shù)即可。

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖15

2.3異常值處理
        異常值是指在數(shù)據(jù)集中偏離通常模式或規(guī)律的值,可以是正常情況的異常值,也可以是異常情況的異常值。

        正常情況的異常值。比如我們想建立居民收入水平的時(shí)候,那些收入極其高或低極端數(shù)據(jù)會(huì)影響模型的效果,所以我們一般要進(jìn)行剔除。

        異常情況的異常值。比如數(shù)值型變量中出現(xiàn)負(fù)數(shù)或其他不符合常理的值等等。

檢測方法1

使用describe()方法來查看數(shù)值型變量是否存在極端值
 

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))  圖16

檢測方法2

通過畫出箱線圖的方式來展示數(shù)據(jù)分布情況

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn)) 圖17

比如上圖中的第五幅圖就明顯存在極端值。

處理的方法就是剔除這些異常數(shù)據(jù),這個(gè)方式很靈活。比如前面我們發(fā)現(xiàn)累計(jì)票房一般都是在100000以內(nèi),卻出現(xiàn)了700000的極端數(shù)據(jù),我們就可以采取以下方式挑選出正常數(shù)據(jù):

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))  圖18

如果我們有多個(gè)條件的話可以使用()和&/|字符來結(jié)合使用,&表示and交集的意思,|表示or并集的意思。比如下圖我們就挑選出累計(jì)票房小于100000并且場均人次小于100的數(shù)據(jù):

Python中處理無效數(shù)據(jù)的詳細(xì)教程(附案例實(shí)戰(zhàn))  圖19

 

3.如何避免無效數(shù)據(jù)?
        那我覺得就需要在獲取數(shù)據(jù)的源頭來防止無效數(shù)據(jù)的產(chǎn)生,這樣也能較少花在處理無效數(shù)據(jù)的時(shí)間成本上。獲取數(shù)據(jù)一般就是通過爬蟲獲取或從數(shù)據(jù)庫中提取。爬蟲的話,在編寫代碼時(shí)可以采取適當(dāng)?shù)倪^濾措施,比如某個(gè)字段出現(xiàn)空值或異常值,你可以將這條數(shù)據(jù)不進(jìn)行保存。從數(shù)據(jù)庫提取的話,在sql上加一些去重/去空的語句即可。

 

4.實(shí)戰(zhàn)案例
關(guān)于處理無效數(shù)據(jù),我在之前的數(shù)據(jù)分析文章都用到過,大家可以了解一些。
————————————————
 

轉(zhuǎn)載自:https://blog.csdn.net/m0_64336780/article/details/130804666