Plotly Express 소개하기

Author

Gabriel Yang

Plotly Express란 무엇인가요?

Plotly Express와 Plotly Graph Objects (go)는 둘 다 Plotly 라이브러리의 일부로, 데이터를 시각화하는 데 사용됩니다. 그러나 이 두 가지는 서로 다른 사용 목적과 장점을 가지고 있습니다.

Plotly Express란?

Plotly Express는 Plotly의 하위 모듈로, 간단한 코드로 고급 시각화를 구현할 수 있도록 설계된 데이터 시각화 라이브러리입니다. Plotly Express는 DataFrame이나 다른 데이터 구조를 사용하여 그래프를 생성하며, 다양한 차트 유형을 지원합니다. 이를 통해 복잡한 그래프도 몇 줄의 코드로 쉽게 그릴 수 있습니다.

Plotly Express와 Graph Objects의 차이점

  • Plotly Express: 데이터 분석이나 시각화를 처음 시도할 때, 빠르게 다양한 차트를 시도해보고 싶을 때 Plotly Express가 매우 유용합니다. 몇 줄의 코드만으로도 다양한 차트 유형을 생성할 수 있습니다.

  • Graph Objects(go): 그래프의 디자인이나 상호작용을 세밀하게 조정해야 하는 상황에서는 go를 사용합니다. 그러나 이는 초기 프로토타이핑보다는 프로젝트의 후반부, 즉 시각화의 세부 사항을 다듬는 단계에서 더 적합합니다.

Plotly Express의 장점

  • 간단한 문법: 몇 줄의 코드만으로 복잡한 시각화를 구현할 수 있습니다.
  • 다양한 차트 유형 지원: 산점도, 막대 그래프, 히스토그램, 선 그래프, 버블 차트 등 다양한 차트를 쉽게 그릴 수 있습니다.
  • 인터랙티브 시각화: Plotly Express로 생성된 모든 차트는 기본적으로 인터랙티브합니다. 사용자는 차트를 확대하거나 축소하고, 데이터 포인트에 마우스를 올려 추가 정보를 확인할 수 있습니다.
  • 자동화된 데이터 처리: Plotly Express는 입력된 데이터를 자동으로 분석하고 적절한 형태로 시각화합니다. 데이터 정규화나 처리에 대한 부담을 덜 수 있습니다.
  • 다양한 커스터마이징 옵션: 차트의 색상, 크기, 스타일 등을 자유롭게 조정할 수 있으며, 필요한 경우 Plotly의 하위 레벨 API를 사용해 더욱 세밀하게 조정할 수 있습니다.

Plotly Express 설치

Plotly Express는 Plotly 패키지에 포함되어 있으므로 Plotly를 설치하면 함께 사용할 수 있습니다.

pip install plotly

Plotly Express 사용 예제

다양한 예제를 통해 Plotly Express의 기능을 살펴보겠습니다.

1. 산점도 (Scatter Plot)

산점도는 두 개의 변수 간의 관계를 시각화하는 데 유용합니다. 예를 들어, sepal_widthsepal_length 간의 관계를 시각화해보겠습니다.

import plotly.express as px
import seaborn as sns

# 데이터 로드
df = sns.load_dataset('iris')

# 산점도 생성
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species',
                 title='Sepal Width vs Sepal Length')
fig.show()
  • color='species': 데이터를 꽃의 종류별로 구분하여 색상으로 표시합니다.
  • title: 그래프의 제목을 설정합니다.

2. 막대 그래프 (Bar Chart)

막대 그래프는 범주형 데이터의 크기 비교를 시각화하는 데 유용합니다. 예를 들어, 각 꽃의 종류별로 꽃잎의 평균 길이를 시각화해보겠습니다.

import pandas as pd

data = {
    '제품': ['A', 'B', 'C', 'D'],
    '2023년 판매량': [150, 200, 300, 100],
    '2024년 판매량': [180, 210, 320, 130]
}

df = pd.DataFrame(data)

# 막대 그래프 생성
fig = px.bar(df, x='제품', y='2023년 판매량',
             title='2023년 제품별 판매량')
fig.show()
  • labels: 축의 이름을 커스터마이징할 수 있습니다.
  • barmode='group': 막대를 그룹화하여 각 범주를 나란히 표시합니다.

3. 히스토그램 (Histogram)

히스토그램은 연속형 데이터의 분포를 시각화하는 데 유용합니다. sepal_width의 분포를 시각화해보겠습니다.

import plotly.express as px
import seaborn as sns

# 데이터 로드
df = sns.load_dataset('iris')

# 히스토그램 생성
fig = px.histogram(df, x='sepal_width', nbins=20, title='Distribution of Sepal Width')
fig.show()
  • nbins=20: 히스토그램의 빈(bin) 수를 설정하여 데이터의 분포를 더 세밀하게 표현합니다.

4. 선 그래프 (Line Plot)

선 그래프는 시간에 따른 데이터의 변화나 연속된 데이터 포인트 간의 관계를 시각화하는 데 사용됩니다. 예를 들어, 시간에 따른 주식 가격 변동을 시각화할 수 있습니다.

# 선 그래프 예제 데이터 생성
import pandas as pd

data = {
    'Date': pd.date_range(start='2023-01-01', periods=100, freq='D'),
    'Stock Price': pd.Series(range(100)) + pd.Series(range(100)).apply(lambda x: x*0.5)
}

df = pd.DataFrame(data)

# 선 그래프 생성
fig = px.line(df, x='Date', y='Stock Price', title='Stock Price Over Time')
fig.show()

5. 버블 차트 (Bubble Chart)

버블 차트는 세 개의 변수 간의 관계를 동시에 시각화하는 데 사용됩니다. 예를 들어, 각 나라의 GDP, 인구수, 그리고 평균 수명을 시각화해보겠습니다.

# 버블 차트 생성
df = pd.DataFrame({
    'Country': ['USA', 'China', 'India', 'Germany', 'UK'],
    'GDP': [21.43, 14.34, 2.87, 3.86, 2.83],  # 단위: 조 달러
    'Population': [331, 1441, 1380, 83, 68],  # 단위: 백만 명
    'Life Expectancy': [78.9, 76.7, 69.7, 81.2, 81.3]  # 단위: 년
})

fig = px.scatter(df, x='GDP', y='Life Expectancy', size='Population', color='Country',
                 hover_name='Country', size_max=60, title='GDP vs Life Expectancy')
fig.show()

결론

Plotly Express는 데이터 시각화를 간편하고 강력하게 수행할 수 있는 도구입니다. 간단한 코드만으로도 다양한 차트를 생성할 수 있으며, 기본 제공되는 인터랙티브 기능 덕분에 시각화된 데이터를 더 쉽게 탐색할 수 있습니다.