數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正_第1頁
數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正_第2頁
數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正_第3頁
數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正_第4頁
數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)分析:數(shù)據(jù)清洗:異常值檢測與修正1數(shù)據(jù)清洗的重要性1.1理解數(shù)據(jù)清洗數(shù)據(jù)清洗是數(shù)據(jù)分析流程中的關(guān)鍵步驟,它涉及識別、修正或刪除數(shù)據(jù)集中的錯誤、不完整、不準(zhǔn)確或不相關(guān)的信息。數(shù)據(jù)清洗的目的是提高數(shù)據(jù)質(zhì)量,確保后續(xù)分析的準(zhǔn)確性和可靠性。在大數(shù)據(jù)時代,數(shù)據(jù)來源多樣,數(shù)據(jù)量龐大,數(shù)據(jù)質(zhì)量直接影響到分析結(jié)果的有效性。因此,數(shù)據(jù)清洗成為數(shù)據(jù)預(yù)處理階段不可或缺的一環(huán)。1.1.1數(shù)據(jù)清洗在數(shù)據(jù)分析中的角色數(shù)據(jù)清洗在數(shù)據(jù)分析中扮演著至關(guān)重要的角色,它確保了數(shù)據(jù)的準(zhǔn)確性和一致性,為后續(xù)的數(shù)據(jù)分析、建模和決策提供了堅實的基礎(chǔ)。數(shù)據(jù)清洗包括但不限于以下步驟:缺失值處理:識別并處理數(shù)據(jù)集中的缺失值,可以是填充、刪除或預(yù)測缺失值。異常值檢測:識別數(shù)據(jù)集中的異常值,這些值可能由于測量錯誤、數(shù)據(jù)錄入錯誤或極端情況產(chǎn)生。數(shù)據(jù)一致性檢查:確保數(shù)據(jù)在邏輯上和格式上的一致性,例如日期格式統(tǒng)一、單位一致等。重復(fù)數(shù)據(jù)處理:識別并處理重復(fù)的數(shù)據(jù)記錄,避免分析時的偏差。數(shù)據(jù)類型轉(zhuǎn)換:將數(shù)據(jù)轉(zhuǎn)換為正確的數(shù)據(jù)類型,以便于分析和建模。1.2異常值檢測與修正1.2.1異常值檢測原理異常值是指在數(shù)據(jù)集中顯著偏離其他觀測值的值。它們可能是由于數(shù)據(jù)錄入錯誤、測量誤差或真實但罕見的事件引起的。異常值的存在可能嚴(yán)重影響數(shù)據(jù)分析的結(jié)果,因此檢測并適當(dāng)處理異常值是數(shù)據(jù)清洗中的重要環(huán)節(jié)。常用的異常值檢測方法基于統(tǒng)計的方法:如Z-score、IQR(四分位數(shù)間距)等?;谀P偷姆椒ǎ喝缡褂镁垲惙治?、主成分分析(PCA)等?;卩徲虻姆椒ǎ喝缇植慨惓R蜃樱↙OF)。1.2.2異常值修正策略一旦檢測到異常值,需要根據(jù)具體情況決定如何處理。常見的策略包括:刪除異常值:如果異常值是由于數(shù)據(jù)錄入錯誤或測量誤差引起的,可以考慮直接刪除。修正異常值:如果異常值是由于數(shù)據(jù)錄入錯誤,可以嘗試修正。例如,使用中位數(shù)或均值填充。保留異常值:如果異常值代表了真實但罕見的事件,可能需要保留,但應(yīng)標(biāo)記以便后續(xù)分析時特別注意。1.2.3示例:使用Python進(jìn)行異常值檢測與修正假設(shè)我們有一個包含房價數(shù)據(jù)的數(shù)據(jù)集,我們想要檢測并處理異常值。數(shù)據(jù)準(zhǔn)備importpandasaspd

importnumpyasnp

#創(chuàng)建一個示例數(shù)據(jù)集

data={'Price':[100000,120000,130000,140000,150000,160000,170000,180000,190000,200000,210000,220000,230000,240000,250000,260000,270000,280000,290000,300000,1000000]}

df=pd.DataFrame(data)異常值檢測使用IQR方法檢測異常值。Q1=df['Price'].quantile(0.25)

Q3=df['Price'].quantile(0.75)

IQR=Q3-Q1

#定義異常值的界限

lower_bound=Q1-1.5*IQR

upper_bound=Q3+1.5*IQR

#檢測異常值

outliers=df[(df['Price']<lower_bound)|(df['Price']>upper_bound)]

print("異常值:\n",outliers)異常值修正使用中位數(shù)填充異常值。median_price=df['Price'].median()

#修正異常值

df['Price']=np.where(df['Price']>upper_bound,median_price,df['Price'])

df['Price']=np.where(df['Price']<lower_bound,median_price,df['Price'])

print("修正后的數(shù)據(jù)集:\n",df)1.2.4結(jié)論數(shù)據(jù)清洗,尤其是異常值的檢測與修正,是數(shù)據(jù)分析中不可忽視的步驟。通過合理的方法檢測異常值,并根據(jù)具體情況采取適當(dāng)?shù)男拚呗?,可以顯著提高數(shù)據(jù)質(zhì)量,從而提升數(shù)據(jù)分析的準(zhǔn)確性和可靠性。2異常值的基礎(chǔ)知識2.1異常值的定義在數(shù)據(jù)分析中,異常值(Outliers)指的是數(shù)據(jù)集中顯著偏離其他觀察值的數(shù)值。這些數(shù)值可能由于測量錯誤、數(shù)據(jù)錄入錯誤、實驗異?;蚱渌堑湫鸵蛩禺a(chǎn)生。異常值的存在可以對統(tǒng)計分析、模型構(gòu)建和數(shù)據(jù)解釋產(chǎn)生重大影響,因此識別和處理異常值是數(shù)據(jù)清洗過程中的關(guān)鍵步驟。2.1.1示例數(shù)據(jù)假設(shè)我們有一組關(guān)于某公司員工年齡的數(shù)據(jù),大部分員工年齡在20至60歲之間,但數(shù)據(jù)中包含了一些異常值,如:ages=[22,26,30,34,38,42,46,50,54,58,62,66,70,1000]在這個數(shù)據(jù)集中,1000是一個明顯的異常值,因為它遠(yuǎn)遠(yuǎn)超出了正常員工年齡的范圍。2.2異常值的影響異常值對數(shù)據(jù)分析的影響主要體現(xiàn)在以下幾個方面:統(tǒng)計量的偏移:異常值可以顯著影響數(shù)據(jù)的平均值、中位數(shù)和標(biāo)準(zhǔn)差等統(tǒng)計量,導(dǎo)致這些統(tǒng)計量不能準(zhǔn)確反映數(shù)據(jù)集的中心趨勢和離散程度。模型的準(zhǔn)確性:在構(gòu)建預(yù)測模型時,異常值可能導(dǎo)致模型過擬合或欠擬合,影響模型的預(yù)測性能。數(shù)據(jù)解釋的誤導(dǎo):異常值可能導(dǎo)致對數(shù)據(jù)的錯誤解釋,影響決策制定。2.2.1示例:異常值對平均值的影響importnumpyasnp

#正常數(shù)據(jù)

normal_ages=[22,26,30,34,38,42,46,50,54,58,62,66,70]

#計算正常數(shù)據(jù)的平均年齡

mean_normal=np.mean(normal_ages)

print(f"正常數(shù)據(jù)的平均年齡:{mean_normal}")

#包含異常值的數(shù)據(jù)

ages_with_outlier=normal_ages+[1000]

#計算包含異常值數(shù)據(jù)的平均年齡

mean_with_outlier=np.mean(ages_with_outlier)

print(f"包含異常值數(shù)據(jù)的平均年齡:{mean_with_outlier}")在這個例子中,異常值1000顯著提高了平均年齡,從44.62增加到了88.46,這顯然不能反映公司員工年齡的真實情況。2.3異常值檢測方法2.3.1箱型圖(Boxplot)箱型圖是一種常用的可視化工具,用于識別數(shù)據(jù)集中的異常值。它通過數(shù)據(jù)的五數(shù)概括(最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值)來展示數(shù)據(jù)分布,并將超出1.5倍四分位數(shù)間距(IQR)的數(shù)值標(biāo)記為異常值。2.3.2Z-ScoreZ-Score是另一種識別異常值的方法,它基于數(shù)據(jù)的標(biāo)準(zhǔn)化。Z-Score計算公式為:Z,其中X是數(shù)據(jù)點,μ是數(shù)據(jù)集的平均值,σ是數(shù)據(jù)集的標(biāo)準(zhǔn)差。通常,絕對值大于3的Z-Score被視為異常值。2.3.3IQR方法IQR方法是基于四分位數(shù)的異常值檢測方法。它定義異常值為低于下四分位數(shù)減去1.5倍IQR或高于上四分位數(shù)加上1.5倍IQR的數(shù)值。2.3.4示例:使用Z-Score檢測異常值fromscipyimportstats

#計算Z-Score

z_scores=stats.zscore(ages)

#篩選出Z-Score絕對值大于3的異常值

outliers=[ageforage,zinzip(ages,z_scores)ifnp.abs(z)>3]

print(f"異常值:{outliers}")在這個例子中,1000的Z-Score絕對值遠(yuǎn)大于3,因此被識別為異常值。2.4異常值處理策略2.4.1刪除異常值最直接的方法是刪除識別出的異常值,但這可能會導(dǎo)致數(shù)據(jù)集的樣本量減少,影響分析結(jié)果的可靠性。2.4.2替換異常值可以將異常值替換為數(shù)據(jù)集的平均值、中位數(shù)或眾數(shù),或者使用插值方法來估計異常值的合理值。2.4.3分箱處理將數(shù)據(jù)集分為若干個箱,對每個箱內(nèi)的異常值進(jìn)行處理,如使用箱內(nèi)數(shù)據(jù)的平均值或中位數(shù)替換異常值。2.4.4示例:使用中位數(shù)替換異常值#使用中位數(shù)替換異常值

median_age=np.median(ages)

ages_cleaned=[median_ageifageinoutlierselseageforageinages]

print(f"處理后的數(shù)據(jù):{ages_cleaned}")在這個例子中,異常值1000被替換為數(shù)據(jù)集的中位數(shù),從而減少了異常值對數(shù)據(jù)集的影響。2.5結(jié)論異常值的檢測與處理是數(shù)據(jù)分析中不可或缺的步驟,它有助于提高數(shù)據(jù)質(zhì)量,確保統(tǒng)計分析和模型構(gòu)建的準(zhǔn)確性。通過使用箱型圖、Z-Score和IQR等方法,我們可以有效地識別異常值,并采取適當(dāng)?shù)牟呗赃M(jìn)行處理,如刪除、替換或分箱處理。3異常值檢測方法3.1統(tǒng)計學(xué)方法:Z-Score3.1.1原理Z-Score,或稱標(biāo)準(zhǔn)分?jǐn)?shù),是一種統(tǒng)計學(xué)方法,用于衡量一個值相對于其所屬數(shù)據(jù)集的平均值的偏離程度。Z-Score的計算公式如下:Z其中,x是數(shù)據(jù)點,μ是數(shù)據(jù)集的平均值,σ是數(shù)據(jù)集的標(biāo)準(zhǔn)差。通常,如果一個數(shù)據(jù)點的Z-Score大于3或小于-3,則認(rèn)為該數(shù)據(jù)點是異常值。3.1.2示例代碼假設(shè)我們有一組數(shù)據(jù),我們將使用Python的pandas和scipy庫來計算Z-Score并檢測異常值。importpandasaspd

fromscipyimportstats

#創(chuàng)建數(shù)據(jù)集

data=pd.DataFrame({

'values':[1,2,3,4,5,6,7,8,9,10,100]

})

#計算Z-Score

data['z_score']=stats.zscore(data['values'])

#檢測異常值

outliers=data[abs(data['z_score'])>3]

#輸出異常值

print(outliers)3.1.3解釋在上述代碼中,我們首先創(chuàng)建了一個包含11個值的數(shù)據(jù)集,其中100是一個明顯的異常值。然后,我們使用scipy庫中的zscore函數(shù)計算每個值的Z-Score。最后,我們通過檢查Z-Score的絕對值是否大于3來確定哪些值是異常值。3.2基于IQR的異常值檢測3.2.1原理IQR(四分位數(shù)范圍)是另一種用于檢測異常值的統(tǒng)計學(xué)方法。IQR是第三四分位數(shù)(Q3)與第一四分位數(shù)(Q1)之間的差值。異常值通常定義為低于Q1-1.5IQR或高于Q3+1.5IQR的數(shù)據(jù)點。3.2.2示例代碼我們將使用Python的pandas庫來計算IQR并檢測異常值。importpandasaspd

#創(chuàng)建數(shù)據(jù)集

data=pd.DataFrame({

'values':[1,2,3,4,5,6,7,8,9,10,100]

})

#計算IQR

Q1=data['values'].quantile(0.25)

Q3=data['values'].quantile(0.75)

IQR=Q3-Q1

#檢測異常值

outliers=data[(data['values']<(Q1-1.5*IQR))|(data['values']>(Q3+1.5*IQR))]

#輸出異常值

print(outliers)3.2.3解釋在這個例子中,我們首先計算了數(shù)據(jù)集的Q1和Q3,然后計算了IQR。接著,我們使用IQR的1.5倍來確定異常值的范圍。最后,我們輸出了所有低于Q1-1.5IQR或高于Q3+1.5IQR的值。3.3可視化方法:箱線圖與散點圖3.3.1箱線圖箱線圖是一種用于顯示一組數(shù)據(jù)分布情況的統(tǒng)計圖表,它能夠直觀地展示數(shù)據(jù)的中位數(shù)、四分位數(shù)以及異常值。3.3.2示例代碼我們將使用Python的matplotlib庫來繪制箱線圖。importmatplotlib.pyplotasplt

importpandasaspd

#創(chuàng)建數(shù)據(jù)集

data=pd.DataFrame({

'values':[1,2,3,4,5,6,7,8,9,10,100]

})

#繪制箱線圖

plt.boxplot(data['values'])

plt.show()3.3.3解釋通過箱線圖,我們可以清晰地看到數(shù)據(jù)的分布情況,異常值通常顯示為箱線圖外部的點。3.3.4散點圖散點圖是一種用于展示兩個變量之間關(guān)系的圖表,它可以幫助我們識別數(shù)據(jù)中的異常點。3.3.5示例代碼我們將使用Python的matplotlib庫來繪制散點圖。importmatplotlib.pyplotasplt

importpandasaspd

#創(chuàng)建數(shù)據(jù)集

data=pd.DataFrame({

'x':[1,2,3,4,5,6,7,8,9,10],

'y':[1,2,3,4,5,6,7,8,9,100]

})

#繪制散點圖

plt.scatter(data['x'],data['y'])

plt.show()3.3.6解釋在散點圖中,我們可以看到y(tǒng)值為100的點明顯偏離了其他點,這表明它可能是一個異常值。3.4異常值修正3.4.1方法一旦檢測到異常值,我們有幾種方法來修正它們:刪除異常值:如果異常值是由于數(shù)據(jù)錄入錯誤或測量錯誤造成的,可以考慮刪除這些值。替換異常值:可以使用中位數(shù)、平均值或最鄰近值來替換異常值。使用異常值:在某些情況下,異常值可能包含有價值的信息,不應(yīng)被刪除或替換。3.4.2示例代碼我們將使用Python的pandas庫來替換異常值。importpandasaspd

#創(chuàng)建數(shù)據(jù)集

data=pd.DataFrame({

'values':[1,2,3,4,5,6,7,8,9,10,100]

})

#使用中位數(shù)替換異常值

median=data['values'].median()

data['values']=data['values'].apply(lambdax:medianifabs(stats.zscore(x))>3elsex)

#輸出修正后的數(shù)據(jù)集

print(data)3.4.3解釋在這個例子中,我們首先計算了數(shù)據(jù)集的中位數(shù),然后使用apply函數(shù)和Z-Score來確定哪些值是異常值,并用中位數(shù)替換它們。這樣,我們就可以修正數(shù)據(jù)集中的異常值,使其更符合實際分布。4異常值處理策略4.1刪除異常值4.1.1原理在數(shù)據(jù)分析中,異常值(outliers)是指數(shù)據(jù)集中顯著偏離其他觀察值的值。這些值可能是由于測量錯誤、數(shù)據(jù)錄入錯誤或極端事件引起的。刪除異常值是一種常見的數(shù)據(jù)清洗策略,適用于當(dāng)異常值是由于錯誤或不相關(guān)事件產(chǎn)生,且這些值可能對分析結(jié)果產(chǎn)生負(fù)面影響的情況。4.1.2內(nèi)容刪除異常值可以通過多種統(tǒng)計方法實現(xiàn),包括但不限于:-基于IQR的方法:使用四分位數(shù)范圍(InterquartileRange,IQR)來識別和刪除異常值。-基于標(biāo)準(zhǔn)差的方法:對于正態(tài)分布的數(shù)據(jù),可以使用標(biāo)準(zhǔn)差來識別異常值。-基于箱線圖的方法:箱線圖是一種可視化工具,可以直觀地識別數(shù)據(jù)集中的異常值。示例:基于IQR的方法刪除異常值importnumpyasnp

importpandasaspd

#創(chuàng)建示例數(shù)據(jù)

data=pd.DataFrame({

'A':[1,2,3,4,100,6,7,8,9],

'B':[5,6,7,8,9,10,11,12,13]

})

#計算IQR

Q1=data.quantile(0.25)

Q3=data.quantile(0.75)

IQR=Q3-Q1

#定義異常值的界限

lower_bound=Q1-1.5*IQR

upper_bound=Q3+1.5*IQR

#刪除異常值

cleaned_data=data[~((data<(lower_bound))|(data>(upper_bound))).any(axis=1)]

print(cleaned_data)4.1.3解釋上述代碼中,我們首先創(chuàng)建了一個包含異常值的示例數(shù)據(jù)集。然后,我們計算了每個特征的四分位數(shù)和IQR。異常值的界限被定義為Q1-1.5*IQR和Q3+1.5*IQR。最后,我們使用Pandas的布爾索引功能來刪除所有特征中超出界限的行,從而得到清洗后的數(shù)據(jù)集。4.2修正異常值4.2.1原理修正異常值是指在確定異常值是由真實但極端的事件引起,而不是由錯誤引起的情況下,對異常值進(jìn)行調(diào)整以更準(zhǔn)確地反映數(shù)據(jù)的真實情況。修正策略可以包括替換異常值為中位數(shù)、均值或最近鄰值,或者使用更復(fù)雜的統(tǒng)計方法進(jìn)行調(diào)整。4.2.2內(nèi)容修正異常值的方法包括:-替換為中位數(shù)或均值:適用于數(shù)據(jù)集中的異常值數(shù)量較少且分布均勻的情況。-使用最近鄰值:適用于時間序列數(shù)據(jù),可以使用前一個或后一個值來修正異常值。-基于模型的修正:使用機(jī)器學(xué)習(xí)模型預(yù)測異常值的合理值。示例:使用中位數(shù)修正異常值#繼續(xù)使用上述示例數(shù)據(jù)

#假設(shè)我們決定保留數(shù)據(jù)集,但修正異常值

#計算中位數(shù)

median=data.median()

#修正異常值

forcolumnindata.columns:

data[column]=np.where(data[column]>upper_bound[column],median[column],data[column])

data[column]=np.where(data[column]<lower_bound[column],median[column],data[column])

print(data)4.2.3解釋在這個修正異常值的示例中,我們首先計算了數(shù)據(jù)集的中位數(shù)。然后,我們遍歷數(shù)據(jù)集的每一列,使用NumPy的where函數(shù)來檢查每個值是否超出異常值的界限。如果超出界限,我們將其替換為該列的中位數(shù)。這樣,我們保留了數(shù)據(jù)集的完整性,同時修正了異常值,使其更接近數(shù)據(jù)的真實分布。4.3異常值的保留與分析4.3.1原理在某些情況下,異常值可能包含有價值的信息,例如極端事件的信號。保留異常值并進(jìn)行深入分析可以幫助我們理解數(shù)據(jù)的全貌,發(fā)現(xiàn)潛在的模式或趨勢。4.3.2內(nèi)容保留異常值的方法包括:-異常值標(biāo)記:在數(shù)據(jù)集中標(biāo)記異常值,而不是直接刪除或修正它們。-異常值分析:使用統(tǒng)計或機(jī)器學(xué)習(xí)方法來分析異常值的特征和原因。示例:異常值標(biāo)記#繼續(xù)使用上述示例數(shù)據(jù)

#假設(shè)我們決定保留異常值并標(biāo)記它們

#創(chuàng)建一個新列來標(biāo)記異常值

data['is_outlier']=False

#標(biāo)記異常值

forcolumnindata.columns[:-1]:#不包括新添加的標(biāo)記列

data.loc[(data[column]<lower_bound[column])|(data[column]>upper_bound[column]),'is_outlier']=True

print(data)4.3.3解釋在這個示例中,我們沒有刪除或修正異常值,而是選擇保留它們并添加了一個新列is_outlier來標(biāo)記哪些值是異常值。我們遍歷數(shù)據(jù)集的每一列(除了標(biāo)記列),使用Pandas的loc函數(shù)來標(biāo)記超出界限的值。這樣,我們可以在后續(xù)的分析中特別關(guān)注這些異常值,而不改變數(shù)據(jù)集的原始結(jié)構(gòu)。通過上述示例,我們可以看到,異常值的處理策略需要根據(jù)數(shù)據(jù)的具體情況和分析目標(biāo)來選擇。刪除、修正或保留異常值,每種策略都有其適用場景和潛在的局限性。在實際操作中,理解數(shù)據(jù)的背景和異常值的來源是做出正確決策的關(guān)鍵。5使用Python進(jìn)行異常值檢測與修正5.1Python環(huán)境搭建在開始數(shù)據(jù)分析和數(shù)據(jù)清洗之前,確保你的Python環(huán)境已經(jīng)搭建好。Python是一種廣泛使用的高級編程語言,特別適合于數(shù)據(jù)處理和分析。你可以通過以下步驟來搭建Python環(huán)境:下載Python:訪問Python官方網(wǎng)站(/downloads/)下載最新版本的Python安裝包。安裝Python:運行下載的安裝包,選擇“AddPythontoPATH”選項,以便在命令行中直接使用Python。安裝Anaconda:Anaconda是一個包含了許多科學(xué)計算和數(shù)據(jù)分析包的Python發(fā)行版。訪問Anaconda官網(wǎng)(/products/distribution/)下載并安裝Anaconda。創(chuàng)建虛擬環(huán)境:使用AnacondaNavigator或命令行創(chuàng)建一個新的虛擬環(huán)境,這有助于管理項目依賴。安裝必要的庫:在虛擬環(huán)境中安裝pandas,numpy,matplotlib,seaborn等庫,這些庫對于數(shù)據(jù)分析至關(guān)重要。condacreate--namemyenvpython=3.9

condaactivatemyenv

condainstallpandasnumpymatplotlibseaborn5.2數(shù)據(jù)導(dǎo)入與預(yù)覽數(shù)據(jù)導(dǎo)入是數(shù)據(jù)分析的第一步。我們將使用pandas庫來讀取數(shù)據(jù),并使用head()函數(shù)預(yù)覽數(shù)據(jù)的前幾行。importpandasaspd

#讀取數(shù)據(jù)

data=pd.read_csv('data.csv')

#預(yù)覽數(shù)據(jù)

print(data.head())假設(shè)我們有以下數(shù)據(jù)樣例:idagesalary12550000230600003357000044080000545900005.3應(yīng)用異常值檢測方法異常值檢測是數(shù)據(jù)清洗中的關(guān)鍵步驟,它幫助我們識別數(shù)據(jù)中的異常點,這些點可能由于測量錯誤、數(shù)據(jù)錄入錯誤或其他原因而存在。我們將使用以下幾種方法來檢測異常值:5.3.1箱型圖(Boxplot)箱型圖是一種統(tǒng)計圖表,用于顯示一組數(shù)據(jù)的分布情況,包括中位數(shù)、四分位數(shù)和異常值。importmatplotlib.pyplotasplt

#繪制箱型圖

data.boxplot(column=['age','salary'])

plt.show()5.3.2Z-ScoreZ-Score是一種統(tǒng)計方法,用于測量一個值與平均值的偏離程度。在標(biāo)準(zhǔn)正態(tài)分布中,Z-Score大于3或小于-3的值通常被認(rèn)為是異常值。fromscipyimportstats

#計算Z-Score

z_scores=stats.zscore(data['salary'])

abs_z_scores=np.abs(z_scores)

#篩選異常值

outliers=data[(abs_z_scores>3)]

print(outliers)5.3.3IQR(InterquartileRange)IQR是上四分位數(shù)與下四分位數(shù)之間的差,用于識別數(shù)據(jù)中的異常值。任何低于Q1-1.5IQR或高于Q3+1.5IQR的值都被認(rèn)為是異常值。#計算IQR

Q1=data['salary'].quantile(0.25)

Q3=data['salary'].quantile(0.75)

IQR=Q3-Q1

#篩選異常值

outliers=data[(data['salary']<(Q1-1.5*IQR))|(data['salary']>(Q3+1.5*IQR))]

print(outliers)5.4實施異常值修正一旦檢測到異常值,我們需要決定如何處理它們。常見的處理方法包括:5.4.1刪除異常值直接刪除異常值是最簡單的方法,但可能會導(dǎo)致數(shù)據(jù)丟失。#刪除異常值

data_clean=data[(abs_z_scores<=3)]

print(data_clean)5.4.2替換異常值可以將異常值替換為中位數(shù)、平均數(shù)或最鄰近的值。#替換異常值為中位數(shù)

median_salary=data['salary'].median()

data['salary']=np.where(abs_z_scores>3,median_salary,data['salary'])

print(data)5.4.3封頂和底部處理將異常值限制在一定范圍內(nèi),例如,將所有高于上限的值設(shè)置為上限值。#封頂和底部處理

upper_bound=Q3+1.5*IQR

lower_bound=Q1-1.5*IQR

data['salary']=data['salary'].clip(lower_bound,upper_bound)

print(data)通過上述步驟,我們可以有效地檢測和修正數(shù)據(jù)集中的異常值,為后續(xù)的數(shù)據(jù)分析和建模提供更準(zhǔn)確、更可靠的數(shù)據(jù)。6案例分析:銷售數(shù)據(jù)的異常值處理6.1數(shù)據(jù)集介紹在本案例中,我們將使用一家虛構(gòu)零售公司的銷售數(shù)據(jù)集。數(shù)據(jù)集包含以下字段:date:銷售日期。product_id:產(chǎn)品ID。store_id:商店ID。quantity:銷售數(shù)量。price:銷售價格。total_sales:總銷售額(數(shù)量*價格)。數(shù)據(jù)集大小為10000行,覆蓋了100種不同的產(chǎn)品在10家不同商店的銷售記錄。6.2異常值檢測過程6.2.1步驟1:數(shù)據(jù)加載與預(yù)覽首先,我們需要加載數(shù)據(jù)并預(yù)覽前幾行,以了解數(shù)據(jù)的基本結(jié)構(gòu)。importpandasaspd

#加載數(shù)據(jù)

sales_data=pd.read_csv('sales_data.csv')

#預(yù)覽數(shù)據(jù)

print(sales_data.head())6.2.2步驟2:數(shù)據(jù)探索與可視化使用描述性統(tǒng)計和箱線圖來識別潛在的異常值。#描述性統(tǒng)計

print(sales_data.describe())

#箱線圖可視化

importmatplotlib.pyplotasplt

plt.figure(figsize=(10,6))

plt.boxplot(sales_data['total_sales'])

plt.title('總銷售額的箱線圖')

plt.show()6.2.3步驟3:異常值檢測我們將使用IQR(四分位數(shù)范圍)方法來檢測total_sales字段中的異常值。Q1=sales_data['total_sales'].quantile(0.25)

Q3=sales_data['total_sales'].quantile(0.75)

IQR=Q3-Q1

#定義異常值的上下限

lower_bound=Q1-1.5*IQR

upper_bound=Q3+1.5*IQR

#檢測異常值

outliers=sales_data[(sales_data['total_sa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論