У меня есть файл .csv, который я прочитал и имеет следующие столбцы данных:
Дата, Имя тренировки, Имя тренировки, Задание порядка, Вес, Количество повторений, Расстояние, Секунды, Заметки, Примечания тренировки
с примерами данных, выглядящими так:
14/7/16 16:15 Afternoon Workout Squat (Barbell) 1 20 5 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 2 40 5 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 3 60 5 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 4 77.5 6 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 5 77.5 6 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 6 77.5 6 0 0
14/7/16 16:15 Afternoon Workout Squat (Barbell) 7 77.5 6 0 0
N.B. Нет заметки или заметки тренировки пустые столбцы
# Removing useless data - i.e. Workout Name, Distance, Seconds, Notes and Workout Notes
data = data.drop(data.columns[[1,6,7,8,9]], axis=1)
# Removing time from date stamp
data['Date'] = pd.to_datetime(data['Date']);
data['Date'] = data['Date'].dt.date;
Я запускаю эту функцию, чтобы вычислить максимальное количество повторений из предоставленного веса и повторений
# calculating 1RM based on Wathan's formula`
def calculate_oneRepMax(weight, rep):
oneRepMax = (100*weight)/(48.8 +53.8*np.exp(-0.075*rep))
return oneRepMax;
# calculating 1RM for all values
data['1RM'] = calculate_oneRepMax(data['Weight'], data['Reps']);
Затем я хочу вычислить 1RM (одно повторение макс.) Для любого данного дня с предоставленными наборами для данного упражнения, например. найти 1RM для любого данного дня для приседания будет так.
get_oneRepMax(data, 'Squat (Barbell)')
# finding the 1RM for any given day
def get_oneRepMax(data, compExercise):
oneRepMax = pd.DataFrame(columns = data.columns)
# define starting variables
currentDate = data.loc[0, 'Date']
currentExercise = data.loc[0, 'Exercise Name']
currentRM = data.loc[0, '1RM']
# iterate to find the largest for given date
for index, row in data.iterrows():
newDate = data.iloc[index,0]
newExercise = data.iloc[index,1]
newRM = data.loc[index, '1RM']
if (newExercise == compExercise):
if (currentRM < newRM) and (newDate == currentDate):
currentRM = newRM
newRow = data.loc[index, :]
# record 1RM for given date
elif (newDate > currentDate):
oneRepMax = oneRepMax.append(newRow)
# resetting values
currentDate = newDate
currentRM = 0
currentExercise = newExercise
return oneRepMax;
Тогда моя проблема заключается в том, что я хочу отобразить данные год за годом на графике, но у меня возникают проблемы с разделением без запутывания. Я уверен, что есть более простой способ манипулировать данными для представления этой информации.