mirror of
https://github.com/sstent/Garmin_Analyser.git
synced 2026-02-09 16:02:34 +00:00
sync 3
This commit is contained in:
@@ -744,6 +744,7 @@ class GarminWorkoutAnalyzer:
|
|||||||
'distance': self.get_value_safely(record, 'distance'),
|
'distance': self.get_value_safely(record, 'distance'),
|
||||||
'altitude': self.get_value_safely(record, 'enhanced_altitude'),
|
'altitude': self.get_value_safely(record, 'enhanced_altitude'),
|
||||||
'temperature': self.get_value_safely(record, 'temperature'),
|
'temperature': self.get_value_safely(record, 'temperature'),
|
||||||
|
'power': self.get_value_safely(record, 'power'), # ADD POWER FIELD
|
||||||
}
|
}
|
||||||
records.append(record_data)
|
records.append(record_data)
|
||||||
|
|
||||||
@@ -1079,13 +1080,17 @@ class GarminWorkoutAnalyzer:
|
|||||||
if 'heart_rate' in df.columns:
|
if 'heart_rate' in df.columns:
|
||||||
df['heart_rate'] = df['heart_rate'].clip(lower=0, upper=250)
|
df['heart_rate'] = df['heart_rate'].clip(lower=0, upper=250)
|
||||||
|
|
||||||
# Check for real power data availability with validation
|
# Enhanced power data validation
|
||||||
if 'power' in df.columns:
|
if 'power' in df.columns:
|
||||||
valid_power = df['power'].dropna()
|
# Convert to numeric and handle missing values
|
||||||
self.power_data_available = len(valid_power) > 10 and valid_power.mean() > 0
|
df['power'] = pd.to_numeric(df['power'], errors='coerce').fillna(0)
|
||||||
if self.power_data_available:
|
|
||||||
df['power'] = pd.to_numeric(df['power'], errors='coerce').fillna(0)
|
# Check if we have sufficient valid power data
|
||||||
df['power'] = df['power'].clip(lower=0, upper=2000)
|
valid_power = df[df['power'] > 0]
|
||||||
|
self.power_data_available = len(valid_power) > 10 and valid_power['power'].mean() > 0
|
||||||
|
|
||||||
|
# Clip values regardless of availability
|
||||||
|
df['power'] = df['power'].clip(lower=0, upper=2000)
|
||||||
|
|
||||||
if len(df) > 0:
|
if len(df) > 0:
|
||||||
if 'speed' in df.columns:
|
if 'speed' in df.columns:
|
||||||
@@ -1237,7 +1242,8 @@ class GarminWorkoutAnalyzer:
|
|||||||
('cadence', 'avg_cadence'),
|
('cadence', 'avg_cadence'),
|
||||||
('heart_rate', 'avg_hr'),
|
('heart_rate', 'avg_hr'),
|
||||||
('gradient', 'avg_gradient'),
|
('gradient', 'avg_gradient'),
|
||||||
('power_estimate', 'avg_power_estimate')
|
('power_estimate', 'avg_power_estimate'),
|
||||||
|
('power', 'avg_real_power')
|
||||||
]:
|
]:
|
||||||
if col in minute_df.columns and not minute_df[col].isna().all():
|
if col in minute_df.columns and not minute_df[col].isna().all():
|
||||||
minute_stats[stat_key] = minute_df[col].mean()
|
minute_stats[stat_key] = minute_df[col].mean()
|
||||||
@@ -1252,6 +1258,12 @@ class GarminWorkoutAnalyzer:
|
|||||||
alt_end = minute_df['altitude'].iloc[-1]
|
alt_end = minute_df['altitude'].iloc[-1]
|
||||||
minute_stats['elevation_change'] = alt_end - alt_start
|
minute_stats['elevation_change'] = alt_end - alt_start
|
||||||
|
|
||||||
|
# Add real power average if available
|
||||||
|
if 'power' in minute_df.columns and not minute_df['power'].isna().all():
|
||||||
|
minute_stats['avg_real_power'] = minute_df['power'].mean()
|
||||||
|
else:
|
||||||
|
minute_stats['avg_real_power'] = 0
|
||||||
|
|
||||||
minute_data.append(minute_stats)
|
minute_data.append(minute_stats)
|
||||||
|
|
||||||
return minute_data
|
return minute_data
|
||||||
|
|||||||
Reference in New Issue
Block a user