Last active
April 8, 2017 21:59
-
-
Save bbarrilleaux/8090081 to your computer and use it in GitHub Desktop.
Analysis and plots of Fitbit step counts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import pandas as pd | |
import matplotlib | |
import pylab | |
from matplotlib import pyplot | |
from scipy.stats import gaussian_kde | |
data = pd.read_csv('fitbit.csv', usecols = [0, 1], parse_dates = True) | |
#count and remove days where <100 steps were logged, | |
#because those were when Fitbit wasn't working. | |
data[data['steps'] <= 100].count() | |
data = data[data['steps'] > 100] | |
data['daynumber'] = data.date.map(lambda x: pd.to_datetime(x).weekday()) | |
data['weekday'] = data.date.map(lambda x: pd.to_datetime(x).strftime("%a")) | |
data['rollingmean'] = pd.rolling_mean(data['steps'], window = 50, min_periods = 0) | |
#Time series plot with rolling mean | |
pyplot.plot(pd.to_datetime(data['date']), data['steps'], "r", linewidth = 1) | |
pyplot.plot(pd.to_datetime(data['date']), data['rollingmean'], "b", linewidth = 2) | |
pyplot.xticks(rotation = 90) | |
pyplot.title('Fitbit steps per day', size = 24) | |
pyplot.ylabel('Steps', size = 18) | |
pyplot.subplots_adjust(bottom = .15, top = .9) | |
pyplot.show() | |
#histogram of steps | |
pyplot.hist(data['steps'], bins = 50, histtype = 'stepfilled') | |
pyplot.title('Histogram of Fitbit steps', size = 24) | |
pyplot.xlabel('Steps', size = 18) | |
pyplot.ylabel('Number of days', size = 18) | |
pyplot.show() | |
# Density plot broken into days of the week | |
sorteddata = data.sort_index(by = ['daynumber'], ascending = [True]) | |
for key, grp in sorteddata.groupby(['weekday']): | |
print(key) | |
print('Average number of steps:', grp['steps'].mean()) | |
print('Percent of days exceeding 15,000 steps:', (grp[grp['steps'] > 15000].count()[1])*100/grp.count()[1], "%") | |
density = gaussian_kde(grp['steps']) | |
xnew = np.linspace(0,30000,200) | |
density.covariance_factor = lambda : .25 | |
density._compute_covariance() | |
pyplot.plot(xnew, density(xnew), label = key, linewidth = 2) | |
pyplot.legend(fancybox = True, fontsize = 18) | |
pyplot.title('Histogram of Fitbit steps by weekday', size = 24) | |
pyplot.xlabel('Steps', size = 18) | |
pyplot.ylabel('Density', size = 18) | |
pyplot.subplots_adjust(left = .15, right = .9) | |
pyplot.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment