|
|
@@ -0,0 +1,86 @@
|
|
|
+import pandas as pd
|
|
|
+import matplotlib.pyplot as plt
|
|
|
+import numpy as np
|
|
|
+import matplotlib.dates as mdates
|
|
|
+
|
|
|
+#======================================================
|
|
|
+# == SCRIPT PARAMETERS ==
|
|
|
+#======================================================
|
|
|
+
|
|
|
+# === CSV Parameters ===
|
|
|
+CSV_FILENAME = r"c:\Users\ranny\Downloads\week_2025_41_data.csv"
|
|
|
+CSV_SEPARATOR = ","
|
|
|
+
|
|
|
+COL_DIAMETER = "Diameter1 [mm]"
|
|
|
+COL_VELOCITY = "Velocity [m/s]"
|
|
|
+COL_TEMPERATURE = "Temperature [C]"
|
|
|
+
|
|
|
+FIG_TITLE = f"Závislosť Teploty a Počtu Častíc Detegovaných za Hodinu"
|
|
|
+
|
|
|
+FIG_GRID_STYLE = ":"
|
|
|
+
|
|
|
+# === Limits for Velocity & Diameter Filtering ===
|
|
|
+LIM_VELOCITY_MIN = 0.2 # m/s
|
|
|
+LIM_DIAMETER_MIN = 0.16 # mm
|
|
|
+LIM_DIAMETER_MAX = 8.0 # mm
|
|
|
+
|
|
|
+# === Figure Parameters ===
|
|
|
+FIG_WIDTH = 9
|
|
|
+FIG_HEIGHT = 6
|
|
|
+
|
|
|
+FIG_DATA_ALPHA = 0.6
|
|
|
+FIG_DATA_SIZE = 35
|
|
|
+
|
|
|
+# === Load CSV ===
|
|
|
+df = pd.read_csv(CSV_FILENAME, sep=CSV_SEPARATOR)
|
|
|
+
|
|
|
+# === Clean column names ===
|
|
|
+df.columns = [col.strip() for col in df.columns]
|
|
|
+print(df.columns)
|
|
|
+
|
|
|
+# === Drop missing data & provide filtering ===
|
|
|
+df = df.dropna(subset=[COL_DIAMETER, COL_VELOCITY, COL_TEMPERATURE])
|
|
|
+df = df[df[COL_VELOCITY] >= LIM_VELOCITY_MIN]
|
|
|
+df = df[(df[COL_DIAMETER] >= LIM_DIAMETER_MIN) & (df[COL_DIAMETER] <= LIM_DIAMETER_MAX)]
|
|
|
+
|
|
|
+# Convert timestamp
|
|
|
+df['Timestamp'] = pd.to_datetime(df['Timestamp'])
|
|
|
+df = df.set_index('Timestamp')
|
|
|
+
|
|
|
+
|
|
|
+# === Hourly resampling ===
|
|
|
+hourly = (
|
|
|
+ df
|
|
|
+ .resample("1h")
|
|
|
+ .agg({
|
|
|
+ COL_TEMPERATURE: "mean",
|
|
|
+ COL_DIAMETER: "count"
|
|
|
+ })
|
|
|
+ .rename(columns={COL_DIAMETER: "Particle Count"})
|
|
|
+)
|
|
|
+
|
|
|
+hourly['Temperature [C]'] = hourly['Temperature [C]'].interpolate(method='linear')
|
|
|
+
|
|
|
+# =====================================
|
|
|
+# 📈 Create the plot (temperature + particles)
|
|
|
+# =====================================
|
|
|
+fig, ax1 = plt.subplots(figsize=(9, 6))
|
|
|
+ax2 = ax1.twinx()
|
|
|
+
|
|
|
+ax1.plot(hourly.index, hourly['Temperature [C]'], color='tab:red', label='Teplota [°C]', linewidth=2)
|
|
|
+ax1.set_ylabel('Teplota [°C]', color='tab:red')
|
|
|
+ax1.tick_params(axis='y', labelcolor='tab:red')
|
|
|
+
|
|
|
+ax2.bar(hourly.index, hourly['Particle Count'], width=0.03, alpha=0.4, color='tab:blue', label='Particles/hour')
|
|
|
+ax2.set_ylabel('Počet kvapiek detegovaných za hodinu', color='tab:blue')
|
|
|
+ax2.tick_params(axis='y', labelcolor='tab:blue')
|
|
|
+
|
|
|
+# === Formátovanie timestamp na dd.mm.yyyy ===
|
|
|
+ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y'))
|
|
|
+fig.autofmt_xdate() # otočí dátumy, aby sa neprekrývali
|
|
|
+
|
|
|
+plt.title(FIG_TITLE)
|
|
|
+#plt.legend(title=FIG_LEGEND_TITLE, fontsize=FIG_LEGEND_SIZE, ncol=FIG_LEGEND_COLS)
|
|
|
+plt.grid(True, linestyle=FIG_GRID_STYLE)
|
|
|
+plt.tight_layout()
|
|
|
+plt.show()
|