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ì)對(duì)數(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ì)對(duì)數(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ì)對(duì)數(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ì)對(duì)數(shù)據(jù)分析和建模產(chǎn)生負(fù)面影響,因?yàn)樗鼈兛赡軙?huì)掩蓋數(shù)據(jù)集中的重要信息,或者導(dǎo)致模型產(chǎn)生錯(cuò)誤的結(jié)論。
2.無效數(shù)據(jù)的處理方法
2.1缺失值處理
缺失值處理是指在數(shù)據(jù)分析過程中,針對(duì)數(shù)據(jù)集中存在缺失值的數(shù)據(jù)點(diǎn)進(jìn)行的處理和重新處理。缺失值處理的目的是消除缺失值對(duì)數(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
我們可以使用isnull來查看缺失值個(gè)數(shù)
可以看出姓名列是沒有缺失值,年齡列有1個(gè)缺失值,余額列有兩個(gè)缺失值。
1.填充均值
比如我們想要將年齡列中的缺失值用均值來填充,首先可以看一下年齡列均值是多少
接著使用fillna()函數(shù)填充缺失值,第一個(gè)參數(shù)是填充的值,這里我們使用年齡的均值,也就是前面的24.25,可以使用int()轉(zhuǎn)化為整數(shù),inplace=True表示在原數(shù)據(jù)上修改,默認(rèn)為False。修改之后我們?cè)俅尾榭磾?shù)據(jù)發(fā)現(xiàn)年齡列的缺失值已經(jīng)使用均值24填充。
2.填充中位數(shù)
還是以年齡為例,查看年齡列的中位數(shù)
使用中位數(shù)進(jìn)行填充
3.填充最大最小值
以年齡為例,查看最大最小值
使用最大最小值填充
4.前向填充/后向填充
前向填充就是將缺失值所在位置的上一個(gè)值作為填充值填充缺失數(shù)據(jù)。
后向填充就是將缺失值所在位置的下一個(gè)值作為填充值填充缺失數(shù)據(jù)。
但是如果我們?cè)谑褂煤笙蛱畛涞臅r(shí)候,最后一個(gè)數(shù)據(jù)是缺失值的話,那么最后一個(gè)缺失值將會(huì)遺漏。所以我們可以前向和后向結(jié)合起來就可以做到萬無一失,比如下面的示范:
5.刪除缺失值
刪除的話直接使用dropna即可,需要在原數(shù)據(jù)上操作的話可以加個(gè)inplace=True。
2.2重復(fù)值處理
重復(fù)值的話一般都是采取刪除處理,因?yàn)橄嗤臄?shù)據(jù)出現(xiàn)了n次都是沒有意義的,一次就夠。
案例演示
首先導(dǎo)入演示數(shù)據(jù)集
我們可以先使用any函數(shù)和duplicated函數(shù)來檢測數(shù)據(jù)是否存在重復(fù)值,如果返回結(jié)果為True說明數(shù)據(jù)存在重復(fù)值;如果返回結(jié)果為False說明數(shù)據(jù)不存在重復(fù)值。
前面我們導(dǎo)入數(shù)據(jù)的時(shí)候就發(fā)現(xiàn)李四數(shù)據(jù)是有重復(fù)的,所以這里檢測的結(jié)果為True。刪除的話直接使用drop_duplicates函數(shù)即可。
2.3異常值處理
異常值是指在數(shù)據(jù)集中偏離通常模式或規(guī)律的值,可以是正常情況的異常值,也可以是異常情況的異常值。
正常情況的異常值。比如我們想建立居民收入水平的時(shí)候,那些收入極其高或低極端數(shù)據(jù)會(huì)影響模型的效果,所以我們一般要進(jìn)行剔除。
異常情況的異常值。比如數(shù)值型變量中出現(xiàn)負(fù)數(shù)或其他不符合常理的值等等。
檢測方法1
使用describe()方法來查看數(shù)值型變量是否存在極端值
檢測方法2
通過畫出箱線圖的方式來展示數(shù)據(jù)分布情況
比如上圖中的第五幅圖就明顯存在極端值。
處理的方法就是剔除這些異常數(shù)據(jù),這個(gè)方式很靈活。比如前面我們發(fā)現(xiàn)累計(jì)票房一般都是在100000以內(nèi),卻出現(xiàn)了700000的極端數(shù)據(jù),我們就可以采取以下方式挑選出正常數(shù)據(jù):
如果我們有多個(gè)條件的話可以使用()和&/|字符來結(jié)合使用,&表示and交集的意思,|表示or并集的意思。比如下圖我們就挑選出累計(jì)票房小于100000并且場均人次小于100的數(shù)據(jù):
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ù)分析文章都用到過,大家可以了解一些。
————————————————