Fuentes de datos¶
Ejercicio data-sources-annex.pdf · PDF
Los cuatro conjuntos de datos de Anscombe llegaron a tu pantalla listos para usar: limpios, diminutos, ya en una tabla. Alguien te los entregó.
En el trabajo nadie hará eso. Tu jefe te dirá "las ventas están en la base de datos", o te reenviará una hoja de cálculo, o señalará un sitio web. Los datos existen. Simplemente están en otro sitio, con alguna forma, detrás de alguna puerta. Antes de poder mirar los datos, tienes que ir a buscarlos.
Esa es la etapa 1 del ciclo de vida de los datos: obtener. En el juego de crafteo, es cultivar y saquear. Y todo jugador conoce la primera pregunta del saqueo: ¿dónde está el botín y qué necesito para entrar?
Qué aprenderás
- Distinguir los datos estructurados, semiestructurados y no estructurados, con un ejemplo de cada uno
- Reconocer seis tipos de fuente de datos y decir qué necesitas para acceder a cada una
- Explicar por qué un archivo CSV no es un archivo de Excel y qué es un separador
- Decir qué son los datos abiertos y por qué "libre" no significa "sin reglas"
- Describir para qué sirve Apache Superset y de dónde viene
- Evitar la trampa: olvidar que una fuente puede pedir credenciales antes de dejarte entrar
Tres formas de datos¶
Una fuente de datos es cualquier lugar de donde provienen los datos: una base de datos, un archivo, un servicio web.
Antes de preguntar dónde están los datos, pregunta qué forma tienen. Aquí tienes los mismos dos puntos del conjunto I de Anscombe, guardados de tres maneras:
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;
Los mismos datos, tres envoltorios. Los envoltorios se diferencian en lo estrictos que son con la forma:
| Forma | Qué significa | En el juego | Ejemplos |
|---|---|---|---|
| Estructurada | Filas y columnas fijas. Todas las filas tienen los mismos campos, en el mismo orden. | La cuadrícula del inventario: todas las casillas tienen la misma forma | Una tabla de base de datos, un archivo CSV limpio |
| Semiestructurada | Cada valor tiene una etiqueta, pero la forma puede cambiar de un registro al siguiente. | Una bolsa de botín: cada objeto está etiquetado, pero no hay dos bolsas con lo mismo | JSON, XML |
| No estructurada | Sin campos. Una persona la entiende; un programa no puede simplemente leer "la columna del precio". | Una captura de pantalla de tu base | Fotos, audio, un PDF con una carta, un chat de WhatsApp |
¿Por qué JSON es solo semiestructurado? Porque un registro puede tener un campo que al siguiente le falta, y nadie protesta:
[
{"pokemon": "bulbasaur", "type_1": "grass", "type_2": "poison"},
{"pokemon": "charmander", "type_1": "fire"}
]
En una tabla, la segunda fila seguiría necesitando algo en la columna type_2. En JSON, la etiqueta simplemente no está.
Cuidado: JSON no es no estructurado
La gente ve llaves y texto anidado y lo llama "no estructurado". No lo es: cada valor lleva una etiqueta ("type_1": "fire"), así que un programa puede encontrarlo. No estructurado significa ninguna etiqueta, como una foto. JSON está en el punto medio.
Los gráficos necesitan filas y columnas. Por eso este curso trabaja con datos estructurados, y cuando una fuente te da otra cosa, parte del trabajo es convertirla primero en una tabla.
Seis lugares donde viven los datos¶
Ahora, el mapa del saqueo. Estos son los seis tipos de fuente que encontrarás en este módulo y en casi cualquier trabajo. La última columna es la que más importa.
| Fuente | Forma | Ejemplo cotidiano | En el juego | Qué necesitas para acceder |
|---|---|---|---|---|
| Base de datos relacional | Estructurada | Los expedientes de un centro educativo; los pedidos de una tienda | Una cámara acorazada en un servidor | Host, puerto, nombre de la base de datos, usuario y contraseña, y un driver |
| Archivo CSV | Estructurada | Una exportación de una app bancaria; el cuarteto de Anscombe | Un objeto tirado en el suelo | Solo el archivo. Conocer su separador y su codificación. |
| Archivo de Excel | Estructurada, más o menos | La hoja de cálculo que te manda tu jefe por correo | Un cofre que alguien empaquetó a mano | Solo el archivo. Elegir la hoja correcta; ojo con las celdas combinadas. |
| Archivo JSON | Semiestructurada | Lo que descarga una app del tiempo | Una bolsa de botín | El archivo o su dirección web. Saber cómo está anidado. |
| API | Normalmente JSON | Spotify, un horario de autobuses, un servicio meteorológico | Un comerciante: le preguntas y responde | Una dirección web, a menudo una clave de API. Respetar el límite de peticiones. |
| Portal de datos abiertos | Cualquiera de las anteriores | La web de datos de una administración pública | Un cofre público en la plaza del pueblo | Nada: es público a propósito. Comprobar la licencia. |
Seis términos nuevos en una tabla. Uno a uno:
- Una base de datos relacional guarda los datos en tablas que se pueden enlazar entre sí. Funciona como un programa en un servidor, como PostgreSQL o MySQL, y le hablas en un lenguaje llamado SQL. Escribirás tu primer SQL en la página siguiente.
- El host, el puerto y el driver son la dirección, la puerta y el traductor que necesitas para llegar a una base de datos. Tienen una página entera: Conectar Superset a una base de datos.
- Una API (application programming interface, interfaz de programación de aplicaciones) es una dirección web que responde con datos en lugar de con una página web. Tu app del tiempo no guarda la previsión: se la pide a una API.
- Una clave de API es una contraseña para programas: un código largo que te da el servicio para saber quién pregunta.
- Un límite de peticiones es el número máximo de preguntas que una API acepta en un tiempo dado. Si preguntas demasiado a menudo, deja de responder durante un rato.
- Una licencia es el texto que dice qué puedes hacer con datos que ha publicado otra persona.
¿Quién pide credenciales?¶
Las credenciales son lo que muestras para demostrar quién eres: normalmente un nombre de usuario y una contraseña, o una clave de API.
flowchart LR
Q{"¿La fuente<br>pregunta quién eres?"}
Q -- "siempre" --> DB["<b>Base de datos relacional</b><br>usuario + contraseña"]
Q -- "normalmente" --> API["<b>API</b><br>clave de API"]
Q -- "nunca" --> F["<b>Archivos</b><br>CSV, Excel, JSON:<br>si tienes el archivo, estás dentro"]
Q -- "nunca" --> OD["<b>Portal de datos abiertos</b><br>público a propósito"]
Una base de datos pregunta siempre. Una API pregunta normalmente. Un archivo nunca pregunta: quien tiene el archivo tiene los datos. Es cómodo, y también es la razón por la que no mandas por correo un archivo con datos personales de clientes con la misma ligereza que un meme.
Cuidado: \"tengo la dirección, así que estoy dentro\"
Saber dónde está una base de datos no la abre. Necesitas su dirección y una cuenta en ella y el permiso para leer las tablas que quieres. El acceso es la parte que la gente olvida, y es lo primero que falla en los proyectos reales.
CSV no es Excel¶
Los dos se abren en un programa de hojas de cálculo con un doble clic. Ahí empieza la confusión.
Un archivo CSV (comma-separated values, valores separados por comas) es una tabla escrita como texto plano: una línea por fila, con un carácter entre un valor y el siguiente.
Ese carácter es el separador (también llamado delimitador). La primera línea suele contener los nombres de las columnas: es la cabecera. Este es el comienzo real de pokemon_df.csv, el conjunto de datos que usamos en esta unidad, recortado a sus ocho primeras columnas:
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
Nada oculto. Lo que ves es el archivo entero.
Un archivo de Excel es otra bestia:
CSV (.csv) |
Excel (.xlsx) |
|
|---|---|---|
| Qué es en realidad | Texto plano | Un paquete ZIP con varios archivos XML dentro |
| Ábrelo en un editor de texto | Puedes leer todos los valores | Símbolos ilegibles |
| Hojas | Una tabla | Muchas hojas en un archivo |
| Formatos, colores, fórmulas | Ninguno. Solo valores. | Todos |
| Quién puede leerlo | Casi cualquier programa jamás escrito | Programas que entienden el formato |
| Sorpresa típica | El separador equivocado | Celdas combinadas, títulos encima de la tabla, totales al final |
Compruébalo tú mismo
Abre un archivo .csv y un archivo .xlsx en un editor de texto simple, no en una hoja de cálculo. El CSV se lee línea a línea. El archivo de Excel es un muro de símbolos, porque estás mirando un paquete comprimido.
La trampa del separador¶
La "C" de CSV promete comas. No siempre cumple la promesa.
En España, como en buena parte de Europa, la marca decimal es una coma: escribimos 6,9 kg. Si el separador también fuera una coma, 6,9 parecería dos valores. Por eso los archivos hechos en estos países suelen usar un punto y coma como separador:
pokemon,height,weight
bulbasaur,0.7,6.9
pokemon;height;weight
bulbasaur;0,7;6,9
Los dos son archivos CSV válidos. Una herramienta que espera uno y recibe el otro leerá cada línea como una sola columna, o partirá tus decimales en dos. El archivo está bien. A la herramienta se le dijo lo que no era.
Hay un segundo ajuste oculto: la codificación, la regla que convierte las letras en los bytes guardados en el archivo. Cuando una herramienta la adivina mal, Calvià aparece como CalviÃ. Si ves eso, los datos no están rotos: la codificación es la equivocada.
Así que, un hábito para toda la vida: antes de cargar un archivo en ningún sitio, ábrelo en un editor de texto y mira las primeras líneas. Estás comprobando el separador, la marca decimal y la cabecera. Los formatos que no coinciden son un problema de UT2, pero hoy ya aprendes a detectarlos.
Datos abiertos: libres, no sin ley¶
Los datos abiertos son datos que una organización publica para que cualquiera pueda descargarlos, reutilizarlos y compartirlos.
Las administraciones publican datos abiertos: presupuestos, líneas de autobús, playas, matrícula escolar. La comunidad de datos también. Dos fuentes que usarás este año:
| Fuente | Quién la publica | Qué encuentras |
|---|---|---|
| Portal de datos abiertos del GOIB | El Gobierno de las Islas Baleares | Turismo, transporte, medio ambiente, educación |
| TidyTuesday | Una comunidad de datos voluntaria | Un conjunto de datos público nuevo cada semana desde 2018: música, juegos, películas, deporte |
Nuestro conjunto de datos de Pokémon viene de TidyTuesday. Más fuentes, con enlaces directos a todos los archivos de clase, están en la página de Recursos.
Cuidado: abierto no significa \"haz lo que quieras\"
Los datos abiertos son libres de usar, pero siguen teniendo una licencia. Una muy común es CC BY (Creative Commons Attribution, Creative Commons Reconocimiento): puedes copiar los datos, modificarlos e incluso usarlos comercialmente, siempre que cites la fuente. Así que antes de usar un conjunto de datos en tu proyecto, busca su licencia y escribe en tu informe de dónde vienen los datos.
Conoce Apache Superset¶
Seis tipos de fuente, tres formas, separadores, credenciales. Necesitas una herramienta capaz de abrir esas puertas y mostrarte lo que hay detrás.
Apache Superset es una aplicación web para explorar datos: se conecta a bases de datos, te deja hacerles preguntas en SQL y convierte las respuestas en gráficos y cuadros de mando (dashboards).
En el juego, Superset es el cliente: la ventana por la que miras. Recuérdalo para la página siguiente, porque tiene una consecuencia: Superset no guarda tus datos. Se conecta a la base de datos donde viven, pregunta y dibuja.
flowchart LR
C["<b>Conectar</b><br>a una base de datos"] --> Q["<b>Consultar</b><br>preguntar en SQL"]
Q --> V["<b>Gráfico</b><br>dibujar la respuesta"]
V --> D["<b>Cuadro de mando</b><br>varios gráficos<br>en una pantalla"]
Su historia es corta. En 2015, en un hackathon (un evento donde los programadores construyen un prototipo en pocos días) dentro de Airbnb, un ingeniero llamado Maxime Beauchemin construyó una herramienta para trocear y graficar rápidamente los datos de la empresa. Ya había creado otra herramienta de datos muy conocida, Apache Airflow. Airbnb lanzó la nueva herramienta como código abierto (open source): su código es público y cualquiera puede usarlo, estudiarlo y mejorarlo gratis.
| Año | Qué pasó |
|---|---|
| 2015 | Nace como proyecto de un hackathon en Airbnb, de la mano de Maxime Beauchemin |
| 2017 | Entra en la incubadora de la Apache Software Foundation, una organización sin ánimo de lucro que cuida proyectos de código abierto |
| 2021 | El 21 de enero, Apache anuncia Superset como proyecto de nivel superior: se ha graduado de la incubadora |
Es la herramienta principal de este módulo. Hacia el final de esta unidad conocerás también a su rival comercial más conocido, Power BI de Microsoft, y compararás cómo obtiene cada una sus datos.
Pruébalo: una búsqueda de datos abiertos¶
Necesitas un navegador y un editor de texto. Ni cuenta ni contraseña.
| Paso | Haz esto | Deberías ver |
|---|---|---|
| 1 | Ve a la página de Recursos y descarga pokemon_df.csv |
Un archivo de unos 200 KB |
| 2 | Ábrelo en un editor de texto, no en una hoja de cálculo | Una línea de cabecera y luego una línea por Pokémon |
| 3 | Encuentra el separador y la marca decimal | Una coma y un punto decimal |
| 4 | Cuenta las columnas de la cabecera | 22 |
| 5 | Mira el número de la última línea de texto en tu editor | 950: una cabecera y 949 Pokémon |
| 6 | Busca charmander y lee su valor de type_2 |
Las dos letras NA: la forma que tiene este archivo de decir "sin valor" |
Ahora haz lo mismo con un conjunto de datos que elijas tú, del portal del GOIB o de TidyTuesday, y rellena esta ficha:
| Campo | Tu respuesta |
|---|---|
| Título y dirección web | |
| Formatos ofrecidos | CSV, JSON, XLSX... |
| Forma | Estructurada o semiestructurada |
| Separador y marca decimal | |
| Filas × columnas, aproximadamente | |
| Licencia | |
| Una pregunta que podría responder | Por ejemplo: "¿Las canciones más populares son también las más bailables?" |
Guarda esa última línea. Una buena pregunta es el comienzo de cada gráfico que dibujarás este año.
Ideas clave¶
- Los datos vienen en tres formas: estructurados (filas y columnas fijas), semiestructurados (etiquetados, flexibles, como JSON) y no estructurados (sin campos, como una foto).
- Seis tipos de fuente de datos: base de datos relacional, CSV, Excel, JSON, API y portal de datos abiertos. Para cada una, pregunta: ¿qué necesito para entrar?
- Credenciales: una base de datos siempre las pide, una API normalmente, un archivo nunca.
- Un CSV es texto plano con un separador; un archivo de Excel es un paquete ZIP de XML. Abre los archivos en un editor de texto antes de cargarlos y comprueba separador, marca decimal y cabecera.
- Los datos abiertos son libres de reutilizar, bajo una licencia. Con CC BY, debes citar la fuente.
- Apache Superset se conecta a bases de datos, las consulta en SQL y dibuja gráficos y cuadros de mando. Nació en Airbnb en 2015 y es un proyecto de nivel superior de Apache desde 2021.
Comprobación rápida¶
1. Un archivo JSON lista Pokémon. Algunos registros tienen un campo type_2 y otros no. ¿Qué forma tienen estos datos?
- Estructurada
- Semiestructurada
- No estructurada
- Relacional
Cada valor tiene una etiqueta, pero no todos los registros tienen los mismos campos: eso es semiestructurado. Los datos estructurados obligarían a que todas las filas tuvieran las mismas columnas; los no estructurados no tendrían ninguna etiqueta.
2. ¿Qué tipo de fuente pide siempre credenciales antes de dejarte entrar?
- Un archivo CSV
- Una base de datos relacional
- Un portal de datos abiertos
- Un archivo de Excel
Una base de datos relacional siempre quiere un usuario y una contraseña, además de host, puerto, nombre de la base de datos y un driver. Los archivos nunca preguntan (quien tiene el archivo tiene los datos) y los portales de datos abiertos son públicos a propósito.
3. Abres un archivo en un editor de texto y ves símbolos ilegibles en lugar de filas y valores. ¿De qué archivo se trata con más probabilidad?
- Un archivo CSV con separador de punto y coma
- Un archivo JSON
- Un archivo
.xlsxde Excel - Un archivo CSV con la codificación equivocada
Un archivo .xlsx es un paquete ZIP de archivos XML, así que un editor de texto muestra galimatías comprimido. CSV y JSON son texto plano: legibles, incluso cuando el separador o la codificación no son los que esperabas.
4. Cargas un CSV de un portal público español y toda la tabla llega en una sola columna. ¿Cuál es la causa más probable?
- El archivo está dañado y hay que volver a descargarlo
- El archivo tiene demasiadas filas
- El archivo usa punto y coma como separador y la herramienta esperaba una coma
- El archivo necesita una contraseña
Donde la marca decimal es una coma, los archivos suelen usar un separador de punto y coma. Una herramienta a la que se le dice que parta por comas no encuentra ninguna entre los valores, así que cada línea queda en una sola pieza. El archivo está bien: cambia el ajuste del separador.
5. Un conjunto de datos se publica con licencia CC BY. ¿Qué te exige?
- Nada: los datos abiertos no tienen reglas
- Pagar antes de usar los datos comercialmente
- Citar la fuente cuando uses los datos
- Pedir permiso por escrito cada vez
Abierto significa libre de reutilizar, no sin ley. CC BY te permite copiar, modificar e incluso vender trabajo basado en los datos, con una condición: la atribución, decir de dónde vienen los datos.
6. ¿Qué hace Apache Superset?
- Guarda tus datos para que otros programas puedan leerlos
- Se conecta a bases de datos, les hace preguntas en SQL y dibuja las respuestas como gráficos y cuadros de mando
- Convierte archivos de Excel en archivos CSV
- Publica datos abiertos para las administraciones
Superset es el cliente: se conecta, consulta y dibuja. Los datos se quedan en la base de datos. Empezó en Airbnb en 2015 (Maxime Beauchemin) y es de código abierto.
7. Un gimnasio quiere una pantalla que muestre cuánta gente entrena cada hora. Los datos están en la base de datos MySQL de la app de reservas y en un archivo de Excel semanal de recepción. Elige las dos afirmaciones verdaderas.
- Para la base de datos MySQL necesitas host, puerto, nombre de la base de datos, usuario, contraseña y un driver
- Para el archivo de Excel necesitas una clave de API
- Para el archivo de Excel solo necesitas el propio archivo, pero debes comprobar qué hoja contiene los datos
- La base de datos MySQL es semiestructurada, así que no se puede convertir en un gráfico
Una base de datos relacional (MySQL es una) es estructurada y siempre pide el conjunto completo de datos de acceso. Un archivo de Excel no pide más que el archivo: tu trabajo ahí es elegir la hoja correcta y vigilar las celdas combinadas. Las claves de API pertenecen a las API.
Ya sabes dónde viven los datos y qué pide cada lugar. Es hora de abrir la puerta más difícil de las seis, la base de datos: Conectar Superset a una base de datos.