#!/usr/bin/env python
# coding: utf-8
#
# # ** 5 Python for Finance**
# 파이썬을 활용한 금융분석
#
# ## 1 금융 시계열 데이터 결측치 처리 / 보간법
# https://github.com/pydata/pandas-datareader
# 1. pandas를 활용한 데이터 정렬 및 보간법
# 1. 금융데이터 크롤링 모듈 설치방법 (2018.06 기준)
# 1. ! pip install git+https://github.com/pydata/pandas-datareader.git --upgrade
# In[1]:
# from pandas_datareader import get_data_yahoo
# start_date = '2013-01-01'
# codes = ['KO', 'MS', '005930.KS', '000660.KS']
# result = {}
# for code in codes:
# result[code] = get_data_yahoo(code, start_date).Close
# import pandas as pd
# prices = pd.DataFrame(result)
# prices = prices.fillna(method='ffill')
# prices = prices.dropna()
# prices.to_csv('./data/stocks.csv', encoding="ms949")
# prices.tail(3)
# In[2]:
# 저장된 CSV 파일을 사용한다
import pandas as pd
prices = pd.read_csv('./data/stocks.csv')
prices = prices.set_index('Date')
prices.head(3)
prices.index = pd.DatetimeIndex(prices.index)
prices.info()
#
# ## **2 금융 시계열 데이터 전처리**
# 데이터 분석을 위한 전처리 방법
#
# ### **01 가격 차이가 큰 시계열 데이터 비교하기**
# 데이터 정규화 / 비정규화
# In[3]:
get_ipython().run_line_magic('matplotlib', 'inline')
prices.plot()
# In[4]:
price = prices['005930.KS']
price[-5:]
# In[5]:
price.index
# In[6]:
price.index = pd.DatetimeIndex(price.index)
price.index
# In[7]:
price["2013-10-03"] / price["2013-08-01"] -1
# In[8]:
returns = price.pct_change()
ret_price = (1 + returns).cumprod()
ret_price[0] = 1
get_ipython().run_line_magic('matplotlib', 'inline')
ret_price.plot(figsize=(12,3))
# In[9]:
for col in prices.columns:
pct_returns = prices[col].pct_change()
pct_returns = (1 + pct_returns).cumprod()
pct_returns[0] = 1
pct_returns.plot(legend=True)
#
# ### **02 누적 수익률 계산 **
# .pct_change().cumprod()
# In[10]:
month_returns = price.resample('BM').last().pct_change()
month_returns['2016']
# In[11]:
m_ret = (1 + month_returns).cumprod()
m_ret['2016']
# In[12]:
import matplotlib.pyplot as plt
m_ret.plot(figsize=(12,3))
plt.axhline(y = 1, linestyle = '--', color = 'k')
plt.show()
#
# ### **03 중간 배당데이터 추가하기**
# 재귀적 연산
# In[13]:
month_returns['2016-03-31'] += 0.003
# In[14]:
for i in range(4):
i += 10000
print(i)
#
# ## **3 금융데이터 분석**
# pandas를 활용한 금융데이터 분석
#
# ### **01 Introduction**
# In[15]:
prices.head(3)
# In[16]:
prices.describe()
# In[17]:
prices.describe().loc[ ['mean', 'std'] ,:]
# In[18]:
prices.agg(['mean', 'std'])
#
# ### **02 주가간의 상관계수 분석**
# In[19]:
prices_corr = prices.pct_change().dropna().corr()
prices_corr
# In[20]:
get_ipython().run_line_magic('matplotlib', 'inline')
import seaborn as sns
sns.heatmap(prices_corr)