EXCELSIOR

4. Plotly를 이용한 캔들차트-Candlestick chart 그리기 본문

Python/주식 분석

4. Plotly를 이용한 캔들차트-Candlestick chart 그리기

Excelsior-JH 2017. 10. 30. 11:24

Plotly를 이용한 캔들차트-Candlestick chart 그리기


이전에 포스팅한 3. 주식 데이터를 PostgreSQL에 저장하기에서 저장한 종목별 일자 데이터를 Python의 Plotly 모듈을 이용하여 캔들차트(Candlestick chart) 를 그려보도록 하자. \rightarrow Plotly Python Library 참고

Plotly 는 온라인 데이터 분석 및 시각화를 해주는 분석 툴로써, 2012년 몬트리올 퀘백에서 설립되었다. Plotly는Python 뿐만 아니라, R, MATLAB, Perl, Julia 등 다양한 언어를 지원한다. 여기서는 Python에서 Plotly 모듈을 설치하여 사용하였다. Plotly 오프라인  온라인 에서 작업을 할 수 있는데 오프라인에서 작업하는 부분을 포스팅 하도록 한다. \rightarrow Plotly 온라인 사용법은 Plotly Online Plotting 참고

1. Plotly 모듈 설치

Python에서 Plotly 모듈을 사용하려면 pip명령어를 통해 Plotly를 설치해야한다.

  • Plotly 설치: pip install plotly

2. Plotly 를 이용해 Candlestick chart 그리기

pip명령어를 통해 Plotly를 설치한 뒤 PostgreSQL에서 데이터를 조회하여 캔들차트(Candlestick Chart)를 그려보도록 한다.

1) psycopg2 을 이용하여 PostgreSQL 연동

이전에 포스팅한 3. 주식 데이터를 PostgreSQL에 저장하기에서 저장한 종목별 일자 데이터를 가져오기 위해psycopg2모듈을 이용하여 PostgreSQL과 연동한다.

import psycopg2

# Connect to an existing database
host = 'localhost'
dbname = 'StockDB'
user = 'postgres'
pwd = '계정 비밀번호'
conn = psycopg2.connect('host={0} dbname={1} user={2} password={3}'.format(host, dbname, user, pwd))
cur = conn.cursor()


2) pandas를 이용하여 데이터 가져오기(조회)

psycopg2를 이용하여 PostgreSQL을 연동하였으면 pandas를 이용하여 데이터를 조회(SELECT) 한다. pandas를 사용하는 이유는 데이터를 가져온 뒤 핸들링 할때 편리하기 때문에 pandas 를 이용하였다. pandas 모듈이 없는 경우에는 pip install pandas 명령어를 통해 설치할 수 있다. 아래의 코드는 셀트리온의 일자별 주식 데이터를 가져오는 예제이다.

import pandas as pd

df = pd.read_sql("SELECT corp_name, date_time, open_price,\
                        high_price, low_price, close_price\
                        FROM daily_stock_price WHERE corp_name='셀트리온'", conn)


3) Plotly를 이용하여 캔들차트 그리기

마지막으로 plotly를 이용하여 Candlestick Chart를 그려보도록 한다. 아래의 코드를 실행하면 jupyter notebook상에 캔들차트가 아래의 그림처럼 생성된다.

import plotly.offline as offline
import plotly.graph_objs as go

# jupyter notebook 에서 출력
offline.init_notebook_mode(connected=True) 

trace = go.Candlestick(x=df.date_time,
                       open=df.open_price,
                       high=df.high_price,
                       low=df.low_price,
                       close=df.close_price)

data = [trace]

layout = go.Layout(title='셀트리온 캔들차트')
fig = go.Figure(data=data, layout=layout)
offline.iplot(fig, filename="candlestick")

모바일로는 차트를 움직일 수 없어 PC로 보는것을 추천한다...

candlestick


Comments