44 lines
1,003 B
Python
44 lines
1,003 B
Python
'''
|
|
Cardio data, filtered from various data sources
|
|
'''
|
|
from ...core.pandas import DataFrameT, check_dataframe
|
|
|
|
|
|
CARDIO = {
|
|
'Running',
|
|
'Running, treadmill',
|
|
'Cross training',
|
|
'Walking',
|
|
'Skating',
|
|
'Spinning',
|
|
'Skiing',
|
|
'Table tennis',
|
|
'Rope jumping',
|
|
}
|
|
# todo if it has HR data, take it into the account??
|
|
NOT_CARDIO = {
|
|
'Other',
|
|
}
|
|
|
|
|
|
@check_dataframe
|
|
def dataframe() -> DataFrameT:
|
|
assert len(CARDIO.intersection(NOT_CARDIO)) == 0, (CARDIO, NOT_CARDIO)
|
|
|
|
from .all import dataframe as DF
|
|
df = DF()
|
|
|
|
# not sure...
|
|
# df = df[df['heart_rate_avg'].notna()]
|
|
|
|
is_cardio = df['sport'].isin(CARDIO)
|
|
not_cardio = df['sport'].isin(NOT_CARDIO)
|
|
neither = ~is_cardio & ~not_cardio
|
|
# if neither -- count, but warn? or show error?
|
|
|
|
# todo error about the rest??
|
|
# todo append errors?
|
|
df.loc[neither, 'error'] = 'Unexpected exercise type, please mark as cardio or non-cardio'
|
|
df = df[is_cardio | neither]
|
|
|
|
return df
|