Salta el contingut

Gràfics de barres i de línies

Exercici bar-and-line-annex.pdf · PDF

La partida s'acaba i el joc et dona dues pantalles. La primera és la taula de classificació: tots els jugadors ordenats per puntuació, el millor a dalt. La segona és la cronologia de la partida: què va passar minut a minut, quan van arribar les eliminacions, quan es va ensorrar el teu equip.

Dues pantalles, dues preguntes diferents. Qui és al capdamunt? i què ha passat al llarg del temps? Ningú no les confon: una taula de classificació dibuixada com una cronologia no tindria cap sentit.

Aquestes dues pantalles són els dos gràfics que faràs servir més en la vida: el gràfic de barres i el gràfic de línies. Aquesta lliçó va de construir-los tots dos a partir de games_clean, i de la pregunta que decideix quin dels dos necessites.

Què aprendràs

  • Orientar-te per la vista Explore de Superset i dir per a què serveix cadascuna de les quatre zones
  • Distingir una dimensió d'una mètrica, i relacionar-les amb el GROUP BY i l'agregat d'una consulta SQL
  • Construir un gràfic de barres ordenat (un top 10) i decidir què fer amb una categoria anomenada Unknown
  • Construir un gràfic de línies al llarg del temps i canviar-ne el gra temporal d'any a mes
  • Justificar barres o línies: les categories no tenen res entremig, el temps sí
  • Desactivar la trampa: per què una línia a través de categories s'inventa una tendència que no existeix

Dimensió i mètrica: les dues meitats de tot gràfic

A Percepció visual vas construir el teu primer gràfic, jocs per franja de preu. Al darrere hi ha una consulta que hauries pogut escriure a la unitat 1:

SELECT price_band, COUNT(*) FROM games_clean GROUP BY price_band;

Aquesta consulta té dues meitats, i també en té dues tot gràfic que construiràs mai.

Una dimensió és allò pel qual agrupes: la columna els valors de la qual es converteixen en les barres, els punts o els sectors.

Una mètrica és allò que calcules per a cada grup: un recompte, una mitjana, una suma.

Paraula En SQL A Superset A la taula de classificació
Dimensió La columna del GROUP BY X-axis, Dimensions Els noms dels jugadors
Mètrica L'agregat: COUNT, AVG, SUM Metrics La puntuació
flowchart LR
    D["<b>Dimensió</b><br>price_band<br>(els noms dels jugadors)"] --> Q["<b>GROUP BY</b> + agregat<br>Superset escriu el SQL"]
    M["<b>Mètrica</b><br>COUNT(*)<br>(la puntuació)"] --> Q
    Q --> C["<b>Gràfic</b><br>una barra per grup,<br>alçada de la barra = mètrica"]

Compte: dimensió i mètrica no són paraules de Superset

Són el GROUP BY i l'agregat, els mateixos que vas escriure a SQL Lab: grups. Superset t'escriu aquest SQL, i ho pots comprovar: obre el menú del gràfic (⋯, a dalt a la dreta) i tria View query. Com que has après SQL primer, pots llegir el que fa l'eina i comprovar-ho.

La vista Explore

Tot gràfic de Superset es construeix en una sola pantalla, la vista Explore. Obre el gràfic desat UT3 · Games by price band des de Charts i mira'l d'esquerra a dreta. Té quatre zones:

Zona Què hi ha Per a què serveix
Panell del dataset (esquerra) Les columnes i les mètriques desades de games_clean Arrossegar una columna a un control
Pestanya Data Tipus de gràfic, X-axis, Metrics, Dimensions, Filters, Row limit Decidir què es calcula
Pestanya Customize Títols, formats dels eixos, orientació, llegenda Decidir quin aspecte té
Gràfic i resultats La imatge i, a sota, les files que hi ha al darrere Comprovar els números

La pestanya Data és la consulta. La pestanya Customize és la pintura. Avui treballes gairebé només a Data; la pintura té la seva pròpia lliçó, Configurar gràfics a Superset.

El gràfic de barres: una taula de classificació

Un gràfic de barres dibuixa una barra per categoria. La longitud de la barra és la mètrica. Respon la pregunta quina categoria és més gran?

Un gràfic de barres és una taula de classificació. La dimensió és una llista de categories: valors sense res entremig, com editors, franges de preu o tipus de Pokémon. Cadascuna té una barra, totes les barres comencen a la mateixa línia, i compares on acaben. Això és posició sobre una escala comuna, rang 1 a la taula de Cleveland i McGill.

Aquí tens la taula de classificació dels editors de Steam: els deu que han publicat més jocs a games_clean.

%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#4051b5"}}}}%%
xychart-beta horizontal
    title "Top 10 d'editors per nombre de jocs a Steam"
    x-axis ["Big Fish Games", "SEGA", "Strategy First", "Ubisoft", "Square Enix", "Sekai Project", "Choice of Games", "Dagestan Technology", "1C Entertainment", "THQ Nordic"]
    y-axis "Jocs" 0 --> 300
    bar [284, 141, 129, 123, 95, 94, 92, 89, 85, 84]

Dues decisions han fet llegible aquest gràfic, i cap no té a veure amb el color:

Decisió Per què
Ordenat per valor Una taula de classificació és un rànquing. La resposta a "qui és primer?" és a dalt de tot
Barres horitzontals Els noms llargs com Dagestan Technology es llegeixen sense inclinar el cap

Un top 10 no és tota la taula

games_clean té 13,951 editors diferents. Aquests deu concentren 1,216 dels 26,685 jocs, menys del 5 %. Un top 10 respon "qui són els més grans?", no "qui té el mercat?". Recorda-ho a Sectors, mapa de calor i altres, on els mateixos deu editors formen un gràfic de sectors que menteix.

El jugador fantasma anomenat Unknown

Si construeixes aquest top 10 sense pensar-hi, la cinquena barra és un editor anomenat Unknown, amb 120 jocs.

Unknown és un editor? No. És l'etiqueta que vas posar als jocs sense editor quan vas netejar les dades a la unitat 2. En una taula de classificació és un jugador fantasma: 120 jocs que no pertanyen a ningú en concret, plantats en cinquena posició.

Tens dues opcions honestes:

Opció Quan
Filtrar-lo La pregunta va d'editors reals. Unknown no ho és
Mantenir-lo i dir-ho La pregunta va de qualitat de les dades: "120 jocs no tenen editor conegut"

El que no pots fer és deixar-lo allà en silenci i fer pensar al lector que existeix una empresa anomenada Unknown.

Compte: Row limit 10 no dona deu files aleatòries

En un gràfic de barres, Superset ordena la consulta per la mètrica, de més gran a més petita, i després talla: obtens els deu primers. Però el tall passa després del filtre. Treu Unknown i hi entra un onzè editor: THQ Nordic, amb 84 jocs.

El gràfic de línies: una cronologia

Un gràfic de línies situa un punt per a cada moment del temps i uneix els punts amb una línia. Respon la pregunta com ha canviat això al llarg del temps?

Un gràfic de línies és la cronologia de la partida. La seva dimensió no és una llista de categories. És el temps, i el temps té dues propietats que les categories no tenen: té un ordre i és continu. Entre el 2016 i el 2018 hi ha un 2017.

Això és el que vol dir la línia. Unir dos punts li diu a l'ull: aquests estan connectats, llegeix el pendent. Pujada pronunciada, creixement ràpid. Plana, no ha passat res.

Aquí tens els jocs publicats a Steam cada any, a partir de la columna release_date:

%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#4051b5"}}}}%%
xychart-beta
    title "Jocs publicats a Steam per any"
    x-axis ["2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018"]
    y-axis "Jocs" 0 --> 9000
    line [53, 58, 112, 143, 183, 334, 340, 364, 426, 556, 1352, 2544, 4503, 6871, 8845]

Llegeix el pendent. Deu anys de gairebé res: 53 jocs el 2004, 556 el 2013. Després la línia s'enlaira: 1,352 el 2014 i 8,845 el 2018.

Per què salta el 2014?

Valve, l'empresa darrere de Steam, va obrir la botiga als desenvolupadors petits. Steam Greenlight es va llançar el 30 d'agost del 2012 i deixava que la comunitat votés els jocs que volia veure a la botiga. El 13 de juny del 2017 el va substituir Steam Direct, en què un desenvolupador paga una taxa i publica. Un gràfic et mostra que ha canviat alguna cosa. Descobrir per què és feina teva.

Compte: un joc no té data

Un joc de games_clean no té release_date. La consulta retorna una 16a fila per a ell, amb l'any buit i un recompte d'1. No és un punt de la línia: un joc sense data no té lloc en un eix de temps.

Gra temporal: el zoom de la cronologia

Una columna de data conté dies. Per dibuixar una línia has de decidir com agrupar aquests dies: per any, per trimestre, per mes.

El gra temporal (time grain) és la mida del pas de temps a l'eix X: cada punt de la línia suma tot el que ha passat dins d'un pas.

Canvia el gra d'any a mes i les mateixes dades dibuixen una imatge diferent:

Gràfic de línies dels jocs publicats a Steam cada mes del 2004 al 2018. La línia es manté prop de zero fins al 2013, puja amb força des del 2014 i fa zigzag el 2018, amb un màxim etiquetat de 853 jocs el març del 2018.

La línia anual deia "ha explotat". La línia mensual mostra quan, dins de cada any. El punt més alt és el març del 2018, amb 853 jocs, seguit del maig del 2018 (796), el novembre del 2018 (790) i l'octubre del 2017 (768).

Gra Punts a la línia Què pots llegir
Any 15 La gran història: inici lent, explosió després del 2013
Mes 180 El detall: quins mesos hi ha més moviment, on és el màxim

Compte: el gràfic anual i el mensual no es contradiuen

Mateixes files, mateix tipus de gràfic, gra diferent. Els 853 del març del 2018 formen part dels 8,845 del 2018. El gra forma part de la pregunta, així que tria'l a consciència i digues-ho al títol: "per any", "per mes".

Compte: una línia que cau al final

Quan una línia baixa en l'últim punt, comprova primer si l'últim període és complet. Si les dades s'aturen a mig any, aquell any sembla un col·lapse i només és un recompte inacabat. Aquí les dades acaben el 31 de desembre del 2018, l'últim any és complet, i la línia no cau.

Barres o línies? Una pregunta ho decideix

El tipus de gràfic segueix la dimensió. Pregunta't una sola cosa: hi ha alguna cosa entre dos valors veïns?

flowchart TB
    Q{"Què hi ha a l'eix X?"}
    Q -- "Categories:<br>editors, franges, tipus" --> B["<b>Gràfic de barres</b><br>(la taula de classificació)<br>compara alçades"]
    Q -- "Temps:<br>dies, mesos, anys" --> L["<b>Gràfic de línies</b><br>(la cronologia)<br>llegeix el pendent"]
Pregunta Gràfic Per què
Jocs per owners_tier? Barres Tres categories. No hi ha res entre Mid i Hit
Preu mitjà per any de publicació? Línies El temps és continu i ordenat: el pendent significa alguna cosa
Jocs per editor, top 10? Barres Deu empreses. Cap empresa no és "entre" dues d'altres

Què passa si t'ho saltes? Aquí tens la taula de classificació d'editors dibuixada com una línia. Aquest gràfic és incorrecte a propòsit.

%%{init: {"themeVariables": {"xyChart": {"plotColorPalette": "#4051b5"}}}}%%
xychart-beta
    title "Incorrecte a propòsit: una línia a través de categories"
    x-axis ["Big Fish", "SEGA", "Strategy First", "Ubisoft", "Square Enix", "Sekai Project"]
    y-axis "Jocs" 0 --> 300
    line [284, 141, 129, 123, 95, 94]

L'ull hi llegeix una caiguda dramàtica i després un declivi lent. Un declivi de què? No hi ha cap camí entre Big Fish Games i SEGA. A mig camí entre elles no hi ha cap empresa amb 212 jocs. La línia connecta coses que no estan connectades, i la "tendència" només existeix per l'ordre que algú ha triat per als noms.

Compte: una línia no queda més professional

Una línia li diu a l'ull: aquests punts estan connectats, llegeix el pendent. A la cronologia això és cert. A la taula de classificació és mentida. Categories, barres. Temps, línies.

Prova-ho: la taula de classificació i la cronologia

Els dos gràfics fan servir el dataset games_clean (mira Recursos per a les dades).

Gràfic 2 — Top 10 d'editors. Quins editors han publicat més jocs a Steam?

Pas Fes això a Superset Hauries de veure
1 Charts, + Chart, dataset games_clean, tipus de gràfic Bar Chart, Create new chart Un editor de gràfics buit
2 X-axis: publisher. Metrics: COUNT(*). Row limit: 10. Create chart Deu barres en ordre alfabètic
3 X-Axis Sort By: COUNT(*). Desmarca X-Axis Sort Ascending. Update chart La barra més alta a l'esquerra. Unknown és cinquè, amb 120
4 Filters: publisher, operador Not equal to (≠), valor Unknown, Save. Update chart Deu editors reals. THQ Nordic hi ha entrat
5 Pestanya Customize, Bar orientation: Horizontal Noms llegibles. Els controls d'ordenació ara es diuen Y-Axis Sort By i Y-Axis Sort Ascending
6 Save, nom UT3 · Top 10 publishers El gràfic és a la llista de Charts

El gràfic ha de coincidir amb aquesta consulta:

SELECT publisher, COUNT(*) AS n FROM games_clean
WHERE publisher <> 'Unknown'
GROUP BY publisher ORDER BY n DESC LIMIT 10;
Editor Jocs Editor Jocs
Big Fish Games 284 Sekai Project 94
SEGA 141 Choice of Games 92
Strategy First 129 Dagestan Technology 89
Ubisoft 123 1C Entertainment 85
Square Enix 95 THQ Nordic 84

Gràfic 3 — Jocs publicats per any. Com ha canviat el nombre de publicacions entre el 2004 i el 2018?

Pas Fes això a Superset Hauries de veure
1 Gràfic nou sobre games_clean, tipus de gràfic Line Chart Un editor de gràfics buit
2 X-axis: release_date. Time Grain: Year. Metrics: COUNT(*). Create chart Una línia que puja cap a la dreta, del 2004 al 2018
3 Save, nom UT3 · Games released per year El gràfic és a la llista de Charts
4 Canvia Time Grain a Month. Update chart. Passa el cursor per trobar el punt més alt Una línia en zigzag amb el màxim el març del 2018
5 Save, després Save as..., nom UT3 · Games released per month Dos gràfics desats: el de l'any no se sobreescriu

La línia no dibuixa punts per defecte: marca Customize, Marker si vols veure els 15 punts. Quan hi passes el cursor, el quadre arrodoneix el valor (8.85k per al 2018); el número exacte és a Results, sota el gràfic.

Si alguna cosa no quadra
  • Time Grain no hi és o està en gris. L'eix X no és una columna de data. Usa release_date, no release_year.
  • Un gràfic de barres amb milers de barres fines. Row limit s'ha quedat al valor per defecte (10,000). Posa-hi 10.
  • La línia és un sol punt. release_date ha anat a Dimensions en lloc d'a X-axis.
  • El valor de filtre Unknown no troba res. Distingeix majúscules: U majúscula.
  • Save ha sobreescrit el gràfic de l'any amb la versió del mes. Torna a posar el gra a Year i desa de nou; després fes servir Save as... per al del mes.
Per anar més enllà: una altra mètrica sobre la mateixa cronologia

De nou amb el gra anual, substitueix la mètrica: Metrics, pestanya Simple, columna price, agregat AVG. Els jocs van fer-se més cars a mesura que van ser més nombrosos?

No. El preu mitjà arriba al màxim el 2013 amb 11.21 i baixa cada any després, fins a 7.12 el 2018. Més jocs, jocs més barats. Tingues en compte que els jocs gratuïts compten com a 0 en aquesta mitjana.

Idees clau

  • Tot gràfic té una dimensió (allò pel qual agrupes, la columna del GROUP BY) i una mètrica (allò que calcules, l'agregat). Superset escriu el SQL; View query te'l mostra.
  • La vista Explore té quatre zones: panell del dataset, pestanya Data (què es calcula), pestanya Customize (quin aspecte té), gràfic i resultats.
  • Un gràfic de barres compara categories: és la taula de classificació. Ordena'l per valor, i fes-lo horitzontal quan els noms són llargs.
  • Un gràfic de línies mostra el canvi al llarg del temps: és la cronologia. La línia diu "aquests punts estan connectats, llegeix el pendent".
  • El gra temporal és el zoom de la cronologia. Any i mes mostren les mateixes files amb una pregunta diferent.
  • Una línia a través de categories s'inventa una tendència. Una etiqueta com Unknown no és una categoria real: filtra-la o explica-la.

Comprovació ràpida

1. A la consulta SELECT price_band, COUNT(*) FROM games_clean GROUP BY price_band, quina part és la dimensió?
  • COUNT(*)
  • price_band
  • games_clean
  • SELECT

La dimensió és la columna per la qual agrupes: els seus valors es converteixen en les barres. COUNT(*) és la mètrica, el número calculat per a cada grup. games_clean és el dataset.

2. Quina zona de la vista Explore decideix què es calcula?
  • El panell del dataset
  • La pestanya Data
  • La pestanya Customize
  • La taula de resultats sota el gràfic

La pestanya Data conté X-axis, Metrics, Filters i Row limit: és la consulta. La pestanya Customize canvia l'aspecte del gràfic, i la taula de resultats només mostra les files que hi ha darrere de la imatge.

3. Per què un gràfic de línies és l'elecció correcta per als jocs publicats per any?
  • Perquè les línies queden més professionals que les barres
  • Perquè hi ha més de deu valors
  • Perquè el temps és ordenat i continu, i per això el pendent entre dos punts significa alguna cosa
  • Perquè un gràfic de barres no pot fer servir una columna de data

Una línia diu "aquests punts estan connectats". Per al temps això és cert: entre el 2016 i el 2018 hi ha un 2017, i el pendent mostra la rapidesa amb què han crescut les publicacions. El nombre de valors no hi té res a veure.

4. Canvies el Time Grain d'Year a Month. Què canvia?
  • Les files del dataset: se'n descarten alguns jocs
  • La mètrica: es converteix en una mitjana
  • La mida del pas de temps: ara cada punt suma un mes en lloc d'un any
  • El tipus de gràfic: es converteix en un gràfic de barres

El gra temporal és el zoom de la cronologia. Mateixes files, mateixa mètrica, mateix tipus de gràfic: només canvia el pas. Per això els 853 jocs del març del 2018 formen part dels 8,845 de l'any.

5. El teu gràfic del top 10 d'editors mostra Unknown en cinquena posició amb 120 jocs. Què és?
  • Un editor petit que casualment es diu Unknown
  • Un error de Superset que es resol recarregant
  • L'etiqueta que es va donar a la unitat 2 als jocs sense editor
  • La suma de tots els editors fora del top 10

Unknown agrupa 120 jocs sense editor conegut sota una etiqueta. No és una empresa. Filtra-la quan la pregunta va d'editors reals, o mantén-la i digues clarament què és.

6. Després de filtrar Unknown amb Row limit 10, el gràfic encara té deu barres. Per què?
  • Superset s'inventa un desè editor per omplir el buit
  • El límit s'aplica després del filtre, així que l'onzè editor (THQ Nordic) puja
  • El filtre no ha funcionat
  • Row limit compta jocs, no editors

Superset ordena per la mètrica, de més gran a més petita, i després talla a deu. El tall passa després del filtre, així que treure una fila del capdamunt deixa entrar la següent: THQ Nordic, amb 84 jocs.

7. Algú dibuixa el nombre de Pokémon per tipus (water, normal, grass...) com un gràfic de línies. Què hi ha de malament?
  • Res: qualsevol gràfic amb números pot ser una línia
  • La línia hauria de ser més gruixuda
  • Els tipus són categories amb res entremig, així que la línia mostra una tendència que no existeix
  • Els gràfics de línies necessiten almenys 100 punts

No hi ha cap camí de water a normal ni cap tipus a mig camí entre ells. El pendent només depèn de l'ordre que algú ha triat per als noms. Categories, barres. Temps, línies.

8. Tens una taula d'alumnes amb enrolment_date i study_programme. Tria les dues opcions correctes.
  • Matrícules per programa: Bar Chart, dimensió study_programme, mètrica COUNT(*)
  • Matrícules mes a mes: Line Chart, X-axis enrolment_date amb gra temporal Month, mètrica COUNT(*)
  • Matrícules per programa: Line Chart, perquè els programes tenen un ordre alfabètic
  • Matrícules mes a mes: Bar Chart amb dimensió study_programme

Els programes són categories: un gràfic de barres, sense gra temporal. Els mesos són temps: un gràfic de línies amb el gra establert a Month. L'ordre alfabètic no és un ordre real (no hi ha res entre dos programes), i study_programme no diu res sobre quan es van matricular els alumnes.

Una barra per categoria funciona quan les categories ja existeixen. Però què passa si l'eix X és un número amb centenars de valors diferents, com un preu? Una barra per cada preu exacte seria il·legible. Aquesta és la feina del gràfic següent: Histograma i diagrama de dispersió.