Files
report-temperatura/calcola_t_amb.py

47 lines
1.7 KiB
Python
Raw Normal View History

2026-04-01 09:44:57 +02:00
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.")