{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 15. 인터넷에서 금융 데이터 가져오기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 15.1 이 장의 계획"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 15.2 pandas 패키지 소개"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- pip install pandas\n",
"- pip install pandas_datareader"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- pandas 패키지\n",
" - 기초적인 테이블이나 대량 정보를 저장하는 데 사용하는 데이터베이스와 유사한 데이터 프레임(data frame) 객체 생성\n",
" - 인터넷을 통하여 정보를 내려받을 수 있는 기능 제공"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 15.3 stock_load : 간단한 데이터 리더"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 야후 파이낸스를 통하여 마이크로소프트 주식 정보 가져오기\n",
" - https://finance.yahoo.com/\n",
"- DataReader() \n",
" - 기본 5년치 데이터"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Date High Low Open Close Volume \\\n",
"0 2016-08-15 58.500000 57.959999 58.009998 58.119999 19283900.0 \n",
"1 2016-08-16 57.619999 57.270000 57.610001 57.439999 20523500.0 \n",
"2 2016-08-17 57.680000 57.230000 57.540001 57.560001 18856400.0 \n",
"3 2016-08-18 57.700001 57.270000 57.419998 57.599998 14214300.0 \n",
"4 2016-08-19 57.730000 57.200001 57.430000 57.619999 17271000.0 \n",
"... ... ... ... ... ... ... \n",
"1254 2021-08-09 291.549988 287.809998 289.750000 288.329987 16117600.0 \n",
"1255 2021-08-10 289.250000 285.200012 288.799988 286.440002 18616600.0 \n",
"1256 2021-08-11 288.660004 285.859985 287.209991 286.950012 13955900.0 \n",
"1257 2021-08-12 289.970001 286.339996 286.630005 289.809998 14561300.0 \n",
"1258 2021-08-13 292.899994 289.299988 289.480011 292.850006 18231400.0 \n",
"\n",
" Adj Close \n",
"0 53.543526 \n",
"1 53.246872 \n",
"2 53.358116 \n",
"3 53.395203 \n",
"4 53.413731 \n",
"... ... \n",
"1254 288.329987 \n",
"1255 286.440002 \n",
"1256 286.950012 \n",
"1257 289.809998 \n",
"1258 292.850006 \n",
"\n",
"[1259 rows x 7 columns]\n",
"Index(['Date', 'High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], dtype='object')\n"
]
}
],
"source": [
"'''File stock_load.py -----------------------------\n",
"\n",
"티커(ticker) 기호를 가져오기 위해서 주식 데이터 적재 작업을 수행한다.\n",
"의존하고 있는 모듈은 없다.\n",
"\n",
"'''\n",
"# pip install pandas_datareader\n",
"import pandas_datareader.data as web\n",
"\n",
"def load_stock(ticker_str):\n",
" ''' 주식 적재 함수.\n",
" 인수로 주어진 문자열 ticker_str의 정보를 적재한다.\n",
" 'MSFT'와 같이 정해진 주식의 정보를 판다스 데이터 프레임에 넣고 반환한다.\n",
" '''\n",
" df = web.DataReader(ticker_str, 'yahoo')\n",
" df = df.reset_index()\n",
" return df\n",
"\n",
"# 데이터 프레임(stock_df)을 가져와서 출력한다.\n",
"if __name__ == '__main__':\n",
" stock_df = load_stock('MSFT') \t# 'msft'도 괜찮다. 마이크로소프트 주식 정보\n",
" print(stock_df)\n",
" print(stock_df.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 대한민국 GS 주식 정보 가져오기\n",
" - https://wikidocs.net/4370"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Date High Low Open Close Volume Adj Close\n",
"0 2016-08-16 50300.0 49350.0 50300.0 49450.0 211693.0 41125.605469\n",
"1 2016-08-17 50400.0 49550.0 49700.0 50100.0 212272.0 41666.179688\n",
"2 2016-08-18 50700.0 49900.0 50300.0 50100.0 173079.0 41666.179688\n",
"3 2016-08-19 51100.0 50200.0 50600.0 50900.0 221252.0 42331.511719\n",
"4 2016-08-22 51300.0 50000.0 50600.0 50500.0 193981.0 41998.843750\n",
"... ... ... ... ... ... ... ...\n",
"1218 2021-08-09 43100.0 42600.0 42850.0 42700.0 156286.0 42700.000000\n",
"1219 2021-08-10 43250.0 42300.0 43100.0 42400.0 212447.0 42400.000000\n",
"1220 2021-08-11 42850.0 42000.0 42450.0 42250.0 312576.0 42250.000000\n",
"1221 2021-08-12 43100.0 42000.0 42600.0 42000.0 281895.0 42000.000000\n",
"1222 2021-08-13 42600.0 41450.0 42300.0 41850.0 251031.0 41850.000000\n",
"\n",
"[1223 rows x 7 columns]\n",
"Index(['Date', 'High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'], dtype='object')\n"
]
}
],
"source": [
"if __name__ == '__main__':\n",
" stock_df = load_stock('078930.KS')\n",
" print(stock_df)\n",
" print(stock_df.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 15.4 간단한 주식 차트 만들기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/yhhan/anaconda3/lib/python3.6/site-packages/pandas/plotting/_matplotlib/converter.py:102: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.\n",
"\n",
"To register the converters:\n",
"\t>>> from pandas.plotting import register_matplotlib_converters\n",
"\t>>> register_matplotlib_converters()\n",
" warnings.warn(msg, FutureWarning)\n"
]
},
{
"data": {
"text/plain": [
"