Klasifikasi Hoter Berbintang dengan K-Means

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