Запрос SQLite: выберите каждую вторую строку с многоуровневым индексом - PullRequest
0 голосов
/ 12 марта 2020

Для задания мне нужно найти время реакции на основе данных эксперимента с мышью. Для этой части задания мне нужно выбрать каждую первую строку из столбцов пользователя, проб и времени, где отметка времени не равна нулю:

Давайте сначала исследуем следующее предлагаемое определение: реакция время для испытания - первая ненулевая отметка времени в таблице путей. Причина этого выбора заключается в следующем: операционная система отправляет обновления о положении мыши в компьютерную программу только в том случае, если мышь фактически перемещена. Следовательно, это будет соответствовать первому перемещению мыши после появления цели.

Используйте запрос SQL, чтобы создать таблицу со столбцами, содержащими идентификатор пользователя, идентификатор испытания и время реакции в соответствии с этим. определение. Сохраните сам запрос в виде строки в переменной query_reaction_1. Сохраните таблицу в кадре данных с именем df_reaction_1. Переименуйте столбцы в «user», «trial» и «response_time_1». Установите для индекса df_reaction_1 значение ['user', 'trial'].

Итак, я написал следующий код:

query_reaction_1 = '''
    SELECT user, trial , MIN(t) AS "reaction_time_1"
    FROM paths
    WHERE t > 0
    GROUP BY trial
    '''
df_reaction_1 = pd.read_sql_query(query_reaction_1, conn_experiment).set_index(['user','trial'])

, который я считал, даст мне самое низкое значение каждого испытания, где отметка времени больше нуля. Вместо этого я получил

[            reaction_time_1
 user trial                 
 716  0             0.289951
      1             0.340627
 1805 2             0.390221
      3             0.292502
 716  4             0.263152
 2798 5             0.000798
 2467 6             0.001771
 1010 7             0.000476
 845  8             0.001806
 355  9             0.001337
 1724 10            0.001048
 1655 11            0.000864
 422  12            0.000984
 972  13            0.001077
 143  14            0.000552
 2313 15            0.001089
 1381 16            0.001190
 133  17            0.008049
 2079 18            0.001317
 355  19            0.000810
 1618 20            0.000383
 440  21            0.000766
 831  22            0.001102
 2698 23            0.002148
 1775 24            0.001681
 1504 25            0.003318
 2860 26            0.001677
 983  27            0.001730
 293  28            0.004176
 2147 29            0.001141
 ...                     ...
 2249 67            0.133002
 205  68            0.281682
 2871 69            0.142689
 366  70            0.020042
 1086 71            0.178978
      72            0.330284
 2847 73            0.317462
 2871 74            0.337271
 366  75            0.303912
 449  76            0.387284
 312  77            0.083590
 1086 78            0.341847
 366  79            0.001777
 1086 80            0.365535
 965  81            0.436551
 1571 82            0.458118
      83            0.388497
      84            0.497493
 2847 85            0.483023
      86            0.474587
 1571 87            0.441423
 2847 88            0.475590
 1571 89            0.178574
      90            0.483690
 2847 91            0.501311
 1571 92            0.397213
 2847 93            0.464619
      94            0.431014
      95            0.453860
      96            0.528495

Для некоторых из них я мог бы полагать, что они были очень быстрыми, но я не думаю, что время реакции может быть 0,000864 секунды.

Существует также тот факт, что когда я просто использую функцию df_paths.head(), с df_paths в качестве версии dataframe части путей базы данных, я получаю это:

[                      x   y
 user trial t               
 1226 5     0.000000   0   2
            2.334113  -2  -2
            2.348045  -5  -8
            2.361388  -9 -14
            2.369874 -12 -17]

Но если я выполню df_reaction_1.loc[[1226,5],:] , он возвращает пустую рамку, что говорит о том, что они не находятся в рамке df_reaction_1.

Кто-нибудь из вас знает, где что-то идет не так и как я могу это исправить?

Или Я делаю это правильно, и у людей действительно есть такие времена реакции?

Редактировать:

Я теперь добавил user к части GROUP BY, что означает, что теперь это

query_reaction_1 = '''
    SELECT user, trial , MIN(t) AS "reaction_time_1"
    FROM paths
    WHERE t > 0
    GROUP BY user, trial
    '''

Что также заставило пользователя 1226 появиться в индексе. df_reaction_1 теперь показывает

[            reaction_time_1
 user trial                 
 1    5             0.324846
      6             0.393842
      7             0.423749
      8             0.443900
      9             0.367530
      10            0.468536
      11            0.366834
      12            0.503146
      13            0.249816
      14            0.383003
      15            0.477718
      16            0.416280
      17            0.504980
      18            0.706420
      19            0.298123
      20            0.516621
      21            0.553745
      22            0.480228
      23            0.409048
      24            0.454911
      25            0.504354
      26            0.554510
      27            0.571132
      28            0.557804
      29            0.520687
      30            0.524451
      31            0.475840
      32            0.518764
      33            0.629982
      34            0.195311
 ...                     ...
 2995 5             0.416200
      6             0.398748
      7             0.400937
      8             0.326452
      9             0.301367
      10            0.460324
      11            0.330990
      12            0.677126
      13            0.473631
      14            0.651821
      15            0.403097
      16            0.138970
      17            0.338505
      18            0.323884
      19            0.446353
      20            0.456253
      21            0.717606
      22            0.951657
      23            0.603192
      24            0.793026
      25            0.702073
      26            0.509107
      27            0.553334
      28            0.532367
      29            0.563675
      30            0.991101
      31            0.772922
      32            1.523124
      33            0.612417
      34            0.598583

, что больше, чем я ожидал, но все еще очень быстро, если вы спросите меня. Это возможно для времени реакции, или все еще что-то не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...