2019. 9. 29. 22:38ㆍData Science
우리가 처리하려는 Data의 값이 듬성듬성 비어있다면 우리가 해야될 것은 당연히 전처리를 통해서
Missing Value를 처리해주는 것입니다.
처리방법은 크게 3가지로 나눌수 있습니다만.. 오늘은 제일 간단명료한 방법.
다시 말해 Missing이 있는 Data를 지우는 방법에 대해서 간단히 논의해보고자 합니다.
그런데 지우기전에 우리는 반드시 알아야 될 것이 있습니다.
생각없이 missing된 Data를 모두 날려버리고 Data를 분석한다면 잘못된 결과를 초래한다는 것을요.
머신러닝으로 치면 학습된 모델은 Biased된 Model이 될 가능성이 농후합니다. 당연히 예측 성능도 좋지 못하겠지요.
결국은 그 Data를 들여다 보고, Missing된 Data의 비율이 전체 정보에서 차지하는 비율이 어느정도인지.
그리고 Missing Value가 있는 Data 자체가 분석하려고 하는 목적에 부합하는 필요한 Data인지에 대한 판단이 선행
되어야 할 것입니다.
자 일단 서론은 여기까지로 하고 방법론으로 바로 들어가보겠습니다.
결국 Data를 날린다라는 의미는 Table형태의 Pandas 입장에서는 Row나 Column을 선택적으로 Drop한다 라고 생각하시면 되겠습니다.
그러면 아래에 몇가지 상황과 처리방법으로 바로 들어가겠습니다.
1) Missing Value가 있는 row는 모두 Drop 즉 지우고 싶다.
all_drop = small_dataset.dropna() # Drop any row with a missing value
small_dataset이름의 Pandas Dataframe변수에 dropna()라는 매서드를 써서 간단하게 날려버렸습니다.
위의 전,후 결과를 보시면 알수 있듯이 NaN값이 있는 모든 행을 단박에 삭제한 것을 알수 있습니다.
2) Row값이 전부 Missing Value 인 Row 만 지우고 싶습니다.!!
all_row = small_dataset.dropna(how='all') # Drop only rows with all missing values
how ='all' 만 괄호안에 넣어주면 되겠습니다. 상당히 직관적이네요.
3) 아..그런데 col3에 NaN값이 있을때만 Row를 지우고 싶어요.. 제발 ..
이럴때는 난감하죠??... 아닙니다. 똑같이 간단하게 해결할수 있습니다. 아래와 같이
only3_drop = small_dataset.dropna(subset =['col3']) # Drop only rows with missing values in column 3
subset = ['열이름'] 이렇게 넣어줬더니 또 해결되버렸네요.
응용해서 col1랑 col3 함께?? 이러께도 가능하지 않을까 생각할수 있겠죠?
only3or1_drop = small_dataset.dropna(subset =['col1','col3']) # Drop rows with missing values in column 1 or column 3
아하... simple 합니다.
인생이 이것처럼 simple 했으면 좋겠습니다. ㅎㅎㅎ
자 이제 Data 전처리가 점점 익숙해지고 있음을 저는 느끼고 있습니다.
여러분은 어떠신가요??
'Data Science' 카테고리의 다른 글
Data 파이프 라인 : ETL vs ELT (0) | 2019.10.27 |
---|---|
분류형 Data만 가져오는 간단한 방법 (How to Identify the columns that are categorical in nature) (0) | 2019.10.03 |
Dataset 으로 무언가 시작하려고 할 때 반드시 체크 해야 되는 5가지 (0) | 2019.09.25 |
JDBC 와 ODBC의 차이점은 무엇인가? (0) | 2019.09.25 |
당신이 만든 머신러닝 모델 괜찮은지 성능을 알고 싶나? 1편 (0) | 2019.09.04 |