In [2]:
__author__ = 'marion'
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

In [3]:
#load OPenBCI EEG data

df = pd.read_csv("../data/jim_10filt_clean.csv", index_col = 'time')
#df = pd.read_csv("../data/motor_image1.csv", index_col = 'time')
df


Out[3]:
channel_0 channel_1 channel_2 channel_3 channel_4 channel_5 channel_6 channel_7 tag
time
1.407623e+09 0.060924 0.234627 0.169399 0.049241 0.062268 0.094208 0.024906 0.163164 0
1.407623e+09 0.060563 0.234358 0.169026 0.048893 0.061684 0.093850 0.024665 0.163382 0
1.407623e+09 0.060829 0.234428 0.169369 0.049006 0.062125 0.094021 0.024889 0.163201 0
1.407623e+09 0.061117 0.234705 0.169827 0.049346 0.062593 0.094386 0.025124 0.162996 0
1.407623e+09 0.060999 0.234644 0.169553 0.049271 0.062334 0.094269 0.024969 0.163119 0
1.407623e+09 0.060593 0.234379 0.169060 0.048905 0.061768 0.093883 0.024664 0.163309 0
1.407623e+09 0.060762 0.234407 0.169213 0.048921 0.061988 0.093922 0.024830 0.163275 0
1.407623e+09 0.061182 0.234696 0.169699 0.049339 0.062622 0.094387 0.025164 0.163026 0
1.407623e+09 0.060987 0.234597 0.169592 0.049276 0.062410 0.094323 0.024971 0.163023 0
1.407623e+09 0.060686 0.234439 0.169183 0.048995 0.061871 0.093983 0.024728 0.163280 0
1.407623e+09 0.060731 0.234458 0.169191 0.048921 0.061871 0.093913 0.024793 0.163436 0
1.407623e+09 0.061167 0.234690 0.169749 0.049319 0.062623 0.094400 0.025155 0.163025 0
1.407623e+09 0.061121 0.234751 0.169698 0.049383 0.062509 0.094416 0.025102 0.163150 0
1.407623e+09 0.060854 0.234633 0.169324 0.049141 0.062009 0.094099 0.024841 0.163388 0
1.407623e+09 0.060676 0.234467 0.169218 0.048898 0.061763 0.093852 0.024783 0.163492 0
1.407623e+09 0.061170 0.234754 0.169704 0.049307 0.062550 0.094306 0.025157 0.163195 0
1.407623e+09 0.061154 0.234792 0.169724 0.049412 0.062561 0.094433 0.025156 0.163152 0
1.407623e+09 0.060881 0.234603 0.169386 0.049188 0.062141 0.094161 0.024862 0.163249 0
1.407623e+09 0.060630 0.234392 0.169123 0.048900 0.061719 0.093867 0.024764 0.163447 0
1.407623e+09 0.061064 0.234612 0.169651 0.049229 0.062461 0.094285 0.025102 0.163115 0
1.407623e+09 0.061154 0.234732 0.169791 0.049429 0.062610 0.094500 0.025169 0.163070 0
1.407623e+09 0.060952 0.234672 0.169479 0.049277 0.062258 0.094268 0.024891 0.163286 0
1.407623e+09 0.060645 0.234436 0.169119 0.048931 0.061733 0.093906 0.024734 0.163504 0
1.407623e+09 0.061003 0.234549 0.169542 0.049150 0.062328 0.094202 0.025029 0.163225 0
1.407623e+09 0.061191 0.234744 0.169878 0.049439 0.062655 0.094506 0.025196 0.163054 0
1.407623e+09 0.061083 0.234682 0.169685 0.049358 0.062340 0.094336 0.025033 0.163232 0
1.407623e+09 0.060727 0.234536 0.169205 0.049038 0.061780 0.093978 0.024805 0.163542 0
1.407623e+09 0.060940 0.234569 0.169452 0.049117 0.062173 0.094118 0.024986 0.163346 0
1.407623e+09 0.061264 0.234856 0.169834 0.049477 0.062686 0.094514 0.025255 0.163151 0
1.407623e+09 0.061085 0.234769 0.169607 0.049383 0.062437 0.094383 0.025071 0.163204 0
1.407623e+09 0.060668 0.234457 0.169206 0.049022 0.061856 0.094015 0.024732 0.163329 0
1.407623e+09 0.060784 0.234452 0.169340 0.049016 0.062028 0.094042 0.024843 0.163291 0
1.407623e+09 0.061219 0.234781 0.169820 0.049451 0.062675 0.094503 0.025156 0.163094 0
1.407623e+09 0.061165 0.234862 0.169718 0.049477 0.062494 0.094461 0.025092 0.163291 0
1.407623e+09 0.060822 0.234628 0.169332 0.049158 0.061954 0.094116 0.024845 0.163400 0
1.407623e+09 0.060763 0.234474 0.169303 0.048992 0.061877 0.093988 0.024844 0.163424 0
1.407623e+09 0.061236 0.234814 0.169917 0.049412 0.062637 0.094464 0.025198 0.163155 0
1.407623e+09 0.061153 0.234795 0.169771 0.049441 0.062535 0.094489 0.025170 0.163153 0
1.407623e+09 0.060887 0.234610 0.169366 0.049187 0.062066 0.094176 0.024887 0.163342 0
1.407623e+09 0.060698 0.234424 0.169112 0.048931 0.061777 0.093892 0.024806 0.163486 0
1.407623e+09 0.061173 0.234752 0.169667 0.049325 0.062527 0.094339 0.025125 0.163192 0
1.407623e+09 0.061140 0.234784 0.169744 0.049438 0.062564 0.094462 0.025115 0.163100 0
1.407623e+09 0.060911 0.234625 0.169444 0.049236 0.062195 0.094222 0.024902 0.163231 0
1.407623e+09 0.060669 0.234473 0.169111 0.048975 0.061735 0.093912 0.024813 0.163502 0
1.407623e+09 0.061069 0.234648 0.169611 0.049273 0.062432 0.094266 0.025072 0.163161 0
1.407623e+09 0.061194 0.234783 0.169862 0.049475 0.062631 0.094486 0.025157 0.163108 0
1.407623e+09 0.060971 0.234700 0.169585 0.049321 0.062298 0.094257 0.024953 0.163211 0
1.407623e+09 0.060626 0.234469 0.169081 0.048980 0.061720 0.093898 0.024713 0.163476 0
1.407623e+09 0.060978 0.234619 0.169431 0.049183 0.062279 0.094149 0.024929 0.163302 0
1.407623e+09 0.061204 0.234828 0.169760 0.049478 0.062658 0.094485 0.025140 0.163122 0
1.407623e+09 0.061072 0.234769 0.169567 0.049380 0.062374 0.094340 0.025043 0.163234 0
1.407623e+09 0.060690 0.234478 0.169152 0.049010 0.061802 0.093958 0.024777 0.163439 0
1.407623e+09 0.060896 0.234536 0.169387 0.049079 0.062157 0.094094 0.024941 0.163318 0
1.407623e+09 0.061236 0.234843 0.169824 0.049457 0.062677 0.094518 0.025211 0.163112 0
1.407623e+09 0.061059 0.234734 0.169639 0.049358 0.062468 0.094393 0.025032 0.163135 0
1.407623e+09 0.060717 0.234446 0.169298 0.049014 0.061873 0.094009 0.024797 0.163318 0
1.407623e+09 0.060792 0.234473 0.169326 0.048989 0.062005 0.093978 0.024906 0.163344 0
1.407623e+09 0.061206 0.234831 0.169768 0.049410 0.062680 0.094454 0.025200 0.163091 0
1.407623e+09 0.061134 0.234825 0.169641 0.049418 0.062518 0.094400 0.025115 0.163234 0
1.407623e+09 0.060782 0.234609 0.169257 0.049136 0.061975 0.094080 0.024781 0.163397 0
... ... ... ... ... ... ... ... ...

16898 rows × 9 columns


In [8]:
#Show some simple stats for each channel
print df.describe()

#Mean of channel_0
channel_0_mean = df['channel_0'].mean()
print "==> channel_0 mean : %s" % channel_0_mean

#30th percentile of channel_0
channel_0_q30 = df['channel_0'].quantile(q=0.3)
print "==> channel_1 30th percentile : %s" % channel_0_q30

#Plot tag (class attribute)
df['tag'].plot(title="tag")


          channel_0     channel_1     channel_2     channel_3     channel_4  \
count  16898.000000  16898.000000  16898.000000  16898.000000  16898.000000   
mean       0.060581      0.234976      0.169115      0.048947      0.060877   
std        0.000823      0.000782      0.000825      0.000857      0.000927   
min        0.058706      0.233313      0.167168      0.046915      0.058386   
25%        0.060027      0.234489      0.168528      0.048355      0.060202   
50%        0.060508      0.234825      0.169075      0.048946      0.060799   
75%        0.061051      0.235205      0.169608      0.049513      0.061438   
max        0.063531      0.238387      0.171955      0.051835      0.064454   

          channel_5     channel_6     channel_7           tag  
count  16898.000000  16898.000000  16898.000000  16898.000000  
mean       0.093356      0.024358      0.163403     48.707539  
std        0.000788      0.000820      0.000699     32.205042  
min        0.091784      0.022494      0.162022      0.000000  
25%        0.092786      0.023805      0.163040      0.000000  
50%        0.093283      0.024279      0.163315     70.000000  
75%        0.093780      0.024835      0.163526     70.000000  
max        0.096187      0.027219      0.165995     70.000000  

[8 rows x 9 columns]
==> channel_0 mean : 0.0605810489199
==> channel_1 30th percentile : 0.0601130843163
Out[8]:
<matplotlib.axes.AxesSubplot at 0x10ed614d0>

In [16]:
df.keys()


Out[16]:
Index([u'channel_0', u'channel_1', u'channel_2', u'channel_3', u'channel_4', u'channel_5', u'channel_6', u'channel_7', u'tag'], dtype='object')

In [17]:
channels = [k for k in df.keys() if k != 'tag']

In [18]:
channels


Out[18]:
['channel_0',
 'channel_1',
 'channel_2',
 'channel_3',
 'channel_4',
 'channel_5',
 'channel_6',
 'channel_7']

In [19]:
for c in channels:
    plt.figure(c)
    df[c].plot(figsize=(20,5), title=c)



In [20]:
var_channel1 = pd.rolling_var(df['channel_1'], 100)
mean_channel1 = pd.rolling_mean(df['channel_1'], 100)

In [21]:
var_channel1.plot()
plt.figure()
mean_channel1.plot()


Out[21]:
<matplotlib.axes.AxesSubplot at 0x10b7e6210>

In [22]:
df[channels].plot(figsize=(20,5))


Out[22]:
<matplotlib.axes.AxesSubplot at 0x10b721c50>

In [23]:
df[channels].plot(kind='scatter', x='channel_1', y='channel_2')


Out[23]:
<matplotlib.axes.AxesSubplot at 0x10e49d690>

In [24]:
tag_0 = df[df['tag'] == 0]
tag_70 = df[df['tag'] == 70]
tag_70[channels].plot()


Out[24]:
<matplotlib.axes.AxesSubplot at 0x10d0640d0>

In [25]:
# .index is to build an index
idx_0 = df.index[df['tag'] == 0]
idx_70 = df.index[df['tag'] == 70]

# .ix is to use the index
df.ix[idx_0]


Out[25]:
channel_0 channel_1 channel_2 channel_3 channel_4 channel_5 channel_6 channel_7 tag
time
1.407623e+09 0.060924 0.234627 0.169399 0.049241 0.062268 0.094208 0.024906 0.163164 0
1.407623e+09 0.060563 0.234358 0.169026 0.048893 0.061684 0.093850 0.024665 0.163382 0
1.407623e+09 0.060829 0.234428 0.169369 0.049006 0.062125 0.094021 0.024889 0.163201 0
1.407623e+09 0.061117 0.234705 0.169827 0.049346 0.062593 0.094386 0.025124 0.162996 0
1.407623e+09 0.060999 0.234644 0.169553 0.049271 0.062334 0.094269 0.024969 0.163119 0
1.407623e+09 0.060563 0.234358 0.169026 0.048893 0.061684 0.093850 0.024665 0.163382 0
1.407623e+09 0.060829 0.234428 0.169369 0.049006 0.062125 0.094021 0.024889 0.163201 0
1.407623e+09 0.061117 0.234705 0.169827 0.049346 0.062593 0.094386 0.025124 0.162996 0
1.407623e+09 0.060999 0.234644 0.169553 0.049271 0.062334 0.094269 0.024969 0.163119 0
1.407623e+09 0.060563 0.234358 0.169026 0.048893 0.061684 0.093850 0.024665 0.163382 0
1.407623e+09 0.060829 0.234428 0.169369 0.049006 0.062125 0.094021 0.024889 0.163201 0
1.407623e+09 0.061117 0.234705 0.169827 0.049346 0.062593 0.094386 0.025124 0.162996 0
1.407623e+09 0.060999 0.234644 0.169553 0.049271 0.062334 0.094269 0.024969 0.163119 0
1.407623e+09 0.060563 0.234358 0.169026 0.048893 0.061684 0.093850 0.024665 0.163382 0
1.407623e+09 0.060829 0.234428 0.169369 0.049006 0.062125 0.094021 0.024889 0.163201 0
1.407623e+09 0.061117 0.234705 0.169827 0.049346 0.062593 0.094386 0.025124 0.162996 0
1.407623e+09 0.060999 0.234644 0.169553 0.049271 0.062334 0.094269 0.024969 0.163119 0
1.407623e+09 0.060593 0.234379 0.169060 0.048905 0.061768 0.093883 0.024664 0.163309 0
1.407623e+09 0.060762 0.234407 0.169213 0.048921 0.061988 0.093922 0.024830 0.163275 0
1.407623e+09 0.061182 0.234696 0.169699 0.049339 0.062622 0.094387 0.025164 0.163026 0
1.407623e+09 0.060987 0.234597 0.169592 0.049276 0.062410 0.094323 0.024971 0.163023 0
1.407623e+09 0.060593 0.234379 0.169060 0.048905 0.061768 0.093883 0.024664 0.163309 0
1.407623e+09 0.060762 0.234407 0.169213 0.048921 0.061988 0.093922 0.024830 0.163275 0
1.407623e+09 0.061182 0.234696 0.169699 0.049339 0.062622 0.094387 0.025164 0.163026 0
1.407623e+09 0.060987 0.234597 0.169592 0.049276 0.062410 0.094323 0.024971 0.163023 0
1.407623e+09 0.060593 0.234379 0.169060 0.048905 0.061768 0.093883 0.024664 0.163309 0
1.407623e+09 0.060762 0.234407 0.169213 0.048921 0.061988 0.093922 0.024830 0.163275 0
1.407623e+09 0.061182 0.234696 0.169699 0.049339 0.062622 0.094387 0.025164 0.163026 0
1.407623e+09 0.060987 0.234597 0.169592 0.049276 0.062410 0.094323 0.024971 0.163023 0
1.407623e+09 0.060593 0.234379 0.169060 0.048905 0.061768 0.093883 0.024664 0.163309 0
1.407623e+09 0.060762 0.234407 0.169213 0.048921 0.061988 0.093922 0.024830 0.163275 0
1.407623e+09 0.061182 0.234696 0.169699 0.049339 0.062622 0.094387 0.025164 0.163026 0
1.407623e+09 0.060987 0.234597 0.169592 0.049276 0.062410 0.094323 0.024971 0.163023 0
1.407623e+09 0.060686 0.234439 0.169183 0.048995 0.061871 0.093983 0.024728 0.163280 0
1.407623e+09 0.060731 0.234458 0.169191 0.048921 0.061871 0.093913 0.024793 0.163436 0
1.407623e+09 0.061167 0.234690 0.169749 0.049319 0.062623 0.094400 0.025155 0.163025 0
1.407623e+09 0.061121 0.234751 0.169698 0.049383 0.062509 0.094416 0.025102 0.163150 0
1.407623e+09 0.060686 0.234439 0.169183 0.048995 0.061871 0.093983 0.024728 0.163280 0
1.407623e+09 0.060731 0.234458 0.169191 0.048921 0.061871 0.093913 0.024793 0.163436 0
1.407623e+09 0.061167 0.234690 0.169749 0.049319 0.062623 0.094400 0.025155 0.163025 0
1.407623e+09 0.061121 0.234751 0.169698 0.049383 0.062509 0.094416 0.025102 0.163150 0
1.407623e+09 0.060686 0.234439 0.169183 0.048995 0.061871 0.093983 0.024728 0.163280 0
1.407623e+09 0.060731 0.234458 0.169191 0.048921 0.061871 0.093913 0.024793 0.163436 0
1.407623e+09 0.061167 0.234690 0.169749 0.049319 0.062623 0.094400 0.025155 0.163025 0
1.407623e+09 0.061121 0.234751 0.169698 0.049383 0.062509 0.094416 0.025102 0.163150 0
1.407623e+09 0.060686 0.234439 0.169183 0.048995 0.061871 0.093983 0.024728 0.163280 0
1.407623e+09 0.060731 0.234458 0.169191 0.048921 0.061871 0.093913 0.024793 0.163436 0
1.407623e+09 0.061167 0.234690 0.169749 0.049319 0.062623 0.094400 0.025155 0.163025 0
1.407623e+09 0.061121 0.234751 0.169698 0.049383 0.062509 0.094416 0.025102 0.163150 0
1.407623e+09 0.060854 0.234633 0.169324 0.049141 0.062009 0.094099 0.024841 0.163388 0
1.407623e+09 0.060676 0.234467 0.169218 0.048898 0.061763 0.093852 0.024783 0.163492 0
1.407623e+09 0.061170 0.234754 0.169704 0.049307 0.062550 0.094306 0.025157 0.163195 0
1.407623e+09 0.061154 0.234792 0.169724 0.049412 0.062561 0.094433 0.025156 0.163152 0
1.407623e+09 0.060854 0.234633 0.169324 0.049141 0.062009 0.094099 0.024841 0.163388 0
1.407623e+09 0.060676 0.234467 0.169218 0.048898 0.061763 0.093852 0.024783 0.163492 0
1.407623e+09 0.061170 0.234754 0.169704 0.049307 0.062550 0.094306 0.025157 0.163195 0
1.407623e+09 0.061154 0.234792 0.169724 0.049412 0.062561 0.094433 0.025156 0.163152 0
1.407623e+09 0.060854 0.234633 0.169324 0.049141 0.062009 0.094099 0.024841 0.163388 0
1.407623e+09 0.060676 0.234467 0.169218 0.048898 0.061763 0.093852 0.024783 0.163492 0
1.407623e+09 0.061170 0.234754 0.169704 0.049307 0.062550 0.094306 0.025157 0.163195 0
... ... ... ... ... ... ... ... ...

20688 rows × 9 columns


In [26]:
plt.figure()
df['channel_1'].ix[idx_0].plot()
df['channel_1'].ix[idx_70].plot(color='red')


Out[26]:
<matplotlib.axes.AxesSubplot at 0x10cff2610>

In [9]:
#df[channels].plot(kind='scatter', x='channel_1', y='channel_2')