Quick overview of extracting and visualizing fitbit data using the fitbitScraper package in R.
First load packages, then set your username and password:
# load packages
library(fitbitScraper)
library(dplyr)
library(ggplot2)
library(lubridate)
# set username and password variables
fitbit.usr <- "myusername"
fitbit.pwd <- "mypassword"
Then set up verification and extract data for a given day or days:
# create cookie object for API verification
cookie <- login(email = fitbit.usr, password = fitbit.pwd)
# set date(s)
fitbit.dt <- "2015-09-11"
# get 15 minute interval steps data for date(s) chosen
d <- get_intraday_data(cookie, what = "steps", date = fitbit.dt)
Plot steps for the day:
# plot steps
ggplot(d, aes(time, steps, fill = steps)) +
geom_bar(stat = "identity") +
theme(axis.title.x = element_blank()) +
ggtitle(paste0("fitbit steps by 15 min interval\nTotal Steps = ", sum(d$steps)))
Extract data for multiple days:
# set date(s)
fitbit.dt <- c("2015-09-05", "2015-09-06", "2015-09-07", "2015-09-08", "2015-09-09", "2015-09-10", "2015-09-11")
# loop through each day, append to data frame
i <- 1
for (i in 1:length(fitbit.dt)){
dt <- get_intraday_data(cookie, what = "steps", date = fitbit.dt[i])
if (i == 1){
d <- dt
}
else {
d <- bind_rows(d, dt)
}
}
# sum by day
d$time <- ymd_hms(d$time, tz = "America/New_York")
d$day <- as.Date(as.character(d$time))
daydf <- d %>%
group_by(day) %>%
summarise(steps = sum(steps))
Review progress against a target:
# define steps per day target
target <- 12500
daydf$target.met <- ifelse(daydf$steps >= target, "Y", "N")
# plot of total steps by day
ggplot(daydf, aes(day, steps, fill = target.met)) +
geom_bar(stat = "identity") +
geom_hline(yintercept = target, linetype = "dashed") +
ggtitle("Steps by Day")
Visualize in different ways, comparing days by 15 minute time interval:
# extract time from datetime
d$timestamp <- strftime(d$time, format="%H:%M:%S")
# remove year from day for better display
d$day <- substr(d$day, 6, 11)
# facet plot
ggplot(select(d, day, steps, timestamp), aes(timestamp, steps, fill = steps)) +
geom_bar(stat = "identity") +
facet_grid(day ~ .) +
theme(axis.text.x = element_blank()) +
xlab("15 minute interval") +
ggtitle(paste0("fitbit steps by 15 min interval\n", min(fitbit.dt), " - ", max(fitbit.dt)))