Proyecto creado
This commit is contained in:
92
main.py
Normal file
92
main.py
Normal file
@@ -0,0 +1,92 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user