본문 바로가기
자격증/빅데이터 분석기사 (실기)

02_01. 데이터 정제 실전 과제

by 이민우 2022. 5. 30.
728x90
반응형

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029 

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.


분석 데이터 : https://www.kaggle.com/code/lottoexpecter/python-5-data-search-data-preprocessing/data?select=house_raw.csv 

 

 

분석 데이터 확인

 

  • 분석 데이터 기술통계 확인
import pandas as pd

data = pd.read_csv('/house_raw.csv', encoding='utf-8')
data.describe()
  • 히스토그램을 통한 시각화로 확인
%matplotlib inline
data.hist(bins=50, figsize=(20, 15))

  • 히스토그램을 통해 bedrooms, households, rooms에 이상치가 존재함을 확인할 수 있다.
  • 해당 데이터를 그대로 사용하여 선형 회귀 적용 시 다음과 같은 결과가 나옴을 확인할 수 있다.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression

x = data[data.columns[0:5]]
y = data[["house_value"]]

X_train, X_test, Y_train, Y_test = train_test_split(x, y, random_state=42) # 7:3으로 분리

# 독립변수 정규화는 minmaxscalar 사용
scaler_minmax = MinMaxScaler()
scaler_minmax.fit(X_train)
X_train = scaler_minmax.transform(X_train)
X_test = scaler_minmax.transform(X_test)

# 선형 회귀 모델 구성
model = LinearRegression()
model.fit(X_train, Y_train)

model.predict(X_train)
print(model.score(X_train, Y_train))

model.predict(X_test)
print(model.score(X_test, Y_test))

  • R-square (설명령)이 0.546으로 높지 않다.
  • 해당 모델을 사용하여 결과를 확인해보면 -2.82라는 말도 안되는 결과가 출력된다.
  • 이러한 현상의 방지를 위해서 이상치 제거 과정이 필요하다.
data_bedroom = data[data['bedrooms'] < 0.6]
data_bedroom['bedrooms'].hist(bins=100, figsize=(20, 15))

  • 먼저 bedroom 변수의 분포를 확인한 결과 0.6 이상에서 큰 값들이 존재함으로 0.6 미만의 데이터의 분포만을 확인해본다.
data[data['bedrooms'] >= 0.6].value_counts().sum() #14
  • 그리고 0.6 이상의 데이터는 14개로, 이 정도의 적은 데이터는 제거해도 전체 데이터에 큰 영향이 없으므로 제거한다.
data = data[data['bedrooms'] < 0.6]
  • households, rooms도 같은 방식으로 갯수를 확인해보고 이상치가 많지 않다면 그냥 제거해도 무방하다.
data = data[(data['households'] < 10) & 
            (data['rooms'] < 20)]
  • 이상치 제거를 통해 정제한 데이터를 히스토그램으로 확인해본다.
data.hist(bins=50, figsize=(20, 12))

  • 모든 변수들이 정규분포와 비슷해졌다면 선형 회귀 모델을 적용하여 학습한다.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression

x = data[data.columns[0:5]]
y = data[["house_value"]]

X_train, X_test, Y_train, Y_test = train_test_split(x, y, random_state=42) # 7:3으로 분리

# 독립변수 정규화는 minmaxscalar 사용
scaler_minmax = MinMaxScaler()
scaler_minmax.fit(X_train)
X_train = scaler_minmax.transform(X_train)
X_test = scaler_minmax.transform(X_test)

# 선형 회귀 모델 구성
model = LinearRegression()
model.fit(X_train, Y_train)

# 훈련 데이터 정확도 확인
model.predict(X_train)
print('훈련 데이터 정확도 : ', model.score(X_train, Y_train))

# 테스트 데이터 정확도 확인
model.predict(X_test)
print('테슽 데이터 정확도 : ', model.score(X_test, Y_test))

  • 정제한 데이터는 추후 활용을 위해 저장한다.
data.to_csv('/preprocessed_housing_price.csv', index=False)

 

 

 

 

728x90
반응형

'자격증 > 빅데이터 분석기사 (실기)' 카테고리의 다른 글

03_02. 회귀  (0) 2022.06.04
03_01. 분류  (0) 2022.05.30
03_머신러닝 프로세스  (0) 2022.05.30
02_데이터 탐색과 데이터 정제  (0) 2022.05.30
01. 파이썬 기초  (0) 2022.05.27