thỰc hÀnh giẢi thuẬt phÂn cỤm (gom cỤm,...

13
THC HÀNH GII THUT PHÂN CM (GOM CM, CLUSTERING) Dliu sdng: U.S Airline 1. Sdng Exploratory - Đăng kí tài khon và ti vExploratory - Cài đặt biến môi trường EXPLORATORY_HOME=C:\exploratory - Cài đặt tđộng R 3.5.1 và git 2.8 - Dliu sdng: 2008.csv, 673MB - Mô ttp dliu: 1. DayofMonth December 1st to December 31th. 2. DayOfWeek 1 refers to Monday and in a similar way, 7 refers to Sunday. 3. DepTime Actual departure time 4. ArrTime Actual arrival time 5. CRSDepTime Scheduled departure time 6. CRSArrTime Actual arrival time 7. UniqueCarrier Unique carrier code 8. FlightNum Flight number 9. ActualElapsedTime In minutes 10. CRSElapsedTime In minutes 11. AirTime In minutes 12. ArrDelay Arrival delay, in minutes 13. DepDelay Departure delay, in minutes 14. Origin Origin IATA airport code 15. Dest Destination IATA airport code 16. Distance In miles - Nguồn dữ liệu: http://stat-computing.org/dataexpo/2009/ 2. Sdng R: Thut toán k-means a) Tin xlý dliu //Cài đặt gói dữ liệu cần thiết: install.packages("dplyr") install.packages("factoextra") install.packages("animation") install.packages("proxy") install.packages("pamr") install.packages("clValid") //Tải các gói vào thư viện *Lưu ý cài đặt gói còn thiếu library(cluster) # cluster library library(proxy) # hcluster function library(fpc) # cluster.stats function library(pamr) # pam function library(clValid) # clValid function library(ggplot2) # plot diagram library(dplyr) library(animation) library(factoextra)

Upload: others

Post on 28-Dec-2019

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING)

Dữ liệu sử dụng: U.S Airline

1. Sử dụng Exploratory - Đăng kí tài khoản và tải về Exploratory - Cài đặt biến môi trường EXPLORATORY_HOME=C:\exploratory - Cài đặt tự động R 3.5.1 và git 2.8 - Dữ liệu sử dụng: 2008.csv, 673MB - Mô tả tập dữ liệu:

1. DayofMonth December 1st to December 31th. 2. DayOfWeek 1 refers to Monday and in a similar way, 7 refers to Sunday. 3. DepTime Actual departure time 4. ArrTime Actual arrival time 5. CRSDepTime Scheduled departure time 6. CRSArrTime Actual arrival time 7. UniqueCarrier Unique carrier code 8. FlightNum Flight number 9. ActualElapsedTime In minutes 10. CRSElapsedTime In minutes 11. AirTime In minutes 12. ArrDelay Arrival delay, in minutes 13. DepDelay Departure delay, in minutes 14. Origin Origin IATA airport code 15. Dest Destination IATA airport code 16. Distance In miles - Nguồn dữ liệu: http://stat-computing.org/dataexpo/2009/

2. Sử dụng R: Thuật toán k-means a) Tiền xử lý dữ liệu //Cài đặt gói dữ liệu cần thiết: install.packages("dplyr") install.packages("factoextra") install.packages("animation") install.packages("proxy") install.packages("pamr") install.packages("clValid") //Tải các gói vào thư viện *Lưu ý cài đặt gói còn thiếu library(cluster) # cluster library library(proxy) # hcluster function library(fpc) # cluster.stats function library(pamr) # pam function library(clValid) # clValid function library(ggplot2) # plot diagram library(dplyr) library(animation) library(factoextra)

Page 2: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

//Đọc dữ liệu df=read.csv("2008.csv") glimpse(df) (Observations: 7,009,728; Variables: 29) //Trích xuất dữ liệu tháng 12, đủ để phân tích trên máy cấu hình yếu df=subset(df, Month == "12") glimpse(df) (Observations: 544,958; Variables: 29) summary(df) //Loại bỏ giá trị missing df = na.omit(df) glimpse(df) (Observations: 168,647; Variables: 29) //Loại bỏ một số cột không có ý nghĩa trong phân tích: df = df[, -20:-29] Loại bỏ tháng, năm do chúng ta đã chỉ rõ xét dữ liệu tháng 12, còn lại 17 cột df = df[, -1] df = df[, -1] str(df) Kết quả: Dataset chứa 168,647 bản ghi với 17 biến quan sát 'data.frame': 168647 obs. of 17 variables: $ DayofMonth : int 3 3 3 3 3 3 3 3 3 3 ... $ DayOfWeek : int 3 3 3 3 3 3 3 3 3 3 ... $ DepTime : int 1126 1859 1256 1925 2002 1716 1620 1807 1930 1004 ... $ CRSDepTime : int 1045 1825 1240 1900 1940 1610 1555 1725 1905 1005 ... $ ArrTime : int 1241 1925 1458 2120 2249 2054 1826 1910 2041 1130 ... $ CRSArrTime : int 1200 1900 1435 2100 2230 1950 1800 1845 2020 1115 ... $ UniqueCarrier : Factor w/ 20 levels "9E","AA","AQ",..: 18 18 18 18 18 18 18 18 18 18 ... $ FlightNum : int 2717 1712 294 2776 623 586 1259 548 619 1152 ... $ TailNum : Factor w/ 5374 levels "","80009E","80019E",..: 3796 2127 3943 3316 1395 3593 3475 1430 2524 1177 ... $ ActualElapsedTime: int 75 86 62 55 107 158 186 63 71 86 ... $ CRSElapsedTime : int 75 95 55 60 110 160 185 80 75 70 ... $ AirTime : int 55 73 45 46 93 140 177 50 56 51 ... $ ArrDelay : int 41 25 23 20 19 64 26 25 21 15 ... $ DepDelay : int 41 34 16 25 22 66 25 42 25 -1 ... $ Origin : Factor w/ 303 levels "ABE","ABI","ABQ",..: 3 3 3 3 3 3 3 3 3 3 ... $ Dest : Factor w/ 304 levels "ABE","ABI","ABQ",..: 82 157 160 175 177 181 219 223 223 291 ... $ Distance : int 349 487 289 332 718 1121 1111 328 328 321 ...

b) Mô tả các biến 1. DayofMonth December 1st to December 31th. summary(df$DayofMonth) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 11.00 18.00 17.18 23.00 31.00 2. DayOfWeek 1 refers to Monday and in a similar way, 7 refers to Sunday. summary(df$DayOfWeek)

Page 3: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Min. 1st Qu. Median Mean 3rd Qu. Max. 1.000 2.000 4.000 3.741 5.000 7.000 3. DepTime Actual departure time summary(df$DepTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 1 1117 1510 1466 1841 2400 4. ArrTime Actual arrival time summary(df$ArrTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 1 1230 1642 1563 2014 2400 5. CRSDepTime Scheduled departure time summary(df$CRSDepTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 5 1040 1425 1400 1749 2359 6. CRSArrTime Actual arrival time summary(df$CRSArrTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 1 1230 1624 1581 1950 2359 7. UniqueCarrier Unique carrier code carrier = data.frame(df$UniqueCarrier) qplot(x = df$UniqueCarrier, data = carrier, fill = df$UniqueCarrier)

Hãng hàng không Southwest chiếm phần lớn thị phần các chuyến bay ở Hoa Kỳ trong năm 2008. Số lượng chuyến bay của họ thậm chí còn lớn hơn tổng số chuyến bày của Hãng hàng không Skywest và Hãng hàng không Hoa Kỳ. Chúng tôi cũng sẽ giúp bạn tìm ra hãng hàng không nào là lựa chọn hàng đầu nếu bạn muốn tránh delay. 8. FlightNum Flight number summary(df$FlightNum) Min. 1st Qu. Median Mean 3rd Qu. Max. 1 658 1676 2357 3593 9741

Page 4: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

9. ActualElapsedTime In minutes summary(df$ActualElapsedTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 18.0 88.0 126.0 143.5 177.0 790.0 10. CRSElapsedTime In minutes summary(df$CRSElapsedTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 26.0 82.0 116.0 134.5 165.0 660.0 11. AirTime In minutes summary(df$AirTime) Min. 1st Qu. Median Mean 3rd Qu. Max. 6 60 93 112 141 647 12. ArrDelay Arrival delay, in minutes summary(df$ArrDelay) Min. 1st Qu. Median Mean 3rd Qu. Max. 15.00 24.00 41.00 62.55 77.00 1655.00 13. DepDelay Departure delay, in minutes summary(df$DepDelay) Min. 1st Qu. Median Mean 3rd Qu. Max. -34.00 15.00 35.00 53.53 71.00 1597.00 14. Origin Origin IATA airport code summary(df$Origin) ATL ORD DEN DFW DTW PHX EWR IAH LAS MSP 12232 11020 7004 6208 4984 4353 4333 4269 4020 4004 LAX JFK SLC SFO SEA CLT BOS PHL MDW MCO 3837 3409 3375 3370 2992 2977 2841 2676 2546 2481 CVG BWI LGA SAN DCA IAD MEM MIA FLL STL 2457 2383 2272 1832 1768 1714 1665 1601 1590 1504 MKE TPA MCI BNA CLE PDX HOU RDU DAL OAK 1491 1489 1381 1358 1352 1329 1324 1297 1218 1211 HNL SMF PIT SJC IND SNA ABQ AUS SAT MSY 1164 1131 1061 1003 989 944 905 872 809 806 CMH PBI BUF OMA JAX BDL BUR RSW BHM ONT 757 733 727 704 643 629 627 607 546 521 PVD GRR SDF TUL OKC RNO DSM SJU RIC MHT 517 514 504 493 488 485 478 471 452 426 DAY MSN GEG LIT BOI ELP TUS ANC ICT LGB 419 408 404 404 394 394 389 384 371 367 TYS ALB ROC XNA SYR OGG ORF HPN COS CID 358 356 356 344 343 332 322 317 311 292 CHS FAT LEX GSO MLI CAE HSV SAV JAN (Other) 287 285 282 278 271 268 260 259 251 12768 Sân bay bận rộn nhất ở Hoa Kỳ là sân bay Atlantic. Chicago và Denver đứng thứ hai và thứ ba. 15. Dest Destination IATA airport code summary(df$Dest) ATL ORD DEN DFW LAX PHX LAS EWR SFO IAH 11791 9506 6338 5159 5013 4663 4357 4335 4277 4271

Page 5: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

DTW MSP JFK SLC SEA MCO LGA PHL BOS CLT 3575 3280 3238 3216 3131 3015 2818 2669 2541 2422 SAN BWI FLL MDW CVG TPA MEM DCA MIA IAD 2265 2142 1959 1912 1831 1748 1721 1710 1702 1494 PDX RDU MCI STL SMF OAK BNA CLE MKE SJC 1483 1455 1384 1374 1361 1351 1346 1314 1290 1210 HOU SNA SAT DAL AUS ABQ HNL PIT PBI MSY 1196 1120 1096 1085 1049 1014 981 935 917 889 IND CMH RSW OMA JAX BUR ONT BUF TUL OKC 841 831 758 757 737 717 679 664 615 608 SJU BHM TUS BDL RNO ANC SDF PVD DSM GRR 604 585 585 578 567 560 526 505 501 498 RIC ELP BOI LIT GEG MSN TYS ICT DAY XNA 485 480 472 442 424 415 412 408 406 386 LGB MHT COS ORF GSO CHS ROC CAE JAN HPN 381 373 366 362 336 334 327 301 296 295 SAV CID OGG FAT ALB SYR LEX HSV MLI (Other) 293 292 292 291 285 280 276 261 255 13756 Kết quả rất giống với Origin. Chúng ta sẽ cần phải kiểm tra xem sân bay bận rộn nhất có bị chậm trễ nhất không. 16. Distance In miles summary(df$Distance) Min. 1st Qu. Median Mean 3rd Qu. Max. 31.0 338.0 599.0 753.3 984.0 4962.0 Phần lớn nhất của chuyến bay có cự ly dưới 1000 dặm. Mối quan hệ giữa khoảng cách và thời gian trì hoãn là một câu hỏi khác mà chúng ta cần xác thực.

c) Thực hiện giải thuật K-means

Bởi vì tập dữ liệu gốc quá lớn và rất khó tính toán ma trận khoảng cách. Vì vậy, chúng ta sẽ chỉ chọn ngẫu nhiên 1000 bản ghi và thực hiện phân tích về mẫu này cd = df[sample(nrow(df), 1000), ] %>%select(-c(UniqueCarrier, FlightNum, TailNum, Origin, Dest)) m = as.matrix(cd) str(m) mDist = dist(m)

Tìm tham số k: Cách 1: Thăm dò k hvalid <- clValid(m, 2:10, clMethods = c("hierarchical"), validation = "internal", maxitems = 1e+06) pamvalid <- clValid(m, 2:10, clMethods = c("pam"), validation = "internal", maxitems = 1e+06) kvalid <- clValid(m, 2:10, clMethods = c("kmeans"), validation = "internal", maxitems = 1e+06) summary(kvalid)

Page 6: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

summary(pamvalid)

summary(hvalid)

Kết quả test cho thấy nên sử dụng k=2 để phân cụm

Page 7: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Cách 2: //Thăm dò K fviz_nbclust(m, kmeans, method = "wss")+theme_bw()+geom_vline(xintercept =5, linetype = 2)

newcd = scale(cd) summary(newcd) //Quan sát mô hình huấn luyện trên tập dữ liệu set.seed(12345) kmeans.ani(newcd, 2)

Page 8: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Tiến hành Phân tích cụm: Với Pam và K-means:

//Giải thuật PAM (k-medoids) pamC = pam(x = m, 2) pamcluster = data.frame(pamC$clustering) total=cbind(cd,pamcluster) d1=subset(total,pamcluster==1) d2=subset(total,pamcluster==2) summary(d1) summary(d2)

Page 9: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Kết quả cho thấy là các chuyến bay vào Buổi sáng sáng sớm hoặc ban đêm có độ trễ ít hơn. fviz_cluster(pamC,data=newcd,ellipse.type = "t",ggtheme = theme_classic())

Page 10: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

//Giải thuật k-means kmeans.results = kmeans(m, 2) clusterdf = data.frame(kmeans.results$cluster) total = cbind(cd, clusterdf) k1 = subset(total, kmeans.results.cluster == 1) k2 = subset(total, kmeans.results.cluster == 2) totaldf = data.frame(total) totaldf$kmeans.results.cluster = as.factor(totaldf$kmeans.results.cluster) qplot(data = totaldf2, x = totaldf2$kmeans.new.cluster, y = totaldf$DepTime, colour = totaldf2$kmeans.new.cluster, geom = "boxplot")

Page 11: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Kết quả phân cụm có thể được biểu diễn trực quan như sau:

fviz_cluster(kmeans.results,data=cd,ellipse.type = "t",ggtheme = theme_classic())

Page 12: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu
Page 13: THỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, …vai.org.vn/docs/Daotao/PtichDlieu/Thu6/SangThu6_2.pdfTHỰC HÀNH GIẢI THUẬT PHÂN CỤM (GOM CỤM, CLUSTERING) Dữ liệu

Kết quả này cho thấy:

1. Các chuyến bay vào buổi sáng và đêm muộn có xu hướng ít trễ chuyến hơn.

2.