knitr::opts_chunk$set(echo = TRUE)
Perlu diketahui saat pertama penulis menyelesaikan percobaan ini ada kendala dimana saat akan menggunakan “Knit” untuk mempublish terdapat eror dengan keterangan data bps_file yang diimport tidak ditemukan, solusi yang penulis dapatkan adalah dengan mensave data workspace yang setelah itu diload pada awal RMarkdown ini dengan menggunakan fungsi “load”
load("workspace.RData")
Pada kali ini penulis akan mencoba untuk bagaimana menerapkan K-Means Clustering menggunakan Rstudio. K-Means Clustering sendiri merupakan salah satu metode untuk menganalisa data dan merupakan salah satu metode pada data mining yang permodelannya tanpa supervisi dan merupakan salah satu metode yang mengelompokkan data dengan model partisi.
disini penulis menggunakan data akomodasi, kamar dan tempat tidur pada hotel yang tersedia pada beberapa provinsi yang datanya diambil dari https://www.bps.go.id/dynamictable/2015/12/28/1096/jumlah-akomodasi-kamar-dan-tempat-tidur-yang-tersedia-pada-hotel-bintang-menurut-provinsi-2000-2018.html
sebelum mengolah data tersebut, akan diaktifkan dulu beberapa package yang dibutuhkan dengan menggunakan comand library seperti dibawah ini.
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)
library(readr)
## Warning: package 'readr' was built under R version 4.1.2
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(DT)
## Warning: package 'DT' was built under R version 4.1.2
setelah itu import data yang sudah didownload dari bps (disini penulis menggunakan file excel degan nama “bps_file”) lalu data tersebut ditampilkan seperti dibawah ini.
bps_file
## # A tibble: 34 x 4
## Provinsi Akomodasi Kamar `Tempat Tidur`
## <chr> <dbl> <dbl> <dbl>
## 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
## # ... with 24 more rows
Setelah itu mengambil variabel yang ilainya berupa data numberik atau angka
data.numb <- bps_file[2:4]
data.numb
## # A tibble: 34 x 3
## Akomodasi Kamar `Tempat Tidur`
## <dbl> <dbl> <dbl>
## 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
## # ... with 24 more rows
Disini dapat terlihat pada tabel data tersebut terdapat data yang satuannya tidak sama, sehingga perlu adaya standarisasi data dengan menggunakan syntax berkut.
data.std <- scale(data.numb)
datatable(data.std, caption = "Data yang telah terstandarisasi")
Data yang ada sekarang telah terstandarisasi, berikutnya penulis aka menentukan nilai K-Optimal dengan menggunakan metode Elbow dan Silhouette.
fviz_nbclust(data.std, kmeans, method = "wss")
Dari hasil grafik nilai K-Optimal dengan menggunakan metode elbow bisa dilihat bahwa nilai maksimal untuk jumlah klusternya adalah 2. Lalu disini penulis mencoba untuk menerapkan metode silhouette untuk melihat nilai K-Optimalnya.
fviz_nbclust(data.std, kmeans, method = "silhouette")
Hasil dari penggunaan metode silhouette juga menunjukkan hasil yang sama dimana dari data set yang digunakan menghasilkan nilai K-Optimal sebanyak 2 cluster. Disini penulis mencoba bagaimana jika kita menggunakan lebih dari 2 cluster untuk pengelompokan datanya dengan menggunakan kmeans berdasarkan syntax berikut.
Klaster = kmeans(data.std, centers = 3, nstart = 25)
Klaster
## K-means clustering with 3 clusters of sizes 3, 24, 7
##
## Cluster means:
## Akomodasi Kamar Tempat Tidur
## 1 2.6628615 2.8012566 2.7680479
## 2 -0.4887732 -0.4865362 -0.4913252
## 3 0.5345674 0.4675854 0.4982374
##
## Clustering vector:
## [1] 2 3 2 2 2 2 2 2 2 3 1 1 3 3 3 3 1 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2
##
## Within cluster sum of squares by cluster:
## [1] 2.270076 2.076584 4.376580
## (between_SS / total_SS = 91.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Setelah mengelompokkan menggunakan kmeans pada data hotel yang telah dioleh sebelumnya, sekarag didapati bahwa yang masu pada kluster 1 ada 3 anggota, lalu untuk kluster ke 2 ada 24 anggota dan untuk klaster ke 3 ada 7 anggota. Berdasarkan data kluster yang sudah didapat sekarang penulis coba tampilkan menggunakan visualisasi dalam bentuk grafik pengelompokan.
fviz_cluster(Klaster, geom = "point", data = data.std) +ggtitle("visualisasi dari 3 Cluster")
Berikutnya penulis tampilkan hasil klustering menggunakan k-means untuk disandingkan dengan data awal hotel dimana data keterangan anggota kluster akan ada pada sisi bagian paling kanan dari data awal.
final=data.frame(bps_file, Klaster$cluster)
final
## Provinsi Akomodasi Kamar Tempat.Tidur Klaster.cluster
## 1 ACEH 21 1603 2654 2
## 2 SUMATERA UTARA 124 10296 15509 3
## 3 SUMATERA BARAT 74 4493 7717 2
## 4 RIAU 87 6988 9802 2
## 5 JAMBI 37 2461 3780 2
## 6 SUMATERA SELATAN 76 6161 8811 2
## 7 BENGKULU 9 538 845 2
## 8 LAMPUNG 19 1997 2477 2
## 9 KEP. BANGKA BELITUNG 46 2927 4426 2
## 10 KEP. RIAU 132 13756 19425 3
## 11 DKI JAKARTA 326 46899 60849 1
## 12 JAWA BARAT 463 43034 62725 1
## 13 JAWA TENGAH 291 23516 33530 3
## 14 DI YOGYAKARTA 143 14328 23477 3
## 15 JAWA TIMUR 231 26585 38540 3
## 16 BANTEN 113 10607 15507 3
## 17 BALI 551 52927 78801 1
## 18 NUSA TENGGARA BARAT 83 5678 8328 2
## 19 NUSA TENGGARA TIMUR 24 1830 2541 2
## 20 KALIMANTAN BARAT 41 4269 6204 2
## 21 KALIMANTAN TENGAH 13 968 1496 2
## 22 KALIMANTAN SELATAN 52 4075 6488 2
## 23 KALIMANTAN TIMUR 63 6438 9293 2
## 24 KALIMANTAN UTARA 1 81 113 2
## 25 SULAWESI UTARA 35 3072 3484 2
## 26 SULAWESI TENGAH 16 1492 2361 2
## 27 SULAWESI SELATAN 139 10418 15757 3
## 28 SULAWESI TENGGARA 19 1439 2122 2
## 29 GORONTALO 8 535 804 2
## 30 SULAWESI BARAT 5 164 260 2
## 31 MALUKU 22 1193 1865 2
## 32 MALUKU UTARA 2 116 116 2
## 33 PAPUA BARAT 16 980 1348 2
## 34 PAPUA 32 2187 3156 2
Referensi
“K-Means Clustering using RStudio.| by Tania Salsabila | Medium.” https://medium.com/@taniasalsabila.ts/k-means-clustering-using-rstudio-d6132830f6b6 (accessed Nov. 25, 2021).
“K-Means Clustering in R Programming - GeeksforGeeks.” https://www.geeksforgeeks.org/k-means-clustering-in-r-programming/ (accessed Nov. 25, 2021).