Smart Aleart Sensor Data Analytics

Exploratory Data Analysis

การวิเคราะห์ชุดข้อมูลที่จะนำไปใช้ในกระบวนการเรียนรู้ของเครื่องต่อไปนั้นเป็นสิ่งสำคัญ เพราะจะทำให้เข้าใจว่าชุดข้อมูลมีข้อมูลใดขาดหายไปหรือมีค่าผิดปกติหรือไม่ อันจะทำให้สามารถดำเนินการปรับปรุงข้อมูลให้มีความสมบูรณ์ให้มากที่สุดก่อนการนำเข้าสู่กระบวนการเรียนรู้ของเครื่อง (Machine Learning)

ดำเนินการนำเข้าไลบรารีที่จำเป็นในการใช้งานดังนี้

library(conflicted)
library(dlookr)
## Registered S3 method overwritten by 'dlookr':
##   method         from  
##   plot.transform scales
library(dplyr)
library(tidyverse)
## Warning: package 'stringr' was built under R version 4.3.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.4
## ✔ ggplot2   3.4.2     ✔ stringr   1.5.1
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
library(tidyr) 
library(lubridate)

Read csv file

อ่านไฟล์ข้อมูลที่ได้บันทึกไว้จากขั้นตอนการรวบรวมข้อมูลไว้แล้ว โดยกำหนดค่า stringAsFactors เป็น FALSE เพื่อป้องกันไม่ให้นำค่าที่ซ่อนอยู่บางค่าที่ไม่ใช่ตัวเลขมาแปลงเป็นตัวอักษร :

#Load data from station PAS001
data_frame <- read.csv("sensor_prepare_all_data.csv",
                 stringsAsFactors = FALSE)

Structure of Data Frame

เมื่อนำเข้าข้อมูลแล้ว ดำเนินการตรวจสอบโครงสร้างของข้อมูลเพื่อให้ทำความเข้าใจข้อมูลที่ได้รับ ด้วยการแสดงผลชุดข้อมูลที่อ่านได้จากไฟล์เพื่อให้เข้าใจโครงสร้างของชุดข้อมูล ด้วยคำสั่ง str(data_frame)

str(data_frame)
## 'data.frame':    6303 obs. of  9 variables:
##  $ Date_time    : chr  "1/4/2024 11:18:32" "1/4/2024 11:18:44" "1/4/2024 11:18:56" "1/4/2024 11:19:08" ...
##  $ Seismic_Max  : num  2.93 3.4 3.31 3.29 2.22 ...
##  $ Seismic_Min  : num  -3.5718 -0.0281 -2.7562 -2.3906 -1.9968 ...
##  $ Seismic_Mean : num  0.912 1.297 0.954 0.998 0.545 ...
##  $ Seismic_Range: num  6.5 3.43 6.06 5.68 4.22 ...
##  $ Gyro_Gx      : num  -0.672 -0.672 -0.672 -0.672 -0.672 ...
##  $ Gyro_Gy      : num  -1.04 -1.04 -1.04 -1.04 -1.04 ...
##  $ Gyro_Gz      : num  127 127 127 127 126 ...
##  $ Event_Actual : int  1 1 1 1 1 1 1 1 1 1 ...

จากโครงสร้างข้อมูลพบว่ามีตัวแปร 9 ตัวแปร (Variables) จำนวนทั้งสิ้น 6,303 แถว (Observations) - Date_time เป็นข้อมูลวันเวลาที่เซ็นเซอร์ส่งข้อมูลมาที่บันทึกในฐานข้อมูล มีชนิดข้อมูลเป็นตัวอักษร (Character) ต้องแปลงเป็นข้อมูลประเภท Date และ Time แต่ในการศึกษาครั้งนี้ยังไม่มีการใช้ข้อมูลวันเวลามาเกี่ยวข้องจึงยังไม่มีการแปลงข้อมูลวันที่และเวลา - Seismic_Max, Seismic_Min, Seismic_Mean, Seismic_Range, Gyro_Gx, Gyro_Gy และ Gyro_Gz เป็นข้อมูลประเภทตัวเลข (Numeric) สามารถนำไปใช้ในการประมวลผลได้เลยไม่ต้องเปลี่ยนแปลงประเภทของข้อมูล - Event_Actual เป็นข้อมูลประเภทตัวเลขจำนวนเต็ม (Integer) สามารถนำไปใช้ในการประมวลผลเป็นตัวแปรตามได้เลยไม่ต้องเปลี่ยนแปลงประเภทข้อมูล

Convert Date_time to Date and Time (Option)

#data_frame$Date_time <- ymd_hms(data_frame$Date_time)
#str(data_frame)

Summary of Data Frame

แสดงข้อมูลในทางสถิติ

summary(data_frame)
##   Date_time          Seismic_Max       Seismic_Min        Seismic_Mean    
##  Length:6303        Min.   :0.02802   Min.   :-3.60000   Min.   :-0.3224  
##  Class :character   1st Qu.:2.75628   1st Qu.:-3.43122   1st Qu.: 0.6127  
##  Mode  :character   Median :3.20628   Median :-3.17809   Median : 0.7429  
##                     Mean   :3.06465   Mean   :-2.87453   Mean   : 0.7421  
##                     3rd Qu.:3.45941   3rd Qu.:-2.67184   3rd Qu.: 0.8759  
##                     Max.   :3.59989   Max.   : 0.00924   Max.   : 1.5837  
##  Seismic_Range       Gyro_Gx           Gyro_Gy            Gyro_Gz       
##  Min.   :0.7593   Min.   :-9.7710   Min.   :-10.5038   Min.   :  7.809  
##  1st Qu.:5.5405   1st Qu.:-7.6641   1st Qu.: -8.9466   1st Qu.:125.038  
##  Median :6.1875   Median :-3.2977   Median : -2.3511   Median :125.557  
##  Mean   :5.9392   Mean   :-2.9976   Mean   : -2.6665   Mean   :125.527  
##  3rd Qu.:6.6656   3rd Qu.: 0.7634   3rd Qu.:  0.8855   3rd Qu.:126.137  
##  Max.   :7.1999   Max.   : 8.7328   Max.   : 13.0076   Max.   :128.489  
##   Event_Actual  
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :2.000  
##  Mean   :2.561  
##  3rd Qu.:4.000  
##  Max.   :7.000

Seismic_Max : ค่าต่ำสุดคือ 0.02802 ค่าสูงสุดคือ 3.59989 ค่าเฉลี่ย 3.45941 Seismic_Min : ค่าต่ำสุดคือ -3.60000 ค่าสูงสุดคือ 0.00924 ค่าเฉลี่ย -2.87453 Seismic_Mean: ค่าต่ำสุดคือ -0.3224 ค่าสูงสุดคือ 1.5837 ค่าเฉลี่ย 0.7421 Seismic_Range:ค่าตำ่สุดคือ 0.7593 ค่าสูงสุดคือ 7.1999 ค่าเฉลี่ย 5.9392 Gyro_Gx : ค่าตำ่สุดคือ -9.7710 ค่าสูงสุดคือ 8.7328 ค่าเฉลี่ย -2.9976 Gyro_Gy : ค่าต่ำสุดคือ -10.5038 ค่าสูงสุดคือ 13.0076 ค่าเฉลี่ย -2.6665 Gyro_Gz : ค่าต่ำสุดคือ 7.809 ค่าสูงสุดคือ 128.489 ค่าเฉลี่ย 125.527 Event_Actual มี 8 กลุ่ม (Classes) ได้แก่ 0, 1, 2, 3, 4, 5, 6, และ 7

Visualize Data

นำข้อมูลแต่ละตัวแปรมาแสดงผลในรูปแบบกราฟ เพื่อทำความเข้าใจช่วงของข้อมูล คุณลักษณะ และรายละเอียดของข้อมูลในภาพรวม

Seismic Data

df <- data_frame %>%
  select(Date_time,Seismic_Max,Seismic_Min,Seismic_Mean,Seismic_Range,Event_Actual)
long_data <-gather(df,key="Type",value="Value",2:5)
# plot chart 
variable_graph <-ggplot(long_data,aes(x=Event_Actual,y=Value,group=Type,color=Type))+
  geom_point()+
  facet_grid(rows = "Type")+
  ggtitle("Variable Seismic")
variable_graph

gc()
##           used  (Mb) gc trigger  (Mb) limit (Mb) max used  (Mb)
## Ncells 2547850 136.1    4574692 244.4         NA  4574692 244.4
## Vcells 5007259  38.3   10146329  77.5      16384  8386429  64.0
suppressWarnings(rm(long_data,variable_graph,df_completed_rain))

Gyro Data

df_Gyro <- data_frame %>%
  select(Date_time,Gyro_Gx,Gyro_Gy,Gyro_Gz,Event_Actual)
long_data <-gather(df_Gyro,key="Type",value="Value",2:4)
# plot chart 
variable_graph <-ggplot(long_data,aes(x=Event_Actual,y=Value,group=Type,color=Type))+
  geom_point()+
  facet_grid(rows = "Type")+
  ggtitle("Variable Gyro XYZ")
variable_graph

gc()
##           used  (Mb) gc trigger  (Mb) limit (Mb) max used  (Mb)
## Ncells 2543110 135.9    4574692 244.4         NA  4574692 244.4
## Vcells 4888173  37.3   10146329  77.5      16384 10144107  77.4
suppressWarnings(rm(long_data,variable_graph,df_completed_rain))

Gyro XY Data

df_GyroXY <- data_frame %>%
  select(Date_time,Gyro_Gx,Gyro_Gy,Event_Actual)
long_data <-gather(df_GyroXY,key="Type",value="Value",2:3)
summary(long_data)
##   Date_time          Event_Actual       Type               Value         
##  Length:12606       Min.   :0.000   Length:12606       Min.   :-10.5038  
##  Class :character   1st Qu.:0.000   Class :character   1st Qu.: -8.2443  
##  Mode  :character   Median :2.000   Mode  :character   Median : -2.4427  
##                     Mean   :2.561                      Mean   : -2.8321  
##                     3rd Qu.:4.000                      3rd Qu.:  0.7939  
##                     Max.   :7.000                      Max.   : 13.0076
# plot chart 
variable_graph <-ggplot(long_data,aes(x=Event_Actual,y=Value,group=Type,color=Type))+
  geom_point()+
  facet_grid(rows = "Type")+
  ggtitle("Variable Gyro XY")
variable_graph

#gc()
suppressWarnings(rm(long_data,variable_graph,df_completed_rain))

Boxplot Seismic

long_data <-gather(data_frame,key="Event",value="Value",c("Seismic_Max","Seismic_Min","Seismic_Mean","Seismic_Range"))
ggplot(long_data,aes(x=Event,y=Value))+
  ggtitle("Boxplot of Seismic")+
  geom_boxplot(fill="steelblue")

Boxplot Gyro

long_data <-gather(data_frame,key="Event",value="Value",c("Gyro_Gx","Gyro_Gy","Gyro_Gz"))
ggplot(long_data,aes(x=Event,y=Value))+
  ggtitle("Boxplot of Gyro")+
  geom_boxplot(fill="steelblue")

Coeffician Correlation

หาความสัมพันธ์ระหว่างตัวแปรนำเข้า หรือตัวแปรต้น ที่มีความสัมพันธ์กับตัวแปรตามหรือตัวแปรผลลัพธ์

data_frame %>% 
  select("Seismic_Max","Seismic_Min","Seismic_Mean","Seismic_Range","Gyro_Gx","Gyro_Gy","Gyro_Gz","Event_Actual")%>%
  correlate()%>%
  plot()

#gc()

แปรผลกราฟดังนี้

Gyro_Gx มีความสัมพันธ์กับ Gyro_Gy ในระดับที่สูงมากอาจจะพิจารณาตัดตัวแปรใดตัวแปรหนึ่งออกก็ได้หากจำเป็นเมื่อต้องการลดจำนวนตัวแปรลงให้สามารถประมวลผลได้รวดเร็วขึ้น หรือต้องการลดการใช้ทรัพยากรของระบบเป็นต้น หรืออาจจะพิจารณาศึกษาเปรียบเทียบผลการวิจัยเพื่อเพิ่มระดับความเชื่อมั่นในการพิจารณาตัดตัวแปรในภายหลังก็ได้

cor.test(data_frame$Seismic_Max, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Seismic_Max and data_frame$Event_Actual
## t = 4.7008, df = 6301, p-value = 2.646e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.03447859 0.08368255
## sample estimates:
##        cor 
## 0.05911648
#cor(data_frame$Seismic_Max, data_frame$Event_Actual, use="complete.obs") ใช้กรณีมี NA

Seismic_Max มีความสัมพันธ์ต่อผลลัพธ์อยู่ที่ระดับ 0.0591 ซึ่งน้อยมาก

Correlation Seismic_Min

cor.test(data_frame$Seismic_Min, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Seismic_Min and data_frame$Event_Actual
## t = -3.0006, df = 6301, p-value = 0.002705
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.06240404 -0.01309803
## sample estimates:
##         cor 
## -0.03777403

Seismic_Min มีความสัมพันธ์ต่อผลลัพธ์อยู่ที่ระดับ -0.0377 ซึ่งมีความสัมพันธ์ในทางตรงข้ามในระดับที่น้อยมาก

Correlation Seismic_Mean

cor.test(data_frame$Seismic_Mean, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Seismic_Mean and data_frame$Event_Actual
## t = -0.93839, df = 6301, p-value = 0.3481
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.03649844  0.01287108
## sample estimates:
##         cor 
## -0.01182088

Seismic_Mean มีความสัมพันธ์ต่อผลลัพธ์อยู่ในระดับ -0.01182 ซึ่งมีความสัมพันธ์ในทางตรงข้ามในระดับที่น้อยมาก

Correlation Seismic_Range

cor.test(data_frame$Seismic_Range, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Seismic_Range and data_frame$Event_Actual
## t = 4.7634, df = 6301, p-value = 1.947e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.03526420 0.08446356
## sample estimates:
##        cor 
## 0.05990026

Seismic_Range มีความสัมพันธ์ต่อผลลัพธ์อยู่ในระดับ 0.0599 ซึ่งน้อยมาก #### Correlation Gyro_Gx

cor.test(data_frame$Gyro_Gx, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Gyro_Gx and data_frame$Event_Actual
## t = 1.6405, df = 6301, p-value = 0.1009
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.004027664  0.045327683
## sample estimates:
##       cor 
## 0.0206626

Gyro_Gx มีความสัมพันธ์ต่อผลลัพธ์อยู่ในระดับ 0.02066 ซึ่งน้อยมาก

Correlation Gyro_Gy

cor.test(data_frame$Gyro_Gy, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Gyro_Gy and data_frame$Event_Actual
## t = 7.1574, df = 6301, p-value = 9.157e-13
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.0652595 0.1142380
## sample estimates:
##        cor 
## 0.08980302

Gyro_Gy มีความสัมพันธ์ต่อผลลัพธ์อยู่ในระดับ 0.0898 ซึ่งน้อยมาก แต่มากที่สุดในจำนวนตัวแปรที่มีอยู่ทั้งหมด

Correlation Gyro_Gz

cor.test(data_frame$Gyro_Gz, data_frame$Event_Actual)
## 
##  Pearson's product-moment correlation
## 
## data:  data_frame$Gyro_Gz and data_frame$Event_Actual
## t = 0.70332, df = 6301, p-value = 0.4819
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.01583170  0.03354084
## sample estimates:
##         cor 
## 0.008859968

Gyro_Gz มีความสัมพันธ์ต่อผลลัพธ์อยู่ในระดับ 0.0088 ซึ่งน้อยมาก

Visualize Corrrelation group by Event

แสดงผลข้อมูลตัวแปรในรูปแบบกราฟความสัมพันธ์ระหว่างตัวแปรที่มีความสัมพันธ์กันกับตัวแปรตามในระดับที่ค่อนข้างมากที่สุดในตัวแปรที่มีอยู่ ได้แก่ Gyro_Gy, Seismic_Range, Seismic_Max และ Gyro_Gx ตามลำดับ

p <- ggplot(data_frame, aes(Gyro_Gx,Gyro_Gy))
p + geom_point(aes(colour = factor(Event_Actual)))

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gx และ Gyro_Gy ช่วยให้จัดกลุ่มของเหตุการณ์ (Event) ได้เป็นอย่างดี โดยเฉพาะเหตุการณ์ที่ 2, 3, 4, 5 สำหรับเหตุการณ์ที่ 0,6 และ 7 อาจจะจัดกลุ่มได้ไม่่ชัดเจนมากนัก

p <- ggplot(data_frame, aes(Gyro_Gx,Seismic_Range))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gx และ Seismic_Range สามารถจัดกลุ่มของเหตุการณ์ (Event) ที่ 2, 3, 4, ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 1 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน แต่มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0,6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Gyro_Gx,Seismic_Max))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gx และ Seismic_Max สามารถจัดกลุ่มของเหตุการณ์ (Event) ที่ 2 และ 3 ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 1, 4 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน แต่มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0,6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Gyro_Gy,Seismic_Range))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gy และ Seismic_Range สามารถจัดกลุ่มของเหตุการณ์(Event) ที่ 1,2 และ 3 ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 4 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน แต่มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0,6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Gyro_Gy,Seismic_Max))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gy และ Seismic_Max สามารถจัดกลุ่มของเหตุการณ์(Event) ที่ 1,2 และ 3 ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 4 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน แต่มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0,6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Gyro_Gx,Seismic_Min))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gx และ Seismic_Min สามารถจัดกลุ่มของเหตุการณ์ (Event) ที่ 2,3 ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 1, 4 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0, 6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Gyro_Gy,Seismic_Min))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Gyro_Gy และ Seismic_Min สามารถจัดกลุ่มของเหตุการณ์ (Event) ที่ 2,3 ได้เป็นอย่างดี สำหรับเหตุการณ์ที่ 1, 4 และ 5 ส่วนใหญ่สามารถจัดกลุ่มได้ชัดเจน มีบางข้อมูลที่แตกต่างออกไปจากชุดข้อมูลส่วนใหญ่ สำหรับเหตุการณ์ที่ 0, 6 และ 7 ค่อนข้างทับซ้อนกัน ไม่สามารถแบ่งกลุ่มได้ชัดเจน

p <- ggplot(data_frame, aes(Seismic_Max,Seismic_Min))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Seismic_Max และ Seismic_Min ไม่สามารถจัดกลุ่มตามเหตุการณ์ (Event) ได้

p <- ggplot(data_frame, aes(Seismic_Range,Seismic_Min))
p + geom_point(aes(colour = factor(Event_Actual))) 

ความสัมพันธ์ระหว่างตัวแปร Seismic_Range กับ Seismic_Min ไม่สามารถจัดกลุ่มตามเหตุการณ์ (Event) ได้

Split Train and Test Set

จากชุดข้อมูลที่รวบรวมได้ทั้งหมดนำมาแบ่งเป็นสองส่วนคือ ส่วนของข้อมูลสำหรับการฝึกสอน และข้อมูลสำหรับการทดสอบ โดยการคัดข้อมูลจากการทดลองกิจกรรมต่าง ๆ ให้เซ็นเซอร์ตรวจจับและส่งข้อมูล ทุก ๆ ครั้งที่ 5 คัดมาเป็นข้อมูลสำหรับการทดสอบ ส่วนข้อมูลที่เหลือเป็นข้อมูลสำหรับการฝึกสอน มีสัดส่วนข้อมูลดังนี้

train_test_metadata <- read.csv("train_test_metadata.csv",
                 stringsAsFactors = FALSE)
head(train_test_metadata,9)

เหตุการณ์ปกติ จำนวน 1,799 แถว ใช้ฝึกสอนจำนวน 1,399 แถว คิดเป็น 77.77% ใช้ทดสอบจำนวน 400 แถว คิดเป็น 22.23% คนเดินผ่าน1 คน ทดสอบจำนวน 102 ครั้ง มีข้อมูลจำนวน 793 แถว ใช้ฝึกสอน 650 คิดเป็น 81.97% ใช้ทดสอบจำนวน 143 แถว คิดเป็น 18.03% คนเดินผ่าน 2 คน ทดสอบจำนวน 100 ครั้ง มีข้อมูลจำนวน 683 แถว ใช้สำหรับการฝึกสอนจำนวน 544 แถว คิดเป็น 79.65% ใช้สำหรับการทดสอบจำนวน 139 แถว คิดเป็น 20.35% คนเดินผ่าน 3 คน ทดสอบจำนวน 104 ครั้ง มีข้อมูลจำนวน 858 แถว ใช้สำหรับการฝึกสอนจำนวน 687 แถว คิดเป็น 80.07% ใช้สำหรับการทดสอบจำนวน 171 แถว คิดเป็น 19.93% คนเดินผ่าน 4 คน ทดสอบจำวน 100 ครั้ง มีข้อมูลจำนวน 681 แถว ใช้สำหรับการฝึกสอนจำนวน 546 แถว คิดเป็น 80.18% ใช้สำหรับการทดสอบจำนวน 135 แถว คิดเป็น 19.82% คนเดินผ่าน 5 คน ทดสอบจำนวน 100 ครั้ง มีข้อมูลจำนวน 671 แถว ใช้สำหรับฝึกสอนจำนวน 553 ครั้ง คิดเป็น 82.41% ใช้สำหรับทดสอบจำนวน 118 ครั้ง คิดเป็น 17.59% รถจักรยานยนต์วิ่งผ่าน ทดสอบจำนวน 100 ครั้ง ได้ข้อมูล 393 แถว ใช้ฝึกสอนจำนวน 328 แถว คิดเป็น 83.46% ใช้ทดสอบจำนวน 65 แถว คิดเป็น 16.54% รถจักรยานวิ่งผ่าน ทดสอบจำนวน 100 ครั้ง มีข้อมูลจำนวน 425 แถว ใช้ฝึกสอนจำนวน 339 แถว คิดเป็น 79.76% ใช้ทดสอบจำนวน 86 แถว คิดเป็น 20.24% รวมชุดข้อมูลทั้งหมด จากการทดสอบ 606 ครั้ง มีข้อมูลจำนวน 6,303 แถว ใช้ฝึกสอนจำนวน 5,046 แถว คิดเป็น 80.06% ใช้ทดสอบจำนวน 1,257 แถว คิดเป็น19.94%

นำข้อมูลมาแสดงผลชุดข้อมูลที่อ่านได้จากไฟล์เพื่อให้เข้าใจโครงสร้างของชุดข้อมูลสำหรับการฝึกสอน

train_data <- read.csv("sensor_prepare_train_data.csv",
                 stringsAsFactors = FALSE)
str(train_data)
## 'data.frame':    5046 obs. of  9 variables:
##  $ Date_time    : chr  "1/4/2024 11:18:32" "1/4/2024 11:18:44" "1/4/2024 11:18:56" "1/4/2024 11:19:08" ...
##  $ Seismic_Max  : num  2.93 3.4 3.31 3.29 2.22 ...
##  $ Seismic_Min  : num  -3.5718 -0.0281 -2.7562 -2.3906 -1.9968 ...
##  $ Seismic_Mean : num  0.912 1.297 0.954 0.998 0.545 ...
##  $ Seismic_Range: num  6.5 3.43 6.06 5.68 4.22 ...
##  $ Gyro_Gx      : num  -0.672 -0.672 -0.672 -0.672 -0.672 ...
##  $ Gyro_Gy      : num  -1.04 -1.04 -1.04 -1.04 -1.04 ...
##  $ Gyro_Gz      : num  127 127 127 127 126 ...
##  $ Event_Actual : int  1 1 1 1 1 1 1 1 1 1 ...

มีข้อมูลสำหรับการฝึกสอนจำนวน 5,046 แถว (Observations) และ 9 ตัวแปร (Variables) ใช้จริง 7 ตัวแปร (ตัด Date_time และ Event_Actual)

summary(train_data)
##   Date_time          Seismic_Max       Seismic_Min        Seismic_Mean    
##  Length:5046        Min.   :0.02802   Min.   :-3.59999   Min.   :-0.3224  
##  Class :character   1st Qu.:2.75628   1st Qu.:-3.43122   1st Qu.: 0.6112  
##  Mode  :character   Median :3.20628   Median :-3.17808   Median : 0.7429  
##                     Mean   :3.06429   Mean   :-2.88286   Mean   : 0.7419  
##                     3rd Qu.:3.45941   3rd Qu.:-2.64375   3rd Qu.: 0.8763  
##                     Max.   :3.59989   Max.   : 0.00924   Max.   : 1.5837  
##  Seismic_Range       Gyro_Gx           Gyro_Gy            Gyro_Gz       
##  Min.   :0.7593   Min.   :-9.7710   Min.   :-10.4733   Min.   :  7.809  
##  1st Qu.:5.5405   1st Qu.:-7.6641   1st Qu.: -8.9160   1st Qu.:125.008  
##  Median :6.1985   Median :-2.7634   Median : -2.3206   Median :125.557  
##  Mean   :5.9472   Mean   :-2.9722   Mean   : -2.6277   Mean   :125.496  
##  3rd Qu.:6.6656   3rd Qu.: 0.7634   3rd Qu.:  0.8855   3rd Qu.:126.107  
##  Max.   :7.1999   Max.   : 8.7328   Max.   : 13.0076   Max.   :128.489  
##   Event_Actual  
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :2.000  
##  Mean   :2.594  
##  3rd Qu.:4.000  
##  Max.   :7.000
head(train_data)
tail(train_data)

แสดงผลชุดข้อมูลที่อ่านได้จากไฟล์เพื่อให้เข้าใจโครงสร้างของชุดข้อมูล

test_data <- read.csv("sensor_prepare_test_data.csv",
                 stringsAsFactors = FALSE)
str(test_data)
## 'data.frame':    1257 obs. of  9 variables:
##  $ Date_time    : chr  "1/4/2024 11:40:58" "1/4/2024 11:41:10" "1/4/2024 11:41:22" "1/4/2024 11:41:34" ...
##  $ Seismic_Max  : num  3.23 2.22 2.33 2.82 2.14 ...
##  $ Seismic_Min  : num  -3.37 -2.76 -2.11 -2.64 -2.39 ...
##  $ Seismic_Mean : num  0.698 0.443 0.736 0.189 0.605 ...
##  $ Seismic_Range: num  6.61 4.98 4.44 5.46 4.53 ...
##  $ Gyro_Gx      : num  -0.672 -0.672 -0.672 -0.672 -0.672 ...
##  $ Gyro_Gy      : num  -1.04 -1.04 -1.04 -1.04 -1.04 ...
##  $ Gyro_Gz      : num  127 126 126 127 127 ...
##  $ Event_Actual : int  1 1 1 1 1 1 1 1 1 1 ...

มีข้อมูล 1,257 แถว (Observations) และ 9 ตัวแปรในการทดสอบ

summary(test_data)
##   Date_time          Seismic_Max      Seismic_Min        Seismic_Mean     
##  Length:1257        Min.   :0.5062   Min.   :-3.60000   Min.   :-0.07793  
##  Class :character   1st Qu.:2.7844   1st Qu.:-3.43122   1st Qu.: 0.62230  
##  Mode  :character   Median :3.2063   Median :-3.17809   Median : 0.74292  
##                     Mean   :3.0661   Mean   :-2.84109   Mean   : 0.74299  
##                     3rd Qu.:3.4594   3rd Qu.:-2.67184   3rd Qu.: 0.87471  
##                     Max.   :3.5999   Max.   :-0.02807   Max.   : 1.38095  
##  Seismic_Range      Gyro_Gx           Gyro_Gy            Gyro_Gz     
##  Min.   :1.266   Min.   :-9.2824   Min.   :-10.5038   Min.   :123.3  
##  1st Qu.:5.513   1st Qu.:-7.6336   1st Qu.: -9.0687   1st Qu.:125.1  
##  Median :6.188   Median :-3.8473   Median : -2.5038   Median :125.6  
##  Mean   :5.907   Mean   :-3.0997   Mean   : -2.8223   Mean   :125.7  
##  3rd Qu.:6.638   3rd Qu.: 0.7634   3rd Qu.:  0.7634   3rd Qu.:126.2  
##  Max.   :7.172   Max.   : 8.3359   Max.   : 12.7634   Max.   :128.2  
##   Event_Actual  
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :2.000  
##  Mean   :2.431  
##  3rd Qu.:4.000  
##  Max.   :7.000
head(test_data)
tail(test_data)