Files
consumo-electrico/main.py
2026-01-02 22:33:27 -05:00

93 lines
3.4 KiB
Python

import pdfplumber
import re
import pandas as pd
import matplotlib.pyplot as plt
archivos = ["enero-2024.pdf", "febrero-2024.pdf", "marzo-2024.pdf","abril-2024.pdf","junio-2024.pdf","julio-2024.pdf","agosto-2024.pdf","septiembre-2024.pdf","octubre-2024.pdf","noviembre-2024.pdf","diciembre-2024.pdf","enero-2025.pdf", "febrero-2025.pdf", "marzo-2025.pdf","abril-2025.pdf","junio-2025.pdf","julio-2025.pdf","agosto-2025.pdf","septiembre-2025.pdf","octubre-2025.pdf","noviembre-2025.pdf","diciembre-2025.pdf"]
datos = []
for archivo in archivos:
with pdfplumber.open(archivo) as pdf:
texto = " ".join([p.extract_text() for p in pdf.pages if p.extract_text()])
#print(texto)
# Patrones
fecha = re.search(r"Fecha hasta *?(\d{2}-\d{2}-\d{4})", texto)
consumo = re.search(r"Consumo.*?(\d+)\s*kWh", texto)
total = re.search(r"VALOR TOTAL.*?\$?([\d,.]+)", texto)
val_imp = re.search(r"TOTAL SE Y AP \(1\).*?\$?([\d,.]+)", texto)
val_basura = re.search(r"TOTAL RECOLECCIÓN BASURA \(5\).*?\$?([\d,.]+)", texto)
#print(fecha)
for pagina in pdf.pages:
tablas = pagina.extract_tables()
for tabla in tablas:
df_tabla = pd.DataFrame(tabla[1:], columns=tabla[0])
# Buscar la fila específica
fila = df_tabla[df_tabla.iloc[:,0].str.contains("Energía Facturada", case=False, na=False)]
if not fila.empty:
consumo = fila["Consumo Total"].values[0] # nombre exacto de la columna
datos.append({
"archivo": archivo,
"Fecha" : fecha.group(1) if fecha else None,
"KW Consumidos": consumo,
"Valor total": float(total.group(1).replace(",", "")) if total else None,
"Valor SE y AP": float(val_imp.group(1).replace(",", "")) if val_imp else None,
"Valor Basura" : float(val_basura.group(1).replace(",", "")) if val_basura else None
})
df = pd.DataFrame(datos)
print(df)
# Exportar a CSV
df.to_csv("consumo.csv", index=False)
# Exportar a JSON
df.to_json("consumo.json", orient="records", indent=4)
print("Datos exportados a consumo.csv y consumo.json")
# aqui grafica los resultados
# Cargar datos
df = pd.read_csv("consumo.csv")
# Convertir fechas
df["Fecha"] = pd.to_datetime(df["Fecha"], dayfirst=True)
df["anio"] = df["Fecha"].dt.year
df["mes"] = df["Fecha"].dt.month
# Identificar último año y anterior
ultimo_anio = df["anio"].max()
anterior_anio = ultimo_anio - 1
# Filtrar datos
df_ultimo = df[df["anio"] == ultimo_anio]
df_anterior = df[df["anio"] == anterior_anio]
# Graficar comparación
plt.figure(figsize=(10,6))
plt.plot(df_anterior["mes"], df_anterior["KW Consumidos"], marker="o", label=f"Año {anterior_anio}", color="red")
plt.plot(df_ultimo["mes"], df_ultimo["KW Consumidos"], marker="o", label=f"Año {ultimo_anio}", color="blue")
# etiquetas a los valores
for x, y in zip(df_anterior["mes"], df_anterior["Valor total"]):
plt.text(x, y+5, str(y), color="red", ha="center", fontsize=8)
for x, y in zip(df_ultimo["mes"], df_ultimo["Valor total"]):
plt.text(x, y+5, str(y), color="blue", ha="center", fontsize=8)
plt.title("Comparación de consumo eléctrico entre dos años")
plt.xlabel("Mes")
plt.ylabel("Consumo Total (kWh)")
plt.xticks(range(1,13))
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()