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