This is an initial analysis of the data collected in the experiment comparing EyeSwipe1 to EyeSwipe2. The 13 participants performed 16 (distributed equally in 4 different days) 5-minute sessions with each keyboard. After each typing session the participants performed a layout expertise session with half of the keys in the keyboard. The two layout modes (hidden or visible) alternated after each typing session.
Some participants had problems with the calibration in all sessions and will be removed from the analysis. Other participants had calibration problems in specific days or sessions. We still have to decide how to handle these cases.
The plots are interactive, but GitHub can't display the interactive widgets. To be able to interact with the data you will need to clone this repository and run jupyter notebook from the root folder.
You can use the controls to hide/show data from a particular participant.
In [1]:
%matplotlib notebook
# Imports
import pandas as pd
from data_handler import load_data, compute_mean_values, DataPlotter
typing_df, gesture_df, layout_df, participants = load_data()
# Remove participants with severe calibration problems
participants.remove('A04')
participants.remove('A08')
participants.remove('A09')
participants.remove('A11')
typing_df = typing_df[typing_df['participant_id'].isin(participants)]
gesture_df = gesture_df[gesture_df['participant_id'].isin(participants)]
layout_df = layout_df[layout_df['participant_id'].isin(participants)]
In [12]:
sentence_count = typing_df.groupby(('participant_id', 'mode_id', 'session_id'))['trial_id'].count().reset_index()
sentence_count.rename(columns={'trial_id': 'trials'}, inplace=True)
DataPlotter('trials', sentence_count, participants).show()
In [2]:
DataPlotter('wpm', typing_df, participants).show(ylim=(0, 25))
In [3]:
wpm1 = compute_mean_values(typing_df, 'eyeswipe1', 'wpm')
wpm1.columns = ['EyeSwipe1 (wpm)']
wpm2 = compute_mean_values(typing_df, 'eyeswipe2', 'wpm')
wpm2.columns = ['EyeSwipe2 (wpm)']
pd.concat([wpm1, wpm2], axis=1, join='inner')
Out[3]:
In [4]:
# Compute length of typed and expected sentences
typing_df['lexp'] = typing_df['expected_sentence'].str.len()
typing_df['ltyp'] = typing_df['typed_sentence'].str.len()
# Compute MSD error rate
typing_df['error rate'] = typing_df.msd / typing_df[['lexp', 'ltyp']].max(axis=1) * 100
# Plot
DataPlotter('error rate', typing_df, participants).show(ylim=(0, 20))
In [5]:
DataPlotter('selection_count', layout_df, participants).show(ylim=(0, 6))
In [6]:
DataPlotter('distance_to_target', layout_df, participants).show()
In [7]:
DataPlotter('reaction_time', layout_df, participants).show(ylim=(0, 800))
In [ ]: