Back_end / services /continent_services.py
Ezhil
Git Initialization
f67a585
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)