60

Aprende SQL para análisis de datos: tus primeras queries

51313Puntos

hace 2 años

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:

  • Sintaxis básica de SQL
  • Funciones agregadas
  • Agrupar y ordenar con GROUP BY y ORDER BY
  • Filtrar registros con WHERE
https://images.unsplash.com/photo-1489875347897-49f64b51c1f8?ixlib=rb-1.2.1&q=80&cs=tinysrgb&fm=jpg&crop=entropy

¿Cuándo usar SQL?

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:

  • Ingestión. Es la captura de los datos crudos.
  • Procesamiento. Los datos vienen “sucios”, entonces aquí se los prepara para subirse a una base de datos.
  • Análisis. Los datos están listos para analizarse y extraer valor. Es aquí cuando usarás SQL para hacer consultas a las bases de datos.

Si quieres aprender más sobre este proceso, te recomiendo tomar el Curso de Ingeniería de Datos con Python.

data-pipeline.png

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.

Entendiendo las bases de datos

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.

Sintaxis de SQL

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:

table-1-sql.png

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
table-2-sql.png

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
table-3-sql.png

Funciones agregadas y valores distintos

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
table-4-sql.png

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
table-5-sql.png

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
table-6-sql.png

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.

Queries más avanzadas: 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
table-7-sql.png

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
table-8-sql.png

Veamos ahora cómo filtrar filas con WHERE

Filtrando registros con 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'
table-9-sql.png

¿Qué más sigue sobre SQL?

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:

  • nested queries,
  • common table expressions,
  • joins,
  • window functions y más.

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.

Axel
Axel
axl-yaguana

51313Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
4
1933Puntos

Con este post me ha quedado la ruta bastante clara.
Gracias.

2
51313Puntos
2 años

¡Genial! Me alegra que te ayude, César.

2
Gracias. Muy útil y clara la info para empezar en SQL. Mas post así.
2
51313Puntos
2 años

Se vienen más posts sobre SQL, Esteffania. Cuenta con ello.

2
6639Puntos

Cosas que necesito estudiar xD

1
51313Puntos
2 años

Cuentas con el apoyo de toda la comunidad, Sergio. 😉

2
33715Puntos

Excelente post, tengo en la mira estos cursos. 🚀
¡Gracias! 😃

2
44444Puntos

nada mas acabo el de fundamentos y me voy al de postgre 🫡

2
51313Puntos
2 años

Eso es. ¡A darle con todo! 💪

2
9979Puntos

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. 😄 ❤️

1
51313Puntos
2 años

¿Qué nuevos cursos de SQL y bases de datos te gustaría ver, Ronny?

2
40438Puntos

Excelente Axel. 💪

2
51313Puntos
2 años

Muchas gracias, Natty. 😄