Python: retomando la programación con iA
La tarea es capturar datos de una serie de archivos de Excel con tablas en cada hoja y unir esas tablas en una sola acumulada. Objetivo común en Ciencia de Datos, busca, encuentra y organiza.
Ahora bien, empecé a hacerlo manualmente, pero cada planilla de Excel contenía más de 15 hojas con sus respectivas tablas, y eran más de 10 planillas. A la cuarta hoja ya me dije, esto no puede ser… a ver, piensa como especialista de datos esto tiene que automatizarce y viene la pregunta… ¿qué será más eficiente en tiempo, lo manual (estos datos son de un solo uso) o dedicarle tiempo a crear un programa? estoy muy oxidado…?
Bueno desafío aceptado, y comencé a buscar cómo hacerlo en Python y comienzo a codificar. Luego de un rato ya casi finalizando recuerdo que hay algo llamado Copilot en Github y veamos cómo lo hace, así que aplico una consulta (Prompt le dicen ahora) tal como:
read the sheets of one excel file and create a dataframe for each sheet and join all dataframes in one
Y espero pacientemente, bueno en realidad menos de 10 segundos y me responde con un código bastante acotado pero eficiente con el objetivo cumplido. Luego de eso aplico las particularidades que necesito, por ejemplo, saltarse algunas líneas, eliminar ciertas columnas, etc. Pero el código base es eficiente y suficiente para la tarea encomendada. Un siete.
Finalmente me tomó 10 minutos realizar el código junto a las mejoras que le apliqué y el trabajo final con las planillas tomó 1 minuto.
Conclusión
Siempre vale la pena automatizar algún trabajo que aunque parezca que es de una sola vez, el aprendizaje obtenido te rendirá además en el siguiente trabajo. La IA si efectivamente te ahorra tiempo y trabajo, además del aprendizaje obtenido que es invaluable.
¿Vale la pena? yo creo que si, y el valor por suscripción de US10,0/mes me parece bastante económico si lo usas en forma habitual para ahorrarte un tiempo que puedes dedicar a disfrutar tu café de la mañana o salir a tomar el fresco al atardecer.
Codigo completo:
# libraries
import pandas as pd
import numpy as np
# read excel file
file = "data/DMCS-Mensuales/Frecuencia Mensual_DETENCION.xlsx"
detenciones = pd.read_excel(file)
work = pd.ExcelFile(file)
# read the sheest of excel file and create a dataframe for each sheet and join all dataframes in one
def df_from_excel_sheets(excel_file):
# Load the Excel file
xls = pd.ExcelFile(excel_file)
# Get the names of all sheets in the Excel file
sheet_names = xls.sheet_names
sheet_names.pop(0) # the first sheet is not needed
dfs = []
for sheet in sheet_names:
df = pd.read_excel(xls, sheet_name=sheet, header=3)
df = df.rename(columns={'UNIDAD':'COMUNA','Período':'DELITO'})
df['DELITO'] = sheet # name a column with the name of the sheet
dfs.append(df)
final_df = pd.concat(dfs, ignore_index=True)
return final_df
def df_to_excel(df, file):
df.to_excel(file, index=False)
plan = df_from_excel_sheets(file)
# in this case only the comuna is needed as administrative unit (UN_ADMIN)
plan.drop(planilla[planilla['UN_ADMIN'] !='COMUNA'].index, inplace=True)
plan.drop(columns = ['UN_ADMIN'], inplace=True)
# Excel file exporter
df_to_excel(plan, 'data/detenciones.xlsx')