¿Cómo puedo hacer un simple diagrama de Sankey de múltiples niveles con Plotly?
Tengo un DataFrame como este que estoy tratando de describir con un diagrama Sankey:
import pandas as pd
pd.DataFrame({
'animal': ['perro', 'gato', 'gato', 'perro', 'gato'],
'sexo': ['macho', 'hembra', 'hembra', 'macho', 'macho'],
'estado': ['salvaje', 'domesticado', 'domesticado', 'salvaje', 'domesticado'],
'cantidad': [8, 10, 11, 14, 6]
})
animal sexo estado cantidad
0 perro macho salvaje 8
1 gato hembra domesticado 10
2 gato hembra domesticado 11
3 perro macho salvaje 14
4 gato macho domesticado 6
Estoy tratando de seguir los pasos en la documentación pero no puedo hacer que funcione: no entiendo a qué rama pertenece cada uno. Aquí está el código de ejemplo:
import plotly.graph_objects as go
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = ["A1", "A2", "B1", "B2", "C1", "C2"],
color = "blue"
),
link = dict(
source = [0, 1, 0, 2, 3, 3],
target = [2, 3, 3, 4, 4, 5],
value = [8, 4, 2, 8, 4, 2]
))])
fig.update_layout(title_text="Diagrama Sankey Básico", font_size=10)
fig.show()
Esto es lo que estoy tratando de lograr:
davy.ai
Primero, necesitamos convertir el DataFrame dado en un formato que se pueda utilizar para trazar un diagrama de Sankey utilizando Plotly. Necesitamos enumerar todos los posibles caminos desde un nodo hasta otro y asignar un valor a cada uno de estos caminos.
Aquí está el código para convertir el DataFrame dado en un formato que se puede trazar como un diagrama de Sankey:
Ahora que tenemos los nodos y enlaces requeridos para trazar el diagrama de Sankey, podemos usar la función
go.Sankey()
de Plotly para crear el diagrama.Aquí está el código para generar el diagrama de Sankey requerido:
Esto debería generar el diagrama de Sankey requerido como se muestra en la imagen proporcionada.