1.3. 예제 데이터#

데이터 분석의 실습을 위해서는 예제 데이터가 필요하다. 이 책에서는 설명에 필요할 때마다 예제 데이터를 다운로드 받는 방법을 알려줄 것이다. 일부 데이터는 분석용 패키지에 미리 내장되어 있는 예제 데이터를 사용하기도 한다. 하지만 이 책에서 쓰는 대부분의 데이터는 다음과 같은 패키지의 기능을 사용하여 인터넷으로부터 얻는다.

  • pandas 패키지

  • statsmodels 패키지

  • pandas-datareader 패키지

이 절에서는 이러한 패키지들을 사용하여 인터넷 상의 데이터를 얻는 법을 설명한다.

1.3.1. pandas 패키지#

pandas 패키지는 인터넷에 있는 각종 파일을 읽어 데이터프레임 형식으로 바꿀 수 있는 명령어를 제공한다. pandas 패키지는 보통 pd 라는 별칭으로 임포트한다.

import pandas as pd

예를 들어 다음 URL 주소에 있는 csv 파일은 다음과 같이 read_csv 명령으로 읽을 수 있다.

pd.read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/AER/Affairs.csv")
Unnamed: 0 affairs gender age yearsmarried children religiousness education occupation rating
0 4 0 male 37.0 10.00 no 3 18 7 4
1 5 0 female 27.0 4.00 no 4 14 6 4
2 11 0 female 32.0 15.00 yes 1 12 1 4
3 16 0 male 57.0 15.00 yes 5 18 6 5
4 23 0 male 22.0 0.75 no 2 17 6 3
... ... ... ... ... ... ... ... ... ... ...
596 1938 1 male 22.0 1.50 yes 1 12 2 5
597 1941 7 female 32.0 10.00 yes 2 18 5 4
598 1954 2 male 32.0 10.00 yes 2 17 6 5
599 1959 2 male 22.0 7.00 yes 3 18 6 2
600 9010 1 female 32.0 15.00 yes 3 14 1 5

601 rows × 10 columns

read_csv 명령의 자세한 사용법과 옵션은 다음 웹사이트를 참조한다.

경우에 따라 다음과 같은 오류가 발생할 수 있다.

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)>

이 경우에는 read_csv 명령을 사용하기 전에 다음 코드를 실행하면 된다.

import ssl

ssl._create_default_https_context = ssl._create_unverified_context
pd.read_csv("http://www.stern.nyu.edu/~wgreene/Text/Edition7/TableF1-1.csv")
Year X C
0 2000 8559.4 6830.4
1 2001 8883.3 7148.8
2 2002 9060.1 7439.2
3 2003 9378.1 7804.0
4 2004 9937.2 8285.1
5 2005 10485.9 8819.0
6 2006 11268.1 9322.7
7 2007 11894.1 9826.4
8 2008 12238.8 10129.9
9 2009 12030.3 10088.5

1.3.2. statsmodels 패키지#

statsmodels에는 rdatasets라는 데이터셋을 가져올 수 있는 명령어를 제공한다. rdatasets 데이터셋은 이름에서 볼 수 있듯이 원래는 다양한 R 언어용 패키지들에서 제공하는 데이터를 모아놓은 것이다. 다음 웹사이트에 데이터의 상세한 목록과 설명은 확인할 수 있다.

다음 그림은 위 웹사이트의 화면을 보인 것이다.

rdatasets

이 화면의 표에서 가장 왼쪽의 “Package” 열과 “Item” 열에 주목해야 한다. “Package”는 해당 데이터를 포함하는 R 패키지 이름이고 “Item”은 그 패키지 내에서 해당 데이터를 가리키는 이름이다. 우리가 rdatasets 패키지에서 데이터를 선택할 때는 이 두가지 값을 이용하여 데이터를 지정한다. 예를 들어 두번째 데이터인 아르헨티나의 소비자 가격지수(Consumer Price Index in Argentina) 데이터를 지정할 때는 "AER", "ArgentinaCPI" 문자열 쌍을 이용해야 한다.

실제로 데이터를 가져오는 명령은 다음과 같다. 일단 sm이라는 별칭으로 statsmodels 패키지의 api 서브패키지를 임포트한다.

import statsmodels.api as sm

다음으로 sm.datasets 서브패키지에 있는 get_rdataset 명령을 수행한다. 이 때 데이터 “Item” 이름과 “Package” 이름을 인수로 넣어준다. “Item”이 “Package”보다 앞에 온다는 점에 주의하라. 예를 들어 위에서 말한 “AER” 패키지의 “ArgentinalCPI” 데이터를 가져오려면 다음과 같이 주피터랩에 입력하면 된다. 데이터는 pandas의 데이터프레임 형식으로 출력된다. 이 명령은 인터넷에서 데이터를 가져오는 명령이므로 컴퓨터가 인터넷에 연결되어 있어야 한다.

df = sm.datasets.get_rdataset("ArgentinaCPI", "AER").data
df
time value
0 1970.00 1.010000e+00
1 1970.25 1.060000e+00
2 1970.50 1.130000e+00
3 1970.75 1.240000e+00
4 1971.00 1.330000e+00
... ... ...
75 1988.75 1.557700e+08
76 1989.00 2.031300e+08
77 1989.25 6.799600e+08
78 1989.50 4.537300e+09
79 1989.75 6.611700e+09

80 rows × 2 columns

1.3.3. pandas-datareader 패키지#

pandas-datareader 패키지도 마찬가지로 인터넷의 데이터 저장소로부터 데이터를 읽어들이는 도구다. 다음과 같은 데이터 저장소를 이용할 수 있다.

  • Tiingo

  • IEX

  • Alpha Vantage

  • Econdb

  • Enigma

  • Quandl

  • St.Louis FED (FRED)

  • Kenneth French’s data library

  • World Bank

  • OECD

  • Eurostat

  • Thrift Savings Plan

  • Nasdaq Trader symbol definitions

  • Stooq

  • MOEX

  • Naver Finance

  • Yahoo Finance

data.web 서브페키지의 DataReader 명령을 사용한다. 사용법은 데이터 저장소마다 다르므로 자세한 설명은 다음 웹사이트를 참조한다.

예를 들어 네이버 금융 데이터에서 삼성전자(종목코드 005930)의 2019년 9월 10일부터 10월 9일까지의 데이터를 받으려면 다음 명령을 사용한다.

import pandas_datareader.data as web

web.DataReader('005930', 'naver', start='2019-09-10', end='2019-10-09')
Open High Low Close Volume
Date
2019-09-10 47100 47200 46550 47000 9231792
2019-09-11 47300 47400 46800 47150 16141619
2019-09-16 47000 47100 46400 47100 15550926
2019-09-17 47000 47100 46800 46900 7006280
2019-09-18 46900 47700 46800 47700 10413027
2019-09-19 48050 49200 47850 49150 16461413
2019-09-20 49400 49600 49100 49200 15460210
2019-09-23 49250 49300 49000 49300 7568553
2019-09-24 49050 49650 48850 49500 7871955
2019-09-25 49200 49350 48800 48900 9187141
2019-09-26 49000 49250 48900 49200 8494756
2019-09-27 48000 48700 48000 48400 8048041
2019-09-30 48050 49250 47900 49050 9497119
2019-10-01 48900 49100 48650 48850 6206035
2019-10-02 48350 48400 47600 47600 8382463
2019-10-04 47400 48650 47350 48000 9331695
2019-10-07 48350 48700 47650 47750 7047273
2019-10-08 47900 49000 47600 48900 14239367