數(shù)據(jù)預(yù)處理包括以下幾個(gè)方面:
- 缺失值處理
- 數(shù)據(jù)格式化
- 數(shù)據(jù)規(guī)范化
- 數(shù)據(jù)標(biāo)準(zhǔn)化
- 數(shù)據(jù)分箱(分組)
標(biāo)準(zhǔn)化經(jīng)常容易與規(guī)范化混淆,但它們指的是不同的東西。規(guī)范化涉及將不同比例的度量值調(diào)整到一個(gè)共同的比例,而標(biāo)準(zhǔn)化則是將特征值轉(zhuǎn)換為均值為零,標(biāo)準(zhǔn)差為1的分布。標(biāo)準(zhǔn)化也是通過(guò) z-score 轉(zhuǎn)換來(lái)實(shí)現(xiàn)的,其中新值是用當(dāng)前值與平均值之間的差,除以標(biāo)準(zhǔn)差計(jì)算得來(lái)的。
Z-score 是一種統(tǒng)計(jì)度量值,用于確定單個(gè)數(shù)據(jù)點(diǎn)與數(shù)據(jù)集其余部分的距離,它可以用來(lái)檢測(cè)數(shù)據(jù)集中的異常值。
在本教程中,我們將考慮兩種類型的標(biāo)準(zhǔn)化:
- z 得分(z-score)
- z 映射(z-map)
一、數(shù)據(jù)準(zhǔn)備(Data Preparation)
本教程的示例數(shù)據(jù)集還是繼續(xù)沿用上一個(gè)教程(Part 3)中的新冠肺炎數(shù)據(jù)集,獲取方式見上一個(gè)教程的文末。
首先,我們需要導(dǎo)入 Python/ target=_blank class=infotextkey>Python pandas 庫(kù),并通過(guò) read_csv() 函數(shù)讀取數(shù)據(jù)集。然后我們可以刪除所有具有 NaN 值的列,通過(guò) dropna() 函數(shù)來(lái)實(shí)現(xiàn)的。
import pandas as pd
df = pd.read_csv('datasets/dpc-covid19-ita-regioni.csv')
df.dropna(axis=1, inplace=True)
df.tAIl(10)
圖片
二、z 得分(Z-Score)
前面說(shuō)過(guò),標(biāo)準(zhǔn)化是將數(shù)據(jù)集中的特征值轉(zhuǎn)換為具有均值為 0 和標(biāo)準(zhǔn)差為 1 的分布。Z-Score 標(biāo)準(zhǔn)化的公式為:
其中 是當(dāng)前特征值, 是均值, 是標(biāo)準(zhǔn)差。
例如,我們可以計(jì)算列 deceduti 的 z 得分。我們可以使用 scipy.stats 庫(kù)的 zscore() 函數(shù)實(shí)現(xiàn)。
from scipy.stats import zscore
df['zscore-deceduti'] = zscore(df['deceduti'])
df['zscore-deceduti']
圖片
三、z 映射(Z-Map)
z 映射的值是用當(dāng)前特征值與比較數(shù)組的平均值之差,除以比較數(shù)組的標(biāo)準(zhǔn)差計(jì)算得來(lái)的。例如,我們可以計(jì)算列 deceduti 的 z-map,使用列 terapia_intenva 作為比較數(shù)組。我們可以使用 scipy.stats 庫(kù)的 zmap() 函數(shù)實(shí)現(xiàn)。
from scipy.stats import zmap
df['zmap-deceduti'] = zmap(df['deceduti'], df['terapia_intensiva'])
df['zmap-deceduti']
圖片
四、異常值檢測(cè)(Detect Outliers)
標(biāo)準(zhǔn)化可以用來(lái)檢測(cè)和刪除異常值。例如,可以定義一個(gè)閾值來(lái)指定哪些值可以被視為異常值。在本例中,我們?cè)O(shè)置 threshold = 2。我們可以在原始數(shù)據(jù)框中添加一個(gè)新的列 outliers,如果特征值小于-2或大于2,則將異常標(biāo)記列的值設(shè)置為 True,否則為 False。我們可以使用 numpy 庫(kù)的 where() 函數(shù)來(lái)執(zhí)行比較。
import numpy as np
threshold = 2
df['outliers'] = np.where((df['zscore-deceduti'] - threshold > 0), True,
np.where(df['zscore-deceduti'] + threshold < 0, True, False))
df['outliers']
圖片
現(xiàn)在,我們可以使用 drop() 函數(shù)刪除異常值。
df.drop(df[df['outliers'] == True].index, inplace=True)
df
圖片
五、總結(jié)(Summary)
在本教程中,我解釋了規(guī)范化和標(biāo)準(zhǔn)化之間的區(qū)別,規(guī)范化在某種程度上包括標(biāo)準(zhǔn)化。
數(shù)據(jù)標(biāo)準(zhǔn)化的方法有兩種:z-score 和 z-map。
標(biāo)準(zhǔn)化可用于檢測(cè)和刪除數(shù)據(jù)集中的異常值。此外,它還可以用于在不同的數(shù)據(jù)集之間進(jìn)行比較。