1. Pendahuluan

Bellabeat adalah produsen teknologi kesehatan tinggi yang memfokuskan produk mereka untuk wanita. Sebagai perusahaan kecil yang sukses, Bellabeat memiliki potensi besar untuk menjadi pemain utama di pasar perangkat pintar global. Urška Sršen, salah satu pendiri dan Chief Creative Officer Bellabeat, percaya bahwa menganalisis data kebugaran dari perangkat pintar dapat membuka peluang pertumbuhan baru bagi perusahaan.

Tujuan Laporan

  1. Mengidentifikasi tren dalam penggunaan perangkat pintar kebugaran.

  2. Menganalisis pola pengguna yang dapat menjadi peluang bagi Bellabeat.

  3. Menyusun rekomendasi untuk mengarahkan strategi pemasaran Bellabeat yang lebih personal dan relevan dengan kebutuhan pelanggan.

Kerangka Data dan Metode Analisis

Data diambil dari Fitbit Fitness Tracker, dengan beberapa kategori utama:

  • Aktivitas fisik

  • Kalori terbakar

  • Waktu tidur

  • Detak jantung

Metodologi mencakup data cleaning, eksplorasi statistik, dan analisis visual serta klasterisasi.

2. Langkah Kerja

2.1. Loading Dataset

Dataset yang digunakan meliputi:

  • Aktivitas Harian: Data jumlah langkah, waktu sedentary, total jarak, dan kalori terbakar.

  • Durasi Tidur: Data waktu tidur dan durasi di tempat tidur.

  • Kalori dan Intensitas Aktivitas per Jam/Per Menit: Data granular untuk pola intensitas aktivitas sepanjang hari.

  • Detak Jantung: Data detak jantung per detik untuk evaluasi intensitas kebugaran.

# Load required libraries
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(ggplot2)
library(dplyr)
library(cluster)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
# Load datasets
daily_activity <- read.csv("C:/Users/sulai/Downloads/archive/mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/dailyActivity_merged.csv")
sleep_day <- read.csv("C:/Users/sulai/Downloads/archive/mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/sleepDay_merged.csv")
minute_steps <- read.csv("C:/Users/sulai/Downloads/archive/mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/minuteStepsNarrow_merged.csv")
minute_calories <- read.csv("C:/Users/sulai/Downloads/archive/mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/minuteCaloriesNarrow_merged.csv")
heartrate <- read.csv("C:/Users/sulai/Downloads/archive/mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/heartrate_seconds_merged.csv")

Kendala Data

Jumlah peserta dalam beberapa dataset, seperti data berat badan, memiliki cakupan yang terbatas. Oleh karena itu, analisis difokuskan pada tren yang lebih luas menggunakan dataset aktivitas dan tidur yang memiliki cakupan data lebih besar.

2.2. Pembersihan Data

Pembersihan data penting untuk menghindari kesalahan dalam analisis:

  • Format waktu dikonversi menjadi standar datetime dengan menggunakan pustaka lubridate.

  • Data granular per menit diringkas menjadi data harian untuk efisiensi analisis.

  • Kolom duplikat dan nilai kosong diatasi melalui:

# Data Cleaning and Preparation

# 1. Convert date-time columns to proper format
daily_activity$ActivityDate <- mdy(daily_activity$ActivityDate)
sleep_day$SleepDay <- mdy_hms(sleep_day$SleepDay)
minute_steps$ActivityMinute <- mdy_hms(minute_steps$ActivityMinute)
minute_calories$ActivityMinute <- mdy_hms(minute_calories$ActivityMinute)
heartrate$Time <- mdy_hms(heartrate$Time)

# 2. Summarize minute-level data into daily data
minute_steps_summary <- minute_steps %>%
  mutate(ActivityDay = as.Date(ActivityMinute)) %>%
  group_by(Id, ActivityDay) %>%
  summarise(TotalSteps = sum(Steps), .groups = "drop")

minute_calories_summary <- minute_calories %>%
  mutate(ActivityDay = as.Date(ActivityMinute)) %>%
  group_by(Id, ActivityDay) %>%
  summarise(TotalCalories = sum(Calories), .groups = "drop")

heartrate_summary <- heartrate %>%
  mutate(Date = as.Date(Time)) %>%
  group_by(Id, Date) %>%
  summarise(AverageHeartRate = mean(Value), .groups = "drop")

# 3. Merge datasets for comprehensive analysis
merged_data <- daily_activity %>%
  left_join(sleep_day, by = c("Id", "ActivityDate" = "SleepDay")) %>%
  left_join(minute_steps_summary, by = c("Id", "ActivityDate" = "ActivityDay")) %>%
  left_join(minute_calories_summary, by = c("Id", "ActivityDate" = "ActivityDay")) %>%
  left_join(heartrate_summary, by = c("Id", "ActivityDate" = "Date"))

# 4. Handle duplicated TotalSteps columns
# Decide which one to keep and clean the dataset
merged_data <- merged_data %>%
  mutate(TotalSteps = coalesce(TotalSteps.y, TotalSteps.x)) %>%
  select(-TotalSteps.x, -TotalSteps.y) # Remove duplicated columns

# 5. Handle missing values
merged_data <- merged_data %>%
  mutate(across(where(is.numeric), ~replace_na(., 0)))

3. Analisis dan Visualisasi Data

3.1. Aktivitas Harian dan Kalori Terbakar

Visualisasi:

# 1. Steps vs Calories Burned
ggplot(merged_data, aes(x = TotalSteps, y = TotalCalories)) +
  geom_point(color = "blue", alpha = 0.7) +
  geom_smooth(method = "lm", color = "red") +
  labs(title = "Relationship Between Steps and Calories Burned",
       x = "Total Steps", y = "Total Calories Burned")
## `geom_smooth()` using formula = 'y ~ x'

Insight:

  • Korelasi positif: Pengguna yang lebih aktif membakar lebih banyak kalori.

  • Peluang: Aplikasi Bellabeat dapat mendorong pengguna dengan langkah kurang dari 8.000/hari (rata-rata ideal oleh WHO) untuk mencapai target dengan notifikasi motivasi.

3.2. Pola Tidur Pengguna

Visualisasi:

if ("TotalMinutesAsleep" %in% colnames(merged_data)) {
  ggplot(merged_data, aes(x = TotalMinutesAsleep, y = TotalSteps)) +
    geom_point(color = "green", alpha = 0.7) +
    geom_smooth(method = "lm", color = "darkgreen") +
    labs(title = "Sleep Duration vs Total Steps",
         x = "Total Minutes Asleep", y = "Total Steps")
}
## `geom_smooth()` using formula = 'y ~ x'

Insight:

  • Hubungan linear: Waktu di tempat tidur berbanding lurus dengan durasi tidur.

  • Namun, waktu di tempat tidur yang tidak efisien bisa menjadi tanda kurang tidur berkualitas.

  • Peluang: Bellabeat dapat menyediakan fitur pengaturan rutinitas tidur.

3.3. Aktivitas Puncak Harian

Visualisasi:

ggplot(merged_data, aes(x = AverageHeartRate, y = TotalCalories)) +
  geom_point(color = "purple", alpha = 0.7) +
  geom_smooth(method = "lm", color = "darkblue") +
  labs(title = "Average Heart Rate vs Calories Burned",
       x = "Average Heart Rate", y = "Total Calories Burned")
## `geom_smooth()` using formula = 'y ~ x'

Insight:

  • Detak jantung rata-rata yang lebih tinggi berhubungan dengan pembakaran kalori yang lebih besar.

  • Peluang: Mendorong pengguna dengan aktivitas intensitas rendah untuk lebih aktif, agar pembakaran kalori meningkat.

3.4. Klasterisasi Pengguna Berdasarkan Kebiasaan

Proses:

  • Data di-cluster menggunakan algoritma K-means dengan variabel: TotalSteps, TotalCalories, TotalMinutesAsleep, dan AverageHeartRate.

  • Dataset di-normalisasi sebelum klasterisasi untuk mencegah skala variabel tertentu mendominasi.

if (all(c("TotalSteps", "TotalCalories", "TotalMinutesAsleep", "AverageHeartRate") %in% colnames(merged_data))) {
  clustering_data <- merged_data %>%
    select(TotalSteps, TotalCalories, TotalMinutesAsleep, AverageHeartRate) %>%
    scale()
}

Visualisasi:

 # Apply K-means clustering
  set.seed(123)
  kmeans_result <- kmeans(clustering_data, centers = 3, nstart = 25)
  
  # Add cluster labels to the dataset
  merged_data$Cluster <- as.factor(kmeans_result$cluster)
  
  # Visualize Clusters
  ggplot(merged_data, aes(x = TotalSteps, y = TotalCalories, color = Cluster)) +
    geom_point(alpha = 0.7) +
    labs(title = "Clustering Users Based on Activity and Sleep",
         x = "Total Steps", y = "Total Calories Burned")

Insight:

  • Cluster 1: Pengguna aktif dengan pola kebiasaan sehat (langkah dan kalori tinggi).

  • Cluster 2: Pengguna moderat (langkah cukup namun kalori rata-rata).

  • Cluster 3: Pengguna sedentary (langkah rendah, waktu sedentary tinggi).

  • Peluang: Segmentasi ini dapat digunakan untuk mengirimkan pesan personal melalui aplikasi.

4. Rekomendasi Bisnis

  1. Personalisasi Aktivitas Harian Dengan notifikasi yang mendorong pengguna untuk bergerak, Bellabeat dapat menargetkan pengguna sedentary untuk meningkatkan langkah harian.

  2. Fitur Manajemen Tidur Memberikan panduan untuk mengatur waktu tidur secara optimal, berdasarkan kebiasaan individu yang tercermin pada pola durasi tidur dan efisiensi waktu tidur mereka.

  3. Strategi Pemasaran Berbasis Data

  • Segmentasikan pengguna berdasarkan klaster untuk meningkatkan akurasi pemasaran.
  • Soroti manfaat aplikasi sebagai alat pengingat kebugaran dan rutinitas sehat.
  1. Peningkatan Pembakaran Kalori Mengingat hubungan antara detak jantung yang lebih tinggi dan pembakaran kalori yang lebih besar, Bellabeat dapat mendorong pengguna untuk meningkatkan intensitas aktivitas mereka, memaksimalkan pembakaran kalori, dan mendukung kebugaran jantung.

5. Kesimpulan

Analisis ini memanfaatkan data dari perangkat pintar untuk memberikan wawasan strategis bagi Bellabeat, mencakup rekomendasi berbasis data untuk meningkatkan keterlibatan pelanggan dan memenuhi kebutuhan mereka. Dengan menerapkan strategi ini, Bellabeat dapat memperkuat posisinya sebagai pemimpin pasar dalam perangkat pintar khusus untuk wanita.