-
파이썬 Pandas DataFrame 결측치 회귀모형 추정값으로 채우기<Python>/[DataFrame] 2023. 3. 8. 16:21728x90
데이터 분석에서 결측값은 분석에 방해가 되는 요소입니다. 결측값을 제외하고 분석을 진행하게 되면 데이터 분석의 정확도를 높일 수 있습니다. 하지만 결측값을 제외하면 데이터의 수가 줄어들게 되어 분석의 정확도가 낮아질 수 있습니다. 이러한 문제를 해결하기 위해서 결측값을 선형회귀모형으로 대체할 수 있습니다.
(1) 결측값을 제외한 데이터로부터 선형회귀모형 훈련하기
선형회귀모형은 독립변수와 종속변수 사이의 선형적인 관계를 나타내는 모델입니다. 이 모델을 통해 결측값을 대체할 수 있습니다. 선형회귀모형을 훈련하기 위해서는 다음과 같은 과정이 필요합니다.
- 데이터 불러오기
- 결측값 제거하기
- 종속변수와 독립변수 선택하기
- 선형회귀모형 만들기
- 모델 훈련하기
(2) 선형회귀모형으로 부터 추정값 계산하기
선형회귀모형을 통해 추정값을 계산할 수 있습니다. 추정값은 모델을 통해 독립변수를 입력하면, 모델에서 예측된 종속변수 값입니다. 따라서 결측값을 선형회귀모형으로 대체하기 위해서는 결측값을 포함한 데이터를 모델에 입력하고, 모델에서 예측된 종속변수 값을 결측값으로 대체하면 됩니다.
(3) pandas 의 fillna() 메소드 또는 numpy의 np.where() 메소드를 사용해서 결측값인 경우 선형회귀모형 추정값으로 대체하기
선형회귀모형으로 결측값을 대체하기 위해서는 pandas의 fillna() 메소드나 numpy의 np.where() 메소드를 사용할 수 있습니다.
- pandas의 fillna() 메소드를 사용하는 방법
import pandas as pd from sklearn.linear_model import LinearRegression # 데이터 불러오기 df = pd.read_csv('data.csv') # 결측값 제거하기 df.dropna(inplace=True) # 종속변수와 독립변수 선택하기 X = df[['feature1', 'feature2']] y = df['target'] # 선형회귀모형 만들기 model = LinearRegression() # 모델 훈련하기 model.fit(X, y) # pandas의 fillna() 메소드를 사용하는 방법에 이어서 결측값 대체하기 # 결측값이 있는 데이터 선택하기 X_missing = df[df.isna().any(axis=1)][['feature1', 'feature2']] # 결측값 대체하기 y_pred = model.predict(X_missing) X_missing['target'] = y_pred df_filled = pd.concat([df, X_missing], axis=0) # 결측값 대체 후 모델 재학습 X_filled = df_filled[['feature1', 'feature2']] y_filled = df_filled['target'] model.fit(X_filled, y_filled)
728x90위 코드에서는 결측값이 있는 데이터를 선택한 후, 모델을 사용하여 결측값을 대체합니다. 먼저, 결측값이 있는 데이터를 선택하기 위해 `isna()` 메소드를 사용합니다. `any(axis=1)` 옵션을 사용하면 행 기준으로 결측값이 하나 이상 있는 데이터를 선택할 수 있습니다.
선택된 데이터를 이용하여 `model.predict()` 메소드를 사용하여 결측값을 예측합니다. 그 다음, `fillna()` 메소드를 사용하여 결측값을 예측값으로 대체합니다. 최종적으로 결측값이 대체된 데이터를 이용하여 모델을 다시 학습합니다.
2. numpy의 np.where() 메소드를 사용하는 방법import numpy as np from sklearn.linear_model import LinearRegression # 데이터 불러오기 data = np.genfromtxt('data.csv', delimiter=',') # 결측값 제거하기 data = data[~np.isnan(data).any(axis=1)] # 종속변수와 독립변수 선택하기 X = data[:, :2] y = data[:, 2] # 선형회귀모형 만들기 model = LinearRegression() # 모델 훈련하기 model.fit(X, y) # 결측값 대체하기 X_missing = data.copy() X_missing[:, 2] = np.where(np.isnan(X_missing[:, 2]), model.predict(X_missing[:, :2]), X_missing[:, 2])
위 코드에서는 numpy의 np.where() 메소드를 사용하여 결측값을 대체합니다. 결측값이 있는 데이터를 선택한 후, np.where() 메소드를 사용하여 결측값을 대체합니다. np.isnan() 메소드를 사용하여 결측값을 찾고, 대체할 값으로 모델을 사용합니다. X_missing[:, 2]는 target 컬럼을 의미하며, X_missing[:, :2]는 feature1과 feature2를 의미합니다.
이러한 방법으로 선형회귀모형을 사용하여 결측값을 대체할 수 있습니다. 결측값을 대체함으로써 데이터 분석의 정확도를 높일 수 있으며, 분석 결과를 신뢰할 수 있습니다.
728x90'<Python> > [DataFrame]' 카테고리의 다른 글
파이썬 Pandas DataFrame .sample (0) 2023.03.08 파이썬 Pandas DataFrame 칼럼 다루기 (0) 2023.03.08 파이썬 Pandas DataFrame 칼럼 순서를 변경 (0) 2023.03.08 파이썬 Pandas DataFrame .groupby.apply vsv .agg (0) 2023.03.08 파이썬 Pandas DataFrame .groupby (0) 2023.03.08