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)))