In [69]:
import scipy.io
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

In [62]:
def loadData(matlabFile):
    matlabDict = scipy.io.loadmat(matlabFile)
    lat = matlabDict['latency'][0]
    freq = len(matlabDict['data'][0])
    data = pd.DataFrame({'time':np.arange(lat,1.0+lat,1.0/freq)})
    channels = ['chan1','chan2','chan3','chan4','chan5','chan6','chan7','chan8','chan9','chan10','chan11','chan12','chan13','chan14','chan15','chan16']
    for i in range(len(matlabDict['channels'][0][0])):
        data[channels[i]] = matlabDict['data'][i]
    return data

In [77]:
def downSample(data,factor):
    coarseData = data.groupby(lambda x: int(np.floor(x/factor))).mean()
    return coarseData

In [83]:
def plotChannels(data,channels,plotOpts):
    if len(channels) > len(plotOpts):
        print 'ERROR: Must specify plot options for each channel'
        return
    for chan in range(len(channels)):
        plt.plot(data['time'],data[channels[chan]],plotOpts[chan])
    plt.xlabel('time (s)')
    plt.ylabel('Electrode reading')
    plt.legend(channels)

In [80]:
df = loadData('sample_clip.mat')
df.head(5)


Out[80]:
time chan1 chan2 chan3 chan4 chan5 chan6 chan7 chan8 chan9 chan10 chan11 chan12 chan13 chan14 chan15 chan16
0 0.0000 45.1775 8.485 45.465 27.9675 -48.98 -47.7075 33.79 112.52 99.545 -93.3525 19.785 38.9925 -112.1825 -128.92 -1.2825 9.4625
1 0.0025 42.1775 18.485 44.465 14.9675 -34.98 -49.7075 21.79 128.52 83.545 -90.3525 -0.215 39.9925 -95.1825 -127.92 4.7175 -1.5375
2 0.0050 32.1775 33.485 55.465 4.9675 -30.98 -37.7075 19.79 141.52 46.545 -82.3525 -0.215 45.9925 -96.1825 -133.92 9.7175 -16.5375
3 0.0075 37.1775 48.485 63.465 17.9675 -21.98 -25.7075 16.79 153.52 3.545 -83.3525 -0.215 42.9925 -120.1825 -133.92 26.7175 -23.5375
4 0.0100 44.1775 62.485 52.465 19.9675 -21.98 -35.7075 6.79 144.52 -9.455 -78.3525 -10.215 40.9925 -122.1825 -118.92 39.7175 -17.5375

In [81]:
df = downSample(df,5.0)
plotChannels(df,['chan1','chan2','chan7'],['b-','g-','r-'])



In [71]: