1 minute read

Plotly로 엔비디아(NVDA) 주가 데이터 시각화 실습

오늘은 파이썬의 시각화 라이브러리인 Plotly를 활용해서, 엔비디아(NVDA)의 주가 데이터를 분석함. 정적인 matplotlib이나 seaborn과 달리, Plotly는 인터랙티브한 차트를 만들어주기 때문에 줌인/줌아웃이나 데이터 확인이 훨씬 편함.

1. 실습 환경 및 데이터 준비

실습에 사용한 데이터는 Kaggle에서 다운로드 받음. Kaggle에는 다양한 기업의 주가 데이터셋이 많이 공유되어 있는데, 그 중에서 NVIDIA(NVDA)의 깔끔하게 정제된 데이터인 NVDA_yfinance_clean.csv 파일을 찾아 사용함.

먼저 실습에 필요한 라이브러리를 설치함.

pip install plotly pandas

2. 데이터 로드

Pandas를 사용해 CSV 파일을 읽어오고, Date 컬럼을 날짜 형식으로 변환함. 날짜형으로 바꾸고 정렬을 해둬야 시계열 그래프가 예쁘게 그려짐.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 데이터 로드
df = pd.read_csv("NVDA_yfinance_clean.csv")
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date')

print(df.head())

데이터는 2016년부터 최근까지의 시가(Open),, 고가(High), 저가(Low), 종가(Close), 거래량(Volume) 정보를 담고 있음.


3. 시각화 실습

3-1. 주가 추이 선 그래프 (Line Chart)

가장 기본이 되는 종가(Close) 기준 선 그래프를 그려봄. px.line을 쓰니까 코드 한 줄로 해결됨. 하단에 rangeslider 옵션을 켜서 특정 기간을 확대해서 볼 수 있게 만듦.

fig = px.line(df, x='Date', y='Close', title='NVDA 주가 추이 (Close)')
fig.update_xaxes(rangeslider_visible=True)
fig.show()

NVDA 주가 추이

확실히 최근 급등한 모습이 한눈에 들어옴. 슬라이더를 움직여서 과거 데이터를 자세히 볼 수 있는 게 정말 편함.

3-2. 캔들스틱 차트 (Candlestick Chart)

주식 차트의 꽃인 캔들스틱임. 이건 plotly.express가 아니라 graph_objects를 써야 함.

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
            open=df['Open'],
            high=df['High'],
            low=df['Low'],
            close=df['Close'])])

fig.update_layout(title='NVDA 캔들스틱 차트', xaxis_rangeslider_visible=False)
fig.show()

NVDA 캔들스틱 차트

상승하는 날과 하락하는 날의 색깔이 자동으로 구분되어 들어가니 전문적인 HTS 화면 같아 보임. 마우스를 올리면 그날의 시가/종가 정보를 바로 볼 수 있음.

3-3. 거래량 분석 (Bar Chart)

거래량은 막대 그래프(Bar Chart)로 표현함.

fig = px.bar(df, x='Date', y='Volume', title='NVDA 일별 거래량')
fig.show()

NVDA 일별 거래량

3-4. 최종 보스: 주가+거래량 결합 차트

마지막으로, 위에서 실습한 캔들스틱과 거래량을 하나의 차트에 위아래로 배치해봄. make_subplots를 사용하면 여러 그래프를 합칠 수 있음.

# 2행 1열 서브플롯 생성 (공유 x축 사용)
fig = make_subplots(rows=2, cols=1, shared_xaxes=True, 
                    vertical_spacing=0.03, subplot_titles=('OHLC', 'Volume'),
                    row_heights=[0.7, 0.3])

# 1. 캔들스틱 추가
fig.add_trace(go.Candlestick(x=df['Date'],
                             open=df['Open'], high=df['High'],
                             low=df['Low'], close=df['Close'], name="OHLC"), 
              row=1, col=1)

# 2. 거래량 추가
fig.add_trace(go.Bar(x=df['Date'], y=df['Volume'], name="Volume"), 
              row=2, col=1)

fig.update_layout(title='NVDA 주가 및 거래량 분석', height=800)
fig.show()

NVDA 주가 및 거래량 분석

두 차트의 x축을 공유(shared_xaxes=True)하도록 설정해서, 위쪽 차트를 줌인하면 아래쪽 거래량 차트도 자동으로 같이 줌인됨. 이 기능이 주가와 거래량의 상관관계를 볼 때 아주 강력함.


4. 실습 후기

Plotly는 처음 써봤는데, matplotlib보다 코드는 직관적이면서 결과물은 훨씬 세련되어 놀라움. 웹 브라우저에서 바로 차트를 탐색할 수 있다는 점이 데이터 분석할 때 정말 큰 장점인 것 같음.

다음에는 이 차트에 이동평균선(MA) 같은 기술적 지표도 추가해서 더 고도화된 분석을 해보고 싶음.

Comments