Séance 5

import pandas

Préparation des données

Lecture du fichier excel, puis merge avec les bonnes distances en mètres.

df = pandas.read_excel("Donnees_M2_RD.xlsx")
dist_i_m = pandas.DataFrame(
    { "Dist_I_m": [ 0.2, 0.3, 0.4, 0.6, 0.8 ] },
    index = [1,2,3,4,5]
)
dist_e_m = pandas.DataFrame(
    { "Dist_E_m": [ 2, 3, 4, 6, 8 ] },
    index = [1,2,3,4,5]
)
df_e = df[df['Space'] == 'E']
df1 = pandas.merge(df_e, dist_e_m, left_on='Dist_A', right_index=True)
df2 = df1.rename(columns={ 'Dist_E_m': 'Dist_A_m' })
df3 = pandas.merge(df2, dist_e_m, left_on='Dist_B', right_index=True)
df_e_m = df3.rename(columns={ 'Dist_E_m': 'Dist_B_m' })
df_i = df[df['Space'] == 'I']
df1 = pandas.merge(df_i, dist_i_m, left_on='Dist_A', right_index=True)
df2 = df1.rename(columns={ 'Dist_I_m': 'Dist_A_m' })
df3 = pandas.merge(df2, dist_i_m, left_on='Dist_B', right_index=True)
df_i_m = df3.rename(columns={ 'Dist_I_m': 'Dist_B_m' })
df_m = pandas.concat([df_e_m,df_i_m])
df_m

Subject Name_A Name_B Dist_A Dist_B Mode Space Side Response RT Dist_A_m Dist_B_m
0 P_ADI_331 0 2 2 4 Dic E D 2 18865 3.0 6.0
4 P_ADI_331 1 2 2 4 Dic E D 1 11801 3.0 6.0
7 P_ADI_331 0 3 2 4 Dic E D 1 13237 3.0 6.0
36 P_ADI_331 3 1 2 4 Dic E D 1 9523 3.0 6.0
51 P_ADI_331 2 4 2 4 Dio E G 1 11331 3.0 6.0
... ... ... ... ... ... ... ... ... ... ... ... ...
9498 P_VAR_330 4 2 4 3 Dic I G 2 4811 0.6 0.4
9503 P_VAR_330 3 0 4 3 Dic I G 2 6628 0.6 0.4
9526 P_VAR_330 0 1 4 3 Dic I G 2 5458 0.6 0.4
9535 P_VAR_330 2 4 4 3 Dic I G 1 8956 0.6 0.4
9546 P_VAR_330 2 3 4 3 Dio I D 2 13525 0.6 0.4

9594 rows × 12 columns

Une première courbe

  • Créer une Series contenant le temps de réaction moyen en fonction de la distance A en mètres
  • Tracer la courbe correspondant à la série
  • Créer la série et tracer la courbe correspondante pour la distance B.
rt_by_distam = df_m.groupby(by='Dist_A_m')['RT'].mean()
rt_by_distam.plot()
rt_by_distbm = df_m.groupby(by='Dist_B_m')['RT'].mean()
rt_by_distbm.plot()
<AxesSubplot:xlabel='Dist_B_m'>

png

Box plot temps de réaction vs différence de distance

  • Ajouter au besoin une colonne pour la différence entre Dist_A et Dist_B
  • Faire un box plot du temps de réaction selon la différence de distance
  • Faire un deuxième box plot en se limitant aux essais réussis et un troisième pour les échecs
df_m['diff_dist'] = df_m['Dist_A'] - df_m['Dist_B']
df_m.plot.box(by='diff_dist', column='RT', showfliers=False)
RT    AxesSubplot(0.125,0.125;0.775x0.755)
dtype: object

png

Les essais réussis

reussites = (
    ((df_m['Response'] == 1) & (df_m['Dist_A'] < df_m['Dist_B'])) 
  | ((df_m['Response'] == 2) & (df_m['Dist_A'] > df_m['Dist_B']))
)
df_m["reussit"] = reussites
df_m

Subject Name_A Name_B Dist_A Dist_B Mode Space Side Response RT Dist_A_m Dist_B_m diff_dist reussit
0 P_ADI_331 0 2 2 4 Dic E D 2 18865 3.0 6.0 -2 False
4 P_ADI_331 1 2 2 4 Dic E D 1 11801 3.0 6.0 -2 True
7 P_ADI_331 0 3 2 4 Dic E D 1 13237 3.0 6.0 -2 True
36 P_ADI_331 3 1 2 4 Dic E D 1 9523 3.0 6.0 -2 True
51 P_ADI_331 2 4 2 4 Dio E G 1 11331 3.0 6.0 -2 True
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
9498 P_VAR_330 4 2 4 3 Dic I G 2 4811 0.6 0.4 1 True
9503 P_VAR_330 3 0 4 3 Dic I G 2 6628 0.6 0.4 1 True
9526 P_VAR_330 0 1 4 3 Dic I G 2 5458 0.6 0.4 1 True
9535 P_VAR_330 2 4 4 3 Dic I G 1 8956 0.6 0.4 1 False
9546 P_VAR_330 2 3 4 3 Dio I D 2 13525 0.6 0.4 1 True

9594 rows × 14 columns

df_m[df_m['reussit']].plot.box(by='diff_dist', column='RT', showfliers=False)
df_m[~df_m['reussit']].plot.box(by='diff_dist', column='RT', showfliers=False)
RT    AxesSubplot(0.125,0.125;0.775x0.755)
dtype: object

png

png

Emmanuel Coquery
Emmanuel Coquery
Maître de conférences en Informatique