K-Means adalah metode untuk analisa data dan metode Data Mining yang melakukan proses pemodelan unsupervised yang merupakan salah satu metode untuk pengelompokan data dengan sistem partisi.
pada percobaan kali ini kita akan melakukan analisa data hotel berbintang. data tersebut didapat dari https://bps.go.id . data tersebut merupakan data tahun 2018 data hotel tersebut memiliki 3 variable, yaitu Akomodasi, Kamar dan Tempat tidur. sekarang kita tampilkan data dari csv.
dataku=read.csv("D:/AANG/KULIAH/DATA MINING/bps-file.csv",sep=";",header=TRUE)
names(dataku) <- c("provinsi","akomodasi","kamar","tempattidur")
dataku
## provinsi akomodasi kamar tempattidur
## 1 ACEH 21 1603 2654
## 2 SUMATERA UTARA 124 10296 15509
## 3 SUMATERA BARAT 74 4493 7717
## 4 RIAU 87 6988 9802
## 5 JAMBI 37 2461 3780
## 6 SUMATERA SELATAN 76 6161 8811
## 7 BENGKULU 9 538 845
## 8 LAMPUNG 19 1997 2477
## 9 KEP. BANGKA BELITUNG 46 2927 4426
## 10 KEP. RIAU 132 13756 19425
## 11 DKI JAKARTA 326 46899 60849
## 12 JAWA BARAT 463 43034 62725
## 13 JAWA TENGAH 291 23516 33530
## 14 DI YOGYAKARTA 143 14328 23477
## 15 JAWA TIMUR 231 26585 38540
## 16 BANTEN 113 10607 15507
## 17 BALI 551 52927 78801
## 18 NUSA TENGGARA BARAT 83 5678 8328
## 19 NUSA TENGGARA TIMUR 24 1830 2541
## 20 KALIMANTAN BARAT 41 4269 6204
## 21 KALIMANTAN TENGAH 13 968 1496
## 22 KALIMANTAN SELATAN 52 4075 6488
## 23 KALIMANTAN TIMUR 63 6438 9293
## 24 KALIMANTAN UTARA 1 81 113
## 25 SULAWESI UTARA 35 3072 3484
## 26 SULAWESI TENGAH 16 1492 2361
## 27 SULAWESI SELATAN 139 10418 15757
## 28 SULAWESI TENGGARA 19 1439 2122
## 29 GORONTALO 8 535 804
## 30 SULAWESI BARAT 5 164 260
## 31 MALUKU 22 1193 1865
## 32 MALUKU UTARA 2 116 116
## 33 PAPUA BARAT 16 980 1348
## 34 PAPUA 32 2187 3156
dalam pengklasteran hotel dengan data tersebut, yang kita perlukan hanya data Akomodasi, Kamar dan juga jumlah tempat tidur. maka kita tampilkan kembali data yang kita butuhkan, untuk data provinsi kita sembunyikan terlebih dahulu. dengan cara:
dataku.numerik<-dataku[2:4]
dataku.numerik
## akomodasi kamar tempattidur
## 1 21 1603 2654
## 2 124 10296 15509
## 3 74 4493 7717
## 4 87 6988 9802
## 5 37 2461 3780
## 6 76 6161 8811
## 7 9 538 845
## 8 19 1997 2477
## 9 46 2927 4426
## 10 132 13756 19425
## 11 326 46899 60849
## 12 463 43034 62725
## 13 291 23516 33530
## 14 143 14328 23477
## 15 231 26585 38540
## 16 113 10607 15507
## 17 551 52927 78801
## 18 83 5678 8328
## 19 24 1830 2541
## 20 41 4269 6204
## 21 13 968 1496
## 22 52 4075 6488
## 23 63 6438 9293
## 24 1 81 113
## 25 35 3072 3484
## 26 16 1492 2361
## 27 139 10418 15757
## 28 19 1439 2122
## 29 8 535 804
## 30 5 164 260
## 31 22 1193 1865
## 32 2 116 116
## 33 16 980 1348
## 34 32 2187 3156
Selanjutnya kita import library factoextra dan ggplot2 untuk membuat plot nya:.
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.1.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)
kemudian kita standarisasikan data kita yang tujuan untuk menyamakan satuan dari data
dataku.stds<-scale(dataku.numerik)
dataku.stds
## akomodasi kamar tempattidur
## [1,] -0.58314109 -0.55712428 -0.5484625
## [2,] 0.20230510 0.07730223 0.1094216
## [3,] -0.17897946 -0.34620830 -0.2893519
## [4,] -0.07984547 -0.16411994 -0.1826472
## [5,] -0.46113003 -0.49450632 -0.4908369
## [6,] -0.16372808 -0.22447548 -0.2333639
## [7,] -0.67464939 -0.63484938 -0.6410423
## [8,] -0.59839247 -0.52836965 -0.5575209
## [9,] -0.39249881 -0.46049703 -0.4577764
## [10,] 0.26331063 0.32981756 0.3098319
## [11,] 1.74269472 2.74863706 2.4298001
## [12,] 2.78741441 2.46656431 2.5258087
## [13,] 1.47579553 1.04211513 1.0316876
## [14,] 0.34719323 0.37156287 0.5172023
## [15,] 1.01825406 1.26609476 1.2880858
## [16,] 0.11842250 0.09999942 0.1093192
## [17,] 3.45847524 3.18856839 3.3485349
## [18,] -0.11034824 -0.25972545 -0.2580826
## [19,] -0.56026402 -0.54055753 -0.5542456
## [20,] -0.43062727 -0.36255611 -0.3667832
## [21,] -0.64414662 -0.60346741 -0.6077259
## [22,] -0.34674466 -0.37671449 -0.3522488
## [23,] -0.26286206 -0.20425966 -0.2086965
## [24,] -0.73565491 -0.66820183 -0.6785041
## [25,] -0.47638141 -0.44991474 -0.5059854
## [26,] -0.62126955 -0.56522521 -0.5634575
## [27,] 0.31669047 0.08620595 0.1221135
## [28,] -0.59839247 -0.56909322 -0.5756889
## [29,] -0.68227508 -0.63506832 -0.6431405
## [30,] -0.70515215 -0.66214439 -0.6709810
## [31,] -0.57551540 -0.58704662 -0.5888414
## [32,] -0.72802922 -0.66564749 -0.6783505
## [33,] -0.62126955 -0.60259164 -0.6153001
## [34,] -0.49925849 -0.51450320 -0.5227715
## attr(,"scaled:center")
## akomodasi kamar tempattidur
## 97.47059 9236.79412 13370.91176
## attr(,"scaled:scale")
## akomodasi kamar tempattidur
## 131.1357 13702.1386 19539.9154
Setelah satuan data sudah sama, selanjutnya kita menentukan K Optimal, dengan membandingkan dua metode yaitu metode Elbow dan metode Silhoutte. dengan menggunakan library factoextra. caranya:
metode Elbow
fviz_nbclust(dataku.stds, kmeans, method = "wss")
metode Silhoutte.
fviz_nbclust(dataku.stds, kmeans, method = "silhouette")
Berdasarkan hasil dari perhitungan yang ada, metode Elbow dengan nilai K yang turun secara drastis dan membentuk siku yaitu terdapat pada K=2. Kemudian, berdasarkan metode Silhouette juga memperoleh nilai K=2. Dari kedua metode tersebut, nilai K yang optimal adalah 2.
maka dengan metode K-Means dengan Nilai K=2, untuk melakukan clustering dengan source code:
clustering=kmeans(dataku.stds,centers=2,nstart=25)
clustering
## K-means clustering with 2 clusters of sizes 29, 5
##
## Cluster means:
## akomodasi kamar tempattidur
## 1 -0.3614701 -0.3693786 -0.366342
## 2 2.0965268 2.1423959 2.124783
##
## Clustering vector:
## [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##
## Within cluster sum of squares by cluster:
## [1] 8.664768 11.197363
## (between_SS / total_SS = 79.9 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
berdasarkan hasil perhitungan tersebut dari 34 data dan didapatkan 2 cluster, didapat anggota cluster 1 ada 29 data, cluster 2 ada 5 data. selanjutnya, kita visualisasikan clustering tersebut dengan K = 2
fviz_cluster(clustering, geom = "point", data = dataku.stds)+ggtitle("k=2")
Berdasarkan hasil perhitungan tersebut yang didapatkan, dapat dilihat bahwa anggota cluster 1 berwarna merah dan anggota cluster 2 berwarna hijau. selanjutnya kita bisa melihat pembagian data berdasarkan cluster dengan tampilan pada table, sedangan source code:
hasil=data.frame(dataku, clustering$cluster)
hasil
## provinsi akomodasi kamar tempattidur clustering.cluster
## 1 ACEH 21 1603 2654 1
## 2 SUMATERA UTARA 124 10296 15509 1
## 3 SUMATERA BARAT 74 4493 7717 1
## 4 RIAU 87 6988 9802 1
## 5 JAMBI 37 2461 3780 1
## 6 SUMATERA SELATAN 76 6161 8811 1
## 7 BENGKULU 9 538 845 1
## 8 LAMPUNG 19 1997 2477 1
## 9 KEP. BANGKA BELITUNG 46 2927 4426 1
## 10 KEP. RIAU 132 13756 19425 1
## 11 DKI JAKARTA 326 46899 60849 2
## 12 JAWA BARAT 463 43034 62725 2
## 13 JAWA TENGAH 291 23516 33530 2
## 14 DI YOGYAKARTA 143 14328 23477 1
## 15 JAWA TIMUR 231 26585 38540 2
## 16 BANTEN 113 10607 15507 1
## 17 BALI 551 52927 78801 2
## 18 NUSA TENGGARA BARAT 83 5678 8328 1
## 19 NUSA TENGGARA TIMUR 24 1830 2541 1
## 20 KALIMANTAN BARAT 41 4269 6204 1
## 21 KALIMANTAN TENGAH 13 968 1496 1
## 22 KALIMANTAN SELATAN 52 4075 6488 1
## 23 KALIMANTAN TIMUR 63 6438 9293 1
## 24 KALIMANTAN UTARA 1 81 113 1
## 25 SULAWESI UTARA 35 3072 3484 1
## 26 SULAWESI TENGAH 16 1492 2361 1
## 27 SULAWESI SELATAN 139 10418 15757 1
## 28 SULAWESI TENGGARA 19 1439 2122 1
## 29 GORONTALO 8 535 804 1
## 30 SULAWESI BARAT 5 164 260 1
## 31 MALUKU 22 1193 1865 1
## 32 MALUKU UTARA 2 116 116 1
## 33 PAPUA BARAT 16 980 1348 1
## 34 PAPUA 32 2187 3156 1
berikit adalah hadil pengklasteran, terima kasih