#Clusters

# 1. Crear base de datos
df <- data.frame(x=c(2,2,8,5,7,6,1,4), y=c(10,5,4,8,5,4,2,9))

# 2. Determinar número de grupos
grupos <- 3

# 3. Realizar la clasificación
segmentos <- kmeans(df,grupos)
segmentos
## K-means clustering with 3 clusters of sizes 3, 2, 3
## 
## Cluster means:
##          x        y
## 1 7.000000 4.333333
## 2 1.500000 3.500000
## 3 3.666667 9.000000
## 
## Clustering vector:
## [1] 3 2 1 3 1 1 2 3
## 
## Within cluster sum of squares by cluster:
## [1] 2.666667 5.000000 6.666667
##  (between_SS / total_SS =  85.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
# 4. Revisar la asignación de grupos
asignación <- cbind(df, cluster=segmentos$cluster)
asignación
##   x  y cluster
## 1 2 10       3
## 2 2  5       2
## 3 8  4       1
## 4 5  8       3
## 5 7  5       1
## 6 6  4       1
## 7 1  2       2
## 8 4  9       3
# 5. Graficar resultados
library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(segmentos, data = df, palette = c("red","blue","green"), ellipse.type = "euclid", star.plot = T, repel = T, ggtheme = theme())
## Too few points to calculate an ellipse
## Too few points to calculate an ellipse
## Too few points to calculate an ellipse

# 6. Optimizar cantidad de grupos
library(cluster)
library(data.table)

set.seed(123)
optimización <- clusGap(df, FUN = kmeans, nstart = 1, K.max = 7)
plot(optimización, xlab = "Número de clusters K")

LS0tCnRpdGxlOiAnNC4xJwphdXRob3I6ICJFbnJpcXVlIGRlIFphdmFsYSIKZGF0ZTogIjIwMjMtMTAtMDkiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFIAogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6ICJzaW1wbGUiCiAgICBoaWdobGlnaHQ6ICJtb25vY2hyb21lIgotLS0KCiNDbHVzdGVycyAKCmBgYHtyfQojIDEuIENyZWFyIGJhc2UgZGUgZGF0b3MKZGYgPC0gZGF0YS5mcmFtZSh4PWMoMiwyLDgsNSw3LDYsMSw0KSwgeT1jKDEwLDUsNCw4LDUsNCwyLDkpKQoKIyAyLiBEZXRlcm1pbmFyIG7Dum1lcm8gZGUgZ3J1cG9zCmdydXBvcyA8LSAzCgojIDMuIFJlYWxpemFyIGxhIGNsYXNpZmljYWNpw7NuCnNlZ21lbnRvcyA8LSBrbWVhbnMoZGYsZ3J1cG9zKQpzZWdtZW50b3MKYGBgCgpgYGB7cn0KIyA0LiBSZXZpc2FyIGxhIGFzaWduYWNpw7NuIGRlIGdydXBvcwphc2lnbmFjacOzbiA8LSBjYmluZChkZiwgY2x1c3Rlcj1zZWdtZW50b3MkY2x1c3RlcikKYXNpZ25hY2nDs24KYGBgCgpgYGB7cn0KIyA1LiBHcmFmaWNhciByZXN1bHRhZG9zCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShmYWN0b2V4dHJhKQpmdml6X2NsdXN0ZXIoc2VnbWVudG9zLCBkYXRhID0gZGYsIHBhbGV0dGUgPSBjKCJyZWQiLCJibHVlIiwiZ3JlZW4iKSwgZWxsaXBzZS50eXBlID0gImV1Y2xpZCIsIHN0YXIucGxvdCA9IFQsIHJlcGVsID0gVCwgZ2d0aGVtZSA9IHRoZW1lKCkpCiMgNi4gT3B0aW1pemFyIGNhbnRpZGFkIGRlIGdydXBvcwpsaWJyYXJ5KGNsdXN0ZXIpCmxpYnJhcnkoZGF0YS50YWJsZSkKCnNldC5zZWVkKDEyMykKb3B0aW1pemFjacOzbiA8LSBjbHVzR2FwKGRmLCBGVU4gPSBrbWVhbnMsIG5zdGFydCA9IDEsIEsubWF4ID0gNykKcGxvdChvcHRpbWl6YWNpw7NuLCB4bGFiID0gIk7Dum1lcm8gZGUgY2x1c3RlcnMgSyIpCmBgYAoK