File size: 1,395 Bytes
f67a585 | 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 | 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)
|