Rucrazia's Blog
[통계] 데이터 전처리 1 본문
*본 글에서 사용하는 언어는 Python이고 Pandas, sklearn, seaborn, matplotlib 라이브러리를 기본으로 사용합니다.
우리가 얻는 데이터는 완벽할 수 없습니다. 대중에게 서비스하고 있는 기업들에서 얻는 대부분의 데이터 또한 완벽하다고 할 수 없습니다. 물론 완벽하다는 기준이 다를 수 있습니다. 일반적으로 데이터를 얻었을 때 갖고 있는 문제를 해결하는 방법을 이번에 보려고 합니다.
이번에도 데이터는 캐글에 있는 타이타닉 데이터 Titanic: Machine Learning from Disaster 를 이용하려고 합니다.
1. 데이터 구조 확인
일단 첫 번째로 중요한 건 데이터의 구조를 확인하는 것입니다. 먼저 데이터의 내부를 보려고 합니다.
df = pd.read_csv("../input/train.csv")
df.head()
데이터의 형태를 보기 위해 info()를 이용하여 각 feature들의 개수, 데이터 타입, null 여부를 확인합니다.
df.info()
데이터들의 기초통계량을 구하는 것으로 중앙값, 평균값, 표준편차, 최솟값, 25% 값, 50% 값, 75% 값, 최댓값을 나타내 줍니다.
df.describe()
2. 결측치(Null data / Missing Data) 확인 및 처리
데이터에는 다양한 문제가 있는데 그중에서 가장 중요한 것 중 하나가 결측치입니다. 결측치는 데이터가 아예 안 들어오는 경우를 일반적으로 의미하며 심하면 한 feature 전체를 이용 못할 수도 있습니다. 그만큼 결측치는 우리가 주의해서 접근해야 하는 것입니다. 결측치가 있어도 우리는 결측치 전처리를 통해서 분석에 도움이 될 수 있도록 할 수 있습니다.
결측치 처리는 1) 결측치 사례 제거 2) 수치형의 경우 평균이나 중앙치로 대체(imputation)하거나 범주형인 경우 중앙값(mode) 값으로 대체 3) 간단한 예측 모델로 대체하는 방식이 일반적으로 이용됩니다. 가장 쉬운 방법은 결측치 값이 포함 행 혹은 일부 행을 제거하는 것 입니다. 수집된 사례(observation)가 많다면 이 방법을 사용하는 것이 가능하나 만약 샘플수가 충분하지 않을 경우, Pandas의 fillna() 명령어로 Null 값을 채우는 것이 가능합니다. 연속형인 경우 Mean이나 Median을 이용하고 명목형인 경우 Mode(최빈치)나 예측 모형을 통해 Null 값을 대체할 수 있니다.
만약 '', ' ' 이런 식의 공백이나 다른 방식으로 처리되어 있다면, 모두 repalce 처리해줘야 합니다. 이런 값들은 보통 데이터 유형에서 string인 경우에 일어날 수 있습니다.
def missing_data(data):
total = data.isnull().sum()
percent = (data.isnull().sum()/data.isnull().count()*100)
tt = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
types = []
for col in data.columns:
dtype = str(data[col].dtype)
types.append(dtype)
tt['Types'] = types
return(np.transpose(tt))
missing_data(df)
3. 이상치 확인
이상치 확인은 결측치하고 비슷한 정도로 중요한 문제입니다. 이상치는 결측치보다는 숫자가 적을 수 있지만 데이터 분석할 때 모델에 영향을 주어 결과를 안 좋게 할 수 있습니다.
이상치를 확인하는 방법으로는
(1) 통계치 이용
평균(mean), 중앙값(median), 최빈값(mode) 등을 이용하거나 데이터의 분포, 범위(range), 분산(variance)을 이용해서 분석 가능합니다.
예를 들어, 정규분포에서 97.5% 이상 또는 2.5%의 이하에 포함되는 값을 이상치로 판별하는 방법을 이용합니다.
(2) 시각화 이용
데이터의 분포를 그려서 특정 데이터가 분포에서 멀리 떨어져 있다고 생각되는 것의 범위를 직접 찾아서 이상치를 제거하는 방법을 사용합니다.
(3) Raw 데이터 직접 이용
아파트 층수 데이터에서 1000층 이상 되는 값이 있다면 비정상적인 값이기 때문에 직접 삭제하는 방법과 같이 직접적으로 raw 데이터를 제거하는 방법을 사용합니다.
Ref.
https://pubdata.tistory.com/52
https://eda-ai-lab.tistory.com/13
'기술 - Data Science > Data Science' 카테고리의 다른 글
[강의] MIT Introduction to Computational Thinking and Data Science 정리 - Chapter 5. Random Walks (0) | 2019.11.05 |
---|---|
[통계] 선형 결합(Linear Combination) (0) | 2019.06.24 |
Skewness(왜도)와 Kurtosis(첨도) (0) | 2019.01.17 |
빅데이터에서의 정규성 검정 (0) | 2019.01.16 |
Random Forest (랜덤 포레스트) 간단히 알아보기 (0) | 2019.01.16 |