Good good progress
This commit is contained in:
@@ -804,42 +804,42 @@ class ContextGenerator:
|
||||
)
|
||||
zone_df = self.pnoe_df[mask]
|
||||
|
||||
# HR BPM Range - match notebook exactly
|
||||
hr_bpm_str = f"{int(start)}-{int(end)} bpm"
|
||||
|
||||
if not zone_df.empty:
|
||||
# Speed calculation
|
||||
# Speed calculation - match notebook exactly
|
||||
speed_series = zone_df[zone_df["Speed"] > 0.1]["Speed"]
|
||||
if not speed_series.empty:
|
||||
min_speed = speed_series.min()
|
||||
max_speed = speed_series.max()
|
||||
|
||||
if abs(min_speed - max_speed) < 0.1:
|
||||
speed_str = f"{min_speed:.1f}mph\n2% Incline"
|
||||
speed_str = f"{min_speed:.1f} mph\n2% Incline"
|
||||
else:
|
||||
speed_str = f"{min_speed:.1f}-{max_speed:.1f}mph\n2% Incline"
|
||||
speed_str = f"{min_speed:.1f}-{max_speed:.1f} mph\n2% Incline"
|
||||
|
||||
# Pace calculation (max speed -> min pace, min speed -> max pace)
|
||||
min_pace_m, min_pace_s = speed_to_pace(max_speed)
|
||||
max_pace_m, max_pace_s = speed_to_pace(min_speed)
|
||||
|
||||
if min_pace_m == max_pace_m and min_pace_s == max_pace_s:
|
||||
pace_str = f"{min_pace_m}:{min_pace_s:02d}min/km Pace"
|
||||
pace_str = f"{min_pace_m}:{min_pace_s:02d} min/km Pace"
|
||||
else:
|
||||
pace_str = (
|
||||
f"{max_pace_m}:{max_pace_s:02d}-{min_pace_m}:{min_pace_s:02d}\n"
|
||||
f"min/km Pace"
|
||||
)
|
||||
pace_str = f"{max_pace_m}:{max_pace_s:02d}-{min_pace_m}:{min_pace_s:02d}\nmin/km Pace"
|
||||
else:
|
||||
speed_str = "-\n2% Incline"
|
||||
pace_str = "-"
|
||||
|
||||
# Calories (using raw EE)
|
||||
# Calories (using raw EE) - match notebook exactly
|
||||
avg_cals = zone_df["EE(kcal/min)"].mean()
|
||||
calories_str = f"Avg:\n{avg_cals:.1f}kcals/minute"
|
||||
calories_str = f"Avg:\n{avg_cals:.1f} kcals/minute"
|
||||
|
||||
# Carb utilization (g/min)
|
||||
# Carb utilization (g/min) - match notebook exactly
|
||||
avg_carbs_g = zone_df["CHO"].mean() / 4
|
||||
carb_str = f"Avg: {avg_carbs_g:.1f}g/min\nCarb Utilization"
|
||||
|
||||
# Breathing
|
||||
# Breathing - match notebook exactly
|
||||
avg_breaths = zone_df["BF(bpm)_smoothed"].mean()
|
||||
breath_str = (
|
||||
f"Avg: {int(avg_breaths)} breaths\n{ideal_breath_ranges[i]}"
|
||||
@@ -854,7 +854,7 @@ class ContextGenerator:
|
||||
zone_data.append(
|
||||
{
|
||||
"zone_name": name,
|
||||
"hr_bpm": f"{int(start)}-{int(end)}bpm",
|
||||
"hr_bpm": hr_bpm_str,
|
||||
"speed": speed_str,
|
||||
"pace": pace_str,
|
||||
"calories": calories_str,
|
||||
@@ -1246,18 +1246,18 @@ class ContextGenerator:
|
||||
hr_zones_columns = ["Zone 1", "Zone 2", "Zone 3", "Zone 4", "Zone 5"]
|
||||
hr_zones_data = [
|
||||
[
|
||||
"Improves health and recovery capacity",
|
||||
"Improves endurance and fat burning",
|
||||
"Improves Aerobic fitness",
|
||||
"Improves maximum performance capacity",
|
||||
"Develops maximum performance and speed",
|
||||
"Improves health and\nrecovery capacity",
|
||||
"Improves endurance\nand fat burning",
|
||||
"Improves Aerobic\nfitness",
|
||||
"Improves maximum\nperformance capacity",
|
||||
"Develops maximum\nperformance and speed",
|
||||
],
|
||||
[
|
||||
"55-65% of Max Heart Rate",
|
||||
"65-75% of Max Heart Rate",
|
||||
"80-85% of Max Heart Rate",
|
||||
"85-88% of Max Heart Rate",
|
||||
"90% of Max Heart Rate",
|
||||
"90%+ of Max Heart Rate",
|
||||
],
|
||||
[zone_metrics["zones"][i]["hr_bpm"] for i in range(5)],
|
||||
[zone_metrics["zones"][i]["speed"] for i in range(5)],
|
||||
@@ -1266,22 +1266,12 @@ class ContextGenerator:
|
||||
[zone_metrics["zones"][i]["carb"] for i in range(5)],
|
||||
[zone_metrics["zones"][i]["breathing"] for i in range(5)],
|
||||
]
|
||||
hr_zones_colors = [
|
||||
["#ffffff"] * 5,
|
||||
["#ffffff"] * 5,
|
||||
["#ffcdd2", "#ffcdd2", "#fff9c4", "#c8e6c9", "#c8e6c9"],
|
||||
["#ffffff"] * 5,
|
||||
["#ffffff"] * 5,
|
||||
["#ffffff"] * 5,
|
||||
["#ffffff"] * 5,
|
||||
["#ffcdd2", "#ffcdd2", "#fff9c4", "#c8e6c9", "#c8e6c9"],
|
||||
]
|
||||
|
||||
# Colors are now handled directly in the graph generator to match notebook
|
||||
# No need to pass cell_colors
|
||||
contexts["page_8"]["hr_zones_table"] = (
|
||||
graph_generator.generate_heart_rate_zones_table(
|
||||
data=hr_zones_data,
|
||||
columns=hr_zones_columns,
|
||||
cell_colors=hr_zones_colors,
|
||||
save_as_base64=True,
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user