การวิเคราะห์ชุดข้อมูลที่จะนำไปใช้ในกระบวนการเรียนรู้ของเครื่องต่อไปนั้นเป็นสิ่งสำคัญ เพราะจะทำให้เข้าใจว่าชุดข้อมูลมีข้อมูลใดขาดหายไปหรือมีค่าผิดปกติหรือไม่ อันจะทำให้สามารถดำเนินการปรับปรุงข้อมูลให้มีความสมบูรณ์ให้มากที่สุดก่อนการนำเข้าสู่กระบวนการเรียนรู้ของเครื่อง (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)
อ่านไฟล์ข้อมูลที่ได้บันทึกไว้จากขั้นตอนการรวบรวมข้อมูลไว้แล้ว โดยกำหนดค่า stringAsFactors เป็น FALSE เพื่อป้องกันไม่ให้นำค่าที่ซ่อนอยู่บางค่าที่ไม่ใช่ตัวเลขมาแปลงเป็นตัวอักษร :
#Load data from station PAS001
data_frame <- read.csv("sensor_prepare_all_data.csv",
stringsAsFactors = FALSE)
เมื่อนำเข้าข้อมูลแล้ว ดำเนินการตรวจสอบโครงสร้างของข้อมูลเพื่อให้ทำความเข้าใจข้อมูลที่ได้รับ ด้วยการแสดงผลชุดข้อมูลที่อ่านได้จากไฟล์เพื่อให้เข้าใจโครงสร้างของชุดข้อมูล ด้วยคำสั่ง 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) สามารถนำไปใช้ในการประมวลผลเป็นตัวแปรตามได้เลยไม่ต้องเปลี่ยนแปลงประเภทข้อมูล
#data_frame$Date_time <- ymd_hms(data_frame$Date_time)
#str(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
นำข้อมูลแต่ละตัวแปรมาแสดงผลในรูปแบบกราฟ เพื่อทำความเข้าใจช่วงของข้อมูล คุณลักษณะ และรายละเอียดของข้อมูลในภาพรวม
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))
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))
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))
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")
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")
หาความสัมพันธ์ระหว่างตัวแปรนำเข้า หรือตัวแปรต้น ที่มีความสัมพันธ์กับตัวแปรตามหรือตัวแปรผลลัพธ์
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 ซึ่งน้อยมาก
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 ซึ่งมีความสัมพันธ์ในทางตรงข้ามในระดับที่น้อยมาก
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 ซึ่งมีความสัมพันธ์ในทางตรงข้ามในระดับที่น้อยมาก
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 ซึ่งน้อยมาก
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 ซึ่งน้อยมาก แต่มากที่สุดในจำนวนตัวแปรที่มีอยู่ทั้งหมด
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 ซึ่งน้อยมาก
แสดงผลข้อมูลตัวแปรในรูปแบบกราฟความสัมพันธ์ระหว่างตัวแปรที่มีความสัมพันธ์กันกับตัวแปรตามในระดับที่ค่อนข้างมากที่สุดในตัวแปรที่มีอยู่ ได้แก่ 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) ได้
จากชุดข้อมูลที่รวบรวมได้ทั้งหมดนำมาแบ่งเป็นสองส่วนคือ ส่วนของข้อมูลสำหรับการฝึกสอน และข้อมูลสำหรับการทดสอบ โดยการคัดข้อมูลจากการทดลองกิจกรรมต่าง ๆ ให้เซ็นเซอร์ตรวจจับและส่งข้อมูล ทุก ๆ ครั้งที่ 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)