เป็น casestudy ที่ทาง Coursera Google Data Analytics คิดโจทย์ไว้ให้ผู้ที่เรียนได้นำ Case นี้ไปฝึกเพื่อทบทวนในสิ่งที่ได้เรียนมา Case นี้เป็น Case ของบริษัทที่ชื่อว่า BellaBeat เป็นบริษัทที่ผลิตสินค้า IT สำหรับโดยเน้นที่เรื่องสุขภาพสำหรับผู้หญิง โดยทาง BellaBeat ต้องการหาโอกาสทางธุรกิจใหม่ๆของตนเอง จึงอยากได้ไอเดียใหม่ๆ โดยอิงจากข้อมูลของบริษัทอื่นที่ทำเกี่ยวกับสินค้าเพื่อสุขภาพที่มีอยู่

Must Know

Install Packages

install.packages("tidyverse")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
install.packages("skimr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
install.packages("janitor")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
install.packages('ggplot2')
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)

Loading Packages

library(ggplot2)
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
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── 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(skimr)
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test

Import Datas

โดยก่อนเลือกว่าจะใช้ข้อมูลไหนบ้างก็ทำการตรวจดูราบละเอียดของข้อมูลในแต่ละไฟล์ก่อน โดยผมได้ทำการดูข้อมูลในแต่ละไฟล์คร่าวๆด้วย Excel เพื่อดูว่าแต่ละไฟล์เก็บข้อมูลยังไง มีข้อมูลแบบไหนบ้าง และเลือกว่าจะใช้ข้อมูลไหนบ้าง

(โดยข้อมูลที่ใช้จะเป็ยข้อมูล FitBit Fitness Tracker Data ชื่อ mturkfitbit_export_4.12.16-5.12.16)

daily_activity <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/dailyActivity_merged.csv")
## Rows: 940 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): ActivityDate
## dbl (14): Id, TotalSteps, TotalDistance, TrackerDistance, LoggedActivitiesDi...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
daily_calories <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/dailyCalories_merged.csv")
## Rows: 940 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityDay
## dbl (2): Id, Calories
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
daily_intensities <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/dailyIntensities_merged.csv")
## Rows: 940 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityDay
## dbl (9): Id, SedentaryMinutes, LightlyActiveMinutes, FairlyActiveMinutes, Ve...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
daily_steps <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/dailySteps_merged.csv")
## Rows: 940 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityDay
## dbl (2): Id, StepTotal
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
heartrate_seconds <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/heartrate_seconds_merged.csv")
## Rows: 2483658 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Time
## dbl (2): Id, Value
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
hourly_calories <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/hourlyCalories_merged.csv")
## Rows: 22099 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityHour
## dbl (2): Id, Calories
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
hourly_intensities <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/hourlyIntensities_merged.csv")
## Rows: 22099 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityHour
## dbl (3): Id, TotalIntensity, AverageIntensity
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
hourly_steps <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/hourlySteps_merged.csv")
## Rows: 22099 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ActivityHour
## dbl (2): Id, StepTotal
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
sleepday <- read_csv("mturkfitbit_export_4.12.16-5.12.16/Fitabase Data 4.12.16-5.12.16/sleepDay_merged.csv")
## Rows: 413 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): SleepDay
## dbl (4): Id, TotalSleepRecords, TotalMinutesAsleep, TotalTimeInBed
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

โดยเราจะไปดูภาพรวมของข้อมูลแต่ละไฟล์ที่เลือกมาอีกครั้งและทำการลบไฟล์ที่ซ้ำกันในแต่ละข้อมูลออกไปด้วย

daily_activity %>%
  distinct(.keep_all = TRUE)
## # A tibble: 940 × 15
##            Id ActivityDate TotalSteps TotalDistance TrackerDistance
##         <dbl> <chr>             <dbl>         <dbl>           <dbl>
##  1 1503960366 4/12/2016         13162          8.5             8.5 
##  2 1503960366 4/13/2016         10735          6.97            6.97
##  3 1503960366 4/14/2016         10460          6.74            6.74
##  4 1503960366 4/15/2016          9762          6.28            6.28
##  5 1503960366 4/16/2016         12669          8.16            8.16
##  6 1503960366 4/17/2016          9705          6.48            6.48
##  7 1503960366 4/18/2016         13019          8.59            8.59
##  8 1503960366 4/19/2016         15506          9.88            9.88
##  9 1503960366 4/20/2016         10544          6.68            6.68
## 10 1503960366 4/21/2016          9819          6.34            6.34
## # ℹ 930 more rows
## # ℹ 10 more variables: LoggedActivitiesDistance <dbl>,
## #   VeryActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, SedentaryActiveDistance <dbl>,
## #   VeryActiveMinutes <dbl>, FairlyActiveMinutes <dbl>,
## #   LightlyActiveMinutes <dbl>, SedentaryMinutes <dbl>, Calories <dbl>
summary(daily_activity)
##        Id            ActivityDate         TotalSteps    TotalDistance   
##  Min.   :1.504e+09   Length:940         Min.   :    0   Min.   : 0.000  
##  1st Qu.:2.320e+09   Class :character   1st Qu.: 3790   1st Qu.: 2.620  
##  Median :4.445e+09   Mode  :character   Median : 7406   Median : 5.245  
##  Mean   :4.855e+09                      Mean   : 7638   Mean   : 5.490  
##  3rd Qu.:6.962e+09                      3rd Qu.:10727   3rd Qu.: 7.713  
##  Max.   :8.878e+09                      Max.   :36019   Max.   :28.030  
##  TrackerDistance  LoggedActivitiesDistance VeryActiveDistance
##  Min.   : 0.000   Min.   :0.0000           Min.   : 0.000    
##  1st Qu.: 2.620   1st Qu.:0.0000           1st Qu.: 0.000    
##  Median : 5.245   Median :0.0000           Median : 0.210    
##  Mean   : 5.475   Mean   :0.1082           Mean   : 1.503    
##  3rd Qu.: 7.710   3rd Qu.:0.0000           3rd Qu.: 2.053    
##  Max.   :28.030   Max.   :4.9421           Max.   :21.920    
##  ModeratelyActiveDistance LightActiveDistance SedentaryActiveDistance
##  Min.   :0.0000           Min.   : 0.000      Min.   :0.000000       
##  1st Qu.:0.0000           1st Qu.: 1.945      1st Qu.:0.000000       
##  Median :0.2400           Median : 3.365      Median :0.000000       
##  Mean   :0.5675           Mean   : 3.341      Mean   :0.001606       
##  3rd Qu.:0.8000           3rd Qu.: 4.782      3rd Qu.:0.000000       
##  Max.   :6.4800           Max.   :10.710      Max.   :0.110000       
##  VeryActiveMinutes FairlyActiveMinutes LightlyActiveMinutes SedentaryMinutes
##  Min.   :  0.00    Min.   :  0.00      Min.   :  0.0        Min.   :   0.0  
##  1st Qu.:  0.00    1st Qu.:  0.00      1st Qu.:127.0        1st Qu.: 729.8  
##  Median :  4.00    Median :  6.00      Median :199.0        Median :1057.5  
##  Mean   : 21.16    Mean   : 13.56      Mean   :192.8        Mean   : 991.2  
##  3rd Qu.: 32.00    3rd Qu.: 19.00      3rd Qu.:264.0        3rd Qu.:1229.5  
##  Max.   :210.00    Max.   :143.00      Max.   :518.0        Max.   :1440.0  
##     Calories   
##  Min.   :   0  
##  1st Qu.:1828  
##  Median :2134  
##  Mean   :2304  
##  3rd Qu.:2793  
##  Max.   :4900
head(daily_activity)
## # A tibble: 6 × 15
##           Id ActivityDate TotalSteps TotalDistance TrackerDistance
##        <dbl> <chr>             <dbl>         <dbl>           <dbl>
## 1 1503960366 4/12/2016         13162          8.5             8.5 
## 2 1503960366 4/13/2016         10735          6.97            6.97
## 3 1503960366 4/14/2016         10460          6.74            6.74
## 4 1503960366 4/15/2016          9762          6.28            6.28
## 5 1503960366 4/16/2016         12669          8.16            8.16
## 6 1503960366 4/17/2016          9705          6.48            6.48
## # ℹ 10 more variables: LoggedActivitiesDistance <dbl>,
## #   VeryActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, SedentaryActiveDistance <dbl>,
## #   VeryActiveMinutes <dbl>, FairlyActiveMinutes <dbl>,
## #   LightlyActiveMinutes <dbl>, SedentaryMinutes <dbl>, Calories <dbl>
daily_calories %>%
  distinct(.keep_all = TRUE)
## # A tibble: 940 × 3
##            Id ActivityDay Calories
##         <dbl> <chr>          <dbl>
##  1 1503960366 4/12/2016       1985
##  2 1503960366 4/13/2016       1797
##  3 1503960366 4/14/2016       1776
##  4 1503960366 4/15/2016       1745
##  5 1503960366 4/16/2016       1863
##  6 1503960366 4/17/2016       1728
##  7 1503960366 4/18/2016       1921
##  8 1503960366 4/19/2016       2035
##  9 1503960366 4/20/2016       1786
## 10 1503960366 4/21/2016       1775
## # ℹ 930 more rows
summary(daily_calories)
##        Id            ActivityDay           Calories   
##  Min.   :1.504e+09   Length:940         Min.   :   0  
##  1st Qu.:2.320e+09   Class :character   1st Qu.:1828  
##  Median :4.445e+09   Mode  :character   Median :2134  
##  Mean   :4.855e+09                      Mean   :2304  
##  3rd Qu.:6.962e+09                      3rd Qu.:2793  
##  Max.   :8.878e+09                      Max.   :4900
head(daily_calories)
## # A tibble: 6 × 3
##           Id ActivityDay Calories
##        <dbl> <chr>          <dbl>
## 1 1503960366 4/12/2016       1985
## 2 1503960366 4/13/2016       1797
## 3 1503960366 4/14/2016       1776
## 4 1503960366 4/15/2016       1745
## 5 1503960366 4/16/2016       1863
## 6 1503960366 4/17/2016       1728
daily_intensities %>%
  distinct(.keep_all = TRUE)
## # A tibble: 940 × 10
##         Id ActivityDay SedentaryMinutes LightlyActiveMinutes FairlyActiveMinutes
##      <dbl> <chr>                  <dbl>                <dbl>               <dbl>
##  1  1.50e9 4/12/2016                728                  328                  13
##  2  1.50e9 4/13/2016                776                  217                  19
##  3  1.50e9 4/14/2016               1218                  181                  11
##  4  1.50e9 4/15/2016                726                  209                  34
##  5  1.50e9 4/16/2016                773                  221                  10
##  6  1.50e9 4/17/2016                539                  164                  20
##  7  1.50e9 4/18/2016               1149                  233                  16
##  8  1.50e9 4/19/2016                775                  264                  31
##  9  1.50e9 4/20/2016                818                  205                  12
## 10  1.50e9 4/21/2016                838                  211                   8
## # ℹ 930 more rows
## # ℹ 5 more variables: VeryActiveMinutes <dbl>, SedentaryActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   VeryActiveDistance <dbl>
summary(daily_intensities)
##        Id            ActivityDay        SedentaryMinutes LightlyActiveMinutes
##  Min.   :1.504e+09   Length:940         Min.   :   0.0   Min.   :  0.0       
##  1st Qu.:2.320e+09   Class :character   1st Qu.: 729.8   1st Qu.:127.0       
##  Median :4.445e+09   Mode  :character   Median :1057.5   Median :199.0       
##  Mean   :4.855e+09                      Mean   : 991.2   Mean   :192.8       
##  3rd Qu.:6.962e+09                      3rd Qu.:1229.5   3rd Qu.:264.0       
##  Max.   :8.878e+09                      Max.   :1440.0   Max.   :518.0       
##  FairlyActiveMinutes VeryActiveMinutes SedentaryActiveDistance
##  Min.   :  0.00      Min.   :  0.00    Min.   :0.000000       
##  1st Qu.:  0.00      1st Qu.:  0.00    1st Qu.:0.000000       
##  Median :  6.00      Median :  4.00    Median :0.000000       
##  Mean   : 13.56      Mean   : 21.16    Mean   :0.001606       
##  3rd Qu.: 19.00      3rd Qu.: 32.00    3rd Qu.:0.000000       
##  Max.   :143.00      Max.   :210.00    Max.   :0.110000       
##  LightActiveDistance ModeratelyActiveDistance VeryActiveDistance
##  Min.   : 0.000      Min.   :0.0000           Min.   : 0.000    
##  1st Qu.: 1.945      1st Qu.:0.0000           1st Qu.: 0.000    
##  Median : 3.365      Median :0.2400           Median : 0.210    
##  Mean   : 3.341      Mean   :0.5675           Mean   : 1.503    
##  3rd Qu.: 4.782      3rd Qu.:0.8000           3rd Qu.: 2.053    
##  Max.   :10.710      Max.   :6.4800           Max.   :21.920
head(daily_intensities)
## # A tibble: 6 × 10
##         Id ActivityDay SedentaryMinutes LightlyActiveMinutes FairlyActiveMinutes
##      <dbl> <chr>                  <dbl>                <dbl>               <dbl>
## 1   1.50e9 4/12/2016                728                  328                  13
## 2   1.50e9 4/13/2016                776                  217                  19
## 3   1.50e9 4/14/2016               1218                  181                  11
## 4   1.50e9 4/15/2016                726                  209                  34
## 5   1.50e9 4/16/2016                773                  221                  10
## 6   1.50e9 4/17/2016                539                  164                  20
## # ℹ 5 more variables: VeryActiveMinutes <dbl>, SedentaryActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   VeryActiveDistance <dbl>
daily_steps %>%
  distinct(.keep_all = TRUE)
## # A tibble: 940 × 3
##            Id ActivityDay StepTotal
##         <dbl> <chr>           <dbl>
##  1 1503960366 4/12/2016       13162
##  2 1503960366 4/13/2016       10735
##  3 1503960366 4/14/2016       10460
##  4 1503960366 4/15/2016        9762
##  5 1503960366 4/16/2016       12669
##  6 1503960366 4/17/2016        9705
##  7 1503960366 4/18/2016       13019
##  8 1503960366 4/19/2016       15506
##  9 1503960366 4/20/2016       10544
## 10 1503960366 4/21/2016        9819
## # ℹ 930 more rows
summary(daily_steps)
##        Id            ActivityDay          StepTotal    
##  Min.   :1.504e+09   Length:940         Min.   :    0  
##  1st Qu.:2.320e+09   Class :character   1st Qu.: 3790  
##  Median :4.445e+09   Mode  :character   Median : 7406  
##  Mean   :4.855e+09                      Mean   : 7638  
##  3rd Qu.:6.962e+09                      3rd Qu.:10727  
##  Max.   :8.878e+09                      Max.   :36019
head(daily_steps)
## # A tibble: 6 × 3
##           Id ActivityDay StepTotal
##        <dbl> <chr>           <dbl>
## 1 1503960366 4/12/2016       13162
## 2 1503960366 4/13/2016       10735
## 3 1503960366 4/14/2016       10460
## 4 1503960366 4/15/2016        9762
## 5 1503960366 4/16/2016       12669
## 6 1503960366 4/17/2016        9705
heartrate_seconds %>%
  distinct(.keep_all = TRUE)
## # A tibble: 2,483,658 × 3
##            Id Time                 Value
##         <dbl> <chr>                <dbl>
##  1 2022484408 4/12/2016 7:21:00 AM    97
##  2 2022484408 4/12/2016 7:21:05 AM   102
##  3 2022484408 4/12/2016 7:21:10 AM   105
##  4 2022484408 4/12/2016 7:21:20 AM   103
##  5 2022484408 4/12/2016 7:21:25 AM   101
##  6 2022484408 4/12/2016 7:22:05 AM    95
##  7 2022484408 4/12/2016 7:22:10 AM    91
##  8 2022484408 4/12/2016 7:22:15 AM    93
##  9 2022484408 4/12/2016 7:22:20 AM    94
## 10 2022484408 4/12/2016 7:22:25 AM    93
## # ℹ 2,483,648 more rows
summary(heartrate_seconds)
##        Id                Time               Value       
##  Min.   :2.022e+09   Length:2483658     Min.   : 36.00  
##  1st Qu.:4.388e+09   Class :character   1st Qu.: 63.00  
##  Median :5.554e+09   Mode  :character   Median : 73.00  
##  Mean   :5.514e+09                      Mean   : 77.33  
##  3rd Qu.:6.962e+09                      3rd Qu.: 88.00  
##  Max.   :8.878e+09                      Max.   :203.00
head(heartrate_seconds)
## # A tibble: 6 × 3
##           Id Time                 Value
##        <dbl> <chr>                <dbl>
## 1 2022484408 4/12/2016 7:21:00 AM    97
## 2 2022484408 4/12/2016 7:21:05 AM   102
## 3 2022484408 4/12/2016 7:21:10 AM   105
## 4 2022484408 4/12/2016 7:21:20 AM   103
## 5 2022484408 4/12/2016 7:21:25 AM   101
## 6 2022484408 4/12/2016 7:22:05 AM    95
hourly_calories %>%
  distinct(.keep_all = TRUE)
## # A tibble: 22,099 × 3
##            Id ActivityHour          Calories
##         <dbl> <chr>                    <dbl>
##  1 1503960366 4/12/2016 12:00:00 AM       81
##  2 1503960366 4/12/2016 1:00:00 AM        61
##  3 1503960366 4/12/2016 2:00:00 AM        59
##  4 1503960366 4/12/2016 3:00:00 AM        47
##  5 1503960366 4/12/2016 4:00:00 AM        48
##  6 1503960366 4/12/2016 5:00:00 AM        48
##  7 1503960366 4/12/2016 6:00:00 AM        48
##  8 1503960366 4/12/2016 7:00:00 AM        47
##  9 1503960366 4/12/2016 8:00:00 AM        68
## 10 1503960366 4/12/2016 9:00:00 AM       141
## # ℹ 22,089 more rows
summary(hourly_calories)
##        Id            ActivityHour          Calories     
##  Min.   :1.504e+09   Length:22099       Min.   : 42.00  
##  1st Qu.:2.320e+09   Class :character   1st Qu.: 63.00  
##  Median :4.445e+09   Mode  :character   Median : 83.00  
##  Mean   :4.848e+09                      Mean   : 97.39  
##  3rd Qu.:6.962e+09                      3rd Qu.:108.00  
##  Max.   :8.878e+09                      Max.   :948.00
head(hourly_calories)
## # A tibble: 6 × 3
##           Id ActivityHour          Calories
##        <dbl> <chr>                    <dbl>
## 1 1503960366 4/12/2016 12:00:00 AM       81
## 2 1503960366 4/12/2016 1:00:00 AM        61
## 3 1503960366 4/12/2016 2:00:00 AM        59
## 4 1503960366 4/12/2016 3:00:00 AM        47
## 5 1503960366 4/12/2016 4:00:00 AM        48
## 6 1503960366 4/12/2016 5:00:00 AM        48
hourly_intensities %>%
  distinct(.keep_all = TRUE)
## # A tibble: 22,099 × 4
##            Id ActivityHour          TotalIntensity AverageIntensity
##         <dbl> <chr>                          <dbl>            <dbl>
##  1 1503960366 4/12/2016 12:00:00 AM             20            0.333
##  2 1503960366 4/12/2016 1:00:00 AM               8            0.133
##  3 1503960366 4/12/2016 2:00:00 AM               7            0.117
##  4 1503960366 4/12/2016 3:00:00 AM               0            0    
##  5 1503960366 4/12/2016 4:00:00 AM               0            0    
##  6 1503960366 4/12/2016 5:00:00 AM               0            0    
##  7 1503960366 4/12/2016 6:00:00 AM               0            0    
##  8 1503960366 4/12/2016 7:00:00 AM               0            0    
##  9 1503960366 4/12/2016 8:00:00 AM              13            0.217
## 10 1503960366 4/12/2016 9:00:00 AM              30            0.5  
## # ℹ 22,089 more rows
summary(hourly_intensities)
##        Id            ActivityHour       TotalIntensity   AverageIntensity
##  Min.   :1.504e+09   Length:22099       Min.   :  0.00   Min.   :0.0000  
##  1st Qu.:2.320e+09   Class :character   1st Qu.:  0.00   1st Qu.:0.0000  
##  Median :4.445e+09   Mode  :character   Median :  3.00   Median :0.0500  
##  Mean   :4.848e+09                      Mean   : 12.04   Mean   :0.2006  
##  3rd Qu.:6.962e+09                      3rd Qu.: 16.00   3rd Qu.:0.2667  
##  Max.   :8.878e+09                      Max.   :180.00   Max.   :3.0000
head(hourly_intensities)
## # A tibble: 6 × 4
##           Id ActivityHour          TotalIntensity AverageIntensity
##        <dbl> <chr>                          <dbl>            <dbl>
## 1 1503960366 4/12/2016 12:00:00 AM             20            0.333
## 2 1503960366 4/12/2016 1:00:00 AM               8            0.133
## 3 1503960366 4/12/2016 2:00:00 AM               7            0.117
## 4 1503960366 4/12/2016 3:00:00 AM               0            0    
## 5 1503960366 4/12/2016 4:00:00 AM               0            0    
## 6 1503960366 4/12/2016 5:00:00 AM               0            0
hourly_steps %>%
  distinct(.keep_all = TRUE)
## # A tibble: 22,099 × 3
##            Id ActivityHour          StepTotal
##         <dbl> <chr>                     <dbl>
##  1 1503960366 4/12/2016 12:00:00 AM       373
##  2 1503960366 4/12/2016 1:00:00 AM        160
##  3 1503960366 4/12/2016 2:00:00 AM        151
##  4 1503960366 4/12/2016 3:00:00 AM          0
##  5 1503960366 4/12/2016 4:00:00 AM          0
##  6 1503960366 4/12/2016 5:00:00 AM          0
##  7 1503960366 4/12/2016 6:00:00 AM          0
##  8 1503960366 4/12/2016 7:00:00 AM          0
##  9 1503960366 4/12/2016 8:00:00 AM        250
## 10 1503960366 4/12/2016 9:00:00 AM       1864
## # ℹ 22,089 more rows
summary(hourly_steps)
##        Id            ActivityHour         StepTotal      
##  Min.   :1.504e+09   Length:22099       Min.   :    0.0  
##  1st Qu.:2.320e+09   Class :character   1st Qu.:    0.0  
##  Median :4.445e+09   Mode  :character   Median :   40.0  
##  Mean   :4.848e+09                      Mean   :  320.2  
##  3rd Qu.:6.962e+09                      3rd Qu.:  357.0  
##  Max.   :8.878e+09                      Max.   :10554.0
head(hourly_steps)
## # A tibble: 6 × 3
##           Id ActivityHour          StepTotal
##        <dbl> <chr>                     <dbl>
## 1 1503960366 4/12/2016 12:00:00 AM       373
## 2 1503960366 4/12/2016 1:00:00 AM        160
## 3 1503960366 4/12/2016 2:00:00 AM        151
## 4 1503960366 4/12/2016 3:00:00 AM          0
## 5 1503960366 4/12/2016 4:00:00 AM          0
## 6 1503960366 4/12/2016 5:00:00 AM          0
sleepday %>%
  distinct(.keep_all = TRUE)
## # A tibble: 410 × 5
##            Id SleepDay       TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
##         <dbl> <chr>                      <dbl>              <dbl>          <dbl>
##  1 1503960366 4/12/2016 12:…                 1                327            346
##  2 1503960366 4/13/2016 12:…                 2                384            407
##  3 1503960366 4/15/2016 12:…                 1                412            442
##  4 1503960366 4/16/2016 12:…                 2                340            367
##  5 1503960366 4/17/2016 12:…                 1                700            712
##  6 1503960366 4/19/2016 12:…                 1                304            320
##  7 1503960366 4/20/2016 12:…                 1                360            377
##  8 1503960366 4/21/2016 12:…                 1                325            364
##  9 1503960366 4/23/2016 12:…                 1                361            384
## 10 1503960366 4/24/2016 12:…                 1                430            449
## # ℹ 400 more rows
summary(sleepday)
##        Id              SleepDay         TotalSleepRecords TotalMinutesAsleep
##  Min.   :1.504e+09   Length:413         Min.   :1.000     Min.   : 58.0     
##  1st Qu.:3.977e+09   Class :character   1st Qu.:1.000     1st Qu.:361.0     
##  Median :4.703e+09   Mode  :character   Median :1.000     Median :433.0     
##  Mean   :5.001e+09                      Mean   :1.119     Mean   :419.5     
##  3rd Qu.:6.962e+09                      3rd Qu.:1.000     3rd Qu.:490.0     
##  Max.   :8.792e+09                      Max.   :3.000     Max.   :796.0     
##  TotalTimeInBed 
##  Min.   : 61.0  
##  1st Qu.:403.0  
##  Median :463.0  
##  Mean   :458.6  
##  3rd Qu.:526.0  
##  Max.   :961.0
head(sleepday)
## # A tibble: 6 × 5
##           Id SleepDay        TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
##        <dbl> <chr>                       <dbl>              <dbl>          <dbl>
## 1 1503960366 4/12/2016 12:0…                 1                327            346
## 2 1503960366 4/13/2016 12:0…                 2                384            407
## 3 1503960366 4/15/2016 12:0…                 1                412            442
## 4 1503960366 4/16/2016 12:0…                 2                340            367
## 5 1503960366 4/17/2016 12:0…                 1                700            712
## 6 1503960366 4/19/2016 12:0…                 1                304            320

หลังจากที่ดูข้อมูลจะเห็นได้ว่าจะมีข้อมูลที่เก็บวันที่ของทุกไฟล์เก็บข้อมูลเป็น Char จึงจำเป็นต้องเปลี่ยนให้เป็น Date ที่มีformatเหมือนกันเพื่อให้สามารถนำไปใช้ต่อได้

daily_activity$ActivityDate <- as.Date(daily_activity$ActivityDate, format = "%m/%d/%Y")
daily_calories$ActivityDay <- as.Date(daily_calories$ActivityDay, format = "%m/%d/%Y")
daily_intensities$ActivityDay <- as.Date(daily_intensities$ActivityDay, format = "%m/%d/%Y")
daily_steps$ActivityDay <- as.Date(daily_steps$ActivityDay, format = "%m/%d/%Y")

heartrate_seconds$Time <- as.POSIXct(heartrate_seconds$Time, format = "%m/%d/%Y %I:%M:%S %p")
hourly_calories$ActivityHour <- as.POSIXct(hourly_calories$ActivityHour, format = "%m/%d/%Y %I:%M:%S %p")
hourly_intensities$ActivityHour <- as.POSIXct(hourly_intensities$ActivityHour, format = "%m/%d/%Y %I:%M:%S %p")
hourly_intensities$ActivityDate <- as.Date(hourly_intensities$ActivityHour, format = "%m/%d/%Y")
hourly_intensities$ActivityOnlyHour <- format(hourly_intensities$ActivityHour, format = "%H:%M:%S")
hourly_steps$ActivityHour <- as.POSIXct(hourly_steps$ActivityHour, format = "%m/%d/%Y %I:%M:%S %p")

sleepday$SleepDay <- as.Date(sleepday$SleepDay, format = "%m/%d/%Y")

ตรวจสอบข้อมูลทั้งหมดไหมอีกครั้งว่าเปลี่ยนข้อมูลถูกต้องตามที่ต้องการไหม

summary(daily_activity)
##        Id             ActivityDate          TotalSteps    TotalDistance   
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :    0   Min.   : 0.000  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19   1st Qu.: 3790   1st Qu.: 2.620  
##  Median :4.445e+09   Median :2016-04-26   Median : 7406   Median : 5.245  
##  Mean   :4.855e+09   Mean   :2016-04-26   Mean   : 7638   Mean   : 5.490  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:10727   3rd Qu.: 7.713  
##  Max.   :8.878e+09   Max.   :2016-05-12   Max.   :36019   Max.   :28.030  
##  TrackerDistance  LoggedActivitiesDistance VeryActiveDistance
##  Min.   : 0.000   Min.   :0.0000           Min.   : 0.000    
##  1st Qu.: 2.620   1st Qu.:0.0000           1st Qu.: 0.000    
##  Median : 5.245   Median :0.0000           Median : 0.210    
##  Mean   : 5.475   Mean   :0.1082           Mean   : 1.503    
##  3rd Qu.: 7.710   3rd Qu.:0.0000           3rd Qu.: 2.053    
##  Max.   :28.030   Max.   :4.9421           Max.   :21.920    
##  ModeratelyActiveDistance LightActiveDistance SedentaryActiveDistance
##  Min.   :0.0000           Min.   : 0.000      Min.   :0.000000       
##  1st Qu.:0.0000           1st Qu.: 1.945      1st Qu.:0.000000       
##  Median :0.2400           Median : 3.365      Median :0.000000       
##  Mean   :0.5675           Mean   : 3.341      Mean   :0.001606       
##  3rd Qu.:0.8000           3rd Qu.: 4.782      3rd Qu.:0.000000       
##  Max.   :6.4800           Max.   :10.710      Max.   :0.110000       
##  VeryActiveMinutes FairlyActiveMinutes LightlyActiveMinutes SedentaryMinutes
##  Min.   :  0.00    Min.   :  0.00      Min.   :  0.0        Min.   :   0.0  
##  1st Qu.:  0.00    1st Qu.:  0.00      1st Qu.:127.0        1st Qu.: 729.8  
##  Median :  4.00    Median :  6.00      Median :199.0        Median :1057.5  
##  Mean   : 21.16    Mean   : 13.56      Mean   :192.8        Mean   : 991.2  
##  3rd Qu.: 32.00    3rd Qu.: 19.00      3rd Qu.:264.0        3rd Qu.:1229.5  
##  Max.   :210.00    Max.   :143.00      Max.   :518.0        Max.   :1440.0  
##     Calories   
##  Min.   :   0  
##  1st Qu.:1828  
##  Median :2134  
##  Mean   :2304  
##  3rd Qu.:2793  
##  Max.   :4900
head(daily_activity)
## # A tibble: 6 × 15
##           Id ActivityDate TotalSteps TotalDistance TrackerDistance
##        <dbl> <date>            <dbl>         <dbl>           <dbl>
## 1 1503960366 2016-04-12        13162          8.5             8.5 
## 2 1503960366 2016-04-13        10735          6.97            6.97
## 3 1503960366 2016-04-14        10460          6.74            6.74
## 4 1503960366 2016-04-15         9762          6.28            6.28
## 5 1503960366 2016-04-16        12669          8.16            8.16
## 6 1503960366 2016-04-17         9705          6.48            6.48
## # ℹ 10 more variables: LoggedActivitiesDistance <dbl>,
## #   VeryActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, SedentaryActiveDistance <dbl>,
## #   VeryActiveMinutes <dbl>, FairlyActiveMinutes <dbl>,
## #   LightlyActiveMinutes <dbl>, SedentaryMinutes <dbl>, Calories <dbl>
summary(daily_calories)
##        Id             ActivityDay            Calories   
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :   0  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19   1st Qu.:1828  
##  Median :4.445e+09   Median :2016-04-26   Median :2134  
##  Mean   :4.855e+09   Mean   :2016-04-26   Mean   :2304  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:2793  
##  Max.   :8.878e+09   Max.   :2016-05-12   Max.   :4900
head(daily_calories)
## # A tibble: 6 × 3
##           Id ActivityDay Calories
##        <dbl> <date>         <dbl>
## 1 1503960366 2016-04-12      1985
## 2 1503960366 2016-04-13      1797
## 3 1503960366 2016-04-14      1776
## 4 1503960366 2016-04-15      1745
## 5 1503960366 2016-04-16      1863
## 6 1503960366 2016-04-17      1728
summary(daily_intensities)
##        Id             ActivityDay         SedentaryMinutes LightlyActiveMinutes
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :   0.0   Min.   :  0.0       
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19   1st Qu.: 729.8   1st Qu.:127.0       
##  Median :4.445e+09   Median :2016-04-26   Median :1057.5   Median :199.0       
##  Mean   :4.855e+09   Mean   :2016-04-26   Mean   : 991.2   Mean   :192.8       
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:1229.5   3rd Qu.:264.0       
##  Max.   :8.878e+09   Max.   :2016-05-12   Max.   :1440.0   Max.   :518.0       
##  FairlyActiveMinutes VeryActiveMinutes SedentaryActiveDistance
##  Min.   :  0.00      Min.   :  0.00    Min.   :0.000000       
##  1st Qu.:  0.00      1st Qu.:  0.00    1st Qu.:0.000000       
##  Median :  6.00      Median :  4.00    Median :0.000000       
##  Mean   : 13.56      Mean   : 21.16    Mean   :0.001606       
##  3rd Qu.: 19.00      3rd Qu.: 32.00    3rd Qu.:0.000000       
##  Max.   :143.00      Max.   :210.00    Max.   :0.110000       
##  LightActiveDistance ModeratelyActiveDistance VeryActiveDistance
##  Min.   : 0.000      Min.   :0.0000           Min.   : 0.000    
##  1st Qu.: 1.945      1st Qu.:0.0000           1st Qu.: 0.000    
##  Median : 3.365      Median :0.2400           Median : 0.210    
##  Mean   : 3.341      Mean   :0.5675           Mean   : 1.503    
##  3rd Qu.: 4.782      3rd Qu.:0.8000           3rd Qu.: 2.053    
##  Max.   :10.710      Max.   :6.4800           Max.   :21.920
head(daily_intensities)
## # A tibble: 6 × 10
##         Id ActivityDay SedentaryMinutes LightlyActiveMinutes FairlyActiveMinutes
##      <dbl> <date>                 <dbl>                <dbl>               <dbl>
## 1   1.50e9 2016-04-12               728                  328                  13
## 2   1.50e9 2016-04-13               776                  217                  19
## 3   1.50e9 2016-04-14              1218                  181                  11
## 4   1.50e9 2016-04-15               726                  209                  34
## 5   1.50e9 2016-04-16               773                  221                  10
## 6   1.50e9 2016-04-17               539                  164                  20
## # ℹ 5 more variables: VeryActiveMinutes <dbl>, SedentaryActiveDistance <dbl>,
## #   LightActiveDistance <dbl>, ModeratelyActiveDistance <dbl>,
## #   VeryActiveDistance <dbl>
summary(daily_steps)
##        Id             ActivityDay           StepTotal    
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :    0  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19   1st Qu.: 3790  
##  Median :4.445e+09   Median :2016-04-26   Median : 7406  
##  Mean   :4.855e+09   Mean   :2016-04-26   Mean   : 7638  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:10727  
##  Max.   :8.878e+09   Max.   :2016-05-12   Max.   :36019
head(daily_steps)
## # A tibble: 6 × 3
##           Id ActivityDay StepTotal
##        <dbl> <date>          <dbl>
## 1 1503960366 2016-04-12      13162
## 2 1503960366 2016-04-13      10735
## 3 1503960366 2016-04-14      10460
## 4 1503960366 2016-04-15       9762
## 5 1503960366 2016-04-16      12669
## 6 1503960366 2016-04-17       9705
summary(heartrate_seconds)
##        Id                 Time                            Value       
##  Min.   :2.022e+09   Min.   :2016-04-12 00:00:00.00   Min.   : 36.00  
##  1st Qu.:4.388e+09   1st Qu.:2016-04-19 06:18:10.00   1st Qu.: 63.00  
##  Median :5.554e+09   Median :2016-04-26 20:28:50.00   Median : 73.00  
##  Mean   :5.514e+09   Mean   :2016-04-26 19:43:52.24   Mean   : 77.33  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04 08:00:20.00   3rd Qu.: 88.00  
##  Max.   :8.878e+09   Max.   :2016-05-12 16:20:00.00   Max.   :203.00
head(heartrate_seconds)
## # A tibble: 6 × 3
##           Id Time                Value
##        <dbl> <dttm>              <dbl>
## 1 2022484408 2016-04-12 07:21:00    97
## 2 2022484408 2016-04-12 07:21:05   102
## 3 2022484408 2016-04-12 07:21:10   105
## 4 2022484408 2016-04-12 07:21:20   103
## 5 2022484408 2016-04-12 07:21:25   101
## 6 2022484408 2016-04-12 07:22:05    95
summary(hourly_calories)
##        Id             ActivityHour                       Calories     
##  Min.   :1.504e+09   Min.   :2016-04-12 00:00:00.00   Min.   : 42.00  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19 01:00:00.00   1st Qu.: 63.00  
##  Median :4.445e+09   Median :2016-04-26 06:00:00.00   Median : 83.00  
##  Mean   :4.848e+09   Mean   :2016-04-26 11:46:42.58   Mean   : 97.39  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-03 19:00:00.00   3rd Qu.:108.00  
##  Max.   :8.878e+09   Max.   :2016-05-12 15:00:00.00   Max.   :948.00
head(hourly_calories)
## # A tibble: 6 × 3
##           Id ActivityHour        Calories
##        <dbl> <dttm>                 <dbl>
## 1 1503960366 2016-04-12 00:00:00       81
## 2 1503960366 2016-04-12 01:00:00       61
## 3 1503960366 2016-04-12 02:00:00       59
## 4 1503960366 2016-04-12 03:00:00       47
## 5 1503960366 2016-04-12 04:00:00       48
## 6 1503960366 2016-04-12 05:00:00       48
summary(hourly_intensities)
##        Id             ActivityHour                    TotalIntensity  
##  Min.   :1.504e+09   Min.   :2016-04-12 00:00:00.00   Min.   :  0.00  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19 01:00:00.00   1st Qu.:  0.00  
##  Median :4.445e+09   Median :2016-04-26 06:00:00.00   Median :  3.00  
##  Mean   :4.848e+09   Mean   :2016-04-26 11:46:42.58   Mean   : 12.04  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-03 19:00:00.00   3rd Qu.: 16.00  
##  Max.   :8.878e+09   Max.   :2016-05-12 15:00:00.00   Max.   :180.00  
##  AverageIntensity  ActivityDate        ActivityOnlyHour  
##  Min.   :0.0000   Min.   :2016-04-12   Length:22099      
##  1st Qu.:0.0000   1st Qu.:2016-04-19   Class :character  
##  Median :0.0500   Median :2016-04-26   Mode  :character  
##  Mean   :0.2006   Mean   :2016-04-26                     
##  3rd Qu.:0.2667   3rd Qu.:2016-05-03                     
##  Max.   :3.0000   Max.   :2016-05-12
head(hourly_intensities)
## # A tibble: 6 × 6
##           Id ActivityHour        TotalIntensity AverageIntensity ActivityDate
##        <dbl> <dttm>                       <dbl>            <dbl> <date>      
## 1 1503960366 2016-04-12 00:00:00             20            0.333 2016-04-12  
## 2 1503960366 2016-04-12 01:00:00              8            0.133 2016-04-12  
## 3 1503960366 2016-04-12 02:00:00              7            0.117 2016-04-12  
## 4 1503960366 2016-04-12 03:00:00              0            0     2016-04-12  
## 5 1503960366 2016-04-12 04:00:00              0            0     2016-04-12  
## 6 1503960366 2016-04-12 05:00:00              0            0     2016-04-12  
## # ℹ 1 more variable: ActivityOnlyHour <chr>
summary(hourly_steps)
##        Id             ActivityHour                      StepTotal      
##  Min.   :1.504e+09   Min.   :2016-04-12 00:00:00.00   Min.   :    0.0  
##  1st Qu.:2.320e+09   1st Qu.:2016-04-19 01:00:00.00   1st Qu.:    0.0  
##  Median :4.445e+09   Median :2016-04-26 06:00:00.00   Median :   40.0  
##  Mean   :4.848e+09   Mean   :2016-04-26 11:46:42.58   Mean   :  320.2  
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-03 19:00:00.00   3rd Qu.:  357.0  
##  Max.   :8.878e+09   Max.   :2016-05-12 15:00:00.00   Max.   :10554.0
head(hourly_steps)
## # A tibble: 6 × 3
##           Id ActivityHour        StepTotal
##        <dbl> <dttm>                  <dbl>
## 1 1503960366 2016-04-12 00:00:00       373
## 2 1503960366 2016-04-12 01:00:00       160
## 3 1503960366 2016-04-12 02:00:00       151
## 4 1503960366 2016-04-12 03:00:00         0
## 5 1503960366 2016-04-12 04:00:00         0
## 6 1503960366 2016-04-12 05:00:00         0
summary(sleepday)
##        Id               SleepDay          TotalSleepRecords TotalMinutesAsleep
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :1.000     Min.   : 58.0     
##  1st Qu.:3.977e+09   1st Qu.:2016-04-19   1st Qu.:1.000     1st Qu.:361.0     
##  Median :4.703e+09   Median :2016-04-27   Median :1.000     Median :433.0     
##  Mean   :5.001e+09   Mean   :2016-04-26   Mean   :1.119     Mean   :419.5     
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:1.000     3rd Qu.:490.0     
##  Max.   :8.792e+09   Max.   :2016-05-12   Max.   :3.000     Max.   :796.0     
##  TotalTimeInBed 
##  Min.   : 61.0  
##  1st Qu.:403.0  
##  Median :463.0  
##  Mean   :458.6  
##  3rd Qu.:526.0  
##  Max.   :961.0
head(sleepday)
## # A tibble: 6 × 5
##           Id SleepDay   TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
##        <dbl> <date>                 <dbl>              <dbl>          <dbl>
## 1 1503960366 2016-04-12                 1                327            346
## 2 1503960366 2016-04-13                 2                384            407
## 3 1503960366 2016-04-15                 1                412            442
## 4 1503960366 2016-04-16                 2                340            367
## 5 1503960366 2016-04-17                 1                700            712
## 6 1503960366 2016-04-19                 1                304            320

Visualization

สร้างกราฟTotalSteps และ Calories เพื่อดูความสัมพันธ์ของข้อมูลทั้งสอง

ggplot(data = daily_activity, aes(x = TotalSteps,y = Calories))+
  geom_smooth()+
  labs(title="TotalSteps Vs Caalories")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟของ LightlyActive,VeryActive กับ Calories

ggplot(data = daily_activity, aes(x = LightlyActiveMinutes, y = Calories))+
  geom_smooth()+
  labs(title="LightlyActiveMinutes Vs Caalories")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

ggplot(data = daily_activity)+
  geom_smooth(mapping = aes(x = VeryActiveMinutes,y = Calories))+
  labs(title="VeryActiveMinutes Vs Caalories")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

*เปลี่ยนชื่อข้อมูลใน SleepDay เป็น ActivityDate เพื่อเตรียมเอาข้อมูลนี้ไป merge กับข้อมูลอื่นๆ

sleepday_chagecoldate <- sleepday %>%
  rename (ActivityDate = SleepDay)
summary(sleepday_chagecoldate)
##        Id             ActivityDate        TotalSleepRecords TotalMinutesAsleep
##  Min.   :1.504e+09   Min.   :2016-04-12   Min.   :1.000     Min.   : 58.0     
##  1st Qu.:3.977e+09   1st Qu.:2016-04-19   1st Qu.:1.000     1st Qu.:361.0     
##  Median :4.703e+09   Median :2016-04-27   Median :1.000     Median :433.0     
##  Mean   :5.001e+09   Mean   :2016-04-26   Mean   :1.119     Mean   :419.5     
##  3rd Qu.:6.962e+09   3rd Qu.:2016-05-04   3rd Qu.:1.000     3rd Qu.:490.0     
##  Max.   :8.792e+09   Max.   :2016-05-12   Max.   :3.000     Max.   :796.0     
##  TotalTimeInBed 
##  Min.   : 61.0  
##  1st Qu.:403.0  
##  Median :463.0  
##  Mean   :458.6  
##  3rd Qu.:526.0  
##  Max.   :961.0
head(sleepday_chagecoldate)
## # A tibble: 6 × 5
##           Id ActivityDate TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
##        <dbl> <date>                   <dbl>              <dbl>          <dbl>
## 1 1503960366 2016-04-12                   1                327            346
## 2 1503960366 2016-04-13                   2                384            407
## 3 1503960366 2016-04-15                   1                412            442
## 4 1503960366 2016-04-16                   2                340            367
## 5 1503960366 2016-04-17                   1                700            712
## 6 1503960366 2016-04-19                   1                304            320

รวมข้อมูล 2 ชุด คือ sleepday_chagecoldate กับ daily_activity เพื่อนำไปทำกราฟต่อไป

merged_data <- merge(sleepday_chagecoldate,daily_activity, by=c('Id', 'ActivityDate'))
head(merged_data)
##           Id ActivityDate TotalSleepRecords TotalMinutesAsleep TotalTimeInBed
## 1 1503960366   2016-04-12                 1                327            346
## 2 1503960366   2016-04-13                 2                384            407
## 3 1503960366   2016-04-15                 1                412            442
## 4 1503960366   2016-04-16                 2                340            367
## 5 1503960366   2016-04-17                 1                700            712
## 6 1503960366   2016-04-19                 1                304            320
##   TotalSteps TotalDistance TrackerDistance LoggedActivitiesDistance
## 1      13162          8.50            8.50                        0
## 2      10735          6.97            6.97                        0
## 3       9762          6.28            6.28                        0
## 4      12669          8.16            8.16                        0
## 5       9705          6.48            6.48                        0
## 6      15506          9.88            9.88                        0
##   VeryActiveDistance ModeratelyActiveDistance LightActiveDistance
## 1               1.88                     0.55                6.06
## 2               1.57                     0.69                4.71
## 3               2.14                     1.26                2.83
## 4               2.71                     0.41                5.04
## 5               3.19                     0.78                2.51
## 6               3.53                     1.32                5.03
##   SedentaryActiveDistance VeryActiveMinutes FairlyActiveMinutes
## 1                       0                25                  13
## 2                       0                21                  19
## 3                       0                29                  34
## 4                       0                36                  10
## 5                       0                38                  20
## 6                       0                50                  31
##   LightlyActiveMinutes SedentaryMinutes Calories
## 1                  328              728     1985
## 2                  217              776     1797
## 3                  209              726     1745
## 4                  221              773     1863
## 5                  164              539     1728
## 6                  264              775     2035

สร้างกราฟเพื่อดูความสัมพันธ์ของ TotalTimeInBed กับ TotalMinutesAsleep

ggplot(data = merged_data, aes(x = TotalTimeInBed, y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="TotalTimeInBed Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟของ Calories กับ TotalMinutesAsleep

ggplot(data = merged_data, aes(x = Calories, y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="Calories Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟ SedentaryMinutes กับ TotalMinutesAsleep

ggplot(data = merged_data, aes(x = SedentaryMinutes, y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="SedentaryMinutes Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟ VeryActiveMinute,LightlyActiveMinutes กับ TotalMinutesAslee

ggplot(data = merged_data, aes(x =VeryActiveMinutes , y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="VeryActiveMinutes Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

ggplot(data = merged_data, aes(x =LightlyActiveMinutes , y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="LightlyActiveMinutes Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟของ TotalSteps กับ TotalMinutesAsleep

ggplot(data = merged_data, aes(x = TotalSteps, y = TotalMinutesAsleep))+
  geom_smooth()+
  labs(title="TotalSteps Vs TotalMInutesAsleep")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

สร้างกราฟ weekdays กับ Calories

ggplot(data = merged_data, aes(x = weekdays(ActivityDate), y = mean(Calories)))+
  geom_bar(stat = "identity")+ 
  labs(title="Weekdays Vs Calories")

สร้างกราฟ weekdays กับ TotalIntensity

ggplot(data = hourly_intensities, aes(x = weekdays(ActivityHour), y = TotalIntensity))+
  geom_bar(stat = "identity")+
  labs(title="Weekdays Vs TotalIntensity")

*สร้างข้อมูลใหม่เพื่อหาช่วงเวลาที่มี Intensity มากที่สุดหรือหาเทรนของ Intensity เมื่อเทียบกับเวลา

hourly_intensities_new <- hourly_intensities %>%
  group_by(ActivityOnlyHour)%>%
  drop_na() %>%
  summarise(mean_int = mean(TotalIntensity))
ggplot(data = hourly_intensities_new, aes(x = ActivityOnlyHour, y = mean_int))+
  geom_bar(stat = "identity")+
  theme(axis.text.x = element_text(angle = 90))+
  labs(title="ActivityOnlyHour Vs MeanTotalIntensity")

สรุป

  1. สามารถทำให้ระบบแนะนำให้ผู้ใช้เดินเยอะขึ้น และเน้นไปที่การเพิ่ม VeryActiveMinute สำหรับผู้ใช้ที่ต้องการเพิ่มการเผาพลาญแคลอรี่
  2. หากผู้ใช้ต้องการแก้ปัญหาการนอน สามารถพัฒนาให้ระบบแนะนำให้ไปใช้เวลาบนเตียงมากขึ้น และ ลดSedentaryMinutes
  3. อาจจะทำกิจกรรมร่วมกับผู้ใช้งานผลิตภัณฑ์ของบริษัทในช่วง 5 โมงถึง 1 ทุ่ม ในวัน อังคาร พุธ พฤหัสบดี เช่น การ Live ออกกำลังกายไปด้วยกันกับ ผู้ใช้งานในช่วงเวลาดังกล่าว