본문 바로가기
데이터분석

데이터 전처리 python

by 블쭌 2020. 11. 12.
728x90
  • 모듈 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline
  • 데이터 불러오기
boston = pd.read_csv("data/boston_missing.csv")
  • 데이터 shape 확인
boston.shape
# (506, 20)
  • 데이터 column 확인
boston.info()

  • 요약 통계량 확인

 * describe() 함수를 사용
 * 수치형 변수에 관해서만 결과를 보여준다
 * 결측치는 제거하고 계산해준다

boston.describe()

  • 상관분석

* 수치형 변수중에서 각각 2개의 column씩 상관관계를 보여준다

* 값은 -1 ~ 1사이에서 존재한다
* 절대값이 0.7이상이면 둘 사이의 관계가 밀접하게 관련이 되어있다고 볼 수 있다
* 둘 사이의 관계가 높다고 인과관계로 잘못 해석하면 안 된다

boston.corr()

# 상관관계 시각화
# seaborn모듈 안 heatmap함수를 통해서 구현 가능
# data : corr()함수를 통해 나온 결과
# annot : default는 False / True로 설정하면 해당 필드에 값을 보여줌
# fmt : 값 소숫점 표현
# cmap : 그라데이션 색깔 설정
# Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds', 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu','GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn'
# 'PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic'
plt.figure(figsize=(12,12))
sns.heatmap(data = boston.corr(), annot=True, fmt = '.1f', cmap='Purples')

  • 결측치 처리

 결측치란 해당 필드에 값이 존재하지 않은것을 의미
  1) 결측치의 숫자가 매우 적다면 이들을 삭제하고 분석
  2) 결측치의 숫자가 어느정도 존재하면 값을 대체

 

# NA 확인
na_dic={'index': list(range(0, boston.shape[1])),
        'column type': boston.dtypes,
        'null values(num)': boston.isnull().sum(),
        'null values(%)': boston.isnull().sum() / boston.shape[0] * 100}
na = pd.DataFrame(na_dic).T

# CMEDV column은 제거
boston.drop(['CMEDV'], axis=1, inplace=True)
# MEDV는 중위 값으로 대체
boston_median = boston.MEDV.describe()['50%']
boston['MEDV'].fillna(boston_median, inplace=True)
# CHAS 6개 값을 제거
boston = boston[boston.CHAS.notnull()]
  • 이상치 처리

* 이상치란 기존 데이터들로부터 동떨어진 데이터
* 측정오류나 잘못된 입력으로 인해 이상치가 포함될 수 있음
* 이상치가 포함된 데이터로 만든 모델은 정확한 결과를 낼 수 없으며 신뢰도가 떨어짐
* 주로 boxplot을 통해서 판단

# boxplot 시각화
sns.catplot(x='CHAS', y="MEDV", kind='box', data=boston)

# 결측치 제거
temp = boston[boston.CHAS == 'T'].describe()['MEDV']['75%']
temp2 = boston[(boston.CHAS == 'T') & (boston.MEDV > temp)]
boston[~boston.index.isin(temp2.index)]
  • 데이터 표준화 / 정규화
# NOX, AGE column 불러오기 
boston2 = boston[['NOX', 'AGE']]
from sklearn.preprocessing import StandardScaler

# scaler 생성
standard_scaler = StandardScaler()

# scaler 학습
standard_scaler.fit(boston2)

# scaler 적용
boston_scaled = standard_scaler.transform(boston2)

# 최종 데이터프레임 만들기
pd.DataFrame(boston_scaled, columns=boston2.columns)

from sklearn.preprocessing import MinMaxScaler

# scaler 생성
min_max_scaler = MinMaxScaler()

# scaler 학습
min_max_scaler.fit(boston2)

# sclaer 적용
boston_scaled = min_max_scaler.transform(boston2)

# 최종 데이터프레임 만들기
pd.DataFrame(boston_scaled, columns=boston2.columns)

 

728x90

'데이터분석' 카테고리의 다른 글

RMSE, Grid Search python 구현  (0) 2020.11.12
Logistic Regression  (0) 2020.11.12
seaborn 시각화 python  (0) 2020.11.12
python 복사 단순 객체복사 vs shallow copy vs deep copy  (0) 2020.10.19
Python fire package  (0) 2020.10.19

댓글