#!/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)