일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 주식 명언
- 투자 명언
- 워렌 버핏
- 필립 피셔
- 가치투자
- kostolany
- 주식
- 심리관리
- 주식시장
- 안전마진
- 멘탈관리
- warrent buffett
- 주식투자 실수
- 벤자민 그레이엄
- 코스톨라니
- 주식투자
- 벤저민 그레이엄
- 워런 버핏
- 멘탈 유지
- 명언
- 파이썬
- 포트폴리오
- 케네스 피셔
- someone said
- 코스피
- 위대한 기업에 투자하라
- 투자자
- 리밸런싱
- 주식일지
- 오늘의 한줄
- Today
- Total
2X2=5-1
[파이썬] pandas과 matplotlib를 이용한 주식 데이터받기 본문
Python 3.6에서는 DataReader의 web을 통해 구글과 야후 파이낸스 주식자료를 뽑아내는 API가 사실상 막혔다. 야후는 fix_yahoo_finance (https://pypi.org/project/fix-yahoo-finance/) 자료를 구해서 작성을 하면 된다. 하지만, 그럴 경우에는 web.DataReader가 아니라, data.get_data_yahoo 라는 메소드를 써야기에 내가 공부하는 의도와는 멀어진다.
다행스럽게 morningstar에서 자료추출이 가능하다. 한국주식은 안되지만, 미국주식과 ETF 등은 자유롭게 데이터를 받아와 불러올수 있다.
불러오는 것 까지는 괜찮은데, 추출한 자료를 가지고 그래프를 그릴 때, 오류가 생긴다. new_tesla.index를 하면 MultiIndex가 출력된다. y축은 주식가격이라고 했을 경우, x축은 시계열, 시간으로 설정해야 원하는 그래프가 그려지는데, 아래와 같이 하면, x축 index를 전혀 인식을 못하고 있다.
import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
#TESLA Data from Morningstar
tesla = web.DataReader('TSLA', 'morningstar', '2016-01-01', '2018-03-01')
print(tesla)
tesla.info()
new_tesla = tesla[tesla['Volume'] != 0]
print(new_tesla)
tesla.info()
#Moving Average
ma5 = new_tesla['Close'].rolling(window=5).mean()
ma20 = new_tesla['Close'].rolling(window=20).mean()
ma60 = new_tesla['Close'].rolling(window=60).mean()
ma120 = new_tesla['Close'].rolling(window=120).mean()
#Insert Columns
new_tesla.insert(len(new_tesla.columns), 'MA5', ma5)
new_tesla.insert(len(new_tesla.columns), 'MA20', ma20)
new_tesla.insert(len(new_tesla.columns), 'MA60', ma60)
new_tesla.insert(len(new_tesla.columns), 'MA120', ma120)
new_tesla.index
#Plot
plt.plot(new_tesla.index.level, new_tesla['Close'], label='Close')
plt.plot(new_tesla.index.level, new_tesla['MA5'], label='MA5')
plt.plot(new_tesla.index.level, new_tesla['MA20'], label='MA20')
plt.plot(new_tesla.index.level, new_tesla['MA60'], label='MA60')
plt.plot(new_tesla.index.level, new_tesla['MA120'], label='MA120')
plot.legend(loc='best')
plt.grid()
plt.show()
Facebook의 Python Korea(https://www.facebook.com/groups/pythonkorea/) 에 질의하여 피드백 받은 결과로 new_tesla의 Dataframe 확인해보니 index가 두 개가 잡혀있는 것으로 확인이 되어서(짧은 견문으로 확인된 index는 Symbols과 Date 보여짐), 하나의 index로 설정해야된다.
import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
#TESLA Data from Morningstar
tesla = web.DataReader('TSLA', 'morningstar', '2016-01-01', '2018-03-01')
print(tesla)
tesla.info()
new_tesla = tesla[tesla['Volume'] != 0]
print(new_tesla)
tesla.info()
#Moving Average
ma5 = new_tesla['Close'].rolling(window=5).mean()
ma20 = new_tesla['Close'].rolling(window=20).mean()
ma60 = new_tesla['Close'].rolling(window=60).mean()
ma120 = new_tesla['Close'].rolling(window=120).mean()
#Insert Columns
new_tesla.insert(len(new_tesla.columns), 'MA5', ma5)
new_tesla.insert(len(new_tesla.columns), 'MA20', ma20)
new_tesla.insert(len(new_tesla.columns), 'MA60', ma60)
new_tesla.insert(len(new_tesla.columns), 'MA120', ma120)
new_tesla.index
df = new_tesla.reset_index() #MultiIndex로 잡힌 new_tesla의 Dataframe을 Datetimeindex로 설정
df = df.set_index('Date')
#Plot
plt.plot(df['Close'], label = 'Close')
plt.plot(df['MA5'], label = 'MA5')
plt.plot(df['MA20'], label = 'MA20')
plt.plot(df['MA60'], label = 'MA60')
plt.plot(df['MA120'], label = 'MA120')
plt.legend(loc = 'best')
plt.grid()
plt.show()
위와 같이 작성하면, 아주 행복하게 아래와 같이 그래프를 얻을 수 있다. 크기를 조정해서 그래프를 더 늘릴 수도 있다.
- Dataframe의 index가 2개인 new_tesla에서 바로 불러서 그래프를 그릴 수 없을까? 한 번 더 고민해봐야겠다.
- Big tip은 python 3.4버전에서는 야후에서 주식 데이터를 불러올 수 있다. 국내주식도 당연히 불러와진다!!
'IT > Python' 카테고리의 다른 글
파이썬으로 배우는 알고리즘 트레이딩 시작하기 (0) | 2018.06.22 |
---|---|
[파이썬] 맥북에서Python 파이썬 설치 (0) | 2018.06.18 |