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