데이터 분석에서 시계열(time series) 데이터를 시각화하는 것은 매우 중요한 작업입니다. 파이썬에서는 Seaborn이나 Plotly 같은 라이브러리를 활용하면 날짜·시간 축을 포함한 시계열 그래프를 손쉽게 그릴 수 있습니다.
Seaborn으로 시계열 그래프 그리기: 단계별 절차
- 그림(figure) 크기를 설정하고, 서브플롯(subplot) 주변 및 사이의 여백(padding)을 조정합니다.
- 날짜·시간 시계열인 'time' 컬럼과 다른 변수인 'speed' 컬럼을 담는 판다스(Pandas) 데이터프레임 df를 생성합니다.
- 생성한 데이터, 'time', 'speed'를 사용해 Seaborn 선 그래프(lineplot)를 그립니다.
- x축 눈금(tick) 라벨이 겹치지 않도록 45도 회전시킵니다.
- show() 메서드를 호출하여 그래프를 화면에 표시합니다.
전체 예제 코드
import seaborn as sns
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(
dict(
time=list(pd.date_range("2021-01-01 12:00:00", periods=10, freq="30min")),
speed=np.linspace(1, 10, 10)
)
)
ax = sns.lineplot(x="time", y="speed", data=df)
ax.tick_params(rotation=45)
plt.show()실행 결과
위 코드를 실행하면 x축에 30분 간격의 날짜·시간 값이 배치되고, y축에는 1부터 10까지 증가하는 speed 값이 표시된 시계열 선 그래프가 출력됩니다. 눈금 라벨은 45도 기울어져 있어 긴 날짜 문자열도 겹침 없이 깔끔하게 읽을 수 있습니다.
코드 핵심 포인트 정리
1. 그림 크기와 자동 레이아웃 설정
plt.rcParams의 figure.figsize 옵션으로 그래프 크기를 지정하고, figure.autolayout을 True로 설정하면 라벨이 잘리지 않도록 여백이 자동 조절됩니다.
2. pd.date_range로 시간 데이터 생성
pd.date_range() 함수는 시작 시점부터 일정한 간격(freq)으로 지정된 개수(periods)만큼의 타임스탬프를 만들어 줍니다. 이 예제에서는 2021년 1월 1일 12:00:00부터 30분 간격으로 10개의 시점을 생성했습니다.
3. sns.lineplot으로 선 그래프 작성
Seaborn의 lineplot()은 x축, y축 컬럼명과 데이터프레임만 넘겨주면 자동으로 스타일이 적용된 선 그래프를 그려줍니다.
4. 눈금 라벨 회전
ax.tick_params(rotation=45)를 호출하면 x축의 날짜·시간 라벨이 45도 회전되어 가독성이 크게 향상됩니다.
Plotly를 활용한 대안
인터랙티브한 그래프가 필요하다면 Plotly를 사용할 수도 있습니다. 아래는 동일한 데이터를 Plotly Express로 그리는 예제입니다.
import plotly.express as px
import pandas as pd
import numpy as np
df = pd.DataFrame(
dict(
time=pd.date_range("2021-01-01 12:00:00", periods=10, freq="30min"),
speed=np.linspace(1, 10, 10)
)
)
fig = px.line(df, x="time", y="speed", title="Time Series Graph")
fig.show()Plotly로 그린 그래프는 마우스 휠로 확대·축소하고, 특정 구간을 드래그하여 자세히 살펴볼 수 있어 웹 대시보드나 보고서에 활용하기에 적합합니다.
마무리
Seaborn은 정적인 고품질 그래프를 빠르게 만들 때 유용하고, Plotly는 인터랙티브 기능이 필요한 경우에 강력한 선택지입니다. 두 라이브러리 모두 판다스 데이터프레임과 잘 연동되므로, 데이터 형태와 활용 목적에 맞게 선택하면 됩니다.