import pandas as pd import numpy as np df = pd.read_csv("data.csv") df["time_s"] = df["time since start [ms]"] / 1000.0 t = df["time_s"].values T = df["temp_amb IR [C]"].values # Media ponderata sul tempo con regola dei trapezi # T_avg = integral(T dt) / (t_fine - t_inizio) integral = np.trapezoid(T, t) durata = t[-1] - t[0] t_media = integral / durata t_min = T.min() t_max = T.max() t_inizio = t[0] t_fine = t[-1] n_campioni = len(df) print(f"Finestra di osservazione: {t_inizio:.1f} s → {t_fine:.1f} s ({durata:.1f} s)") print(f"Campioni: {n_campioni}") print(f"T ambiente min: {t_min:.2f} °C") print(f"T ambiente max: {t_max:.2f} °C") print(f"T ambiente media ponderata: {t_media:.2f} °C") with open("report.md", "w", encoding="utf-8") as f: f.write("# Report: Temperatura Ambiente Media\n\n") f.write("## Metodologia\n\n") f.write("La media è calcolata come **media ponderata sul tempo** (regola dei trapezi):\n\n") f.write("$$T_{avg} = \\frac{\\int T(t)\\, dt}{t_{fine} - t_{inizio}}$$\n\n") f.write("Questo approccio tiene conto del campionamento non uniforme: ") f.write("ogni campione pesa proporzionalmente all'intervallo di tempo che copre.\n\n") f.write("## Risultati\n\n") f.write(f"| Parametro | Valore |\n") f.write(f"|---|---|\n") f.write(f"| Inizio osservazione | {t_inizio:.1f} s |\n") f.write(f"| Fine osservazione | {t_fine:.1f} s |\n") f.write(f"| Durata totale | {durata:.1f} s |\n") f.write(f"| Numero campioni | {n_campioni} |\n") f.write(f"| T ambiente minima | {t_min:.2f} °C |\n") f.write(f"| T ambiente massima | {t_max:.2f} °C |\n") f.write(f"| **T ambiente media ponderata** | **{t_media:.2f} °C** |\n") print("\nreport.md generato.")