본문 바로가기

About 배우고 익히는법/Python

국가통계포털(KOSIS) 시도별 인구이동 분석 ② 데이터 클렌징 (Data Cleansing) [출처] [파이썬 데이터 분석] 국가통계포털(KOSIS) 시도별 인구이동 분석 ② 데이터 클렌징 (Data Cleansing)

지난 포스팅에서 사용한 데이터를 그대로 사용하겠습니다. 국가통계포털(http://kosis.kr/index/index.do)에서 다운로드한 "전출/전입지(시 도) 별 이동자수" 데이터 중에서 "서울특별시"를 전입지로 갖는 데이터만 추출하여 df_seoul 변수에 저장한 자료입니다. 데이터는 아래와 같은 형태입니다. (상세 내용 지난 포스팅 참조: 링크

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

위에 정리된 데이터 중에서 "전출지별" 열(column)에 "전국", "서울특별시"가 있는 두 행(row)은 제거하겠습니다. "서울특별시"의 경우는 서울에서 서울로 이동하는 지역 내 이동에 해당하기 때문에 제거하고, "전국"은 각 시도 데이터의 합계이므로 "서울특별시"를 제거하면 합계 값에 오류가 발생하기 때문에 한꺼번에 제거합니다. 

# '서울특별시-서울특별시' 지역 내 이동 데이터 행과 '전국' 데이터 행 제거
df_seoul = df_seoul.drop([1, 19], axis=0)

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

이제 다른 시도에서 서울시로 전입하는 데이터만 남습니다. 하지만, "index"라는 이름의 열과 가장 왼쪽의 숫자 인덱스 값이 눈에 걸립니다. 그리고 "전입지별" 열에는 "서울특별시" 값만 들어 있기 때문에 불필요합니다. "index" 열과 "전입지별" 열을 제거하고, "전출지별" 열을 df_seoul 데이터 프레임의 새로운 인덱스로 지정합니다. 

# 전입지별 열 제거
df_seoul = df_seoul.drop(["index", "전입지별"], axis=1)
# 전출자별 행을 새로운 인덱스로 지정
df_seoul.set_index(["전출지별"], inplace=True)

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

이제 "전출지별"을 인덱스로 갖고 연도별 전입자 수를 값으로 갖는 데이터 프레임을 만들었습니다. pandas 라이브러리의 info( ) 메서드를 사용하여 df_seoul의 열(column) 별 데이터 유형을 살펴봅니다. 이동 인구 수가 숫자 데이터가 아니라 object형으로 저장되어 있네요. 

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

pandas에서 object 타입은 파이썬 문자열(string)과 유사하기 때문에 인구 수 데이터를 더하거나 비교하기 위해서는 숫자형으로 변환해야 합니다. 하지만,  현재 상태에서 숫자 데이터로 변환하려 하면 "-" 문자 값 때문에 변환할 때 자료형 오류가 발생합니다. 먼저 "-" 문자 값을 찾아서 NumPy 라이브러리의 NaN(not a number) 값으로 바꿔줍니다. NaN 값은 숫자형으로 변환하더라도 오류가 발생하지 않고 NaN 값을 유지합니다. 

# NumPy 라이브러리를 네임스페이스 np라고 지정하여 불러온다
import numpy as np
# missing data ("-")를 numpy.nan으로 치환한다
df_seoul.replace("-", np.nan, inplace=True)

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

df_seoul의 데이터 값을 object에서 숫자형으로 바꾸는 데는 Pandas 라이브러리의 astype( ) 메서드를 이용하면 됩니다. 

# pandas object 타입(string과 유사)으로 저장되어 있는 숫자 데이터를 실수형(float)으로 변환한다
df_seoul = df_seoul.astype(float)

df_seoul의 자료값 정보를 확인해 보면, float형으로 변환된 것을 확인할 수 있습니다. 데이터 숫자를 살펴보면, 1970년은 10개의 값이 있고, 1986년의 경우는 14개의 값이 있는 것이 확인됩니다.

파이썬 Pandas 데이터 클렌징 (Data Cleansing)

연도별 인구 이동 수가 실수형(float) 숫자 데이터로 변환된 것을 볼 수가 있습니다. 소수점 이하 한자리까지 표시가 되어 있습니다. 이제 인구 이동 수를 가지고 그래프를 그려보거나 연도별 데이터를 합산하는 등의 분석 작업을 할 수 있는 준비를 마쳤다고 볼 수 있습니다. 

파이썬 Pandas 데이터 클렌징 (Data Cleansing)