Configurar gráficos en Superset¶
Ejercicio configuring-charts-annex.pdf · PDF
Haces un gráfico de líneas con los juegos publicados en Steam cada año. Es el gráfico correcto: evolución, una línea. Lo pegas en el chat de grupo de clase, sin ningún mensaje. Treinta segundos después: "¿Qué está contando esto?" "¿Juegos de qué?" "¿Qué años?" "¿8.85k qué?" "Entonces... ¿qué se supone que tengo que ver?"
El gráfico era correcto y nadie podía leerlo. Elegir el gráfico adecuado era el trabajo de Elegir el gráfico adecuado. Hacerlo legible es el trabajo de hoy.
Qué aprenderás
- Orientarte por la vista Explore de Superset: qué va en la pestaña Data y qué va en Customize
- Distinguir una dimensión de una métrica, y usar los filtros y la granularidad temporal para decidir qué se dibuja
- Escribir un título de gráfico que enuncie el hallazgo, y títulos de ejes que digan qué se cuenta y en qué unidad
- Aplicar un formato numérico (
,d,.1%,$,.2f) para que el lector nunca tenga que contar cifras - Ordenar un gráfico en el orden que pide la pregunta, y decidir cuándo hace falta una leyenda y cuándo es ruido
- Añadir una anotación que dé al lector algo con lo que comparar
La prueba de la captura de pantalla¶
En el juego de crafteo de este módulo, un gráfico forma parte del HUD: la barra de vida, el minimapa, la puntuación. Nadie pausa una partida para explicar qué es la barra roja. Si el HUD necesita un manual, el HUD está roto.
Tus gráficos viven lo mismo. Un gráfico sale de casa. Alguien hace una captura de pantalla y la pega en un chat, en una diapositiva, en un informe. Tú no estarás ahí para explicarlo. Todo lo que no esté escrito dentro de la imagen se pierde.
La prueba de la captura de pantalla: ¿podría un desconocido leer este gráfico solo, sin pie de figura y sin nadie a quien preguntar?
Aquí tienes el mismo gráfico, de la misma consulta, antes y después de la prueba. El de la izquierda es lo que la herramienta dibuja por sí sola. Al de la derecha se le han cambiado seis cosas pequeñas.
Los dos paneles están redibujados a partir de los datos de clase, no son capturas. Cada diferencia entre ellos responde a una pregunta que haría un desconocido. Esas seis diferencias son los seis mandos de esta lección.
La vista Explore: donde vive todo¶
La vista Explore es la pantalla donde Superset construye un gráfico a partir de un dataset. Se llega desde Charts → + Chart, o abriendo cualquier gráfico guardado.
Léela de izquierda a derecha. Tiene cuatro zonas:
| Zona | Qué hay | Para qué la usas |
|---|---|---|
| Panel del dataset (izquierda) | Las columnas y las métricas guardadas del dataset, aquí games_clean |
Arrastrar una columna a un control |
| Pestaña Data | Tipo de gráfico, X-axis, Metrics, Dimensions, Filters, Row limit | Decidir qué se calcula |
| Pestaña Customize | Títulos, formatos de ejes, leyenda, colores | Decidir cómo se ve |
| Gráfico y resultados | La imagen y, debajo, las filas que hay detrás | Comprobar los números |
flowchart LR
DS["<b>Dataset</b><br>games_clean:<br>columnas y métricas"] --> DATA["<b>Pestaña Data</b><br>qué se calcula:<br>dimensión, métrica,<br>filtro, granularidad temporal, orden"]
DATA -- "Superset escribe<br>el SQL" --> RES["<b>Resultados</b><br>las filas detrás<br>del gráfico"]
RES --> CUS["<b>Pestaña Customize</b><br>cómo se ve:<br>títulos, formatos,<br>leyenda, colores"]
CUS --> CH["<b>El gráfico</b><br>(el HUD)"]
La frase que hay que recordar: los títulos y el aspecto viven en *Customize; lo que se cuenta, los filtros, el orden y las anotaciones viven en *Data. La mayoría de la gente que se pierde en Superset está buscando en la pestaña equivocada.
Qué se dibuja: dimensión, métrica, filtro, granularidad temporal¶
Un gráfico es una consulta con un dibujo encima. Toma la consulta que escribes desde la Unidad 1:
SELECT price_band, COUNT(*) FROM games_clean GROUP BY price_band;
Tiene dos mitades, y Explore tiene un control para cada una.
Una dimensión es la columna por la que agrupas: aquello que representa cada barra, punto o sector. Una métrica es el agregado calculado para cada grupo:
COUNT,AVG,SUM.
| Palabra | En SQL | En Explore | En el HUD del juego |
|---|---|---|---|
| Dimensión | La columna de GROUP BY |
X-axis, Dimensions | Los nombres del marcador |
| Métrica | El agregado: COUNT(*), AVG(price) |
Metrics | La puntuación junto a cada nombre |
| Filtro | La cláusula WHERE |
Filters | "Solo esta partida" |
| Granularidad temporal | Agrupar una fecha por año, mes, día | Time Grain | Repetición por ronda o por minuto |
| Orden | ORDER BY |
X-Axis Sort By | Quién está arriba |
La granularidad temporal (time grain) es el tamaño de los pasos de tiempo en que se agrupa una columna de fecha. El mismo
release_datedibujado con granularidad Year da 15 puntos; con granularidad Month da un punto por mes.
Esta es la receta del gráfico del gancho, el que guardaste en Gráficos de barras y de líneas como UT3 · Games released per year:
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Charts → + Chart. Dataset games_clean, tipo de gráfico Line Chart, Create new chart. |
La vista Explore, gráfico vacío. |
| 2 | X-axis: release_date. Time Grain: Year. Metrics: COUNT(*). |
Tres controles rellenos en la pestaña Data. |
| 3 | Create chart. | Una línea que sube hacia la derecha, de 2004 a 2018. |
| 4 | Menú del gráfico (⋯, arriba a la derecha) → View query. | El SQL que Superset ha escrito por ti. |
El paso 4 es la razón por la que las Unidades 1 y 2 importaban: puedes leer lo que hace la herramienta, y comprobarlo.
Los seis mandos¶
Cada mando responde a una pregunta que haría el desconocido del chat de grupo.
| Mando | El desconocido pregunta | Dónde en Explore (Line Chart) |
|---|---|---|
| Título | "¿Y qué?" | Nombre del gráfico arriba a la izquierda de la página (Add the name of the chart) |
| Títulos de ejes | "¿Qué se cuenta? ¿En qué unidad?" | Customize → Chart Title → X Axis Title, Y Axis Title |
| Formato numérico | "¿Cuánto es exactamente 8.85k?" | Customize → Chart Options → Y Axis → Y Axis Format |
| Orden | "¿Quién va primero?" | Data → X-Axis Sort By y X-Axis Sort Ascending (cuando el eje X es una categoría) |
| Color y leyenda | "¿Qué línea es cuál?" | Customize → Chart Options → Color Scheme; Legend → Show legend, Orientation |
| Anotación | "¿Comparado con qué?" | Data → Annotations and Layers → Add annotation layer |
Mando 1: un título que enuncia el hallazgo¶
Games per year es una receta: dice qué se ha cocinado. Los títulos de los ejes ya hacen eso. El título es lo primero que lee cualquiera, así que gástalo en el hallazgo: ¿qué debe ver el lector?
| Receta (débil) | Hallazgo (fuerte) |
|---|---|
| Games per year | Steam releases took off in 2014: 8,845 games in 2018 |
| Top 10 publishers | Big Fish Games published twice as many games as SEGA |
| owners_tier | Two out of three Steam games never reach 20,000 owners |
Una prueba rápida: un hallazgo tiene un verbo. Y tiene que ser verdad: Big Fish Games tiene 284 juegos y SEGA 141, y 284 ÷ 141 = 2.01, así que "twice as many" es honesto.
Mando 2: títulos de ejes¶
Un título de eje dice qué se cuenta y en qué unidad: Release year, Games released. Sin él, un número en el eje es solo un número.
No todos los ejes necesitan uno. En un gráfico de barras de editoras, el eje con los nombres no necesita título: SEGA y Ubisoft se explican solos. El eje con los números siempre lo necesita.
Mando 3: formatos numéricos¶
Un formato numérico es un código corto que le dice al gráfico cómo escribir un número: con separadores de miles, como porcentaje, como dinero.
Por defecto Superset usa Adaptive formatting, que acorta los números: es el que escribe 8,845 como 8.85k. Bueno para un primer vistazo, malo para un lector que quiere la cifra. Tres formatos bastan para todo el curso:
| Formato | Valor almacenado | Se escribe como | Úsalo para |
|---|---|---|---|
,d |
8845 | 8,845 | Recuentos |
.1% |
0.672 | 67.2% | Proporciones |
$,.2f |
12345.432 | $12,345.43 |
Dinero |
Estos códigos vienen de un pequeño lenguaje estándar llamado formato D3. Superset lista ,d y $,.2f en el desplegable con un ejemplo al lado de cada uno. El del porcentaje aparece como ,.1%; también puedes escribir .1% y pulsar Enter.
Cuidado: el formato no cambia los datos
Un formato cambia cómo se escribe el número, no el número. 8.85k y 8,845 son el mismo valor almacenado, 8845. No estás redondeando tus datos; estás eligiendo cuánto de ellos llega a ver el lector.
Mando 4: orden¶
El orden es la primera comparación que hace el ojo. Aquí tienes las diez mayores editoras de games_clean, dos veces. Las mismas diez barras, los mismos números:
%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#4051b5"}}}}%%
xychart-beta horizontal
title "Juegos publicados (orden alfabético)"
x-axis ["1C Entertainment", "Big Fish Games", "Choice of Games", "Dagestan Technology", "SEGA", "Sekai Project", "Square Enix", "Strategy First", "THQ Nordic", "Ubisoft"]
y-axis "Juegos publicados" 0 --> 300
bar [85, 284, 92, 89, 141, 94, 95, 129, 84, 123]
¿Quién es el cuarto? Tienes que leer cada barra y compararlas de cabeza. El orden alfabético responde a una pregunta que nadie ha hecho.
%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#4051b5"}}}}%%
xychart-beta horizontal
title "Juegos publicados (ordenado por valor)"
x-axis ["Big Fish Games", "SEGA", "Strategy First", "Ubisoft", "Square Enix", "Sekai Project", "Choice of Games", "Dagestan Technology", "1C Entertainment", "THQ Nordic"]
y-axis "Juegos publicados" 0 --> 300
bar [284, 141, 129, 123, 95, 94, 92, 89, 85, 84]
¿Quién es el cuarto? Ubisoft. El gráfico ha hecho el ranking por ti.
Hay tres órdenes honestos. Elige el que pide la pregunta:
| Orden | Cuándo | Ejemplo |
|---|---|---|
| Por valor | La pregunta es "¿quién tiene más?" | Editoras, de mayor a menor |
| Por tiempo | El eje X es una fecha | Años de 2004 a 2018, siempre de izquierda a derecha |
| Orden natural | Las categorías tienen su propio orden | Free, Under 5, 5 to 15, 15 to 30, 30 or more |
Mando 5: color y leyenda¶
Una leyenda es la pequeña clave que dice qué color es cada serie. Una serie es una línea, o un conjunto de barras, del gráfico.
Una leyenda responde exactamente a una pregunta: "¿qué color es cuál?" Así que cuenta primero tus series.
| Series en el gráfico | Leyenda | Por qué |
|---|---|---|
| Una | Desactivada | No hay nada que distinguir. La leyenda solo diría COUNT(*), que no significa nada para un desconocido. Pon esa información en el título del eje. |
| Dos o más | Activada, arriba | Es esencial, y arriba se lee antes que las líneas. |
Añade owners_tier a Dimensions y la línea única se convierte en tres. Ahora la leyenda se gana su sitio:
La misma lógica rige el color. El color sirve para distinguir cosas. Una serie, un color. Diez barras de lo mismo, un color. Un Color Scheme se elige a propósito: el que hace más fáciles de distinguir las series, no el que tiene más colores.
Cuidado: 'un gráfico serio siempre tiene leyenda'
No. Una leyenda en un gráfico de una sola serie es tinta que no le dice nada al lector, y empuja hacia abajo el contenido real. Serio significa legible, no decorado.
Mando 6: una anotación¶
¿Son muchos 1,352 juegos en un año? No puedes decirlo sin algo con lo que comparar.
Una anotación es una marca que tú añades encima de los datos, una línea de referencia o una fecha etiquetada, para que el lector tenga algo con lo que comparar.
La más simple es una línea horizontal en la media. Para los 15 años de games_clean:
SELECT ROUND(AVG(games), 1)
FROM (SELECT release_year, COUNT(*) AS games FROM games_clean
WHERE release_year IS NOT NULL GROUP BY release_year) y;
El resultado es 1778.9, así que la línea va en 1,779. Una vez dibujada, el lector ve de un vistazo que solo cuatro años quedan por encima: de 2015 a 2018.
Una anotación no forma parte de los datos. Ponle un nombre que diga lo que es (Average year: 1,779 games), para que nadie la confunda con otra serie.
¿Qué pasó en 2017?
Las anotaciones también pueden marcar un acontecimiento. El 6 de junio de 2017 Valve cerró Steam Greenlight, donde los jugadores votaban qué juegos podían entrar en la tienda. El 13 de junio de 2017 abrió Steam Direct: cualquier desarrollador podía publicar un juego por una tarifa de 100 dólares. En games_clean, las publicaciones pasaron de 4,503 en 2016 a 6,871 en 2017 y 8,845 en 2018. Una fecha marcada en el gráfico convierte "subió" en "subió cuando se abrió la puerta".
Pruébalo: tres gráficos que pasan la prueba¶
Necesitas tres gráficos guardados en lecciones anteriores: UT3 · Games released per year y UT3 · Top 10 publishers de Gráficos de barras y de líneas, y UT3 · Price band by owners tier de Elegir el gráfico adecuado. Ninguno pasa todavía la prueba de la captura de pantalla.
Tarea 1: el gráfico de líneas de juegos por año. Abre UT3 · Games released per year desde Charts.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Nombre del gráfico (arriba a la izquierda): escribe el hallazgo, por ejemplo UT3 · Steam releases took off in 2014: 8,845 games in 2018. |
Un título con verbo. |
| 2 | Customize → Chart Title: X Axis Title Release year, Y Axis Title Games released. Si el título se monta sobre los años, sube X Axis Title Margin de 15 a 30. |
Los dos ejes con nombre. |
| 3 | Customize → Chart Options: desmarca Show legend. En Y Axis, Y Axis Format: ,d. |
Sin leyenda. El eje dice 8,000, no 8k. |
| 4 | Pestaña Data → Filters → release_year → Is not null → Save. |
Una ficha de filtro. Hazlo antes del paso 5. |
| 5 | Data → Annotations and Layers → Add annotation layer: Name Average year: 1,779 games, Annotation layer type Formula, Formula 1779, Style Dashed. OK, y luego Update chart. |
Una línea horizontal discontinua en 1,779, con cuatro años por encima. |
| 6 | Save (sobrescribir). | El gráfico configurado en tu lista. |
Por qué el paso 4 va primero: un juego de la tabla no tiene fecha de lanzamiento. Con él todavía en la consulta, la línea de la fórmula empieza en 1970 y aprieta tus 15 años contra el borde derecho del gráfico.
Tarea 2: el gráfico de barras de editoras. Abre UT3 · Top 10 publishers.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Comprueba el orden. Si las barras no bajan escalonadas: Data → Y-Axis Sort By COUNT(*), y marca o desmarca Y-Axis Sort Ascending hasta que Big Fish Games esté arriba. |
La barra más larga en un extremo. (Las barras son horizontales, por eso los controles de orden se llaman por el eje Y.) |
| 2 | Customize → Chart Title: el eje con los números recibe Axis Title Games published. |
Un título de eje. Los nombres no necesitan ninguno. |
| 3 | Customize → Chart Options: marca Show Value; desmarca Show legend; Axis Format ,d. |
Cada barra con su número: 284 la primera, 84 la décima. |
| 4 | Renómbralo con un hallazgo: UT3 · Big Fish Games published twice as many games as SEGA. Save. |
Diez barras ordenadas, sin leyenda. |
Tarea 3: tres líneas, una leyenda. Abre otra vez el gráfico de la Tarea 1.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Data → Dimensions: añade owners_tier. Update chart. |
Tres líneas en lugar de una. |
| 2 | Quita la anotación. | Ya no hay línea discontinua: era la media del total, no la de cada nivel. |
| 3 | Customize → Chart Options: marca Show legend, Orientation Top. Prueba dos valores de Color Scheme y quédate con el que haga más fáciles de distinguir las líneas. | Una leyenda sobre tres líneas de colores. |
| 4 | Save → Save as... con el nombre UT3 · Since 2016 most new games are Niche. |
Niche acaba más arriba (7,752 en 2018) y cruza por encima de Mid en 2016. |
Opcional: dale a los tramos de precio su orden natural
Los tramos de precio de tu mapa de calor están en orden alfabético, con 15 to 30 el primero. Arréglalo con una columna calculada, como en Variables sintéticas: Datasets → edita games_clean → Calculated columns → Add item, nombre price_band_sorted. Borra el texto de ejemplo <enter SQL expression here> y escribe:
CASE price_band WHEN 'Free' THEN '1 · Free' WHEN 'Under 5' THEN '2 · Under 5'
WHEN '5 to 15' THEN '3 · 5 to 15' WHEN '15 to 30' THEN '4 · 15 to 30'
ELSE '5 · 30 or more' END
Save → OK. Úsala como X-axis en UT3 · Price band by owners tier con Sort X Axis en Axis ascending. Las columnas ahora dicen 1 · Free (3,094 juegos), 2 · Under 5 (11,613), 3 · 5 to 15 (9,046), 4 · 15 to 30 (2,367), 5 · 30 or more (565). La ordenación alfabética sigue ocurriendo; lo que has hecho es que el alfabeto esté de acuerdo contigo.
Si algo se ve mal
- El título del eje no aparece o sale cortado: sube X Axis Title Margin / Y Axis Title Margin en la misma sección.
- Y Axis Format no muestra
,d: escribe,den el cuadro y pulsa Enter; la lista acepta formatos escritos. - La línea de anotación no está: pulsa Update chart. Si la capa muestra un error, el cuadro de la fórmula debe contener solo
1779. - El eje X empieza en 1970 y la línea queda aplastada a la derecha: falta el filtro
release_yearIs not null. - Save (Overwrite) está en gris: el gráfico pertenece a otro usuario. Usa Save as... con tu propio nombre.
Cuando termines, haz la prueba de la captura de pantalla de verdad. Deja en pantalla el gráfico de la Tarea 1 y hazle tres preguntas a un compañero, sin explicar nada: ¿Qué se está contando? ¿Entre qué años? ¿Cuál es la única cosa que quiero que veas? Cada respuesta equivocada señala un mando que olvidaste.
Ideas clave¶
- La prueba de la captura de pantalla: un gráfico tiene que poder leerlo un desconocido, solo. Todo lo que no esté escrito dentro de la imagen se pierde.
- En la vista Explore, la pestaña Data decide qué se calcula (dimensión, métrica, filtro, granularidad temporal, orden, anotaciones) y la pestaña Customize decide cómo se ve (títulos, formatos, leyenda, colores).
- El título enuncia el hallazgo, con un verbo. Los títulos de ejes dicen qué se cuenta y en qué unidad.
- Un formato numérico cambia cómo se escribe un número, nunca el número:
,dpara recuentos,.1%para proporciones,$,.2fpara dinero. - Ordena por valor, por tiempo o por orden natural. El orden alfabético responde a una pregunta que nadie ha hecho.
- Una leyenda sirve para distinguir series: desactivada con una serie, activada (y arriba) con varias. Una anotación da al lector algo con lo que comparar.
Comprobación rápida¶
1. ¿Qué es la prueba de la captura de pantalla?
- Comprobar que el gráfico cabe en la pantalla de un móvil
- Comprobar que un desconocido podría leer el gráfico solo, sin pie de figura y sin nadie a quien preguntar
- Comprobar que el gráfico carga en menos de un segundo
- Comprobar que el gráfico usa los colores del cuadro de mando
Un gráfico sale de casa: se pega en chats, diapositivas e informes sin ti. La prueba de la captura de pantalla pregunta si todo lo que el lector necesita está escrito dentro de la imagen.
2. En SELECT price_band, COUNT(*) FROM games_clean GROUP BY price_band; ¿qué parte es la dimensión y cuál la métrica?
-
price_bandes la dimensión;COUNT(*)es la métrica -
COUNT(*)es la dimensión;price_bandes la métrica -
games_cleanes la dimensión;price_bandes la métrica - Las dos son métricas, porque las dos aparecen después de
SELECT
La dimensión es la columna por la que agrupas: lo que representa cada barra. La métrica es el agregado calculado para cada grupo. En Explore van en X-axis / Dimensions y en Metrics.
3. ¿Cuál de estos es un título que enuncia un hallazgo?
- Games per year
- COUNT(*) by release_date
- Steam releases took off in 2014: 8,845 games in 2018
- Line chart of games_clean
Los otros tres son recetas: dicen cómo se hizo el gráfico, cosa que ya hacen los títulos de los ejes. Un hallazgo tiene un verbo y le dice al lector qué tiene que ver.
4. El eje Y de tu gráfico dice 2k, 4k, 8k y el último punto dice 8.85k. ¿Qué mando lo arregla, y cómo?
- El orden: X-Axis Sort By
COUNT(*) - La leyenda: desmarcar Show legend
- El formato numérico: Y Axis Format
,d, que escribe 8,845 - La granularidad temporal: cambiar Year por Month
Adaptive formatting es el valor por defecto que acorta los números. El formato numérico ,d escribe los recuentos completos con separador de miles. El valor almacenado no cambia: siempre fue 8845.
5. Tu gráfico de líneas tiene una sola línea. ¿Qué haces con la leyenda?
- Mantenerla: un gráfico serio siempre tiene leyenda
- Moverla abajo para que ocupe menos sitio
- Desactivarla y decir qué se cuenta en el título del eje
- Añadir más colores para que la leyenda tenga algo que mostrar
Una leyenda responde a "¿qué color es cuál?". Con una serie no hay nada que distinguir: solo repetiría COUNT(*). Con tres series, como en el gráfico por nivel de propietarios, la leyenda se vuelve esencial y va arriba.
6. ¿Por qué añadir una línea discontinua en 1,779 al gráfico de juegos por año?
- Porque todo gráfico de líneas necesita dos líneas
- Porque cambia la media de los datos
- Porque da al lector algo con lo que comparar cada año
- Porque Superset no puede guardar un gráfico sin una anotación
Una anotación es algo que añades encima de los datos para responder a "¿comparado con qué?". La media de los 15 años es 1,778.9, y la línea muestra de un vistazo que solo de 2015 a 2018 quedan por encima. Hay que nombrarla para que nadie la confunda con una serie.
7. El gráfico de sectores de un compañero sobre los niveles de propietarios muestra sectores etiquetados 0.672, 0.305 y 0.023, una leyenda y el título 'owners_tier'. Elige los dos cambios que recomienda esta lección.
- Aplicar el formato numérico
.1%para que las etiquetas digan 67.2%, 30.5% y 2.3% - Sustituir el título por un hallazgo, como "Two out of three Steam games never reach 20,000 owners"
- Ordenar los sectores alfabéticamente para que la leyenda se lea mejor
- Dar a cada etiqueta de sector un formato distinto para que destaquen
Las proporciones se escriben con .1%, y el título es para el hallazgo, no para el nombre de una columna. El orden alfabético responde a una pregunta que nadie ha hecho, y mezclar formatos hace los números más difíciles de comparar, no más fáciles.
Tus gráficos ya pueden explicarse solos. Pero los mismos mandos que hacen claro un gráfico pueden hacerlo mentir: una marca en un eje y una diferencia pequeña parece enorme. A continuación: Gráficos engañosos, donde aprendes los trucos desde dentro.