作为一个数据控,决不能满足任何数据瑕疵,所以利用 Python 和 R 语言,对 Jawbone Up 的运动细节数据进行了按小时的统计,并用ggplot 制作了相关的图表。
数据获取
可以通过 user/%userXid%/band
获得Jawbone Up的运动细节数据,时间颗粒度为分钟。这个 API 有 start_time 和 end_time 两个参数,为 long 型时间,即从1970年以来的秒数。如果这两个参数都不填,服务器端会缺省返回当日的数据。为了获取更多的数据,可以只设置start_time, 这样就能够返回从开始时间至今的所有运动细节详情。
下面的代码采用 Python 实现,用于从服务器端获取 band 数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
account
=
{
"email"
:
"your@email"
,
"passwd"
:
"yourpassword"
}
startDate
=
"20130609"
sDate
=
time
.
strptime
(
startDate
,
"%Y%m%d"
)
start
=
long
(
time
.
mktime
(
sDate
)
)
device
=
DeviceJawboneUp
(
)
# login
device
.
get_users_login
(
account
[
"email"
]
,
account
[
"passwd"
]
)
# Band
band
=
device
.
get_users_band
(
startTime
=
start
,
endTime
=
None
)
device
.
saveJsonData
(
filename
=
"/users_band_start.json"
,
data
=
band
)
|
返回的JSON数据示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
{
"meta"
:
{
"code"
:
200
,
"message"
:
"OK"
,
"user_xid"
:
"RGaCBFg9CsDYVvm2kchbcw"
,
"time"
:
1372432014
}
,
"data"
:
{
"ticks"
:
[
{
"value"
:
{
"distance"
:
16
,
"active_time"
:
14
,
"aerobic"
:
true
,
"calories"
:
0.660000026226
,
"steps"
:
25
,
"time"
:
1370721000
,
"speed"
:
1.14300000668
}
}
,
{
"value"
:
{
"distance"
:
10
,
"active_time"
:
6
,
"aerobic"
:
true
,
"calories"
:
0.421000003815
,
"steps"
:
14
,
"time"
:
1370958720
,
"speed"
:
1.66700005531
}
}
]
}
}
|
数据预处理
R 有 RJSONIO 等包可以用于 JSON 数据的处理,不过还是不如Python方便。
下面的代码,采用 Python 实现了将 Band 数据转换成平面CSV文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
def
list2string
(
list
)
:
ret
=
""
for
l
in
list
:
ret
=
"%s,%s"
%
(
ret
,
l
)
return
"%s\n"
%
ret
[
1
:
]
def
parseJawboneBand
(
path
,
filename
)
:
fn
=
"%s%s.json"
%
(
path
,
filename
)
|