Bellabeat Capstone Project: Analyzing Smart Device Usage

Ben Satterthwaite

2026-01-11

Clean Up!

# Read CSVs
dailyActivity <- read.csv("D:/Google Analytics CapStone/mturkfitbit_export_4.12.16-5.12.16/Fitab
ase Data 4.12.16-5.12.16/dailyActivity_merged.csv")
sleepDay <- read.csv("D:/Google Analytics CapStone/mturkfitbit_export_4.12.16-5.12.16/Fitabase D
ata 4.12.16-5.12.16/sleepDay_merged.csv")
weightLogInfo <- read.csv("D:/Google Analytics CapStone/mturkfitbit_export_4.12.16-5.12.16/Fitab
ase Data 4.12.16-5.12.16/weightLogInfo_merged.csv")
dailyActivity$ActivityDate <- as.Date(dailyActivity$ActivityDate, format="%m/%d/%y")
sleepDay$SleepDay <- as.Date(sleepDay$SleepDay, format="%m/%d/%y")
weightLogInfo$Date <- as.Date(weightLogInfo$Date, format="%m/%d/%y")
# Merge datasets
merged_data <- merge(dailyActivity, sleepDay,
    by.x = c("Id", "ActivityDate"),
    by.y = c("Id", "SleepDay"),
    all = TRUE)
merged_data <- merge(merged_data, weightLogInfo,
    by.x = c("Id", "ActivityDate"),
    by.y = c("Id", "Date"),
    all = TRUE)
# Add day of week
merged_data$DayOfWeek <- weekdays(merged_data$ActivityDate)
merged_data$DayOfWeek <- factor(merged_data$DayOfWeek,
        levels=c("Monday","Tuesday","Wednesday","Thursday","Friday","Sat
urday","Sunday"),
        ordered = TRUE)
# Create step goal column
merged_data$MetStepGoal <- ifelse(merged_data$TotalSteps >= 10000, "Yes", "No")

Line Chart - Finding Average Steps by Day of Week

avg_steps_by_day <- merged_data %>%
group_by(DayOfWeek) %>%
summarise(AvgSteps = mean(TotalSteps, na.rm = TRUE))
ggplot(avg_steps_by_day, aes(x=DayOfWeek, y=AvgSteps, group=1)) +
geom_line(color="steelblue", linewidth=1.5) +
geom_point(color="darkblue", linewidth=3) +
labs(title="Average Daily Steps by Day of the Week",
x="Day of the Week", y="Average Steps") +
theme_minimal()
## Warning in geom_point(color = "darkblue", linewidth = 3): Ignoring unknown
## parameters: ˋlinewidthˋ

Average Daily Steps by Day of the Week

Histogram - Daily Steps

ggplot(merged_data, aes(x=TotalSteps)) +
geom_histogram(binwidth=1000, fill="steelblue", color="black") +
labs(title="Distribution of Daily Steps",
x="Steps", y="Frequency") +
theme_minimal()

Distribution of Daily Steps

Chart - Activity Intensity

activity_summary <- merged_data %>%
summarise(
LightlyActive = sum(LightlyActiveMinutes, na.rm=TRUE),
FairlyActive = sum(FairlyActiveMinutes, na.rm=TRUE),
VeryActive = sum(VeryActiveMinutes, na.rm=TRUE)
) %>%
pivot_longer(everything(), names_to="ActivityType", values_to="Minutes")
ggplot(activity_summary, aes(x="", y=Minutes, fill=ActivityType)) +
geom_bar(stat="identity", width=1) +
coord_polar("y") +
labs(title="Activity Intensity Distribution") +
theme_void()

Activity Intensity Distribution

Scatter Plot - Steps VS Calories

ggplot(merged_data, aes(x=TotalSteps, y=Calories)) +
geom_point(alpha=0.5, color="steelblue") +
labs(title="Daily Steps vs Calories Burned",
x="Steps", y="Calories Burned") +
theme_minimal()