¡Bienvenidos, muy buenos días tardes o noches , según donde me leas !
Hoy, en nuestra continua saga «El Desafío Todo en Uno», vamos a sumergirnos en el mundo de Python. Descubriremos cómo esta versátil herramienta puede ser utilizada en desafíos de datos como el que estamos enfrentando en nuestra comunidad de datos, concretamente en el Reto #9. Quiero resaltar que estos retos van más allá de la mera competición; nos brindan la oportunidad de explorar y utilizar diversas herramientas y lenguajes para aprender nuevas habilidades, fortalecer nuestros conocimientos y construir un portafolio completo en el proceso.
En este artículo, nos sumergiremos en la poderosa utilidad de Python en el campo de la analítica de datos y la automatización de tareas. Su curva de aprendizaje amigable y la abundante cantidad de bibliotecas disponibles lo convierten en la elección perfecta para una amplia gama de tareas, desde la manipulación de archivos hasta la gestión de datos complejos.
Exploraremos cómo Python puede ser aprovechado para automatizar la importación de datos desde archivos y cómo cargar esos datos en una base de datos, en este caso, PostgreSQL. Esta habilidad es esencial para analistas de datos y profesionales que trabajan con conjuntos de datos extensos y desean simplificar el proceso de importación. A lo largo de este artículo, usaremos un ejemplo práctico para ilustrar cada paso necesario.
Crear importador con Python y cargar en una base de datos
En el mundo de la analítica de datos y la automatización de tareas, Python se destaca como una herramienta excepcionalmente versátil. Su curva de aprendizaje amigable y la amplia gama de bibliotecas disponibles lo convierten en la elección perfecta para una variedad de tareas, desde la manipulación de archivos hasta la gestión de datos complejos.
En este artículo, exploraremos cómo utilizar Python para descomprimir archivos y cargar su contenido en una base de datos. Esta tarea es esencial para los analistas de datos y profesionales que trabajan con conjuntos de datos voluminosos y desean automatizar el proceso de importación. A lo largo del artículo, utilizaremos un ejemplo práctico para ilustrar los pasos necesarios.
Por qué uso Python , la curva de aprendizaje que tuve con este lenguaje de programación para este tipo de tareas como analistas de datos , de descomprimir files , de automatiza mover lotes de ficheros grandes, de que realice transformaciones típicas es muy fácil y al final dejo la documentación que sigo para este tipo de descomprensiones de ficheros
Primero crearemos el código para extraer nuestro fichero
Para este caso, usaremos Python posterior a realizar la descarga de este fichero , en la ubicación del paso anterior, ahora procedemos a ejecutar el código para su realización
Utilizaremos visual studio code: Para la creación del código
El código en el cual lo manejamos:
import zipfile
archivo_zip = «C:\\Users\\Documents\\challenge-9_datasets-mxBjlbB5o8u6kZ97.zip»
directorio_destino = «C:\\Users\\Documents\\00_PERSONAL\\power bi\\reto9»
with zipfile.ZipFile(archivo_zip, ‘r’) as archivo_zip:
archivo_zip.extractall(directorio_destino)
print(f»Archivos descomprimidos en: {directorio_destino}»)
Tratare de explicar este código , corto pero útil , el cual colocamos en practica en nuestro de retos de datos para poder ubicar de manera especifica estos datos , haciendo un unzip, y ubicar el fichero donde lo deseamos.
Empecemos:
import zipfile: Esto importa la biblioteca zipfile esta biblioteca esta genial y es super fácil de usar, que es una parte de la biblioteca estándar de Python y se utiliza para trabajar con archivos ZIP.
archivo_zip = «Ubicación del fichero a descomprimir»: En esta línea, se asigna la ruta completa del archivo ZIP, que deseamos descomprimir, en este caso es el fichero challenge-9_datasets-mxBjlbB5o8u6kZ97, que es el documento para gestión, ahora es importante ver que a la variable archivo_zip, puedes asignarle el nombre que desees pero debemos tener en cuenta que es donde agregamos la ubicación exacta..
directorio_destino = » directorio de destino «: Aquí se especifica el directorio de destino donde se extraerán los archivos del archivo ZIP, es decir que es donde alojaremos lo extraído.
with zipfile.ZipFile(archivo_zip, ‘r’) as archivo_zip:: Acá tenemos un poco más de complejidad , dado que esta línea crea un objeto ZipFile, utilizando la ruta al archivo ZIP(nuestra variable anterior) y lo abre en modo lectura (‘r’), que quiere decir esta r , que El modo de apertura ‘r’ en Python se utiliza para abrir un archivo en modo de lectura, lo que significa que el archivo solo se puede leer y no se puede modificar ni escribir en él . La declaración with se utiliza para asegurarse de que el archivo ZIP se cierre automáticamente cuando se termine de trabajar con él, lo que es una práctica recomendada en Python (ojo y que siempre utilizo para cuando abrimos un .zip luego de hacer lo que realizaremos dejemos todo como estaba, debemos pensar que loas procesos de automatismos pequeños o grandes estarán en nuestras maquina o en la de clientes y deben ser transparente para ellos es decir debe quedar todo el entorno como estaba antes de la ejecución del .py).
archivo_zip.extractall(directorio_destino): Aquí se utiliza el método extractall() del objeto ZipFile, es decir , el objeto ZipFile tiene mas método en este caso utilizo el extractall(), para que me de todos los ficheros sin ningún filtro, luego de extraer todos los archivos del archivo ZIP los llevamos al directorio de destino especificado.
print(f»Archivos descomprimidos en: {directorio_destino}»): Finalmente, siempre siempre saber si se ejecutó correctamente o no , en este caso con un print , porque es para consumo propio, podría ser un correo , esta línea muestra un mensaje en la consola que indica el directorio donde se han descomprimido los archivos.
Comparto la documentación que utilizo oficial:
https://docs.python.org/3/library/zipfile.html
Ahora teniendo nuestro fichero en la ubicación deseada.
Pasamos al segundo uso que le daremos a Python hoy que es crear un importador a una base de datos en este caso utilizare PostgreSQL
Lo primero será instalar las bibliotecas en nuestra maquina para que funcione de manera a adecuada.
Descargaremos abrimos la consola de Windows CMD , y escribimos el código pip install psycopg2
Para este la documentación para la biblioteca de que se usa para la manipulación desde Python a PostgreSQL es la siguiente psycopg2, esta es la que use y aprendí con ella
https://www.psycopg.org/docs/
Ahora pasamos a instalar la librería la cual podremos manipular nuestro fichero de datos .xlsx openpyxl
Abrimos cmd y escribimos pip install openpyxl
Comparto la documentación en la cual aprendí a utilizar esta librería
https://openpyxl.readthedocs.io/en/stable/index.html
Ahora procedemos a crear nuestra base de datos en PostgreSQL versión 16 , que es la cual estoy trabajando
Recordemos que postgresql trabaja con schemas , así que este esquema me lo creara el propio Python dado que hoy solo estamos viendo el lenguaje de programación que podemos colocar en practica en este tipo de retos de datos , el cual es mi preferido y de fácil aprendizaje Python, entonces la tabla de aterrizaje o stage será creada con Python y el esquema también
Procedemos a crear el código y a su explicación que será extensa pero re divertida
Voy a explicar cada línea de código en detalle:
Estas líneas importan las bibliotecas psycopg2
y openpyxl
, que son necesarias para interactuar con PostgreSQL y trabajar con archivos Excel, respectivamente.
connection = psycopg2.connect(
database="prueba",
user="postgres",
password="",
host="localhost",
port="5432"
)
Aquí se establece una conexión a la base de datos PostgreSQL. Los argumentos proporcionados son:
database
: El nombre de la base de datos a la que te estás conectando.user
: El nombre de usuario para la conexión.password
: La contraseña del usuario.host
: La dirección del host de la base de datos, en este caso, «localhost» indica que la base de datos se encuentra en la misma máquina.port
: El número de puerto donde PostgreSQL está escuchando, el valor predeterminado es 5432.
archivo_excel = "C:\\Users\\Documents\\00_PERSONAL\\power bi\\reto9\\Numero de Muertes por causa_Todo el Mundo.xlsx"
Esta línea define la ruta al archivo Excel que se va a importar.
nombre_esquema = "Reto_9"
nombre_tabla = "stage"
Aquí se establecen el nombre del esquema y el nombre de la tabla en PostgreSQL donde se insertarán los datos del archivo Excel.
libro_de_trabajo = openpyxl.load_workbook(archivo_excel)
hoja_de_trabajo = libro_de_trabajo.active
Estas líneas abren el archivo Excel especificado y cargan la hoja de trabajo activa en la variable hoja_de_trabajo
.
nombres_columnas = [columna.value for columna in hoja_de_trabajo[1]]
Esto crea una lista llamada nombres_columnas
que contiene los nombres de las columnas de la primera fila en el archivo Excel.
consulta_creacion_tabla = f"""
CREATE TABLE IF NOT EXISTS {nombre_esquema}.{nombre_tabla} (
{", ".join([f'"{nombre}" TEXT' for nombre in nombres_columnas])}
)
"""
Esta línea genera una consulta SQL para crear una tabla en la base de datos PostgreSQL. La tabla se crea con las columnas y tipos de datos que corresponden a las columnas del archivo Excel. El uso de "TEXT"
como tipo de datos para todas las columnas es una suposición; puedes ajustarlo según los tipos de datos reales en tu archivo.
cursor = connection.cursor()
Aquí se crea un objeto cursor que se utilizará para ejecutar consultas en la base de datos.
consulta_creacion_esquema = f"CREATE SCHEMA IF NOT EXISTS {nombre_esquema}"
cursor.execute(consulta_creacion_esquema)
Esto crea un esquema en la base de datos.
cursor.execute(consulta_creacion_tabla)
Esta línea ejecuta la consulta SQL para crear la tabla en la base de datos PostgreSQL.
datos_a_insertar = []
for fila in hoja_de_trabajo.iter_rows(min_row=2, values_only=True):
datos_a_insertar.append(fila)
Aquí se recorren las filas del archivo Excel (a partir de la segunda fila, omitiendo las cabeceras) y se almacenan los datos en la lista datos_a_insertar
.
consulta_insercion = f"""
INSERT INTO {nombre_esquema}.{nombre_tabla} ({", ".join([f'"{nombre}"' for nombre in nombres_columnas])})
VALUES ({", ".join(["%s" for _ in nombres_columnas])})
"""
Esta línea genera una consulta SQL de inserción dinámica que se adaptará automáticamente a la estructura de la tabla.
cursor.executemany(consulta_insercion, datos_a_insertar)
Aquí se ejecuta la consulta de inserción para insertar los datos en la tabla.
connection.commit()
Esta línea confirma la transacción, lo que efectivamente guarda los datos en la base de datos.
cursor.close()
connection.close()
Finalmente, estas líneas cierran el cursor y la conexión a la base de datos.
print("Importación completada con éxito.")
Imprime un mensaje indicando que la importación se ha completado con éxito al final del proceso.
Verificamos en PostgreSQL que todo esta correcto con un siempre select * from reto_9.stage, vemos que creo el esquema bajo nuestras indicaciones e inserto los datos eficientemente
Comparto el link del mi GitHub, para que puedan descargar el fichero con el código listo para ser editado:
https://github.com/vicente2121/Unzip_python_reto_9/tree/ad84edf5934932ff6a20e7461ade0d79d1af7339
En este artículo hemos explorado la poderosa utilidad de Python para automatizar procesos de importación de datos desde un archivo Excel y su carga en una base de datos PostgreSQL. A través de ejemplos prácticos y explicaciones detalladas, hemos visto cómo Python facilita enormemente tareas que solían ser laboriosas y propensas a errores.
Hemos aprendido a descomprimir archivos ZIP, manipular datos en Excel con la ayuda de la biblioteca openpyxl, y cómo establecer conexiones a bases de datos PostgreSQL. También hemos creado un esquema y una tabla en la base de datos, seguido de la inserción eficiente de datos desde el archivo Excel.
Este enfoque es invaluable para analistas de datos y profesionales que buscan simplificar y automatizar el proceso de ingestión de datos de diversas fuentes en una base de datos centralizada. Python se ha demostrado como una herramienta altamente versátil y de fácil aprendizaje que permite acelerar nuestras tareas y mejorar la gestión de datos.
Ya cierro este post para que no sea tan extenso, indicando que he proporcionado enlaces a recursos adicionales y documentación relevante que pueden ser útiles para aquellos que deseen profundizar en la automatización de tareas de importación de datos y la interacción con bases de datos PostgreSQL.
Python se presenta como una herramienta esencial en el campo de la analítica de datos (vamos que a mi me encanta) y la automatización de tareas, ofreciendo un conjunto de habilidades valiosas para profesionales que buscan optimizar sus flujos de trabajo y maximizar la eficiencia en la gestión de datos.
Business Intelligence Technical.
Perfil linkedin
Way cool! Some extremely valid points! I appreciate you writing this write-up and the rest of the website is also very good.