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")

K-Means Clustering

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).