차밍이

[Python] Plotly를 활용한 주식 차트 그리기 / 캔들스틱 그래프 그리기 / CandleStick Chart - 파이썬 주식투자(6) 본문

파이썬/데이터 시각화

[Python] Plotly를 활용한 주식 차트 그리기 / 캔들스틱 그래프 그리기 / CandleStick Chart - 파이썬 주식투자(6)

2021. 1. 22. 16:26
반응형

목차

     

    이전 글 까지는 matplotlib을 사용해서 그래프를 그렸다면 이번에는 plotly 라이브러리를 활용해서 주식 그래프를 그려보겠습니다.

    데이터를 가져오는 부분은 이전의 글을 통해서 확인하실 수 있습니다.

    [Python] pandas_datareader 코스피 코스닥 지수 데이터 가져오기 // 파이썬 주식투자(1)

    [Python] KOSPI 이동평균선, 주가 이동평균선 구하기 // 파이썬 주식투자(2)

    [Python] 캔들 스틱 차트 그리기, Candlestick Chart 그리기 - 파이썬 주식투자(3)

     

    1. Plotly 라이브러리 설치하기

    anaconda promplt 혹은 명령 프롬프트에서 간단하게 설치하실 수 있습니다.

    pip install plotly

     

    2. 삼성전자 데이터 가져오기

    항상 KOSPI 데이터만 가지고 했으니, 이번에는 삼성전자 데이터를 사용해서 진행하겠습니다.

    데이터 가져오는 부분 이전 글 참고 : [Python] pandas_datareader 코스피 코스닥 지수 데이터 가져오기 // 파이썬 주식투자(1)

     

    [Python] pandas_datareader 코스피 코스닥 지수 데이터 가져오기 // 파이썬 주식투자(1)

    목차 pandas_datareader pandas_datareader library를 사용하면 훨씬 쉽게 코스피 or 코스닥 지수 데이터를 가져올 수 있습니다. 1. pandas_datareader 설치하기 기존에 pandas_datareader 를 설치하지 않았다면 a..

    chancoding.tistory.com

    import plotly.graph_objects as go
    from plotly.subplots import make_subplots
    from pandas_datareader import data  
    from datetime import datetime
    import pandas as pd
    
    
    # 데이터를 가져올 날짜 설정
    start_date = datetime(2013,1,3)
    end_date = datetime(2021,1,22)
    
    # 야후에서 삼성전자 데이터 가져오기
    samsung = data.get_data_yahoo("005930.ks", start_date, end_date)

    삼성전자의 데이터를 가져오기위해 삼성전자의 주식 번호인 "005930"을 넣었습니다.

    그리고 ".ks"를 붙여서 코스피라는 것을 표기해줍니다.

    야후 파이낸스에서는 005930.kr삼성전자를 의미하는 ticker가 되겠습니다.

     

    3. Plotly를 사용해 캔들 차트 그리기

    plotly에 있는 기본 캔들스틱 그래프를 그리는 방법을 활용하였습니다.

     

    from plotly.subplots import make_subplots
    import plotly.graph_objects as go
    
    samsung = samsung.reset_index() # Date index를 Column으로 보내주기 위함
    
    # plotly 캔들스틱 그래프 그리기
    stock_name = '삼성전자'
    fig = go.Figure(data=[go.Candlestick(x=samsung['Date'],
                                        open=samsung['Open'],
                                        high=samsung['High'],
                                        low=samsung['Low'],
                                        close=samsung['Close'])])
    fig.show()

     

    plotly를 통해서 캔들 차트를 그리면 좋은 점은 확대해서 볼 수 있다는 것입니다.

    matplotlib과 다르게 sliding을 통해서 원하는 부분을 더 자세하게 볼 수 있습니다. 

     

    4. 쉬는 날 제거하기

    자세하게 보면 중간 중간 쉬는 날들이 있고 그 칸이 비어있는 것을 볼 수 있습니다.

    datetime형식으로 x축 값이 들어가기 때문에 plotly에서 자동으로 날짜를 모두 그리고 그중 데이터가 있는 부분에만 그래프를 그려줍니다.

    이러한 비어있는 공간을 없애기 위한 방법을 알아보겠습니다.

    일단, datetime형식을 string형식으로 바꿔서 object가 되겠죠. 그래서 순서대로 그래프를 그리는 방식으로 진행해주면 됩니다.

    from plotly.subplots import make_subplots
    import plotly.graph_objects as go
    
    samsung = samsung.reset_index()
    samsung['Date'] = samsung['Date'].apply(lambda x : datetime.strftime(x, '%Y-%m-%d')) # Datetime to str
    
    stock_name = '삼성전자'
    
    fig = go.Figure(data=[go.Candlestick(x=samsung['Date'],
                                        open=samsung['Open'],
                                        high=samsung['High'],
                                        low=samsung['Low'],
                                        close=samsung['Close'])])
    # x축 type을 카테고리 형으로 설정, 순서를 오름차순으로 날짜순서가 되도록 설정
    fig.layout = dict(title=stock_name, 
                           xaxis = dict(type="category", 
                                        categoryorder='category ascending'))
    fig.update_xaxes(nticks=5)
    fig.show()

    빈 공간 없이 모두 그래프가 그려진 것을 확인할 수 있습니다.

     

    지금까지 plotly를 활용해서 삼성전자 주가 데이터를 캔들스틱 차트로 그려보았습니다.

     

    반응형

    관련된 글 보기

    Comments