def plot_height_by_agency(self, agency_colors: Dict[str, str] = None): """Plot height distribution grouped by agency""" agency_groups = {} for model in self.analyzer.models: if model.agency: if model.agency not in agency_groups: agency_groups[model.agency] = [] agency_groups[model.agency].append(model.height_cm) if not agency_groups: print("No agency data available") return fig, ax = plt.subplots(figsize=(12, 6)) positions = range(len(agency_groups)) bp = ax.boxplot(agency_groups.values(), positions=positions, widths=0.6, patch_artist=True, showmeans=True) # Color boxes if agency_colors: for i, box in enumerate(bp['boxes']): agency = list(agency_groups.keys())[i] box.set_facecolor(agency_colors.get(agency, 'lightblue')) ax.set_xticklabels(agency_groups.keys(), rotation=45, ha='right') ax.set_ylabel('Height (cm)') ax.set_title('Height Distribution by Modeling Agency') ax.grid(True, alpha=0.3, axis='y') plt.tight_layout() plt.show() from fastapi import FastAPI, HTTPException, Query from typing import List, Optional from pydantic import BaseModel app = FastAPI(title="Male Model Height Analysis API")
from dataclasses import dataclass from datetime import datetime from typing import List, Optional, Dict import statistics @dataclass class MaleModel: id: str name: str height_cm: float # height in centimeters height_ft_in: Optional[str] = None # e.g., "6'1"" agency: Optional[str] = None category: Optional[str] = None # runway, commercial, fitness, etc. measurement_date: Optional[datetime] = None height of male models
class ModelInput(BaseModel): name: str height_cm: float agency: Optional[str] = None category: Optional[str] = None ax = plt.subplots(figsize=(12