def basic_statistics(self) -> Dict: """Calculate basic height statistics""" if not self.heights: return {} return { "count": len(self.heights), "mean": round(statistics.mean(self.heights), 1), "median": round(statistics.median(self.heights), 1), "mode": round(statistics.mode(self.heights), 1) if self.heights else None, "min": min(self.heights), "max": max(self.heights), "range": round(max(self.heights) - min(self.heights), 1), "std_dev": round(statistics.stdev(self.heights), 1) if len(self.heights) > 1 else 0, "variance": round(statistics.variance(self.heights), 1) if len(self.heights) > 1 else 0 }
@app.post("/analyze/upload-models") async def upload_models(models: List[ModelInput]): """Upload multiple male models for analysis""" model_objects = [MaleModel( id=f"M{idx:04d}", name=m.name, height_cm=m.height_cm, agency=m.agency, category=m.category ) for idx, m in enumerate(models)]
def distribution_by_category(self) -> Dict: """Analyze height distribution by modeling category""" categories = { "runway": [], "commercial": [], "fitness": [] } for model in self.models: if self.RUNWAY_MIN <= model.height_cm <= self.RUNWAY_MAX: categories["runway"].append(model.height_cm) if self.COMMERCIAL_MIN <= model.height_cm <= self.COMMERCIAL_MAX: categories["commercial"].append(model.height_cm) if self.FITNESS_MIN <= model.height_cm <= self.FITNESS_MAX: categories["fitness"].append(model.height_cm) results = {} for cat, heights in categories.items(): if heights: results[cat] = { "count": len(heights), "mean": round(statistics.mean(heights), 1), "range": f"{min(heights)}-{max(heights)}" } return results
def __init__(self, analyzer: MaleModelHeightAnalyzer): self.analyzer = analyzer self.heights = analyzer.heights
