資料遺缺(Missing Values)是資料分析過程中常見的問題。處理資料遺缺的方法有多種,選擇適當的方法取決於資料的性質和分析的需求。以下是四項常見的資料遺缺處理方式:
1. 刪除法(Deletion)
1.1 刪除含有遺缺值的記錄(Listwise Deletion)
描述:將包含遺缺值的整個記錄刪除。
適用情境:遺缺值比例較小且刪除記錄不會對整體資料集產生重大影響時。
優點:簡單直接,適用於遺缺值較少的情況。
缺點:如果遺缺值比例較大,可能導致資料損失過多,影響分析結果。
python
複製程式碼
import pandas as pd
data = {'ID': [1, 2, 3, 4],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22]}
df = pd.DataFrame(data)
# 刪除含有遺缺值的記錄
df_cleaned = df.dropna()
print(df_cleaned)
1.2 刪除含有遺缺值的變數(Variable Deletion)
描述:將包含遺缺值的整個變數(列)刪除。
適用情境:該變數對分析影響不大,或該變數中遺缺值比例過高時。
優點:簡單直接,適用於非關鍵變數。
缺點:可能會丟失有用的信息。
python
複製程式碼
import pandas as pd
data = {'ID': [1, 2, 3, 4],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22],
'Salary': [50000, 60000, 55000, None]}
df = pd.DataFrame(data)
# 刪除含有遺缺值的變數(列)
df_cleaned = df.drop(columns=['Salary'])
print(df_cleaned)
2. 插補法(Imputation)
2.1 用均值/中位數/眾數填補(Mean/Median/Mode Imputation)
描述:使用該變數的均值、中位數或眾數填補遺缺值。
適用情境:該變數是連續型數據,且遺缺值比例較小。
優點:保持了資料集的完整性,避免資料損失。
缺點:可能低估變異性,對於極端值敏感。
python
複製程式碼
import pandas as pd
data = {'ID': [1, 2, 3, 4],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, None, 22]}
df = pd.DataFrame(data)
# 用均值填補遺缺值
mean_age = df['Age'].mean()
df['Age'].fillna(mean_age, inplace=True)
print(df)
2.2 用前一值或後一值填補(Forward/Backward Fill)
描述:使用前一個有效值或後一個有效值填補遺缺值。
適用情境:時間序列數據或具有順序關係的數據。
優點:保持了數據的連續性和趨勢。
缺點:對於長期遺缺值,可能會產生較大的誤差。
python
複製程式碼
import pandas as pd
data = {'ID': [1, 2, 3, 4],
'Date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'Sales': [200, None, 250, None]}
df = pd.DataFrame(data)
# 用前一值填補遺缺值
df['Sales'].fillna(method='ffill', inplace=True)
print(df)
# 用後一值填補遺缺值
df['Sales'].fillna(method='bfill', inplace=True)
print(df)
3. 使用插補法(Interpolation)
3.1 線性插補(Linear Interpolation)
描述:通過插值方法,利用相鄰數據點的值來估計遺缺值。
適用情境:連續型數據,特別是時間序列數據。
優點:能夠更精確地估計遺缺值,保持數據趨勢。
缺點:對於不規則分布的數據,效果不佳。
python
複製程式碼
import pandas as pd
data = {'ID': [1, 2, 3, 4],
'Date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'Temperature': [30, None, 25, None]}
df = pd.DataFrame(data)
# 使用線性插補填補遺缺值
df['Temperature'] = df['Temperature'].interpolate(method='linear')
print(df)
4. 使用模型預測填補(Model-Based Imputation)
4.1 回歸填補(Regression Imputation)
描述:使用回歸模型,利用其他變數來預測並填補遺缺值。
適用情境:資料集包含足夠多的變數,且這些變數之間存在相關性。
優點:能夠根據其他變數的信息,更準確地填補遺缺值。
缺點:需要假設變數之間的線性關係,計算較為複雜。
python
複製程式碼
import pandas as pd
from sklearn.linear_model import LinearRegression
data = {'ID': [1, 2, 3, 4, 5],
'Age': [25, 30, 35, 40, None],
'Salary': [50000, 60000, 65000, 70000, 80000]}
df = pd.DataFrame(data)
# 將非缺失值分成訓練集
train_data = df.dropna()
test_data = df[df['Age'].isnull()]
# 訓練回歸模型
reg = LinearRegression()
reg.fit(train_data[['Salary']], train_data['Age'])
# 預測缺失值
predicted_ages = reg.predict(test_data[['Salary']])
df.loc[df['Age'].isnull(), 'Age'] = predicted_ages
print(df)
總結
處理資料遺缺的方法有多種,選擇適當的方法取決於具體的資料情境和分析需求。常見的方法包括刪除法、插補法、使用插補法和使用模型預測填補。每種方法都有其優缺點,應根據資料特性和業務需求進行選擇,以提高資料質量,確保後續分析的準確性和可靠性。