In [2]:
%matplotlib inline
import pandas as pd

In [7]:
daily = pd.read_csv('extract.csv')
minutely = pd.read_csv('extract_raw.csv', index_col='time', parse_dates=['time'])
minutely.head()


Out[7]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawActivity RawSensorData
time
2015-06-01 18:57:00 Idle 0 0 0 0 0 3 0
2015-06-01 18:59:00 Idle 0 0 0 0 0 0 20
2015-06-01 19:00:00 Idle 0 0 0 0 0 0 10
2015-06-01 19:01:00 Idle 0 0 0 0 0 0 15
2015-06-01 19:02:00 Idle 0 0 0 0 0 0 17

In [4]:
# RawActivity
# 4 = light sleep
# 5 = deep sleep

In [9]:
minutely[(minutely['RawActivity'] == 4) | (minutely['RawActivity'] == 5)].head(20).plot(kind='bar', y='RawActivity')


Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x10d3ec828>

In [10]:
sleep = minutely[(minutely['RawActivity'] == 4) | (minutely['RawActivity'] == 5)]

In [27]:
sleep.groupby(pd.TimeGrouper(freq='5Min'))['RawActivity'].mean().round()


Out[27]:
time
2015-06-02 01:20:00     4
2015-06-02 01:25:00     5
2015-06-02 01:30:00     5
2015-06-02 01:35:00   NaN
2015-06-02 01:40:00   NaN
2015-06-02 01:45:00   NaN
2015-06-02 01:50:00     5
2015-06-02 01:55:00     5
2015-06-02 02:00:00     5
2015-06-02 02:05:00     5
2015-06-02 02:10:00     5
2015-06-02 02:15:00     4
2015-06-02 02:20:00     5
2015-06-02 02:25:00     5
2015-06-02 02:30:00     5
...
2015-06-24 04:45:00    5
2015-06-24 04:50:00    5
2015-06-24 04:55:00    5
2015-06-24 05:00:00    5
2015-06-24 05:05:00    5
2015-06-24 05:10:00    5
2015-06-24 05:15:00    5
2015-06-24 05:20:00    5
2015-06-24 05:25:00    5
2015-06-24 05:30:00    5
2015-06-24 05:35:00    5
2015-06-24 05:40:00    5
2015-06-24 05:45:00    5
2015-06-24 05:50:00    5
2015-06-24 05:55:00    4
Freq: 5T, Name: RawActivity, Length: 6392

In [49]:
from datetime import datetime
st = datetime(year=2015, month=6, day=24, hour=2, minute=44)
ed = datetime(year=2015, month=6, day=24, hour=3, minute=57)
sleep[st:ed].groupby('RawActivity').count()


Out[49]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 1 1 1 1 1 1 1
5 73 73 73 73 73 73 73

In [50]:
st = datetime(year=2015, month=6, day=24, hour=0, minute=43)
ed = datetime(year=2015, month=6, day=24, hour=1, minute=17)
sleep[st:ed].groupby('RawActivity').count()


Out[50]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 5 5 5 5 5 5 5
5 2 2 2 2 2 2 2

In [51]:
minutely[st:ed].groupby('RawActivity').count()


Out[51]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
0 27 27 27 27 27 27 27
4 5 5 5 5 5 5 5
5 2 2 2 2 2 2 2
11 1 1 1 1 1 1 1

In [68]:
st = datetime(year=2015, month=6, day=24, hour=1, minute=18)
ed = datetime(year=2015, month=6, day=24, hour=2, minute=17)
minutely[st:ed].groupby('RawActivity').count()


Out[68]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
5 60 60 60 60 60 60 60

In [67]:
st = datetime(year=2015, month=6, day=24, hour=2, minute=18)
ed = datetime(year=2015, month=6, day=24, hour=2, minute=43)
minutely[st:ed].groupby('RawActivity').count()


Out[67]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 8 8 8 8 8 8 8
5 18 18 18 18 18 18 18

In [66]:
st = datetime(year=2015, month=6, day=24, hour=2, minute=44)
ed = datetime(year=2015, month=6, day=24, hour=3, minute=57)
minutely[st:ed].groupby('RawActivity').count()


Out[66]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 1 1 1 1 1 1 1
5 73 73 73 73 73 73 73

In [75]:
st = datetime(year=2015, month=6, day=24, hour=2, minute=44)
ed = datetime(year=2015, month=6, day=24, hour=3, minute=57)
minutely[st:ed].values


Out[75]:
array([['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 3],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 2],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 4, 23],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 3],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 2],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 2],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 0],
       ['Sleep', 0, 0.0, 0.0, 0.0, 0.0, 5, 1]], dtype=object)

In [65]:
st = datetime(year=2015, month=6, day=24, hour=3, minute=58)
ed = datetime(year=2015, month=6, day=24, hour=4, minute=15)
minutely[st:ed].groupby('RawActivity').count()


Out[65]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 4 4 4 4 4 4 4
5 14 14 14 14 14 14 14

In [64]:
st = datetime(year=2015, month=6, day=24, hour=4, minute=16)
ed = datetime(year=2015, month=6, day=24, hour=4, minute=34)
minutely[st:ed].groupby('RawActivity').count()


Out[64]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
5 19 19 19 19 19 19 19

In [63]:
st = datetime(year=2015, month=6, day=24, hour=4, minute=35)
ed = datetime(year=2015, month=6, day=24, hour=4, minute=54)
minutely[st:ed].groupby('RawActivity').count()


Out[63]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 3 3 3 3 3 3 3
5 17 17 17 17 17 17 17

In [72]:
st = datetime(year=2015, month=6, day=24, hour=4, minute=35)
ed = datetime(year=2015, month=6, day=24, hour=4, minute=54)
minutely[st:ed]


Out[72]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawActivity RawSensorData
time
2015-06-24 04:35:00 Sleep 0 0 0 0 0 4 57
2015-06-24 04:36:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:37:00 Sleep 0 0 0 0 0 5 2
2015-06-24 04:38:00 Sleep 0 0 0 0 0 5 5
2015-06-24 04:39:00 Sleep 0 0 0 0 0 4 12
2015-06-24 04:40:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:41:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:42:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:43:00 Sleep 0 0 0 0 0 5 5
2015-06-24 04:44:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:45:00 Sleep 0 0 0 0 0 5 1
2015-06-24 04:46:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:47:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:48:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:49:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:50:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:51:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:52:00 Sleep 0 0 0 0 0 5 3
2015-06-24 04:53:00 Sleep 0 0 0 0 0 5 0
2015-06-24 04:54:00 Sleep 0 0 0 0 0 4 24

In [62]:
st = datetime(year=2015, month=6, day=24, hour=4, minute=55)
ed = datetime(year=2015, month=6, day=24, hour=5, minute=56)
minutely[st:ed].groupby('RawActivity').count()


Out[62]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
4 6 6 6 6 6 6 6
5 56 56 56 56 56 56 56

In [61]:
st = datetime(year=2015, month=6, day=24, hour=5, minute=58)
ed = datetime(year=2015, month=6, day=24, hour=6, minute=18)
minutely[st:ed].groupby('RawActivity').count()


Out[61]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
0 1 1 1 1 1 1 1
3 20 20 20 20 20 20 20

In [69]:
st = datetime(year=2015, month=6, day=24, hour=6, minute=19)
ed = datetime(year=2015, month=6, day=24, hour=7, minute=37)
minutely[st:ed].groupby('RawActivity').count()


Out[69]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
0 45 45 45 45 45 45 45
3 33 33 33 33 33 33 33
11 1 1 1 1 1 1 1

In [70]:
st = datetime(year=2015, month=6, day=24, hour=7, minute=38)
ed = datetime(year=2015, month=6, day=24, hour=7, minute=54)
minutely[st:ed].groupby('RawActivity').count()


Out[70]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawSensorData
RawActivity
0 17 17 17 17 17 17 17

In [104]:
st = datetime(year=2015, month=6, day=24, hour=1, minute=0)
ed = datetime(year=2015, month=6, day=24, hour=8, minute=0)
minutely[st:ed].groupby(pd.TimeGrouper(freq='2Min'))['RawActivity'].mean().round().plot()


Out[104]:
<matplotlib.axes._subplots.AxesSubplot at 0x11c66eba8>

In [105]:
st = datetime(year=2015, month=6, day=22, hour=0, minute=0)
ed = datetime(year=2015, month=6, day=22, hour=6, minute=55)
minutely[st:ed].groupby(pd.TimeGrouper(freq='2Min'))['RawActivity'].mean().round().plot()


Out[105]:
<matplotlib.axes._subplots.AxesSubplot at 0x11c713da0>

In [109]:
st = datetime(year=2015, month=6, day=20, hour=22, minute=41)
ed = datetime(year=2015, month=6, day=21, hour=8, minute=22)
minutely[st:ed].groupby(pd.TimeGrouper(freq='2Min'))['RawActivity'].mean().round().plot()


Out[109]:
<matplotlib.axes._subplots.AxesSubplot at 0x11c602780>

In [110]:
st = datetime(year=2015, month=6, day=19, hour=23, minute=51)
ed = datetime(year=2015, month=6, day=20, hour=6, minute=51)
minutely[st:ed].groupby(pd.TimeGrouper(freq='2Min'))['RawActivity'].mean().round().plot()


Out[110]:
<matplotlib.axes._subplots.AxesSubplot at 0x11c8da7f0>

In [119]:
st = datetime(year=2015, month=6, day=19, hour=23, minute=51)
ed = datetime(year=2015, month=6, day=20, hour=3, minute=0)
minutely[st:ed]['RawActivity'].value_counts()


Out[119]:
0     145
5      15
3      13
1      10
4       3
17      2
16      1
11      1
dtype: int64

In [ ]:
minutely[st:ed].groupby(pd.TimeGrouper(freq='2Min'))['RawActivity'].mean().round().plot()

In [121]:
from sklearn.ensemble import RandomForestClassifier

In [122]:
st = datetime(year=2015, month=6, day=24, hour=0, minute=0)
ed = datetime(year=2015, month=6, day=24, hour=23, minute=59)
minutely[st:ed]['RawActivity'].value_counts()


Out[122]:
5     259
0     155
3      53
1      28
4      27
17      6
12      2
11      2
82      1
66      1
33      1
16      1
dtype: int64

In [125]:
daily = pd.read_csv('extract.csv', index_col='Date', parse_dates=['Date', 'SleepStart', 'SleepEnd'])

In [126]:
daily.head()


Out[126]:
InBedMin DeepSleepMin LightSleepMin SleepStart SleepEnd AwakeMin DailyDistanceMeter DailySteps DailyBurnCalories WalkDistance ... BedHour BedMinute AwakeHour AwakeMinute DateUnix SleepStartUnix SleepEndUnix WalkStart WalkEnd RunkEnd
Date
2015-06-01 0 0 0 2015-05-31 17:00:00 2015-05-31 17:00:00 0 3229 4842 201 3163 ... 17 0 17 0 1433134800 1433109600 1433109600 1433163600 1433167440 1433167500
2015-06-02 311 168 143 2015-06-01 18:14:00 2015-06-01 23:29:00 4 9013 13336 555 8735 ... 18 14 23 29 1433221200 1433200440 1433200440 1433250000 1433260860 1433261040
2015-06-03 360 187 173 2015-06-02 19:04:00 2015-06-03 01:06:00 2 9497 14111 588 9171 ... 19 4 1 6 1433307600 1433289840 1433289840 1433336400 1433347680 1433347980
2015-06-04 471 227 244 2015-06-03 17:00:00 2015-06-04 00:51:00 0 7806 11694 494 7429 ... 17 0 0 51 1433394000 1433368800 1433368800 1433422800 1433432400 1433432700
2015-06-05 252 110 142 2015-06-04 19:07:00 2015-06-04 23:19:00 0 10363 14952 621 9895 ... 19 7 23 19 1433480400 1433462820 1433462820 1433509200 1433520240 1433520540

5 rows × 28 columns


In [131]:
known_day = daily.ix[datetime(year=2015, month=6, day=24)]
known_day


Out[131]:
InBedMin                              431
DeepSleepMin                          294
LightSleepMin                         137
SleepStart            2015-06-24 00:42:00
SleepEnd              2015-06-24 07:54:00
AwakeMin                                1
DailyDistanceMeter                   1560
DailySteps                           2223
DailyBurnCalories                     100
WalkDistance                         1225
WalkTimeMin                            27
WalkBurnCalories                       77
RunDistanceMeter                      335
RunTimeMin                              2
RunBurnCalories                        23
WalkRunSeconds                       1740
DateUS                       Jun 24, 2015
Activity                   Daily Activity
BedHour                                 0
BedMinute                              42
AwakeHour                               7
AwakeMinute                            54
DateUnix                       1435122000
SleepStartUnix                 1435124520
SleepEndUnix                   1435124520
WalkStart                      1435150800
WalkEnd                        1435152420
RunkEnd                        1435152540
Name: 2015-06-24 00:00:00, dtype: object

In [134]:
sleep_start, sleep_end = known_day['SleepStart'], known_day['SleepEnd']
sleep_start, sleep_end


Out[134]:
(Timestamp('2015-06-24 00:42:00'), Timestamp('2015-06-24 07:54:00'))

In [135]:
minutely[sleep_start:sleep_end]


Out[135]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawActivity RawSensorData
time
2015-06-24 00:42:00 Walk 19 12.64 0 0.82 0 1 75
2015-06-24 00:43:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:44:00 Idle 0 0.00 0 0.00 0 0 20
2015-06-24 00:45:00 Idle 0 0.00 0 0.00 0 0 8
2015-06-24 00:46:00 Idle 0 0.00 0 0.00 0 0 4
2015-06-24 00:47:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:48:00 Idle 0 0.00 0 0.00 0 0 2
2015-06-24 00:49:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:50:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:51:00 Idle 0 0.00 0 0.00 0 0 12
2015-06-24 00:52:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:53:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:54:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:55:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:56:00 Idle 0 0.00 0 0.00 0 0 52
2015-06-24 00:57:00 Idle 0 0.00 0 0.00 0 0 4
2015-06-24 00:58:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 00:59:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:00:00 Idle 0 0.00 0 0.00 0 0 2
2015-06-24 01:01:00 Idle 0 0.00 0 0.00 0 0 28
2015-06-24 01:02:00 Idle 0 0.00 0 0.00 0 0 1
2015-06-24 01:03:00 Idle 0 0.00 0 0.00 0 11 0
2015-06-24 01:04:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:05:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:06:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:07:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:08:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:09:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:10:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 01:11:00 Sleep 0 0.00 0 0.00 0 4 1
... ... ... ... ... ... ... ... ...
2015-06-24 07:25:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:26:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:27:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:28:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:29:00 Idle 0 0.00 0 0.00 0 0 1
2015-06-24 07:30:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:31:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:32:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:33:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:34:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:35:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:36:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:37:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:38:00 Idle 0 0.00 0 0.00 0 0 41
2015-06-24 07:39:00 Idle 0 0.00 0 0.00 0 0 7
2015-06-24 07:40:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:41:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:42:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:43:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:44:00 Idle 0 0.00 0 0.00 0 0 1
2015-06-24 07:45:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:46:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:47:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:48:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:49:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:50:00 Idle 0 0.00 0 0.00 0 0 53
2015-06-24 07:51:00 Idle 0 0.00 0 0.00 0 0 15
2015-06-24 07:52:00 Idle 0 0.00 0 0.00 0 0 0
2015-06-24 07:53:00 Idle 0 0.00 0 0.00 0 0 1
2015-06-24 07:54:00 Idle 0 0.00 0 0.00 0 0 2

433 rows × 8 columns


In [139]:
data = minutely[sleep_start:sleep_end].groupby(pd.TimeGrouper(freq='10Min'))

In [285]:
minutely[sleep_start:sleep_end].plot(y='RawSensorData')


Out[285]:
<matplotlib.axes._subplots.AxesSubplot at 0x11d3d4c50>

In [163]:
chunk = minutely[sleep_start:sleep_end]
chunk['RawActivity4'] = 0
chunk['RawActivity5'] = 0
chunk


Out[163]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawActivity RawSensorData RawActivity4 RawActivity5
time
2015-06-24 00:42:00 Walk 19 12.64 0 0.82 0 1 75 0 0
2015-06-24 00:43:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:44:00 Idle 0 0.00 0 0.00 0 0 20 0 0
2015-06-24 00:45:00 Idle 0 0.00 0 0.00 0 0 8 0 0
2015-06-24 00:46:00 Idle 0 0.00 0 0.00 0 0 4 0 0
2015-06-24 00:47:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:48:00 Idle 0 0.00 0 0.00 0 0 2 0 0
2015-06-24 00:49:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:50:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:51:00 Idle 0 0.00 0 0.00 0 0 12 0 0
2015-06-24 00:52:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:53:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:54:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:55:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:56:00 Idle 0 0.00 0 0.00 0 0 52 0 0
2015-06-24 00:57:00 Idle 0 0.00 0 0.00 0 0 4 0 0
2015-06-24 00:58:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:59:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:00:00 Idle 0 0.00 0 0.00 0 0 2 0 0
2015-06-24 01:01:00 Idle 0 0.00 0 0.00 0 0 28 0 0
2015-06-24 01:02:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 01:03:00 Idle 0 0.00 0 0.00 0 11 0 0 0
2015-06-24 01:04:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:05:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:06:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:07:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:08:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:09:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:10:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:11:00 Sleep 0 0.00 0 0.00 0 4 1 0 0
... ... ... ... ... ... ... ... ... ... ...
2015-06-24 07:25:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:26:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:27:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:28:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:29:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:30:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:31:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:32:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:33:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:34:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:35:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:36:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:37:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:38:00 Idle 0 0.00 0 0.00 0 0 41 0 0
2015-06-24 07:39:00 Idle 0 0.00 0 0.00 0 0 7 0 0
2015-06-24 07:40:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:41:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:42:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:43:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:44:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:45:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:46:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:47:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:48:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:49:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:50:00 Idle 0 0.00 0 0.00 0 0 53 0 0
2015-06-24 07:51:00 Idle 0 0.00 0 0.00 0 0 15 0 0
2015-06-24 07:52:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:53:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:54:00 Idle 0 0.00 0 0.00 0 0 2 0 0

433 rows × 10 columns


In [164]:
chunk.ix[chunk['RawActivity'] == 4, 'RawActivity4'] = 1
chunk.ix[chunk['RawActivity'] == 5, 'RawActivity5'] = 1
chunk


Out[164]:
description steps WalkDistance RunDistance WalkCalories RunCalories RawActivity RawSensorData RawActivity4 RawActivity5
time
2015-06-24 00:42:00 Walk 19 12.64 0 0.82 0 1 75 0 0
2015-06-24 00:43:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:44:00 Idle 0 0.00 0 0.00 0 0 20 0 0
2015-06-24 00:45:00 Idle 0 0.00 0 0.00 0 0 8 0 0
2015-06-24 00:46:00 Idle 0 0.00 0 0.00 0 0 4 0 0
2015-06-24 00:47:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:48:00 Idle 0 0.00 0 0.00 0 0 2 0 0
2015-06-24 00:49:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:50:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:51:00 Idle 0 0.00 0 0.00 0 0 12 0 0
2015-06-24 00:52:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:53:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:54:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:55:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:56:00 Idle 0 0.00 0 0.00 0 0 52 0 0
2015-06-24 00:57:00 Idle 0 0.00 0 0.00 0 0 4 0 0
2015-06-24 00:58:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 00:59:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:00:00 Idle 0 0.00 0 0.00 0 0 2 0 0
2015-06-24 01:01:00 Idle 0 0.00 0 0.00 0 0 28 0 0
2015-06-24 01:02:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 01:03:00 Idle 0 0.00 0 0.00 0 11 0 0 0
2015-06-24 01:04:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:05:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:06:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:07:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:08:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:09:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:10:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 01:11:00 Sleep 0 0.00 0 0.00 0 4 1 1 0
... ... ... ... ... ... ... ... ... ... ...
2015-06-24 07:25:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:26:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:27:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:28:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:29:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:30:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:31:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:32:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:33:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:34:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:35:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:36:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:37:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:38:00 Idle 0 0.00 0 0.00 0 0 41 0 0
2015-06-24 07:39:00 Idle 0 0.00 0 0.00 0 0 7 0 0
2015-06-24 07:40:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:41:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:42:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:43:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:44:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:45:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:46:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:47:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:48:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:49:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:50:00 Idle 0 0.00 0 0.00 0 0 53 0 0
2015-06-24 07:51:00 Idle 0 0.00 0 0.00 0 0 15 0 0
2015-06-24 07:52:00 Idle 0 0.00 0 0.00 0 0 0 0 0
2015-06-24 07:53:00 Idle 0 0.00 0 0.00 0 0 1 0 0
2015-06-24 07:54:00 Idle 0 0.00 0 0.00 0 0 2 0 0

433 rows × 10 columns


In [165]:
chunk['RawActivity4'].sum()


Out[165]:
27

In [166]:
chunk['RawActivity5'].sum()


Out[166]:
259

In [241]:
feats = chunk.groupby(pd.TimeGrouper(freq='5Min'))['RawActivity4', 'RawActivity5', 'RawSensorData'].sum()
feats


Out[241]:
RawActivity4 RawActivity5 RawSensorData
time
2015-06-24 00:40:00 0 0 95
2015-06-24 00:45:00 0 0 14
2015-06-24 00:50:00 0 0 12
2015-06-24 00:55:00 0 0 56
2015-06-24 01:00:00 0 0 31
2015-06-24 01:05:00 0 0 0
2015-06-24 01:10:00 3 1 87
2015-06-24 01:15:00 2 3 48
2015-06-24 01:20:00 0 5 3
2015-06-24 01:25:00 0 5 2
2015-06-24 01:30:00 0 5 7
2015-06-24 01:35:00 0 5 2
2015-06-24 01:40:00 0 5 5
2015-06-24 01:45:00 0 5 4
2015-06-24 01:50:00 0 5 7
2015-06-24 01:55:00 0 5 1
2015-06-24 02:00:00 0 5 2
2015-06-24 02:05:00 0 5 0
2015-06-24 02:10:00 0 5 3
2015-06-24 02:15:00 2 3 52
2015-06-24 02:20:00 1 4 22
2015-06-24 02:25:00 2 3 14
2015-06-24 02:30:00 1 4 15
2015-06-24 02:35:00 0 5 4
2015-06-24 02:40:00 2 3 65
2015-06-24 02:45:00 0 5 0
2015-06-24 02:50:00 0 5 0
2015-06-24 02:55:00 0 5 3
2015-06-24 03:00:00 0 5 0
2015-06-24 03:05:00 0 5 0
... ... ... ...
2015-06-24 05:25:00 0 5 2
2015-06-24 05:30:00 0 5 0
2015-06-24 05:35:00 0 5 1
2015-06-24 05:40:00 0 5 0
2015-06-24 05:45:00 0 5 1
2015-06-24 05:50:00 0 5 1
2015-06-24 05:55:00 2 0 196
2015-06-24 06:00:00 0 0 1
2015-06-24 06:05:00 0 0 15
2015-06-24 06:10:00 0 0 5
2015-06-24 06:15:00 0 0 6
2015-06-24 06:20:00 0 0 5
2015-06-24 06:25:00 0 0 1
2015-06-24 06:30:00 0 0 1
2015-06-24 06:35:00 0 0 4
2015-06-24 06:40:00 0 0 2
2015-06-24 06:45:00 0 0 4
2015-06-24 06:50:00 0 0 57
2015-06-24 06:55:00 0 0 2
2015-06-24 07:00:00 0 0 3
2015-06-24 07:05:00 0 0 2
2015-06-24 07:10:00 0 0 42
2015-06-24 07:15:00 0 0 0
2015-06-24 07:20:00 0 0 0
2015-06-24 07:25:00 0 0 1
2015-06-24 07:30:00 0 0 0
2015-06-24 07:35:00 0 0 48
2015-06-24 07:40:00 0 0 1
2015-06-24 07:45:00 0 0 0
2015-06-24 07:50:00 0 0 71

87 rows × 3 columns


In [290]:
deep_sleep = [
    (datetime(year=2015, month=6, day=24, hour=1, minute=18), datetime(year=2015, month=6, day=24, hour=2, minute=17)),
    (datetime(year=2015, month=6, day=24, hour=2, minute=44), datetime(year=2015, month=6, day=24, hour=3, minute=37)),
    (datetime(year=2015, month=6, day=24, hour=4, minute=16), datetime(year=2015, month=6, day=24, hour=4, minute=34)),
    (datetime(year=2015, month=6, day=24, hour=4, minute=55), datetime(year=2015, month=6, day=24, hour=5, minute=56)),
    (datetime(year=2015, month=6, day=24, hour=6, minute=19), datetime(year=2015, month=6, day=24, hour=7, minute=37)),
]

X = []
Y = []
sensor_data = []
for date, features in zip(np.array(feats.index), feats.values):
    ts = date.astype(datetime)
    ns = 1e-9
    date = datetime.fromtimestamp(ts * ns)
    
    for s, e in deep_sleep:
        if s < date < e:
            label = True
            break
        else:
            label = False
            
    sensor_data.append(features[2])
    X.append([features[2]])
    Y.append(label)
X


Out[290]:
[[95],
 [14],
 [12],
 [56],
 [31],
 [0],
 [87],
 [48],
 [3],
 [2],
 [7],
 [2],
 [5],
 [4],
 [7],
 [1],
 [2],
 [0],
 [3],
 [52],
 [22],
 [14],
 [15],
 [4],
 [65],
 [0],
 [0],
 [3],
 [0],
 [0],
 [3],
 [0],
 [0],
 [24],
 [0],
 [3],
 [3],
 [4],
 [3],
 [42],
 [5],
 [2],
 [15],
 [15],
 [8],
 [2],
 [3],
 [76],
 [5],
 [1],
 [27],
 [1],
 [3],
 [2],
 [3],
 [67],
 [41],
 [2],
 [0],
 [1],
 [0],
 [1],
 [1],
 [196],
 [1],
 [15],
 [5],
 [6],
 [5],
 [1],
 [1],
 [4],
 [2],
 [4],
 [57],
 [2],
 [3],
 [2],
 [42],
 [0],
 [0],
 [1],
 [0],
 [48],
 [1],
 [0],
 [71]]

In [258]:
import numpy as np
from sklearn import metrics
from sklearn.linear_model import LogisticRegression

In [257]:
rf = RandomForestClassifier()

XY = list(zip(X,Y))
np.random.shuffle(XY)

XY_train, XY_test = XY[:70], XY[70:]
X_train, Y_train = zip(*XY_train)
X_test, Y_test = zip(*XY_test)
rf.fit(X_train, Y_train)
predicted = rf.predict(X_test)
metrics.accuracy_score(Y_test, predicted)


Out[257]:
0.6470588235294118

In [271]:
lr = LogisticRegression()
XY = list(zip(X,Y))
np.random.shuffle(XY)

XY_train, XY_test = XY[:70], XY[70:]
X_train, Y_train = zip(*XY_train)
X_test, Y_test = zip(*XY_test)
lr.fit(X_train, Y_train)
predicted = lr.predict(X_test)
metrics.accuracy_score(Y_test, predicted)


Out[271]:
0.70588235294117652

In [272]:
import pylab as plt

In [278]:
plt.plot(X, np.zeros_like(X), 'x')


Out[278]:
[<matplotlib.lines.Line2D at 0x11d6545f8>]

In [236]:



Out[236]:
array([ True, False, False, False, False, False, False,  True, False,
       False, False, False,  True, False, False, False, False,  True,
       False,  True, False, False, False, False, False,  True, False], dtype=bool)

In [237]:


In [238]:



Out[238]:
0.62962962962962965

In [239]:
metrics.confusion_matrix(Y_test, predicted)


Out[239]:
array([[15,  4],
       [ 6,  2]])

In [282]:
from sklearn.naive_bayes import GaussianNB
m = GaussianNB()
XY = list(zip(X,Y))
np.random.shuffle(XY)

XY_train, XY_test = XY[:70], XY[70:]
X_train, Y_train = zip(*XY_train)
X_test, Y_test = zip(*XY_test)
m.fit(X_train, Y_train)
predicted = m.predict(X_test)
metrics.accuracy_score(Y_test, predicted)


Out[282]:
0.76470588235294112

In [288]:
def smooth(x,window_len=11,window='hanning'):
        if x.ndim != 1:
                raise (ValueError, "smooth only accepts 1 dimension arrays.")
        if x.size < window_len:
                raise (ValueError, "Input vector needs to be bigger than window size.")
        if window_len<3:
                return x
        if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']:
                raise (ValueError, "Window is on of 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'")
        s=np.r_[2*x[0]-x[window_len-1::-1],x,2*x[-1]-x[-1:-window_len:-1]]
        if window == 'flat': #moving average
                w=np.ones(window_len,'d')
        else:  
                w=eval('np.'+window+'(window_len)')
        y=np.convolve(w/w.sum(),s,mode='same')
        return y[window_len:-window_len+1]

In [327]:
sensor_data_smoothed = smooth(np.array(sensor_data), window='hanning')
#plt.plot(1 - sensor_data_smoothed)

arr = np.array(sensor_data_smoothed)
thresh = 15
arr[np.where(arr <= thresh)] = 1
arr[np.where(arr > thresh)] = 0
plt.plot(arr)
plt.ylim([-1,2])


Out[327]:
(-1, 2)

In [318]:



Out[318]:
(-1, 2)

In [338]:
known_day = daily.ix[datetime(year=2015, month=6, day=22)]
start, end = known_day['SleepStart'], known_day['SleepEnd']
chunk = minutely[start:end]
sensor_data = chunk['RawSensorData'].values
sensor_data_smoothed = smooth(np.array(sensor_data), window='hanning')
#plt.plot(1 - sensor_data_smoothed)

arr = np.array(sensor_data_smoothed)
thresh = 10
arr[np.where(arr <= thresh)] = 1
arr[np.where(arr > thresh)] = 0
plt.plot(arr)
plt.ylim([-1,2])


Out[338]:
(-1, 2)

In [448]:
known_day = daily.ix[datetime(year=2015, month=6, day=21)]
start, end = known_day['SleepStart'], known_day['SleepEnd']
chunk = minutely[start:end]
sensor_data = chunk['RawSensorData'].values

#plt.plot(1 - sensor_data_smoothed)
plt.figure(figsize=(20,10))
sds = pd.Series(sensor_data)
#sds.plot(kind='hist')

sensor_data[np.where(sensor_data > 20)] = 20
sensor_data_smoothed = smooth(sensor_data, window='hanning', window_len=24)

#plt.plot(sensor_data, c='grey')
plt.plot(sensor_data_smoothed, c='grey')

arr = np.array(sensor_data_smoothed)
thresh = 3
arr[np.where(arr <= thresh)] = thresh
arr[np.where(arr > thresh)] = 0
plt.plot(arr, c='red')

#smoothed2 = smooth(arr, window='bartlett', window_len=24)
#arr = np.array(smoothed2)
#plt.plot(arr**2, c='blue')

#thresh = 2
#arr[np.where(arr <= thresh)] = 0
#arr[np.where(arr > thresh)] = thresh
#plt.plot(arr, c='blue')
#plt.axhline(7, c='orange')
plt.ylim([-20,80])


Out[448]:
(-20, 80)

In [450]:
known_day = daily.ix[datetime(year=2015, month=6, day=24)]
start, end = known_day['SleepStart'], known_day['SleepEnd']
chunk = minutely[start:end]
sensor_data = chunk['RawSensorData'].values

#plt.plot(1 - sensor_data_smoothed)
plt.figure(figsize=(20,10))
sds = pd.Series(sensor_data)
#sds.plot(kind='hist')

sensor_data[np.where(sensor_data > 20)] = 20
sensor_data_smoothed = smooth(sensor_data, window='hanning', window_len=24)

#plt.plot(sensor_data, c='grey')
plt.plot(sensor_data_smoothed, c='grey')

arr = np.array(sensor_data_smoothed)
thresh = 2.5
arr[np.where(arr <= thresh)] = thresh
arr[np.where(arr > thresh)] = 0
plt.plot(arr, c='red')

#smoothed2 = smooth(arr, window='bartlett', window_len=24)
#arr = np.array(smoothed2)
#plt.plot(arr**2, c='blue')

#thresh = 2
#arr[np.where(arr <= thresh)] = 0
#arr[np.where(arr > thresh)] = thresh
#plt.plot(arr, c='blue')
#plt.axhline(7, c='orange')
plt.ylim([-20,80])


Out[450]:
(-20, 80)

In [449]:
known_day = daily.ix[datetime(year=2015, month=6, day=20)]
start, end = known_day['SleepStart'], known_day['SleepEnd']
chunk = minutely[start:end]
sensor_data = chunk['RawSensorData'].values

#plt.plot(1 - sensor_data_smoothed)
plt.figure(figsize=(20,10))
#sds = pd.Series(sensor_data)
#sds.plot(kind='hist')

sensor_data[np.where(sensor_data > 20)] = 20
sensor_data_smoothed = smooth(sensor_data, window='hanning', window_len=24)

#plt.plot(sensor_data, c='grey')
plt.plot(sensor_data_smoothed, c='grey')

arr = np.array(sensor_data_smoothed)
thresh = 3
arr[np.where(arr <= thresh)] = thresh
arr[np.where(arr > thresh)] = 0
plt.plot(arr, c='red')

#smoothed2 = smooth(arr, window='bartlett', window_len=24)
#arr = np.array(smoothed2)
#plt.plot(arr**2, c='blue')

#thresh = 2
#arr[np.where(arr <= thresh)] = 0
#arr[np.where(arr > thresh)] = thresh
#plt.plot(arr, c='blue')
#plt.axhline(7, c='orange')
plt.ylim([-20,80])


Out[449]:
(-20, 80)

In [ ]: