pbj0812의 코딩 일기

[PYTHON] plotly 를 통해 sankey diagram 그리기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] plotly 를 통해 sankey diagram 그리기

pbj0812 2023. 10. 18. 01:36

0. 목표

 - plotly 를 통해 sankey diagram 그리기

1. 실습

 1) library 호출

import plotly.graph_objects as go
import pandas as pd

 2) 데이터 생성

df = pd.DataFrame({
    'source' : ['A1', 'A1', 'A2', 'B1', 'B2'],
    'target' : ['B1', 'B2', 'B2', 'C1', 'C1'],
    'value' : [8, 2, 4, 8, 4] 
})

 3) 라벨용 데이터 생성

label = pd.DataFrame({
    'name' : ['A1', 'A2', 'B1', 'B2', 'C1'], 
    'code' : [0, 1, 2, 3, 4]
})

 4) 매핑

dict_sido = label.set_index('name')['code'].to_dict()
df['source2'] = df['source'].map(dict_sido)
df['target2'] = df['target'].map(dict_sido)

 5) 그림

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 30, # 바 사이의 간격
      thickness = 40, # 바의 굵기
      line = dict(color = "blue", width = 0.5), # 선 관리
      label = ["A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2", "D3"],
      color = "blue" # 바 색상
    ),
    link = dict(
      source = df['source2'], # 어디에서, 0 : A1, 2 : A2
      target = df['target2'], # 어디로
      value = df['value'] # 얼만큼 보내는가
  ))])

fig.update_layout(title_text="Basic Sankey Diagram", font_size=20)
fig.show()

2. 결과

3. 참고 문헌

 - https://plotly.com/python/sankey-diagram/

 - [python] 데이터 프레임 매핑 하기 (map 함수)

Comments