Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| from fastapi import HTTPException | |
| from models.pydantic_model import ContinentStats | |
| from logger import logger | |
| # Load dataset | |
| try: | |
| df = pd.read_csv("data/world_population.csv") | |
| logger.info("CSV file loaded successfully.") | |
| except Exception as e: | |
| logger.error(f"Failed to load CSV: {e}") | |
| raise HTTPException(status_code=500, detail="Internal server error") | |
| # Aggregate statistics by continent | |
| continent_stats = df.groupby("Continent").agg( | |
| Total_Countries=('Country', 'count'), | |
| Total_Population=('Population', 'sum'), | |
| Average_Population=('Population', 'mean'), | |
| Total_Area=('Area', 'sum'), | |
| max_population=('Population', 'max'), | |
| min_population=('Population', 'min'), | |
| ).reset_index() | |
| # Compute Population Density | |
| continent_stats["Population_Density"] = ( | |
| continent_stats["Total_Population"] / continent_stats["Total_Area"] | |
| ) | |
| def get_continent_stats_service(continent: str) -> ContinentStats: | |
| """ | |
| Fetch statistics for a given continent. | |
| """ | |
| logger.info(f"Fetching statistics for continent: {continent}") | |
| result = continent_stats[continent_stats["Continent"] == continent] | |
| if result.empty: | |
| logger.warning(f"Continent not found: {continent}") | |
| raise HTTPException(status_code=404, detail="Continent not found") | |
| result_dict = result.iloc[0].to_dict() | |
| return ContinentStats(**result_dict) | |