Add temperature_data_analysis/src/temperature_data_analysis/core.py
This commit is contained in:
parent
ae757fae11
commit
ebe506aa22
1 changed files with 57 additions and 0 deletions
|
|
@ -0,0 +1,57 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import statistics
|
||||
from dataclasses import dataclass, asdict
|
||||
from typing import List, Dict
|
||||
|
||||
|
||||
@dataclass
|
||||
class AnalysisResult:
|
||||
"""Repräsentiert das Ergebnis einer Temperaturdatenanalyse."""
|
||||
|
||||
mean_temperature: float
|
||||
temperature_variance: float
|
||||
|
||||
def to_dict(self) -> Dict[str, float]:
|
||||
"""Konvertiert das Analyseergebnis in ein Dictionary."""
|
||||
return asdict(self)
|
||||
|
||||
|
||||
def analyze_temperature_data(data: List[float]) -> Dict[str, float]:
|
||||
"""Analysiert eine Liste von Temperaturwerten und berechnet Mittelwert und Varianz.
|
||||
|
||||
Args:
|
||||
data: Liste von Temperaturwerten in Grad Celsius.
|
||||
|
||||
Returns:
|
||||
Dictionary mit Schlüsseln 'mean_temperature' und 'temperature_variance'.
|
||||
|
||||
Raises:
|
||||
ValueError: Wenn die Eingabeliste leer ist oder ungültige Werte enthält.
|
||||
"""
|
||||
# Eingabevalidierung
|
||||
if not isinstance(data, list):
|
||||
raise ValueError("Input data must be a list of floats.")
|
||||
if not data:
|
||||
raise ValueError("Input data list cannot be empty.")
|
||||
|
||||
validated_values = []
|
||||
for v in data:
|
||||
if not isinstance(v, (int, float)):
|
||||
raise ValueError(f"Invalid value in data (not numeric): {v}")
|
||||
validated_values.append(float(v))
|
||||
|
||||
# Berechnungen
|
||||
try:
|
||||
mean_val = statistics.mean(validated_values)
|
||||
variance_val = statistics.pvariance(validated_values)
|
||||
except statistics.StatisticsError as e:
|
||||
raise ValueError(f"Error calculating statistics: {e}")
|
||||
|
||||
result = AnalysisResult(mean_temperature=mean_val, temperature_variance=variance_val)
|
||||
|
||||
# CI-Readiness: Assertions für Datenintegrität
|
||||
assert isinstance(result.mean_temperature, float)
|
||||
assert isinstance(result.temperature_variance, float)
|
||||
|
||||
return result.to_dict()
|
||||
Loading…
Reference in a new issue