[기계학습][데이터 전처리] 기본적인 데이터 전처리 방법 - mingoori0512/minggori GitHub Wiki
참고: https://wikidocs.net/16582
데이터 불러오기 및 인덱스 지정
데이터를 읽어 오고 가장 먼저 할일은 첫 행 몇개와 마지막 행을 살펴보는 것이다. 그리고 유니크 식별값을 인덱스로 지정하고 dataframe 각 컬럼의 타입과 결측치 등을 파악하는 것이다.
# 데이터프레임 읽고 초반, 후반 행 확인하기
df = pd.read_csv("testset.csv", index_col=0)
df.head()
df.tail()
# 인덱스 지정
df.set_index("iduser", inplace=True)
# 컬럼별 type 확인 및 결측치 확인
df.info()
df.isnull().sum()
결측치 처리
결측치 처리는 1) 결측치 사례 제거 2) 수치형의 경우 평균이나 중앙치로 대체(imputation)하거나 범주형인 경우 mode 값으로 대체 3) 간단한 예측 모델로 대체하는 방식이 일반적으로 이용된다. 가장 쉬운 방법은 Null이 포함 행 혹은 일부 행을 제거하는 것이다. 수집된 사례(observation)이 많다면 이 방법을 사용하는 것이 가능하다. 만약 샘플수가 충분하지 않을 경우, Pandas의 fillna() 명령어로 Null 값을 채우는 것이 가능하다. 연속형인 경우 Mean이나 Median을 이용하고 명목형인 경우 Mode(최빈치)나 예측 모형을 통해 Null 값을 대체할 수 있다.
데이터셋을 읽었다면, Missing Value 파악을 위해 df.info() 가장 처음에 이용하는 것을 추천한다. 만약 np.nan으로 적절히 missing value로 불러왔다면 info() 이용 가능하다. 만약 '', ' ' 이런식의 공백이나 다른 방식으로 처리되어 있다면, 모두 repalce 처리해줘야 한다. info()를 실행했을 때, 누가봐도 float or int 인데 object(string)으로 되어 있다면 이런 사레가 포함될 가능성이 높다.
# 결측치 부분을 메꾸는 방법
test['viewCount'] = test['viewCount'].fillna(test.viewCount.mean())
# 만약 결측치가 문자열 스페이스(' ')로 되어 있다면, np.nan으로 바꾸어 Pandas 라이브러리가 인식할수 있도록 변환
test.viewCount = test.viewCount.replace('', np.nan)
# 결측치를 제거하는 방법
test.dropna(how='all').head() # 한 행이 모두 missing value이면 제거
test.dropna(how='any').head() # 한 행에서 하나라도 missing value가 있으면 제거