def process_data(filename): data = RampExperiment.load_experiment(filename).data angle_map = {7: 12, 6: 17, 5: 22, 4: 27, 3: 33, 2: 39, 1: 45} data["angle"] = [angle_map[angle] for angle in data["angle"]] # workaround for timedelta since pandas can't take the mean of a timedelta: # http://stackoverflow.com/questions/20625982/ # split-apply-combine-on-pandas-timedelta-column data["rt"] = [rt.total_seconds() if rt else None for rt in data["rt"]] # remove subject 4 data = data.ix[1:3].append(data.ix[5:]) # SEM function sem = lambda x: np.std(x, ddof=1) / np.sqrt(len(x)) sem.__name__ = "sem" # split-apply-combine summary = data.groupby(["angle", "perception"]).aggregate([np.mean, sem]) summary["can step"] *= 100 return summary
#!/usr/bin/env python3.3 import numpy as np import rpy2.robjects as r import pandas.rpy.common as com from ramp import RampExperiment data = RampExperiment.load_experiment('exp1.dat').data angle_map = {7: 12, 6: 17, 5: 22, 4: 27, 3: 33, 2: 39, 1: 45} data['angle'] = [angle_map[angle] for angle in data['angle']] #workaround for timedelta since pandas can't take the mean of a timedelta: # http://stackoverflow.com/questions/20625982/split-apply-combine-on-pandas-timedelta-column data['rt'] = [rt.total_seconds() if rt else None for rt in data['rt']] # remove subject 4 data = data.ix[1:3].append(data.ix[5:]) # use int for response data['response'] = data['can step'].astype(int) # Means by subject means = data.reset_index().groupby(['participant', 'perception', 'angle']).mean() # arcsine transformation