{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# **지난번 학습내용 정리하기**\n", "**Python 기본문법 정리
and Pandas**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review Data Datum**\n", "1. Datum(숫자, \"문자\"), Data([list], {dict}, (tuple,))\n", "1. (기본/외부/사용자) 모듈, 함수, 메소드\n", "1. **문자**에서 **[]** 의 활용 ( [index], [:slicing])\n", "1. **[list]** 객체에서 **[]** 의 활용 ( [index], [:slicing], [if 조건문])\n", "1. [ List 포맷을 응용하여 for if ]\n", "1. { Dict 포맷을 응용하여 for if }\n", "1. for : 반복, if :판단, \n", "1. enumerate() : [List] 자료를 for 반복시 인덱스 를 함께 Tuple로 출력\n", "1. .item() : {dict} 자료를 for 반복시 key 와 value 를 Tuple로 출력 \n", "1. Web Crawling ==> type 변경 ==> list, dict, pandas 객체로 변환 ==> 시각화\n", "1. ndarray, Series, Dataframe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review Series**\n", "1. pd.Series( [ data ] , index = [ index ])\n", "1. series 사칙연산\n", "1. series [ Boolean 판단문 ]\n", "1. series.index = [ list ]\n", "1. series.isnull()\n", "1. series.drop()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review Data Datum**\n", "1. Datum(숫자, \"문자\"), Data([list], {dict}, (tuple,))\n", "1. (기본/외부/사용자) 모듈, 함수, 메소드\n", "1. **문자**에서 **[]** 의 활용 ( [index], [:slicing])\n", "1. **[list]** 객체에서 **[]** 의 활용 ( [index], [:slicing], [if 조건문])\n", "1. [ List 포맷을 응용하여 for if ]\n", "1. { Dict 포맷을 응용하여 for if }\n", "1. for : 반복, if :판단, \n", "1. enumerate() : [List] 자료를 for 반복시 인덱스 를 함께 Tuple로 출력\n", "1. .item() : {dict} 자료를 for 반복시 key 와 value 를 Tuple로 출력 \n", "1. Web Crawling ==> type 변경 ==> list, dict, pandas 객체로 변환 ==> 시각화\n", "1. ndarray, Series, Dataframe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review DataFrame static**\n", "1. .count()\n", "1. .describe()\n", "1. .min() .max()\n", "1. .idxmin() .idxmax()\n", "1. .quantile() \n", "1. .sum()\n", "1. .mean() .median()\n", "1. .var() 분산 .std() 정규분산\n", "1. .cumsum() .cumprod() 누적 합 누적 곱\n", "1. .cummin() .cummax() 누적최소값, 누적최대값" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review Series & DataFrame 결측치 제어하기**\n", "1. df.dropna()\n", "1. df.fillna(method='ffill', limit=2) # 결측치 대체\n", "1. df.fillna(df.mean()['컬럼명']) \n", "1. Series.interpolate(method='time') # 결측치 보간 (시계열적 특성을 부여가능)\n", "1. Series.interpolate(method='values', limit=1, limit_direction='backward') # 'forward','backward','both'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **review   TimeSeries**\n", "1. from datetime import datetime\n", "1. pandas.date_range(end = '2017-07-01', periods=30, freq='BM') \n", "1. pandas.date_range('2017/8/8 09:09:09', periods=5, normalize=True)\n", "1. [str(date.date())    for    date    in    pd.date_range('2017/01/01', '2017/01/11')]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **Question About Pandas**\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 1**\n", "Business Day 는 휴일이 포함되어 있나요?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# DateTime Index를 생성한다\n", "import pandas as pd\n", "one_year = pd.date_range('2018-01-01',periods=365)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "data = [i for i in range(len(one_year))]\n", "data = pd.Series(data, index=one_year)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "businessday = data.resample('B')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "52.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(365 - len(businessday)) / 2" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2018-01-31 15.0\n", "2018-02-28 44.5\n", "2018-03-31 74.0\n", "2018-04-30 104.5\n", "2018-05-31 135.0\n", "2018-06-30 165.5\n", "2018-07-31 196.0\n", "2018-08-31 227.0\n", "2018-09-30 257.5\n", "2018-10-31 288.0\n", "2018-11-30 318.5\n", "2018-12-31 349.0\n", "Freq: M, dtype: float64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tips\n", "data.resample('M').mean()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
openhighlowclose
2018-01-31030030
2018-02-2831583158
2018-03-3159895989
2018-04-309011990119
2018-05-31120150120150
2018-06-30151180151180
2018-07-31181211181211
2018-08-31212242212242
2018-09-30243272243272
2018-10-31273303273303
2018-11-30304333304333
2018-12-31334364334364
\n", "
" ], "text/plain": [ " open high low close\n", "2018-01-31 0 30 0 30\n", "2018-02-28 31 58 31 58\n", "2018-03-31 59 89 59 89\n", "2018-04-30 90 119 90 119\n", "2018-05-31 120 150 120 150\n", "2018-06-30 151 180 151 180\n", "2018-07-31 181 211 181 211\n", "2018-08-31 212 242 212 242\n", "2018-09-30 243 272 243 272\n", "2018-10-31 273 303 273 303\n", "2018-11-30 304 333 304 333\n", "2018-12-31 334 364 334 364" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tips\n", "data.resample('M').ohlc()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 2**\n", "초단타 매매를 위한 초단위 생성도 가능한가요?" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00',\n", " '2011-01-01 02:00:00', '2011-01-01 03:00:00',\n", " '2011-01-01 04:00:00'],\n", " dtype='datetime64[ns]', freq='H')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range('1/1/2011', periods=5, freq='H')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 00:01:00',\n", " '2011-01-01 00:02:00', '2011-01-01 00:03:00',\n", " '2011-01-01 00:04:00'],\n", " dtype='datetime64[ns]', freq='T')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range('1/1/2011', periods=5, freq='min')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 00:00:01',\n", " '2011-01-01 00:00:02', '2011-01-01 00:00:03',\n", " '2011-01-01 00:00:04'],\n", " dtype='datetime64[ns]', freq='S')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range('1/1/2011', periods=5, freq='s')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex([ '2011-01-01 00:00:00', '2011-01-01 00:00:00.001000',\n", " '2011-01-01 00:00:00.002000', '2011-01-01 00:00:00.003000',\n", " '2011-01-01 00:00:00.004000'],\n", " dtype='datetime64[ns]', freq='L')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range('1/1/2011', periods=5, freq='ms')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex([ '2011-01-01 00:00:00', '2011-01-01 00:00:00.001000',\n", " '2011-01-01 00:00:00.002000', '2011-01-01 00:00:00.003000',\n", " '2011-01-01 00:00:00.004000'],\n", " dtype='datetime64[ns]', freq='L')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range('1/1/2011', periods=5, freq='1ms')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "data = np.random.rand(110)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "date = pd.date_range('2018-06-06', periods=110, freq='ms')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2018-06-06 00:00:00.000 0.724359\n", "2018-06-06 00:00:00.001 0.426986\n", "2018-06-06 00:00:00.002 0.908999\n", "2018-06-06 00:00:00.003 0.247796\n", "2018-06-06 00:00:00.004 0.065260\n", "2018-06-06 00:00:00.005 0.959609\n", "2018-06-06 00:00:00.006 0.354474\n", "2018-06-06 00:00:00.007 0.635283\n", "2018-06-06 00:00:00.008 0.254580\n", "2018-06-06 00:00:00.009 0.426275\n", "2018-06-06 00:00:00.010 0.169618\n", "2018-06-06 00:00:00.011 0.088882\n", "2018-06-06 00:00:00.012 0.258088\n", "2018-06-06 00:00:00.013 0.659739\n", "2018-06-06 00:00:00.014 0.474797\n", "2018-06-06 00:00:00.015 0.909689\n", "2018-06-06 00:00:00.016 0.980873\n", "2018-06-06 00:00:00.017 0.167155\n", "2018-06-06 00:00:00.018 0.374242\n", "2018-06-06 00:00:00.019 0.057846\n", "Freq: L, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.Series(data, index=date)[:20]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 3**\n", "1. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n", "1. pd.date_range() 에서 생성한 데이터의 시간대 변경은 어떻게 하나요?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2018-06-01 00:00:00', '2018-06-01 01:00:00',\n", " '2018-06-01 02:00:00', '2018-06-01 03:00:00',\n", " '2018-06-01 04:00:00'],\n", " dtype='datetime64[ns]', freq='H')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_nan = pd.date_range('2018-06-01', periods=5, freq='h')\n", "date_nan" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2018-06-01 00:00:00+00:00', '2018-06-01 01:00:00+00:00',\n", " '2018-06-01 02:00:00+00:00', '2018-06-01 03:00:00+00:00',\n", " '2018-06-01 04:00:00+00:00'],\n", " dtype='datetime64[ns, UTC]', freq='H')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_utc = pd.date_range('2018-06-01', periods=5, freq='h', tz='UTC')\n", "date_utc" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2018-01-01 00:00:00+09:00', '2018-01-02 00:00:00+09:00',\n", " '2018-01-03 00:00:00+09:00', '2018-01-04 00:00:00+09:00',\n", " '2018-01-05 00:00:00+09:00'],\n", " dtype='datetime64[ns, Asia/Tokyo]', freq='D')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_kor = pd.date_range(start='2018-01-01', periods=5, tz='Asia/Tokyo')\n", "date_kor" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2017-12-31 15:00:00+00:00', '2018-01-01 15:00:00+00:00',\n", " '2018-01-02 15:00:00+00:00', '2018-01-03 15:00:00+00:00',\n", " '2018-01-04 15:00:00+00:00'],\n", " dtype='datetime64[ns, UTC]', freq='D')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_kor.tz_convert('UTC')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2018-06-01 09:00:00+09:00', '2018-06-01 10:00:00+09:00',\n", " '2018-06-01 11:00:00+09:00', '2018-06-01 12:00:00+09:00',\n", " '2018-06-01 13:00:00+09:00'],\n", " dtype='datetime64[ns, Asia/Tokyo]', freq='H')" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_utc.tz_convert('Asia/Tokyo')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# 처음 생성할때 UTC 정보가 없으면 수정이 어렵다\n", "# date_nan.tz_convert(9)\n", "# date_nan.tz_convert('UTC')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pytz.FixedOffset(0)\n" ] }, { "data": { "text/plain": [ "DatetimeIndex(['2018-06-01 00:00:09+00:00:09', '2018-06-01 01:00:09+00:00:09',\n", " '2018-06-01 02:00:09+00:00:09', '2018-06-01 03:00:09+00:00:09',\n", " '2018-06-01 04:00:09+00:00:09'],\n", " dtype='datetime64[ns, pytz.FixedOffset(0)]', freq='H')" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_nine = date_utc.tz_convert(9) \n", "print(data_nine.tzinfo)\n", "data_nine[:10]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# 목록보기 \n", "# List of tz database time zones 을 위키에서 찾기" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 4**\n", "지난번 코스닥 자료를 보니까 빈 공간이 많던데 이유가 뭔가요?\n", "> **from**    pandas_datareader    **import**    get_data_yahoo" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "from pandas_datareader import get_data_yahoo\n", "kosdaq = get_data_yahoo('031510.KQ', '2018-01-01').Close" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "kosdaq.plot()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Date\n", "2018-01-19 6400\n", "2018-01-22 6350\n", "2018-01-23 6260\n", "2018-01-24 6090\n", "2018-01-25 6270\n", "2018-01-26 6230\n", "2018-01-29 6090\n", "2018-01-30 5870\n", "2018-01-31 5640\n", "2018-06-08 5050\n", "Name: Close, dtype: int64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "pd.DataFrame(kosdaq)\n", "kosdaq.index = pd.DatetimeIndex(kosdaq.index)\n", "kosdaq.tail(10)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# 현재 Yahoo finance API가 중간 자료가 빈 구간이 존재한다\n", "# 2018-02-01 부터 2018-06-03 4달 사이의 자료가 존재하지 않음\n", "# 이를 고치려면 별도 Naver 크롤링 등 별도 경로를 활용하여 보완해야 한다" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 5**\n", "pd.pct_change() 로 변환을 하는데 이유가 뭔가요?\n", "#### 데이터의 전처리\n", "1. 표준화 : 해당 데이터 고유한 값을 기준으로 범위를 재조정 한다\n", "1. 정규화 : 0 ~ 1 사이의 값으로 변환" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Q. voice, Signal 분석에서 중요한 데이터는?
\n", "A. Raw 데이터 로 해당 데이터를 직접 표준화/ 정규화 한다" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Q. 금융분석에서 중요한 데이터는?
\n", "A. Raw 데이터 (X)
\n", "A. 이익/ 손실여부의 판단
\n", "때문에 해당 데이터를 **변화율**로 전환한 뒤 이를 **Log 수익률** 을 사용하면 기간별 분석에 용이하다" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### **Question 6**\n", "Bitcoin 가격수집할때, 컬럼명에 찌꺼기들이 포함되어 있으면 어떻게 처리를 하나요?" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpen*HighLowClose**VolumeMarket Cap
143May 26, 20187486.487595.167349.127355.884051540000127682000000
144May 27, 20187362.087381.747270.967368.224056520000125575000000
145May 28, 20187371.317419.057100.897135.995040600000125748000000
146May 29, 20187129.467526.427090.687472.595662660000121636000000
147May 30, 20187469.737573.777313.607406.524922540000127454000000
\n", "
" ], "text/plain": [ " Date Open* High Low Close** Volume \\\n", "143 May 26, 2018 7486.48 7595.16 7349.12 7355.88 4051540000 \n", "144 May 27, 2018 7362.08 7381.74 7270.96 7368.22 4056520000 \n", "145 May 28, 2018 7371.31 7419.05 7100.89 7135.99 5040600000 \n", "146 May 29, 2018 7129.46 7526.42 7090.68 7472.59 5662660000 \n", "147 May 30, 2018 7469.73 7573.77 7313.60 7406.52 4922540000 \n", "\n", " Market Cap \n", "143 127682000000 \n", "144 125575000000 \n", "145 125748000000 \n", "146 121636000000 \n", "147 127454000000 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "prices = pd.read_html(\"https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20180103&end=20180530\")[0]\n", "prices = prices[::-1]\n", "prices.reset_index(inplace=True, drop=True)\n", "prices.tail()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeMarket Cap
Date
2018-01-0314978.215572.814844.515201.016871900000251312000000
2018-01-0415270.715739.714522.215599.221783200000256250000000
2018-01-0515477.217705.215202.817429.523840900000259748000000
\n", "
" ], "text/plain": [ " Open High Low Close Volume Market Cap\n", "Date \n", "2018-01-03 14978.2 15572.8 14844.5 15201.0 16871900000 251312000000\n", "2018-01-04 15270.7 15739.7 14522.2 15599.2 21783200000 256250000000\n", "2018-01-05 15477.2 17705.2 15202.8 17429.5 23840900000 259748000000" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prices.index = pd.DatetimeIndex(prices.Date)\n", "prices.columns = [ col.replace('*', '') for col in prices.columns]\n", "del prices['Date']\n", "prices.head(3)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DatetimeIndex: 148 entries, 2018-01-03 to 2018-05-30\n", "Data columns (total 6 columns):\n", "Open 148 non-null float64\n", "High 148 non-null float64\n", "Low 148 non-null float64\n", "Close 148 non-null float64\n", "Volume 148 non-null int64\n", "Market Cap 148 non-null int64\n", "dtypes: float64(4), int64(2)\n", "memory usage: 8.1 KB\n" ] } ], "source": [ "prices.info()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeMarket Cap
Date
2018-05-267486.487595.167349.127355.884051540000127682000000
2018-05-277362.087381.747270.967368.224056520000125575000000
2018-05-287371.317419.057100.897135.995040600000125748000000
2018-05-297129.467526.427090.687472.595662660000121636000000
2018-05-307469.737573.777313.607406.524922540000127454000000
\n", "
" ], "text/plain": [ " Open High Low Close Volume Market Cap\n", "Date \n", "2018-05-26 7486.48 7595.16 7349.12 7355.88 4051540000 127682000000\n", "2018-05-27 7362.08 7381.74 7270.96 7368.22 4056520000 125575000000\n", "2018-05-28 7371.31 7419.05 7100.89 7135.99 5040600000 125748000000\n", "2018-05-29 7129.46 7526.42 7090.68 7472.59 5662660000 121636000000\n", "2018-05-30 7469.73 7573.77 7313.60 7406.52 4922540000 127454000000" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "prices.Close.plot(figsize=(16,4), grid=True)\n", "prices.tail()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pandas_datareader import get_data_google" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/markbaum/Python/python/lib/python3.6/site-packages/pandas_datareader/google/daily.py:41: UnstableAPIWarning: \n", "The Google Finance API has not been stable since late 2017. Requests seem\n", "to fail at random. Failure is especially common when bulk downloading.\n", "\n", " warnings.warn(UNSTABLE_WARNING, UnstableAPIWarning)\n" ] }, { "ename": "RemoteDataError", "evalue": "Unable to read URL: https://finance.google.co.uk/bctzjpnsun/historical?q=KRX%3AKOSPI&startdate=Jan+01%2C+2010&enddate=Jun+08%2C+2018&output=csv\nResponse Text:\nb'\\n\\n \\n \\n Error 404 (Not Found)!!1\\n \\n \\n

404. That\\xe2\\x80\\x99s an error.\\n

The requested URL /bctzjpnsun/historical was not found on this server. That\\xe2\\x80\\x99s all we know.\\n'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRemoteDataError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mget_data_google\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'KRX:KOSPI'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/Python/python/lib/python3.6/site-packages/pandas_datareader/data.py\u001b[0m in \u001b[0;36mget_data_google\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_data_google\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mGoogleDailyReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Python/python/lib/python3.6/site-packages/pandas_datareader/base.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbols\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstring_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\u001b[0m df = self._read_one_data(self.url,\n\u001b[0;32m--> 210\u001b[0;31m params=self._get_params(self.symbols))\n\u001b[0m\u001b[1;32m 211\u001b[0m \u001b[0;31m# Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msymbols\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Python/python/lib/python3.6/site-packages/pandas_datareader/base.py\u001b[0m in \u001b[0;36m_read_one_data\u001b[0;34m(self, url, params)\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;34m\"\"\" read one data from specified URL \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_format\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'string'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 84\u001b[0;31m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_read_url_as_StringIO\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 85\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_format\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'json'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_response\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjson\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Python/python/lib/python3.6/site-packages/pandas_datareader/base.py\u001b[0m in \u001b[0;36m_read_url_as_StringIO\u001b[0;34m(self, url, params)\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[0mOpen\u001b[0m \u001b[0murl\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;32mand\u001b[0m \u001b[0mretry\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 94\u001b[0m \"\"\"\n\u001b[0;32m---> 95\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_response\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 96\u001b[0m \u001b[0mtext\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sanitize_response\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresponse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[0mout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mStringIO\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/Python/python/lib/python3.6/site-packages/pandas_datareader/base.py\u001b[0m in \u001b[0;36m_get_response\u001b[0;34m(self, url, params, headers)\u001b[0m\n\u001b[1;32m 153\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m'\\nResponse Text:\\n{0}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlast_response_text\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 155\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mRemoteDataError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 156\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 157\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_crumb\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mRemoteDataError\u001b[0m: Unable to read URL: https://finance.google.co.uk/bctzjpnsun/historical?q=KRX%3AKOSPI&startdate=Jan+01%2C+2010&enddate=Jun+08%2C+2018&output=csv\nResponse Text:\nb'\\n\\n \\n \\n Error 404 (Not Found)!!1\\n \\n \\n

404. That\\xe2\\x80\\x99s an error.\\n

The requested URL /bctzjpnsun/historical was not found on this server. That\\xe2\\x80\\x99s all we know.\\n'" ] } ], "source": [ "get_data_google('KRX:KOSPI')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from googlefinance.get import get_data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
codeopenhighlowclosevolume
date
2018-04-24KRX:KOSPI2478.472479.322454.442464.14524280000
2018-04-25KRX:KOSPI2444.192453.542436.512448.81466095000
2018-04-26KRX:KOSPI2460.622484.092456.202475.64520917000
2018-04-27KRX:KOSPI2497.752508.132484.192492.40464957000
2018-04-30KRX:KOSPI2502.292515.382500.222515.38746291000
2018-05-03KRX:KOSPI2506.942507.912487.252487.25614102000
2018-05-04KRX:KOSPI2486.472487.772461.382461.38612024000
2018-05-08KRX:KOSPI2468.452479.752444.082449.81714734000
2018-05-09KRX:KOSPI2450.712451.862428.792443.98593365000
2018-05-10KRX:KOSPI2458.672464.722448.012464.16490004000
2018-05-11KRX:KOSPI2469.302483.852468.412477.71599900000
2018-05-14KRX:KOSPI2482.972486.172471.912476.11650707000
2018-05-15KRX:KOSPI2476.872480.222456.202458.54712619000
2018-05-16KRX:KOSPI2446.642465.552444.672459.82691813000
2018-05-17KRX:KOSPI2468.722472.822448.432448.45596771000
2018-05-18KRX:KOSPI2459.732461.952452.342460.65431376000
2018-05-21KRX:KOSPI2464.072472.302447.692465.57588088000
2018-05-23KRX:KOSPI2462.982476.862460.072471.91752675000
2018-05-24KRX:KOSPI2477.482481.312457.842466.01638125000
2018-05-25KRX:KOSPI2452.802466.572444.772460.80653592000
2018-05-28KRX:KOSPI2465.002482.402463.142478.96708362000
2018-05-29KRX:KOSPI2476.702479.682457.182457.25571836000
2018-05-30KRX:KOSPI2446.812449.882399.582409.03575922000
2018-05-31KRX:KOSPI2428.832430.152415.502423.01816930000
2018-06-01KRX:KOSPI2419.632445.312418.112438.96603023000
2018-06-04KRX:KOSPI2444.622452.672441.252447.76438929000
2018-06-05KRX:KOSPI2450.392455.782432.812453.76501363000
2018-06-07KRX:KOSPI2468.262478.672466.012470.58474146000
\n", "
" ], "text/plain": [ " code open high low close volume\n", "date \n", "2018-04-24 KRX:KOSPI 2478.47 2479.32 2454.44 2464.14 524280000\n", "2018-04-25 KRX:KOSPI 2444.19 2453.54 2436.51 2448.81 466095000\n", "2018-04-26 KRX:KOSPI 2460.62 2484.09 2456.20 2475.64 520917000\n", "2018-04-27 KRX:KOSPI 2497.75 2508.13 2484.19 2492.40 464957000\n", "2018-04-30 KRX:KOSPI 2502.29 2515.38 2500.22 2515.38 746291000\n", "2018-05-03 KRX:KOSPI 2506.94 2507.91 2487.25 2487.25 614102000\n", "2018-05-04 KRX:KOSPI 2486.47 2487.77 2461.38 2461.38 612024000\n", "2018-05-08 KRX:KOSPI 2468.45 2479.75 2444.08 2449.81 714734000\n", "2018-05-09 KRX:KOSPI 2450.71 2451.86 2428.79 2443.98 593365000\n", "2018-05-10 KRX:KOSPI 2458.67 2464.72 2448.01 2464.16 490004000\n", "2018-05-11 KRX:KOSPI 2469.30 2483.85 2468.41 2477.71 599900000\n", "2018-05-14 KRX:KOSPI 2482.97 2486.17 2471.91 2476.11 650707000\n", "2018-05-15 KRX:KOSPI 2476.87 2480.22 2456.20 2458.54 712619000\n", "2018-05-16 KRX:KOSPI 2446.64 2465.55 2444.67 2459.82 691813000\n", "2018-05-17 KRX:KOSPI 2468.72 2472.82 2448.43 2448.45 596771000\n", "2018-05-18 KRX:KOSPI 2459.73 2461.95 2452.34 2460.65 431376000\n", "2018-05-21 KRX:KOSPI 2464.07 2472.30 2447.69 2465.57 588088000\n", "2018-05-23 KRX:KOSPI 2462.98 2476.86 2460.07 2471.91 752675000\n", "2018-05-24 KRX:KOSPI 2477.48 2481.31 2457.84 2466.01 638125000\n", "2018-05-25 KRX:KOSPI 2452.80 2466.57 2444.77 2460.80 653592000\n", "2018-05-28 KRX:KOSPI 2465.00 2482.40 2463.14 2478.96 708362000\n", "2018-05-29 KRX:KOSPI 2476.70 2479.68 2457.18 2457.25 571836000\n", "2018-05-30 KRX:KOSPI 2446.81 2449.88 2399.58 2409.03 575922000\n", "2018-05-31 KRX:KOSPI 2428.83 2430.15 2415.50 2423.01 816930000\n", "2018-06-01 KRX:KOSPI 2419.63 2445.31 2418.11 2438.96 603023000\n", "2018-06-04 KRX:KOSPI 2444.62 2452.67 2441.25 2447.76 438929000\n", "2018-06-05 KRX:KOSPI 2450.39 2455.78 2432.81 2453.76 501363000\n", "2018-06-07 KRX:KOSPI 2468.26 2478.67 2466.01 2470.58 474146000" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_data('KRX:KOSPI')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }