Desarrollé un proyecto de ETL sobre archivos de diferentes orígenes (CSV, JSON). Luego, utilicé FastAPI para crear una API que permita realizar consultas a la base de datos donde se habían cargado los datos. La API fue montada en un contenedor de Docker.
PROYECTO DE ETL+FASTAPI+DOCKER EN SERVICIOS DE STREAMING
ETL+FASTAPI+DOCKER EN SERVICIOS DE STREAMING
TABLA DE CONTENIDO
- 1-Introducción.
- 2-Objetivo de trabajo.
- 3-Principales tecnologías utilizadas.
- 4-Plan de Acción.
- 5-Conclusiones.
Introducción
Hola! 👋 mi nombre es Lucas Maximiliano Seidl y este repositorio contiene mi proyecto individual de Data Engineering de la carrera de Data Science en la academia Henry.
Objetivo de trabajo
El proyecto consiste en realizar una ingesta de datos desde diversas fuentes, posteriormente aplicar las transformaciones que consideren pertinentes, y luego disponibilizar los datos limpios para su consulta a través de una API. Esta API deberán construirla en un entorno virtual dockerizado.
Los datos serán provistos en archivos de diferentes extensiones, como csv o json. Se espera que realicen un EDA para cada dataset y corrijan los tipos de datos, valores nulos y duplicados, entre otras tareas. Posteriormente, tendrán que relacionar los datasets así pueden acceder a su información por medio de consultas a la API.
Las consultas a realizar son:
- Máxima duración según tipo de film (película/serie), por plataforma y por año:
- Cantidad de películas y series (separado) por plataforma
- Cantidad de veces que se repite un género y plataforma con mayor frecuencia del mismo.
- Actor que más se repite según plataforma y año.
## Principales tecnologías utilizadas + Python - Pandas - Numpy - Pathlib - Chardet - SqlAlchemy - Pymysql Python es un lenguaje de programación que te permite trabajar rápidamente e integrar sistemas de manera más efectiva. https://docs.python.org/3/ + FastApi
FastAPI es un marco web moderno, rápido (de alto rendimiento) para crear API con Python 3.7+ basado en sugerencias de tipo estándar de Python. https://fastapi.tiangolo.com/ + Uvicorn Uvicorn es una implementación de servidor web ASGI para Python.
Hasta hace poco, Python carecía de una interfaz mínima de servidor/aplicación de bajo nivel para marcos asíncronos. La especificación ASGI llena este vacío y significa que ahora podemos comenzar a crear un conjunto común de herramientas utilizables en todos los marcos asíncronos. https://www.uvicorn.org/
- MySql
## Plan de Acción + Trabajo de ETL con Python y Mysql
1- Analisis y carga En la primera parte del ETL analize los distintos tipos de archivos que nos fueron brindados en formato "csv" y "json". Luego cree dos funciones para la extraccion de la ruta y para la transformacion de los archivos a df utilizando Pathlib para leer las rutas y Chardet para decifrar el encoding.
2- Transformacion Cree una columna nueva con el nombre del origen de cada df para poder identificarlos. Una vez concatenados y habiendo dropeado el index antiguo y creado uno nuevo, se hicieron varios samples para ir verificando los datos, me encontre que datos que pertenecen a la columna"duration" se encuentran en la columna "ranting". Se procede a cambiarlos de ubicacion para no perderlos con una funcion lambda, con esto disminuyo en aproximadamente un 61.2% la cantidad de nulos de la columna "duration". Analizando los datos se llego a las siguientes conclusiones:
Para poder trabajar la columna "duration" tenemos que dividirla en dos, una parte numerica y otra parte str. Una vez tenemos las columnas con las que vamos a trabajar procedemos a cambiar los null por "sin dato" en el caso de columnas str y por 0 en columnas numericas. Usamos "strip" para sacar los espacios en blanco y reacomodamos el orden de las columnas con "reindex".
Con las columnas "listed_in", "cast" que son dos columnas que tienen muchos valores en cada fila separados por comas vamos a crear dos nuevos df que mas adelante seran nuevas tablas en nuestra base de datos, conectadas por el index. Para realizar la separacion de palabras dentro de cada columna se uso "str.split" y "explode".
Una vez tenemos nuestros datos limpios procedemos a subirlos a nuestra base de datos por medio de "SqlAlchemy".
3- Base de datos-modelo relacional
- FastApi y Docker
Docker
Una vez la api esta lista y nuestro dockerfile esta en la carpeta de la api, nos posicionamos en el cmd de la terminal, donde se encuentra nuestra la ruta a la api y ejecutamos los siguientes comandos: + "docker build -t myimage ." : nos va a crear una imagen de nuestra api. + "docker run -d --name mycontainer -p 80:80 myimage" : nos va a crear un container en dockerdesktop.
docker container
FastApi corriendo con docker
Video demostración https://youtu.be/gyueOpqt4h0
Conclusión
Fue un trabajo desafiante donde tuve que aprender desde el inicio a hacer una API y montarla en docker. Tambien me permitio fijar conocimientos de ETL en python y aprender a realizar querys en SqlAlchemy.
Les dejo mi linkedin: https://www.linkedin.com/in/maxi-seidl/
Un saludo a todos👋😁 y gracias por llegar hasta aca!