5 visualizaciones para ayudar a mejorar Data Story

Este artículo fue traducido antes del curso Python Developer .




Contar historias es una de las habilidades más importantes para los profesionales de análisis de datos. Para comunicar ideas y hacerlo de manera convincente, necesita construir una comunicación efectiva. En este artículo, presentaremos 5 métodos de visualización que van más allá de la comprensión clásica y pueden hacer que su Data Story sea más estética y hermosa. Trabajaremos con la biblioteca de gráficos Plotly en Python (también está disponible en R), que le permite crear diagramas animados e interactivos con un mínimo esfuerzo.

¿Qué hay de bueno en Plotly?


Los gráficos de trazado pueden integrarse fácilmente en varios entornos: funcionan bien en los cuadernos Jupyter, pueden integrarse en un sitio web y también están completamente integrados con Dash , una excelente herramienta para crear paneles y aplicaciones analíticas.

Empecemos


Si aún no ha instalado plotly, puede hacerlo con el siguiente comando:

pip install plotly

¡Genial, ahora puedes continuar!

1. Animaciones


Nuestro trabajo a menudo está relacionado con datos temporales, por ejemplo, cuando consideramos la evolución de una métrica particular. Animation in plotly es una herramienta genial que ayuda a reflejar cómo los datos cambian con el tiempo con solo una línea de código.



import plotly.express as px
from vega_datasets import data
df = data.disasters()
df = df[df.Year > 1990]
fig = px.bar(df,
             y="Entity",
             x="Deaths",
             animation_frame="Year",
             orientation='h',
             range_x=[0, df.Deaths.max()],
             color="Entity")
# improve aesthetics (size, grids etc.)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)',
                  title_text='Evolution of Natural Disasters',
                  showlegend=False)
fig.update_xaxes(title_text='Number of Deaths')
fig.update_yaxes(title_text='')
fig.show()

Casi cualquier gráfico puede animarse si tiene una variable que lo ayude a filtrar por tiempo. Ejemplo de animación de diagrama de dispersión:

import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(
    df,
    x="gdpPercap",
    y="lifeExp",
    animation_frame="year",
    size="pop",
    color="continent",
    hover_name="country",
    log_x=True,
    size_max=55,
    range_x=[100, 100000],
    range_y=[25, 90],

    #   color_continuous_scale=px.colors.sequential.Emrld
)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)')

2. Gráficos de rayos solares


Los gráficos Sunburst son una excelente manera de visualizar un grupo por operación . Si desea dividir la cantidad de datos disponibles en una o más variables categóricas, use el gráfico de rayos solares.

Supongamos que necesitamos obtener la distribución de propinas por género y hora del día. Por lo tanto, podemos usar el grupo por operador dos veces y visualizar fácilmente los datos recibidos para no ver la salida de la tabla habitual.



El diagrama es interactivo, puede hacer clic en las categorías y ver cada categoría individualmente. Todo lo que tiene que hacer es decidir sobre estas categorías, pensar en la jerarquía entre ellas (argumentoparentsen el código) y asigne los valores apropiados, que en nuestro caso serán la salida del grupo por parte de los operadores .

import plotly.graph_objects as go
import plotly.express as px
import numpy as np
import pandas as pd
df = px.data.tips()
fig = go.Figure(go.Sunburst(
    labels=["Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch '],
    parents=["", "", "Female", "Female", 'Male', 'Male'],
    values=np.append(
        df.groupby('sex').tip.mean().values,
        df.groupby(['sex', 'time']).tip.mean().values),
    marker=dict(colors=px.colors.sequential.Emrld)),
                layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                                 plot_bgcolor='rgba(0,0,0,0)'))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')
fig.show()

Ahora agreguemos otro nivel de jerarquía:



para hacer esto, agregaremos el resultado de otro grupo , del cual obtendremos tres categorías más.

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np
df = px.data.tips()
fig = go.Figure(go.Sunburst(labels=[
    "Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch ', 'Fri', 'Sat',
    'Sun', 'Thu', 'Fri ', 'Thu ', 'Fri  ', 'Sat  ', 'Sun  ', 'Fri   ', 'Thu   '
],
                            parents=[
                                "", "", "Female", "Female", 'Male', 'Male',
                                'Dinner', 'Dinner', 'Dinner', 'Dinner',
                                'Lunch', 'Lunch', 'Dinner ', 'Dinner ',
                                'Dinner ', 'Lunch ', 'Lunch '
                            ],
                            values=np.append(
                                np.append(
                                    df.groupby('sex').tip.mean().values,
                                    df.groupby(['sex',
                                                'time']).tip.mean().values,
                                ),
                                df.groupby(['sex', 'time',
                                            'day']).tip.mean().values),
                            marker=dict(colors=px.colors.sequential.Emrld)),
                layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                                 plot_bgcolor='rgba(0,0,0,0)'))
fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')

fig.show()

3. Categorías paralelas


Otra buena forma de visualizar las relaciones entre categorías es con este gráfico de categorías paralelas. Puede arrastrar, seleccionar y obtener valores sobre la marcha, lo cual es ideal para presentaciones.



import plotly.express as px
from vega_datasets import data
import pandas as pd
df = data.movies()
df = df.dropna()
df['Genre_id'] = df.Major_Genre.factorize()[0]
fig = px.parallel_categories(
    df,
    dimensions=['MPAA_Rating', 'Creative_Type', 'Major_Genre'],
    color="Genre_id",
    color_continuous_scale=px.colors.sequential.Emrld,
)
fig.show()

4. Coordenadas paralelas


Un diagrama de coordenadas paralelas es una versión ampliada del gráfico anterior. Aquí, cada parte del gráfico refleja una observación. Esta es una buena herramienta para detectar valores atípicos (flujos únicos aislados del resto de los datos), grupos, tendencias y datos redundantes (por ejemplo, si dos variables tienen los mismos valores para todas las observaciones, se ubicarán en una línea horizontal, lo que indica la presencia de redundancia).



import plotly.express as px
from vega_datasets import data
import pandas as pd
df = data.movies()
df = df.dropna()
df['Genre_id'] = df.Major_Genre.factorize()[0]
fig = px.parallel_coordinates(
    df,
    dimensions=[
        'IMDB_Rating', 'IMDB_Votes', 'Production_Budget', 'Running_Time_min',
        'US_Gross', 'Worldwide_Gross', 'US_DVD_Sales'
    ],
    color='IMDB_Rating',
    color_continuous_scale=px.colors.sequential.Emrld)
fig.show()


5. Gráficos, sensores e indicadores.




Los diagramas de sensores son necesarios para la estética. Son una buena forma de informar indicadores de éxito o rendimiento y relacionarlos con su objetivo.



Los indicadores serán muy útiles en el contexto de negocios y consultoría. Complementan los efectos visuales con texto que capta la atención de la audiencia y transmite indicadores de crecimiento a la audiencia.

import plotly.graph_objects as go
fig = go.Figure(go.Indicator(
    domain = {'x': [0, 1], 'y': [0, 1]},
    value = 4.3,
    mode = "gauge+number+delta",
    title = {'text': "Success Metric"},
    delta = {'reference': 3.9},
    gauge = {'bar': {'color': "lightgreen"},
        'axis': {'range': [None, 5]},
             'steps' : [
                 {'range': [0, 2.5], 'color': "lightgray"},
                 {'range': [2.5, 4], 'color': "gray"}],
          }))
fig.show()

import plotly.graph_objects as go
fig = go.Figure(go.Indicator(
    title = {'text': "Success Metric"},
     mode = "number+delta",
    value = 300,
    delta = {'reference': 160}))
fig.show()


fig = go.Figure(go.Indicator(
     title = {'text': "Success Metric"},
    mode = "delta",
    value = 40,
 delta = {'reference': 160}))
fig.show()

¡Eso es todo!


Espero que encuentres algo útil para ti. Quédese en casa, esté seguro, trabaje productivamente.



Aprende más sobre el curso.



All Articles