데이터분석과 개발

[시계열 시각화] plotly를 통한 시계열 시각화 본문

AI(시계열)/데이터시각화

[시계열 시각화] plotly를 통한 시계열 시각화

긍정적인마인드 2022. 12. 29. 23:56

seaborn에 이어서 plotly를 통해 시각화를 진행해보려고 합니다.

seaborn과 마찬가지로 matplotlib보다 쉽고 보기 좋게 시각화를 할 수 있습니다.

시계열에서 중요한 일별, 월별, 연도별 그래프를 쉽게 그릴 수 있는 점이 특히 좋은 것 같습니다.

 

이번 데이터는 darts 데이터셋에 미국 gasoline데이터 입니다.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px

from darts.datasets import USGasolineDataset
df_gasoline = USGasolineDataset().load().pd_dataframe()
df_gasoline.head()

 

데이터를 자세히 보기 위해 2018년까지 데이터로 시각화를 진행하여 보겠습니다.

월별, 연도별 데이터의 특징을 보기 위해 'month', 'year' 컬럼을 만들었습니다.

df = df_gasoline.loc[:'2000']
df['month'] = df.index.month
df['year'] = df.index.year

 

1. line plot

 

기본적인 선 그래프 입니다. 일정한 패턴으로 증가하는 추세를 가지고 있는 것을 볼 수 있습니다.

# line plot 기본
px.line(data_frame=df, x= df.index, y= 'Gasoline')

같은 그래프에 color 라는 파라미터를 통해 쉽게 연도별 데이터 표시를 해줄 수 있습니다.

 

px.line(data_frame=df, x= df.index, y= 'Gasoline',color='year')

연도가 흐름에 따라 증가한다는 것을 알게 되었습니다. 언뜻 보기에 1년 동안의 계절성이 있는 것으로 보여

1월부터 12월까지 데이터가 어떻게 움직이는지 보고 싶어졌습니다.

그러기 위해 월별 흐름에 따른 시각화를 진행해보겠습니다.

 

데이터가 일주일 단위이기 때문에 resample을 통해 월단위로 먼저 바꿔주고 시각화를 진행해보면

df_m = df.resample('M').mean()['Gasoline'].to_frame()
df_m['year'] = df_m.index.year
df_m['month'] = df_m.index.month

px.line(data_frame=df_m, x= 'month', y= 'Gasoline',color='year')

 

매년 같다고 할 순 없지만 주로 7월,8월까지 증가하다가 하락하는 패턴을 보이고 있습니다.  

 

text라는 parameter를 통해 그래프에 데이터를 표시할 수도 있습니다.

(글자가 자주 겹쳐서 데이터 숫자가 적을때만 유용할 것 같습니다)

fig = px.line(data_frame= df_m.loc[:'1993'], x= 'month', y= 'Gasoline',color='year', text='Gasoline')
fig.update_traces(textposition='bottom right')
fig.show()

 

2. box plot

line plot 과 같은 순서로 시각화를 진행해보겠습니다.

다들 아시다시피 line plot이 추세를 보기 좋다면 box plot은 데이터의 분포를 보기 좋습니다.

연도별 데이터 부터 살펴보겠습니다.

 

연도별 가솔린 데이터입니다. 무난무난하게 증가하고 있고 비슷하지만 1997년도에 조금 변동성이 컸네요!

fig = px.box(data_frame=df, x='year', y =['Gasoline'] )
fig.show()

 

마찬가지로 연도흐름에 따라 월별 박스 그래프를 시각화 해보았습니다.

 

fig = px.box(data_frame=df.loc[:'1995'], x='year', y =['Gasoline'], color='month' )
fig.show()

 

 

fig = px.box(data_frame=df, x='month', y ='Gasoline')
fig.show()

* range slider 추가

 

plotly에는 그래프를 확대할 수 있는 기능이 있습니다! 

plotly의 기본 주가데이터를 통해 range slider를 그려보면

df_stock = px.data.stocks(indexed=True)-1
fig = px.line(data_frame=df_stock['GOOG'].to_frame(), x= df_stock.index, y= 'GOOG')
fig.update_xaxes(rangeslider_visible=True)
fig.show()

.

 

이런식으로 슬라이드 바가 생깁니다.  이 슬라이드 바를 통해 그래프를 확대해볼 수도 있으니 한번 사용해보시는 것도 괜찮으실 것 같습니다.

 

사실 plotly는 시각화의 끝판왕이라고 할 정도로 여러가지 화려한 시각화가 가능합니다.

앞으로 시계열 데이터에 도움이 될만한 시각화가 있으면 더 추가해보도록 하겠습니다. 감사합니다!