Giter Site home page Giter Site logo

ochoajuanm / alkemy-challenge-python Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 544 KB

Aplicación de proceso ETL de datos abiertos a través de requests, transformación de datos y poblado de base de datos con Python y PostgreSQL. Challenge de alkemy

Python 36.90% Jupyter Notebook 63.10%

alkemy-challenge-python's Introduction

alkemy

Challenge Data Analytics - Python

Autor: Juan Ochoa

¡Hola! Este es un proyecto desafío que consume datos desde 3 fuentes distintas para popular una base de datos SQL con información cultural sobre bibliotecas, museos y salas de cines argentinos.

NOTA: Este procedimiento será detallado en un ambiente de Windows con WSL Ubuntu, pueden existir variaciones respecto a algunos comandos

Para ello, primero se debe descargar el repositorio y crear un ambiente virtual, por ejemplo con:

python3 -m venv .venv

Luego, se debe activar el ambiente virtual:

source .venv/bin/activate

E instalar los requerimientos con el comando:

pip install -r requirements.txt

Se debe configurar el idioma español ya que, al utilizarse la librería datetime, cuando se generen carpetas y directorios se realizará en inglés por defecto, para ello se debe ejecutar en la consola:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

En el menú que aparecerá luego de esta ejecución, se debe elegir es_AR.UTF-8 https://stackoverflow.com/questions/14547631/python-locale-error-unsupported-locale-setting

Se debe crear un archivo de nombre .env en la raíz del proyecto con la siguiente información:

PG_HOST='tu_host'
PG_USER='tu_usuario'
PG_PASSWORD='tu_contraseña'
PG_PORT='tu_puerto'
PG_DB='tu_db'

En mi caso fueron:

PG_HOST='winhost' 
PG_USER='postgres'
PG_PASSWORD='******'
PG_PORT='5432'
PG_DB='cultura'

El host generalmente será localhost, para WSL tuve que reconfigurar el host, se explica acá

Módulos

Dentro del proyecto podemos encontrar tres módulos diferenciados:

  • get_data.py: aquí es donde se produce la extracción de la información solicitada mediante la librería requests a las URLs solicitadas. Éstas están guardadas en un diccionario por llave-valor siendo la llave la categoría, y el valor el link del archivo.

  • process_data.py: es el módulo que realiza las transformaciones correspondiente de los archivos csv descargados y mediante la librería pandas permite exportarlos a la carpeta temp_data para luego ser utilizados por el módulo de actualización de la base de datos

  • update_db_data.py: lee los archivos previamente procesados y guardados, y mediante una conexión a PostgreSQL (recordar crear antes el archivo .env para definir las variables de entorno, éstas serán utilizadas por la librería decouple para obtener la conexión al motor de la base de datos

Cabe destacar que, ejecutando el archivo main.py, éstos tres se ejecutarán secuencialmente en el orden descripto.

También existen otros dos módulos adicionales, uno para la conexión a la base de datos db_connection.py y otro para creación de tablas create_tables.py

Todos los módulos importan variables de configuración y funciones de corrección desde el archivo utils.py

Se adjunta un notebook definido como data_analysis.ipynb donde se fueron probando las transformaciones que se debían realizar en los datos.

Carpetas

Tenemos cuatro carpetas en el proyecto:

  • categorias: aquí se guardarán todas las extracciones de información en "crudo" de los datos del gobierno solicitados en el challenge.
  • logs: se guardarán los archivos log referidos por su nombre según el módulo ejecutado. Ya que funcionan por jerarquía, dentro del mismo se mostrarán como root aquellas ejecuciones que corresponden al módulo padre y con su nombre a los módulos hijos.
  • temp_data: servirá para almacenar el output de la ejecución del módulo process_data en archivos csv. Si se ejecuta el main no se guardará porque las variables estarán en memoria.
  • sql_scripts: acá figuran los scripts de creación de las tablas en PostgreSQL que serán llamados al ser ejecutado el módulo create_tables (y este llamará a db_connection)

alkemy-challenge-python's People

Watchers

James Cloos avatar Juan Ochoa avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.