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