CSDS01 Week 2 : Review
Data Preprocess & EDA = Fundamentals
우리에게 공유된 구글 캘린더를 유심히 살펴보면, 이번 주(Week 2)는 Fundaentals라고 적혀있다. 이번 주에 벽에 부닥치고, 머리를 뜯으며 좌절을 극복하며 배운 것은 Data Science의 근본, 기본, 핵심을 배운 것이라고 볼 수 있다. 근본부터 어려웠으면 앞으로 나올 수학적 지식을 코딩에 접목하는 건 얼마나 어려울지, 상상만으로도 나를 짜즈ㅇ읍! 아니, 짜릿하게 한다!
Foundation/기본이 탄탄해야 좋은 집을 지을 수 있다.
테크니컬한 부분은 매일 주어지는 Assignment를 통해 ‘코드 작성하고 연습하지만, 개념적인 부분은 blogging을 통해서 우리가 배웠던 주제의 개념을 되짚어보는 시간을 가져보려 한다.
Data Preprocess — 데이터 전처리
나에게 ‘전처리’라는 단어는 그다지 낯선 단어가 아니다.
취사병으로 군 복무를 할 때 매주 월, 수, 금요일마다 어마어마한 양의 식재료들을 수령하는데, 수령한 식재료들을 요리에 쓰일 수 있게 (씻고, 닦고, 자르고)/가공하고 보관하는 과정/process를 ‘전처리’라고 불렀다. 그래서 그런지 ‘데이터 전처리’라는 단어는 나에게 친근하게 다가왔다.
EDA (Exploratory Data Analysis: 탐구적 자료 분석)
처음 보는 음식을 냄새 맡고, 눌러보고, 씹고, 뜯고, 맛보기 전까지는 다른 사람에게 그 음식이 어떤 음식인지 설명할 수가 없다. 왜냐하면 처음 보는 음식에 대한 정보나, 기본지식이 없기 때문이다.
같은 이유로, 누군가 우리에게 처음 보는 데이터를 던져주고 ‘이 데이터가 무엇을 나타내는지 지금 당장 설명해 주세요.’라고 부탁한다면 나는 ‘시간을 좀 주세요.’라고 하겠다.
데이터를 분석하기 전에 여러가지 코딩으로
- 몇개의 row와 column으로 이루어져 있는지?
- 각 column의 어떻게 정의되어 있나 ategorical Data 인지?
- 또는 Numerical Data 인지?
- 결측치 = (NaN, Null, 0), Missing Data/손실 데이터는 존재하는지?
- 데이터 각 column의 date type은 무엇인지?
와과 같은 정보를 알아내어 앞으로 데이터를 어떻데 분석해야하는지 결정을 하는 부분이 EDA 인것 같다.
비유해보자면, 식재료마다 손질하는 방법이 있는데, 무작정 칼을 들이밀기보다는, 식재료를 유심히 관찰하여 어떻게 손질할 것인가를 고민하고 메모하는 시간이 EDA.
Feature Engineering (변수 가공)
Feature Engineering 이란, 도메인 지식과 창의성을 바탕으로, 데이터셋에 존재하는 항목들을 재조합하여 새로운 데이터를 만드는 것입니다.
결측치 대체법 : imputation
사전에는 Imputation : 1. <죄 등을> (…에게) 돌림, 전가(accusation) 2. 비난, 비방; 오명(汚名)
이라고 나와 있어서 이게 무슨 소린가 했지만…
impute의 뜻을 찾아보니, 더 와 닫는다.
Impute : <성질·속성 등을> (…에게) 있다고 생각하다, 귀속시키다 (to)
성질·속성 등을 …에게 있다고 생각하다
또는, 성질·속성 등을 …에게 귀속시키다
결측치는 어떻게 다룰지 결정하는건 ‘우리의 몪’이라는 말이 생각이 난다.
imputation : 결측치 처리, 또는 결측치 대체를 커피 판매점 입장에서…
시나리오1
라떼를 만드는 데는 에스프레소와 우유가 필요하다. 마침 손님이 라떼를 주문했는데 우유가 다 떨어졌다.
다행히도 우유를 대체 할 수 있는, Soy Milk, Almond Milk, Coconut Milk 등 우유의 대체품이 있다면 손님에게 안내하여, 우유 대체품을 사용한 라떼를 고객에게 제공 할 수 있다. (우유로 만든 라떼가 아니지만, 고객입장에서 결국엔 라떼이다.)
시나리오2
손님이 라떼를 주문했는데 에스프레소 기계가 고장 나 에스프레소를 만들 수 없다, 검은색 액체인 간장은 있었다. 라고 가정해보자.
현실에 이럴사람은 없겠지만…
커피도 검은색… 간장도 검은색…
“아! 둘다 검은색 액체니까 커피대신에 간장을 넣어서 주면 되겠다!”
라고 생각하여 덥혀진 간장에, 덥혀진 우유를 섞어 라떼를 만들어주면… 손님에게 김치 싸다구 안날라 오는것에 감사해야한다… (NaN 값을 터무니 없는 값으로 채워넣는것)
옳은 방법은 에스프레소 음료를 팔지 않거나 (.dropna)
에스프레소를 대체할 수 있는, 콜드브루 커피를 이용해 라떼를 만드는 방법이 있다.
무턱대고 결측치를 아무렇게 대체하기보다는 결측치를 어떻게 처리할 것인가? 라고 심도 깊게 생각해 볼 필요가 있겠다.
결측치가 있는 데이터를 .dropna 할 수도 있고, mean 값으로 채워 넣을 수도 있고, 0으로 채울 수도 있지만, 데이터를 너무 alter 하는 값 (커피대신 간장) 으로 채워 넣는 것은 피하는 게 좋겠다.