-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.py
47 lines (40 loc) · 1.98 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from fastapi import FastAPI, HTTPException
import pandas as pd
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
app = FastAPI()
# Función para obtener el top de gastadores por año
def top_consumidores_por_anio(df, year):
"""
Obtiene el top 3 de usuarios que más gastaron en un año específico.
:param df: DataFrame con datos de gastos
:param year: Año para el cual se quiere obtener el top de consumidores
:return: Diccionario con la información del top de consumidores
"""
# Filtrar el DataFrame por el año proporcionado
df_usuarios_filtered = df[df['Año'] == year]
# Obtener el top 3 de usuarios que más gastaron en ese año
top_consumidores = df_usuarios_filtered.groupby('Usuario')['Gastos'].sum().nlargest(3)
# Crear el resultado en formato JSON
result = {
'Para el año': year,
'Estos son los top 3 usuarios consumidores': top_consumidores.reset_index().to_dict(orient='records')
}
return result
# Ruta para obtener el top de consumidores por año desde el archivo Parquet
@app.get("/top3_consumidores/{year}", response_model=dict)
async def top_consumidores_by_year(year: int):
"""
Obtiene el top de consumidores para un año específico desde un archivo Parquet.
Por ejemplo: ingresamos 1990
"""
try:
# Cambia la ruta del archivo según la ubicación de tu archivo df_endpoint_1.parquet
df = pd.read_parquet("Dataset/dataset_endpoint_1.parquet")
# Aplicar la función para obtener el top de gastadores por año
result = top_consumidores_por_anio(df, year)
return JSONResponse(content=jsonable_encoder(result), media_type="application/json")
except FileNotFoundError:
raise HTTPException(status_code=404, detail="Archivo Parquet no encontrado, revisa si la ruta del archivo es correcta ;)")
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error al leer el archivo Parquet: {str(e)}")