File size: 1,594 Bytes
342973b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
44
45
46
47
"""
Stats Generator - Generate statistical analysis and reports
"""

from typing import List, Dict
import statistics


class StatsGenerator:
    """Generate statistical analysis and reports."""

    def generate_summary_statistics(self, data: List[float]) -> str:
        """Generate summary statistics report."""
        if not data:
            return "No data available"

        analysis = {
            "Count": len(data),
            "Mean": f"{statistics.mean(data):.2f}",
            "Median": f"{statistics.median(data):.2f}",
            "Std Dev": f"{statistics.stdev(data):.2f}" if len(data) > 1 else "N/A",
            "Min": f"{min(data):.2f}",
            "Max": f"{max(data):.2f}",
        }

        report = "STATISTICAL SUMMARY\n" + "=" * 30 + "\n\n"
        for key, value in analysis.items():
            report += f"{key:.<20} {value:>10}\n"

        return report

    def generate_correlation_analysis(self, data_x: List[float], data_y: List[float]) -> str:
        """Generate correlation analysis."""
        if len(data_x) != len(data_y) or len(data_x) < 2:
            return "Invalid data for correlation"

        mean_x = statistics.mean(data_x)
        mean_y = statistics.mean(data_y)

        numerator = sum((data_x[i] - mean_x) * (data_y[i] - mean_y) for i in range(len(data_x)))
        denom_x = sum((x - mean_x) ** 2 for x in data_x) ** 0.5
        denom_y = sum((y - mean_y) ** 2 for y in data_y) ** 0.5

        correlation = numerator / (denom_x * denom_y) if denom_x * denom_y != 0 else 0

        return f"Correlation Coefficient: {correlation:.3f}"