Salta el contingut

Fonts de dades

Exercici data-sources-annex.pdf · PDF

Els quatre conjunts de dades d'Anscombe et van arribar a la pantalla a punt per usar: nets, minúsculs, ja en una taula. Algú te'ls va posar a la mà.

Ningú no ho farà a la feina. El teu cap et dirà "les vendes són a la base de dades", o et reenviarà un full de càlcul, o t'assenyalarà un lloc web. Les dades hi són. Només que són en un altre lloc, amb una forma determinada, darrere d'una porta. Abans de poder mirar les dades, has d'anar a buscar-les.

Aquesta és l'etapa 1 del cicle de vida de les dades: obtenir. Al joc de fabricació, és cultivar i saquejar. I tots els jugadors coneixen la primera pregunta del saqueig: on és el botí, i què necessito per entrar-hi?

Què aprendràs

  • Distingir les dades estructurades, semiestructurades i no estructurades, amb un exemple de cadascuna
  • Reconèixer sis tipus de font de dades i dir què necessites per arribar a cadascuna
  • Explicar per què un fitxer CSV no és un fitxer d'Excel, i què és un separador
  • Dir què són les dades obertes, i per què "lliure" no vol dir "sense normes"
  • Descriure per a què serveix Apache Superset, i d'on ve
  • Evitar la trampa: oblidar que una font pot demanar credencials abans de deixar-te entrar

Tres formes de dades

Una font de dades és qualsevol lloc d'on provenen les dades: una base de dades, un fitxer, un servei web.

Abans de preguntar on són les dades, pregunta quina forma tenen. Aquí tens els mateixos dos punts del conjunt I d'Anscombe, emmagatzemats de tres maneres:

dataset,x,y
I,10,8.04
I,8,6.95
[
  {"dataset": "I", "x": 10, "y": 8.04},
  {"dataset": "I", "x": 8, "y": 6.95}
]
SELECT * FROM anscombe
WHERE dataset = 'I'
LIMIT 2;

Les mateixes dades, tres embolcalls. Els embolcalls es diferencien en com d'estrictes són amb la forma:

Forma Què vol dir Al joc Exemples
Estructurada Files i columnes fixes. Cada fila té els mateixos camps, en el mateix ordre. La quadrícula de l'inventari: totes les caselles tenen la mateixa forma Una taula de base de dades, un fitxer CSV net
Semiestructurada Cada valor té una etiqueta, però la forma pot canviar d'un registre al següent. Una bossa de botí: cada objecte porta etiqueta, però no hi ha dues bosses amb el mateix contingut JSON, XML
No estructurada Cap camp. Una persona ho entén; un programa no pot simplement llegir "la columna del preu". Una captura de pantalla de la teva base Fotos, àudio, un PDF d'una carta, un xat de WhatsApp

Per què el JSON només és semiestructurat? Perquè un registre pot tenir un camp que el següent no té, i ningú no es queixa:

[
  {"pokemon": "bulbasaur", "type_1": "grass", "type_2": "poison"},
  {"pokemon": "charmander", "type_1": "fire"}
]

En una taula, la segona fila hauria de tenir alguna cosa a la columna type_2. En JSON, simplement l'etiqueta no hi és.

Compte: el JSON no és no estructurat

La gent veu claus i text niat i ho anomena "no estructurat". No ho és: cada valor porta una etiqueta ("type_1": "fire"), de manera que un programa el pot trobar. No estructurat vol dir cap etiqueta en absolut, com una foto. El JSON és a mig camí.

Els gràfics necessiten files i columnes. Per això aquest curs treballa amb dades estructurades, i quan una font et dona una altra cosa, part de la feina és convertir-la primer en una taula.

Sis llocs on viuen les dades

Ara, el mapa del saqueig. Aquests són els sis tipus de font que trobaràs en aquest mòdul i en gairebé qualsevol feina. L'última columna és la que més importa.

Font Forma Exemple quotidià Al joc Què necessites per arribar-hi
Base de dades relacional Estructurada Els expedients de l'alumnat d'un centre; les comandes d'una botiga Una cambra cuirassada en un servidor Host, port, nom de la base de dades, usuari i contrasenya, i un driver
Fitxer CSV Estructurada Una exportació d'una aplicació bancària; el quartet d'Anscombe Un objecte al terra Només el fitxer. Conèixer-ne el separador i la codificació.
Fitxer Excel Estructurada, més o menys El full de càlcul que et envia el cap per correu Un cofre que algú ha empaquetat a mà Només el fitxer. Triar el full correcte; compte amb les cel·les combinades.
Fitxer JSON Semiestructurada El que descarrega una aplicació del temps Una bossa de botí El fitxer o la seva adreça web. Saber com està niat.
API Normalment JSON Spotify, un horari d'autobusos, un servei meteorològic Un comerciant: preguntes, i et respon Una adreça web, sovint una clau d'API. Respectar el límit de peticions.
Portal de dades obertes Qualsevol de les anteriors Un web de dades d'una administració pública Un cofre públic a la plaça del poble Res: públic a propòsit. Comprova la llicència.

Sis termes nous en una taula. Un per un:

  • Una base de dades relacional emmagatzema les dades en taules que es poden vincular entre elles. S'executa com a programa en un servidor, com ara PostgreSQL o MySQL, i hi parles en un llenguatge anomenat SQL. Escriuràs el teu primer SQL a la pàgina següent.
  • El host, el port i el driver són l'adreça, la porta i el traductor que necessites per arribar a una base de dades. Tenen una pàgina sencera: Connectar Superset a una base de dades.
  • Una API (application programming interface, interfície de programació d'aplicacions) és una adreça web que respon amb dades en lloc d'una pàgina web. L'aplicació del temps no guarda la previsió: la demana a una API.
  • Una clau d'API és una contrasenya per a programes: un codi llarg que et dona el servei perquè sàpiga qui pregunta.
  • Un límit de peticions (rate limit) és el nombre màxim de preguntes que una API accepta en un temps determinat. Si preguntes massa sovint, deixa de respondre durant un temps.
  • Una llicència és el text que diu què pots fer amb unes dades que algú altre ha publicat.

Qui demana credencials?

Les credencials són el que mostres per demostrar qui ets: normalment un nom d'usuari i una contrasenya, o una clau d'API.

flowchart LR
    Q{"La font et demana<br>qui ets?"}
    Q -- "sempre" --> DB["<b>Base de dades relacional</b><br>usuari + contrasenya"]
    Q -- "normalment" --> API["<b>API</b><br>clau d'API"]
    Q -- "mai" --> F["<b>Fitxers</b><br>CSV, Excel, JSON:<br>si tens el fitxer, hi ets dins"]
    Q -- "mai" --> OD["<b>Portal de dades obertes</b><br>públic a propòsit"]

Una base de dades sempre ho demana. Una API normalment ho demana. Un fitxer mai ho demana: qui té el fitxer té les dades. Això és còmode, i també és per això que no envies per correu un fitxer amb dades personals de clients tan alegrement com un mem.

Compte: \"tinc l'adreça, per tant hi sóc dins\"

Saber on és una base de dades no l'obre. Necessites la seva adreça i un compte i el permís per llegir les taules que vols. L'accés és la part que la gent oblida, i és el primer que falla als projectes reals.

CSV no és Excel

Tots dos s'obren en un programa de fulls de càlcul amb un doble clic. Aquí és on comença la confusió.

Un fitxer CSV (comma-separated values, valors separats per comes) és una taula escrita com a text pla: una línia per fila, amb un caràcter entre un valor i el següent.

Aquest caràcter és el separador (també anomenat delimitador). La primera línia sol contenir els noms de les columnes: és la capçalera. Aquest és el començament real de pokemon_df.csv, el conjunt de dades que fem servir en aquesta unitat, abreujat a les vuit primeres columnes:

id,pokemon,species_id,height,weight,base_experience,type_1,type_2
1,bulbasaur,1,0.7,6.9,64,grass,poison
2,ivysaur,2,1,13,142,grass,poison

Res d'amagat. Allò que veus és tot el fitxer.

Un fitxer d'Excel és un altre animal:

CSV (.csv) Excel (.xlsx)
Què és realment Text pla Un paquet ZIP amb diversos fitxers XML a dins
Obre'l en un editor de text Pots llegir cada valor Símbols il·legibles
Fulls Una taula Molts fulls en un sol fitxer
Formats, colors, fórmules Cap. Només valors. Tots
Qui el pot llegir Gairebé tots els programes que s'han escrit mai Programes que entenen el format
Sorpresa típica El separador equivocat Cel·les combinades, títols per damunt de la taula, totals al final

Comprova-ho tu mateix

Obre un fitxer .csv i un fitxer .xlsx en un editor de text pla, no en un full de càlcul. El CSV es llegeix línia per línia. El fitxer d'Excel és un mur de símbols, perquè estàs mirant un paquet comprimit.

La trampa del separador

La "C" de CSV promet comes. No sempre compleix la promesa.

A Espanya, com a gran part d'Europa, la marca decimal és una coma: escrivim 6,9 kg. Si el separador també fos una coma, 6,9 semblaria dos valors. Per això els fitxers fets en aquests països sovint fan servir un punt i coma com a separador:

pokemon,height,weight
bulbasaur,0.7,6.9
pokemon;height;weight
bulbasaur;0,7;6,9

Tots dos són fitxers CSV vàlids. Una eina que n'espera un i rep l'altre llegirà cada línia com a una sola columna, o partirà els decimals en dos. El fitxer està bé. A l'eina li han dit el contrari.

Hi ha una segona opció amagada: la codificació, la regla que converteix les lletres en els bytes emmagatzemats al fitxer. Quan una eina l'endevina malament, Calvià apareix com CalviÃ. Si ho veus, les dades no estan trencades: la codificació és errònia.

Així doncs, un hàbit per a tota la vida: abans de carregar un fitxer en cap lloc, obre'l en un editor de text i mira les primeres línies. Estàs comprovant el separador, la marca decimal i la capçalera. Els formats que no quadren són un problema de la UT2, però avui ja els detectes.

Dades obertes: lliures, no sense llei

Les dades obertes són dades que una organització publica perquè qualsevol les pugui descarregar, reutilitzar i compartir.

Les administracions públiques publiquen dades obertes: pressupostos, línies d'autobús, platges, matrícula escolar. La comunitat de dades també. Dues fonts que faràs servir aquest any:

Font Qui la publica Què hi trobes
Portal de dades obertes del GOIB El Govern de les Illes Balears Turisme, transport, medi ambient, educació
TidyTuesday Una comunitat voluntària de dades Un conjunt de dades públic nou cada setmana des del 2018: música, jocs, pel·lícules, esport

El nostre conjunt de dades de Pokémon ve de TidyTuesday. Hi ha més fonts, amb enllaços directes a cada fitxer de classe, a la pàgina de Recursos.

Compte: obert no vol dir \"fes el que vulguis\"

Les dades obertes són lliures d'usar, però continuen anant acompanyades d'una llicència. Una de molt comuna és CC BY (Creative Commons Attribution, reconeixement): pots copiar les dades, modificar-les i fins i tot usar-les comercialment, sempre que citis la font. Així que, abans d'usar un conjunt de dades al teu projecte, troba'n la llicència, i escriu d'on han sortit les dades a l'informe.

Coneix Apache Superset

Sis tipus de font, tres formes, separadors, credencials. Necessites una eina que pugui obrir aquestes portes i mostrar-te què hi ha al darrere.

Apache Superset és una aplicació web per explorar dades: es connecta a bases de dades, et deixa fer-los preguntes en SQL, i converteix les respostes en gràfics i quadres de comandament (dashboards).

Al joc, Superset és el client: la finestra per la qual mires. Recorda-ho per a la pàgina següent, perquè té una conseqüència: Superset no emmagatzema les dades. Es connecta a la base de dades on viuen, pregunta i dibuixa.

flowchart LR
    C["<b>Connectar</b><br>a una base de dades"] --> Q["<b>Consulta</b><br>pregunta en SQL"]
    Q --> V["<b>Gràfic</b><br>dibuixa la resposta"]
    V --> D["<b>Quadre de comandament</b><br>diversos gràfics<br>en una pantalla"]

La seva història és breu. El 2015, en un hackató (un esdeveniment on els programadors construeixen un prototip en pocs dies) dins d'Airbnb, un enginyer anomenat Maxime Beauchemin va crear una eina per tallar i representar ràpidament les dades de l'empresa. Ja havia creat una altra eina de dades coneguda, Apache Airflow. Airbnb va alliberar la nova eina com a codi obert: el seu codi és públic, i qualsevol el pot usar, estudiar i millorar gratuïtament.

Any Què va passar
2015 Neix com a projecte d'un hackató a Airbnb, de la mà de Maxime Beauchemin
2017 Entra a la incubadora de l'Apache Software Foundation, una organització sense ànim de lucre que s'ocupa dels projectes de codi obert
2021 El 21 de gener, Apache anuncia Superset com a projecte de primer nivell (top-level project): s'ha graduat de la incubadora

És l'eina principal d'aquest mòdul. Cap al final d'aquesta unitat també coneixeràs el seu rival comercial més conegut, Power BI de Microsoft, i compararàs com obtenen les dades les dues eines.

Prova-ho: una caça de dades obertes

Necessites un navegador i un editor de text. Cap compte, cap contrasenya.

Pas Fes això Hauries de veure
1 Ves a la pàgina de Recursos i descarrega pokemon_df.csv Un fitxer d'uns 200 KB
2 Obre'l en un editor de text, no en un full de càlcul Una línia de capçalera, i després una línia per Pokémon
3 Troba el separador i la marca decimal Una coma, i un punt decimal
4 Compta les columnes de la capçalera 22
5 Mira el número de l'última línia de text a l'editor 950: una capçalera i 949 Pokémon
6 Troba charmander i llegeix-ne el valor de type_2 Les dues lletres NA: la manera que té aquest fitxer de dir "sense valor"

Ara fes el mateix amb un conjunt de dades que triïs tu, del portal del GOIB o de TidyTuesday, i omple aquesta fitxa:

Camp La teva resposta
Títol i adreça web
Formats que ofereix CSV, JSON, XLSX...
Forma Estructurada o semiestructurada
Separador i marca decimal
Files × columnes, aproximadament
Llicència
Una pregunta a què podria respondre Per exemple: "Les cançons més populars són també les més ballables?"

Guarda aquesta última línia. Una bona pregunta és l'inici de cada gràfic que dibuixaràs aquest any.

Idees clau

  • Les dades vénen en tres formes: estructurades (files i columnes fixes), semiestructurades (etiquetades, flexibles, com el JSON) i no estructurades (sense camps, com una foto).
  • Sis tipus de font de dades: base de dades relacional, CSV, Excel, JSON, API i portal de dades obertes. Per a cadascuna, pregunta't: què necessito per entrar-hi?
  • Credencials: una base de dades sempre les demana, una API normalment, un fitxer mai.
  • Un CSV és text pla amb un separador; un fitxer d'Excel és un paquet ZIP d'XML. Obre els fitxers en un editor de text abans de carregar-los, i comprova el separador, la marca decimal i la capçalera.
  • Les dades obertes es poden reutilitzar lliurement, amb una llicència. Amb CC BY, has de citar la font.
  • Apache Superset es connecta a bases de dades, les consulta en SQL i dibuixa gràfics i quadres de comandament. Va néixer a Airbnb el 2015 i és un projecte de primer nivell d'Apache des del 2021.

Comprovació ràpida

1. Un fitxer JSON llista Pokémon. Alguns registres tenen un camp type_2 i d'altres no. Quina forma tenen aquestes dades?
  • Estructurada
  • Semiestructurada
  • No estructurada
  • Relacional

Cada valor té una etiqueta, però no tots els registres tenen els mateixos camps: això és semiestructurat. Les dades estructurades obligarien totes les files a tenir les mateixes columnes; les no estructurades no tindrien cap etiqueta.

2. Quin tipus de font demana sempre credencials abans de deixar-te entrar?
  • Un fitxer CSV
  • Una base de dades relacional
  • Un portal de dades obertes
  • Un fitxer d'Excel

Una base de dades relacional sempre vol un usuari i una contrasenya, a més de host, port, nom de la base de dades i un driver. Els fitxers mai no ho demanen (qui té el fitxer té les dades), i els portals de dades obertes són públics a propòsit.

3. Obres un fitxer en un editor de text i veus símbols il·legibles en lloc de files i valors. Quin fitxer és més probable que sigui?
  • Un fitxer CSV amb separador punt i coma
  • Un fitxer JSON
  • Un fitxer .xlsx d'Excel
  • Un fitxer CSV amb la codificació equivocada

Un fitxer .xlsx és un paquet ZIP de fitxers XML, així que un editor de text mostra un galimaties comprimit. El CSV i el JSON són text pla: llegibles, fins i tot quan el separador o la codificació no són els que esperaves.

4. Carregues un CSV d'un portal públic espanyol i tota la taula arriba com una sola columna. Quina n'és la causa més probable?
  • El fitxer està malmès i s'ha de tornar a descarregar
  • El fitxer té massa files
  • El fitxer fa servir un punt i coma com a separador i l'eina esperava una coma
  • El fitxer necessita una contrasenya

Allà on la marca decimal és una coma, els fitxers sovint fan servir un separador punt i coma. Una eina a qui han dit que talli per comes no en troba cap entre els valors, així que cada línia es queda d'una peça. El fitxer està bé: canvia l'opció del separador.

5. Un conjunt de dades es publica amb una llicència CC BY. Què et demana?
  • Res: les dades obertes no tenen normes
  • Pagar abans d'usar les dades comercialment
  • Citar la font quan facis servir les dades
  • Demanar permís per escrit cada vegada

Obert vol dir lliure per reutilitzar, no sense llei. CC BY et permet copiar, modificar i fins i tot vendre obres basades en les dades, amb una sola condició: el reconeixement, dir d'on han sortit les dades.

6. Què fa Apache Superset?
  • Emmagatzema les teves dades perquè altres programes les puguin llegir
  • Es connecta a bases de dades, els fa preguntes en SQL i dibuixa les respostes com a gràfics i quadres de comandament
  • Converteix fitxers d'Excel en fitxers CSV
  • Publica dades obertes per a les administracions públiques

Superset és el client: es connecta, consulta i dibuixa. Les dades es queden a la base de dades. Va començar a Airbnb el 2015 (Maxime Beauchemin) i és de codi obert.

7. Un gimnàs vol una pantalla que mostri quanta gent entrena cada hora. Les dades són a la base de dades MySQL de l'aplicació de reserves i en un fitxer d'Excel setmanal de recepció. Tria les dues afirmacions que són certes.
  • Per a la base de dades MySQL necessites host, port, nom de la base de dades, usuari, contrasenya i un driver
  • Per al fitxer d'Excel necessites una clau d'API
  • Per al fitxer d'Excel només necessites el fitxer, però has de comprovar quin full conté les dades
  • La base de dades MySQL és semiestructurada, així que no es pot convertir en un gràfic

Una base de dades relacional (MySQL n'és una) és estructurada i sempre demana el conjunt complet de dades d'accés. Un fitxer d'Excel no demana res més que el fitxer: la teva feina allà és triar el full correcte i vigilar les cel·les combinades. Les claus d'API són de les API.

Ja saps on viuen les dades i què demana cada lloc. Ara toca obrir la porta més difícil de les sis, la base de dades: Connectar Superset a una base de dades.