Уже больше месяца экспериментирую, исследую, как разные схемы (паттерны) осознанного дыхания влияют на вариабельность сердечного ритма (Heart Rate Variability, HRV на чуждом языке). В скромной, но не совсем уж крошечной Excel-таблице со столбцами “Паттерн”, “HRV”, “Пульс” набралось 258 записей и мне понадобилось выбрать победителя -- дыхательный паттерн, дающий на выходе максимальное значение HRV. Не вручную же сортировать эти записи!

Да, я знаю: есть Pivot Table & Power Query. Но Pivot Table мне не по душе необходимостью после каждого изменения таблицы-источника делать REFRESH, во-первых, избыточной сложностью создания, во-вторых. И просто так не нравятся Pivot Table, что главное. Что же касается Power Query, то сочетание слов вызывает у меня трепет и учащенное сердцебиение: не понимаю, что это за зверь такой и насколько он страшный или полезный. 

Поэтому для подсчета результатов -- и выбора победителя -- применил относительно недавно появившуюся в Excel функцию GROUPBY в связке с XLOOKUP. И, раз уж пришлось группировать данные, решил сравнить нативные функции Excel с GROUPBY от Pandas (мы ведь помним, что сейчас Python можно запустить внутри Excel).  

Python в Excel? Почему бы и нет.
Python в Excel? Почему бы и нет.

Написал простой код: 

df = xl("Table5[#All]", headers=True) 

df = df.dropna(subset=['HRV']) 

#select patterns which are recorded >= 6 times 
patterns = df.breathing_pattern.to_list() 
patterns = list(set([i for i in patterns if patterns.count(i) >= 6])) 
df = df[df.breathing_pattern.isin(patterns)] 

patterns_efficacy = df.groupby("breathing_pattern").mean( 
['HRV','HR'] 
).astype(int).reset_index() 

patterns_efficacy = patterns_efficacy.sort_values(by=['HRV'], ascending=False) 

patterns_efficacy 

Поместил код через =PY( в ячейку А1 Excel

И он прекрасно справился с задачей и выдал таблицу с результатами: 

 

breathing_pattern 

HRV 

HR 

physiological sighs moderate 

59 

65 

physiological sighs light 

57 

62 

4.4-6.6 

56 

59 

following pulse 

55 

61 

4.2-0-6.4-0 

53 

62 

6-6 

53 

61 

calming breathing: inhale through nose, slow exhale through mouth 

53 

61 

5-5 

52 

63 

count: 4 inhale nose, 6 exhale mouth 

52 

63 

Комбинация функций GROUPBY и XLOOKUP тоже отработала без изъянов:

Для группировки по HRV в ячейку E1 
  =GROUPBY(Table5[[#All],[breathing_pattern]],Table5[[#All],[HRV]], AVERAGE,3,0,-2) 

Для группировки по пульсу в ячейку E13 
  =GROUPBY(Table5[[#All],[breathing_pattern]],Table5[[#All],[HR]], AVERAGE,3,0,-2) 

И для объединения в одну общую таблицу в ячейку G2 
  =XLOOKUP(E2:E10,E14:E22,F14:F22,"not found") 

breathing_pattern 

HRV 

HR 

physiological sighs moderate 

59 

65 

physiological sighs light 

57 

63 

4.4-6.6 

56 

60 

following pulse 

55 

61 

4.2-0-6.4-0 

54 

63 

6-6 

54 

61 

calming breathing: inhale through nose, slow exhale through mouth 

53 

62 

5-5 

53 

63 

count: 4 inhale nose, 6 exhale mouth 

52 

63 

* Для внимательных: разница в данных между двумя таблицами -- плод Python-овского округления до целых чисел.  

* В “нативном” подходе нет отсечки паттернов с количеством замеров менее шести.

Выводы и наблюдения по теме: 

  1. В Python итоговая таблица сама автоматически изменяет размеры при добавлении новых паттернов. GROUPBY by Excel ведет себя так же, а вот связка GROUPBY&XLOOKUP уже потребует редактирования формул: нужно изменять адреса диапазонов ячеек, к которым обращается XLOOKUP. 

  1. Вопреки большему размеру Python-код мне кажется проще и для написания, и для чтения-понимания. Хотя писать код в ячейке Excel -- весьма извращенное удовольствие. 

  1. Исполнение кода Python требует интернет-соединения. 

 

Выводы и наблюдения не совсем по теме:  

  1. Для меня лично схема дыхания “physiological sighs light” (легкие физиогические вздохи) -- оптимальный выбор.  

  1. Более шести месяцев я придумывал, зачем мне может понадобиться живущий в Excel Python и наконец нашел. 

Буду благодарен за советы и критику. Постараюсь ответить на вопросы.

Only registered users can participate in poll. Log in, please.
Вы используете Python в Excel?
44.64%Нет, не знал (а) о нем25
25%Нет, глупая игрушка14
28.57%Не использую Excel16
1.79%Да, использую1
56 users voted. 11 users abstained.