머신러닝을 위한 데이터 가져오기

머신러닝을 배울 때는 인공적으로 만들어진 데이터셋이 아닌 실제 데이터로 실험해보는 것이 가장 좋습니다.
아래의 목록은 여러 분야에 걸친 공개된 데이터셋을 얻을 수 있는 홈페이지들입니다.

  • UC Irvine 머신러닝 저장소 (http://archive.ics.uci.edu/ml/)
  • Kaggle Dataset (http://www.kaggle.com/datasets)
  • Amazon AWS Dataset (http://aws.amazon.com/ko/datasets
  • Wiki Dic. (https://goo.gl/SJHN2k)
  • Quora.com (http://goo.gl/zDR78y)
  • Dataset Subreddit(http://www.reddit.com/r/datasets)

데이터 실습으로 StatLib 저장소에 있는 캘리포니아 주택 가격 (California Housing Prices) 데이터셋을 사용할 예정입니다. 
해당 데이터셋은 1990년 캘리포니아 인구조사 데이터를 기반으로 합니다. 



1. 데이터 가져오기

아래의 코드는 데이터를 추출하는 코드입니다. 

fetch_housing_data()를 호출하면 작업공간에 datasets/housing 디렉토리를 만들고 housing.tgz파일을 내려받고 같은 디렉토리에 압축을 풀어 housing.csv파일을 만듭니다.
import os
import tarfile
from six.moves import urllib

DOWNLOAD_ROOT = "https://github.com/ageron/handson-ml/tree/master/"
HOUSING_PATH = "datasets/housing"
HOUSING_URL = DOWNLOAD_ROOT + HOUSING_PATH + "/housing.tgz"


def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
if not os.path.isdir(housing_path):
os.makedirs(housing_path)

tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path)
housing_tgz.extractall(path=housing_path)
housing_tgz.close()

fetch_housing_data()



2. 데이터셋 확인

이제 판다스를 사용하여 데이터를 읽어 들이도록 하겠습니다. 데이터를 읽어들이는 간단한 함수를 사용하도록 하겠습니다.

load_housing_data() 함수는 모든 데이터를 담은 판다스의 데이터프레임 객체를 반환합니다. head() 함수를 활용하여 정상적으로 데이터가 적재되었는지 확인합니다.

Code

import pandas as pd

HOUSING_PATH = "datasets/housing"

def load_housing_data(housing_path=HOUSING_PATH):
csv_path = os.path.join(housing_path, "housing.csv")
return pd.read_csv(csv_path)

housing = load_housing_data()
print(housing.head())

Output

정상적으로 데이터가 적재되었음을 확인할 수 있습니다. 위의 표에서는 5개의 열만 보이지만 실제로는 10개의 열이 존재합니다.



info() 함수를 통해 데이터에 대한 간략한 설명과 전체 행 수, 각 특성의 데이터 타입과 널이 아닌 값의 개수를 확인합니다.

Code

housing = load_housing_data()
print(housing.info())

Output

데이터셋에 20,640개의 샘플이 있습니다. 머신러닝 프로젝트치고는 상당히 작은 편이지만, 처음 시작하기에 적당한 크기입니다.

ocean_proximity 필드를 제외하고는 모두 숫자형(float64)임을 확인할 수 있습니다. ocean_proximity 필드의 데이터 타입이 object이므로 어떤 파이썬 객체도 될 수 있지만,
데이터를 CSV 파일에서 읽어 들였기 때문에 텍스트 특성일 것이라고 추측할 수 있습니다. 해당 열의 값이 반복적으로 나타나는 것으로 보아 범주형 변수임을 확인할 수 있습니다. 



3. 데이터 필드 속성 확인

위에서 살펴보았던 ocean_proximity 필드를 집중적으로 살펴보도록 하겠습니다. 
ocean_proximity 필드에 어떤 카테고리가 있고 각 카테고리마다 얼마나 많은 구역이 있는지 확인해보도록 하겠습니다.

Code

housing = load_housing_data()
print(housing["ocean_proximity"].value_counts())

Output



4. 데이터 필드 시각화

데이터의 형태를 빠르게 검토하는 방법은 숫자형 특성을 히스토그램으로 보는 것입니다. 히스토그램은 주어진 값의 범위에 속한 샘플 수를 나타냅니다.
특성마다 따로 히스토그램을 그릴 수 있고 전체 데이터셋에 대해 hist() 메서드를 호출하면 모든 숫자형 특성에 대한 히스토그램을 출력합니다.

Code

housing.hist(bins=50, figsize=(20, 15))
plt.show()

Output

출력된 히스토그램을 통해 여러 가지 정보들을 얻을 수 있고, 이로 인해 우리가 다룰 데이터를 많이 이해하게 되었습니다.



References

  • 오렐리앙 제롱, '핸즈온 머신러닝', 한빛미디어, 2018

+ Recent posts