Si trabajas en una startup, ya sea en un equipo de ciencia de datos, growth, marketing o producto, tendrás que interactuar con bases de datos para tomar decisiones informadas, ya que muy probablemente en el lugar que estés se mueva por una cultura data-driven.
La forma de hacerlo es usando SQL. Sí, Python y R son grandes herramientas para análisis de datos y modelamiento estadístico. Pero SQL es la lingua franca del mundo de los datos.
Por eso, en este artículo, tendrás el contexto en el que SQL se vuelve una herramienta muy útil. Y también aprenderás su sintaxis para que hagas tus primeras queries a bases de datos. El contenido a continuación te ayudará a aprender sobre:
GROUP BY
y ORDER BY
WHERE
Una compañía, generalmente, diseñará todo el flujo de los datos, desde la captura hasta la generación de valor. Esto se conoce como una data pipeline. Consiste de un proceso de:
Si quieres aprender más sobre este proceso, te recomiendo tomar el Curso de Ingeniería de Datos con Python.
Vas a usar SQL. Las empresas no almacenan su información en un CSV o archivo de Excel. Los datos los obtendrás haciendo queries. Por eso es importante que lo aprendas. Y a continuación aprenderás a hacer tus primeras queries. Para eso usaremos un dataset de todas las ediciones de la Copa del Mundo desde Uruguay 1930 hasta Rusia 2018.
Una base de datos es una colección organizada de información estructurada que se almacena electrónicamente (aunque, en teoría, esto último no es estrictamente necesario, pero en la práctica sí). Una base de datos se maneja con un Database Management System (DBMS). Algunos ejemplos son Postgres, MySQL, MariaDB y Oracle Database.
Antes de seguir. Te comparto una notebook con los ejercicios de a continuación. Da clic aquí. Ya te había dicho que no es buena práctica alojar data en archivos csv. Pero nos saltaremos los pasos de conectar a una base de datos nuestra notebook, ya que el fin de este artículo es aprender la sintaxis.
Deepnote permite trabajar con bloques SQL que nos devuelven los resultados en un dataframe. Te dejo la documentación para que puedas indagar más.
La sintaxis de SQL es muy sencilla de entender, puesto que se parece mucho al idioma inglés. Además, si ya has desarrollado un pensamiento computacional con Python o con cualquier otro lenguaje de programación, notarás que te resulta sencillo de aprender.
Entonces estaremos trabajando con la tabla matches
y queremos seleccionar todos sus registros. Procedemos así:
SELECT *
FROM matches
Seleccionamos *
que significa todos los registros de la tabla matches
. Esto nos devuelve lo siguiente:
Como notarás, esto nos devuelve mucha información. Es toda la tabla. A veces conviene seleccionar solo una columna o algunas de ellas. Para esto, en lugar del *
ponemos los nombres de las columnas. Luego, seleccionemos las siguientes.
SELECTyear, country, city
FROM matches
Ahora, tenemos información más sintetizada que podemos comenzar a analizar. Aquí es donde tú puedes comenzar a obtener valor de varias columnas en específico.
A veces tenemos muchas filas. Por lo que es mejor poner un límite de las que queremos ver. Pueden ser las 5 o 10 primeras o las últimas. Para esto usamos LIMIT
. Mostremos el output anterior pero solo con 5 registros.
SELECTyear, country, city
FROM matches
LIMIT5
Algo muy importante a tener en cuenta en los análisis de datos son los valores únicos que existen en un registro. Para esto usamos DISTINCT
. Seleccionemos los países únicos en los que se han celebrado los mundiales.
SELECTDISTINCT country
FROM matches
Si bien esto nos empieza a dar una idea de la información en nuestro dataset, podemos mejorarlo. Usaremos aggregate functions (o funciones agregadas). Estas funciones nos son útiles para resumir numéricamente alguna variable (columna) y así interpretar mejor. Ahora usaremos COUNT
para contar los países que han sido sede de la Copa del Mundo.
SELECTCOUNT (DISTINCT country)
FROM matches
También podríamos, por ejemplo, obtener los goles totales de los equipos visitantes y locales, así como el promedio por partido.
SELECTSUM(home_score) AS total_home,
SUM(away_score) AS total_away,
ROUND(AVG(home_score), 2) AS avg_home,
ROUND(AVG(away_score), 2) AS avg_away
FROM matches
En la anterior query usamos algo llamado aliasing que es ponerle un alias a la columna que estará en nuestro output. Por eso usamos AS
. También, usamos ROUND
que recibe 2 argumentos, la columna/valor a redondear y el número de decimales.
Te dejo un link con más SQL Aggregate Functions.
GROUP BY
y ORDER BY
Ya que has aprendido a hacer consultas sencillas, estás lista o listo para subir la dificultad y obtener información que puede aportar más valor para tus análisis. Entonces podemos agrupar la información y, de la misma forma, ordenarla.
Agrupemos el número total de goles por cada edición del mundial.
SELECTyear,
SUM(home_score + away_score) AS total_goals
FROM matches
GROUPBYyearORDERBY total_goals DESCLIMIT5
Date cuenta de que cuando usamos una aggregate function, las columnas que no tienen estas funciones van junto al GROUP BY
que tenemos más abajo. Por eso, en la anterior query usamos GROUP BY year
.
También ORDER BY total_goals DESC
indica que se ordenen los registros de mayor a menor. Si quisiéramos que sea de menor a mayor, podríamos haber usado ASC
o no poner nada porque este es el valor por defecto.
Ahora bien, si quisiéramos traernos el año y el país sede juntos, deberíamos usar un GROUP BY year, country
, de lo contrario, nos arrojaría un error. Hagamos la query.
SELECTyear,
country,
SUM(home_score + away_score) AS total_goals
FROM matches
GROUPBYyear, country
ORDERBY total_goals DESCLIMIT5
Veamos ahora cómo filtrar filas con WHERE
WHERE
Filtrar registros es de gran utilidad cuando queremos obtener información de aquellas filas que cumplen con cierto criterio. Para eso, usamos WHERE
. Veamos un ejemplo en el que obtendremos los partidos que se jugaron cuando Rusia fue sede del mundial.
SELECT home_team, away_team, country
FROM matches
WHERE country = 'Russia'
Has aprendido a hacer tus primeras queries. Ya puedes empezar a hacer análisis básicos de datos usando SQL. Pero aún hay más por aprender sobre este lenguaje de consultas. Así que me gustaría que me cuentes en los comentarios si quisieras ver más artículos como este en el que puedas profundizar en temas como:
El camino sigue. Te recomiendo tomar el Curso de PostgreSQL Aplicado a Ciencia de Datos donde aplicarás los conceptos a la práctica y verás su muy importante relación con la ciencia de datos.
Con este post me ha quedado la ruta bastante clara.
Gracias.
¡Genial! Me alegra que te ayude, César.
Magnífico, tomaré la clase
¡Excelente, Olga! 🚀
Anotado para hacer mi ruta
¡Eso, Fabian!
Se vienen más posts sobre SQL, Esteffania. Cuenta con ello.
Sinceramente y de manera muy muy franca, este post está mucho mejor construido que dos cursos de bases de datos que hay en Plazti, muy buen trabajo y muchas gracias por el aporte, estos si me ayudarán a practicar. 😄 ❤️
¿Qué nuevos cursos de SQL y bases de datos te gustaría ver, Ronny?
nada mas acabo el de fundamentos y me voy al de postgre 🫡
Eso es. ¡A darle con todo! 💪
Excelente Post
Genial, Luis. 😉
Cosas que necesito estudiar xD
Cuentas con el apoyo de toda la comunidad, Sergio. 😉
Excelente post, tengo en la mira estos cursos. 🚀
¡Gracias! 😃
¡Muy bien! 🚀
Excelente Axel. 💪
Muchas gracias, Natty. 😄