Как рассчитать корреляции попарно в pandas кадре данных - PullRequest
1 голос
/ 13 января 2020

У меня загружен этот набор данных из файла .csv.

Предположим, что фрейм данных df выглядит следующим образом (упрощено для этого поста):

Run_num  trial_name  unit_1_act  unit_2_act  unit_3_act  unit_4_act     
  0          trial1       0.0      0.000000      0.272244      0.006428   
  0          trial2       0.0      0.000000      0.898450      0.000729   
  0          trial3       0.0      0.893845      0.000000      0.000000   
  0          trial4       0.0      0.879367      0.000000      0.006312   
  1          trial1       0.0      0.000000      0.324059      0.013421   
  1          trial2       0.0      0.000000      0.284394      0.004305   
  1          trial3       0.0      0.492053      0.000000      0.000504   
  1          trial4       0.0      0.540394      0.000000      0.000000   
  2          trial1       0.0      0.000000      0.430504      0.105394   
  2          trial2       0.0      0.000000      0.549384      0.004934 
  2          trial3       0.0      0.879367      0.000000      0.000312   
  2          trial4       0.0      0.394034      0.000123      0.000000 

Итак, для каждого «run_num» существует четыре типа проб (т.е. trial1, trial2, trial3). , trial4), и каждый из этих типов испытаний имеет последовательность значений активации нескольких единиц , то есть unit_1_act, unit_2_act и др. c.

Меня интересует соотношение единицы деятельности между типами испытаний. Я хотел бы получить все попарные корреляции между действиями модуля между trial1, trial2, trial3 и trial4, для каждого номера прогона отдельно . Так, например, я бы хотел взять последовательность значений от unit_1_act до unit_4_act пробного прогона 1 и сопоставить ее с unit_1_act через unit_4_act всех других испытаний, в том же прогоне . В конце концов, я бы взял среднее значение по всем прогонам, чтобы увидеть общую корреляционную матрицу: испытание 1 против испытания 2, испытание 1 против испытания 3 и т. Д. c.

Я немного озадачен этим. Например, функция df.corr () работает со столбцами, и данные, для которых я хочу выполнить корреляцию, находятся внутри каждой строки (т. Е. Unit _ * _ act). Я мог бы потенциально изменить форму информационного кадра, чтобы активность модуля находилась в столбце, но я не думаю, что это работает, потому что мне нужно смотреть на корреляции только в пределах определенных c прогонов? И какова наилучшая форма вывода всех этих корреляций, учитывая, что я в конечном итоге захочу получить среднее значение, стандартное отклонение и т. Д. c между сериями?

Спасибо!

1 Ответ

1 голос
/ 13 января 2020

Сначала вы можете изменить форму вашего фрейма данных, чтобы сделать каждую пробу в виде столбца с set_index, stack и unstack.

print (df.set_index(['Run_num', 'trial_name']).stack().unstack(level='trial_name'))
trial_name            trial1    trial2    trial3    trial4
Run_num                                                   
0       unit_1_act  0.000000  0.000000  0.000000  0.000000
        unit_2_act  0.000000  0.000000  0.893845  0.879367
        unit_3_act  0.272244  0.898450  0.000000  0.000000
        unit_4_act  0.006428  0.000729  0.000000  0.006312
1       unit_1_act  0.000000  0.000000  0.000000  0.000000
        unit_2_act  0.000000  0.000000  0.492053  0.540394
        unit_3_act  0.324059  0.284394  0.000000  0.000000
        unit_4_act  0.013421  0.004305  0.000504  0.000000
2       unit_1_act  0.000000  0.000000  0.000000  0.000000
        unit_2_act  0.000000  0.000000  0.879367  0.394034
        unit_3_act  0.430504  0.549384  0.000000  0.000123
        unit_4_act  0.105394  0.004934  0.000312  0.000000

Затем используйте groupby, чтобы набрать corr за номер_процесса.

df_corr = df.set_index(['Run_num', 'trial_name']).stack().unstack(level='trial_name')\
           .groupby(level='Run_num').corr()
print (df_corr)
trial_name            trial1    trial2    trial3    trial4
Run_num trial_name                                        
0       trial1      1.000000  0.999765 -0.343824 -0.346886
        trial2      0.999765  1.000000 -0.333694 -0.336880
        trial3     -0.343824 -0.333694  1.000000  0.999977
        trial4     -0.346886 -0.336880  0.999977  1.000000
1       trial1      1.000000  0.999682 -0.352145 -0.351722
        trial2      0.999682  1.000000 -0.340504 -0.340060
        trial3     -0.352145 -0.340504  1.000000  1.000000
        trial4     -0.351722 -0.340060  1.000000  1.000000
2       trial1      1.000000  0.971875 -0.438267 -0.437924
        trial2      0.971875  1.000000 -0.337480 -0.337048
        trial3     -0.438267 -0.337480  1.000000  1.000000
        trial4     -0.437924 -0.337048  1.000000  1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...