Advertisement
korenizla

kmeans

Apr 16th, 2023 (edited)
1,743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 3.32 KB | None | 0 0
  1. library (factoextra)
  2. library (cluster)
  3. library(ggplot2)
  4. library(dplyr)
  5. library(dendextend)
  6. library(reshape2)
  7. library(RColorBrewer)
  8.  
  9. data <- read.csv("Kvartiry_Ufa.csv")
  10. # необходимо избавиться от X
  11. drop <- c("X")
  12. data = data[,!(names(data) %in% drop)]
  13.  
  14. # вычисляем корреляцию
  15. cormat <- round(cor(data),2)
  16. melted_cormat <- melt(cormat)
  17. # достаем верхню часть треугольника корреляционной матрицы
  18. get_upper_tri <- function(cormat){
  19.   cormat[lower.tri(cormat)]<- NA
  20.   return(cormat)
  21. }
  22. upper_tri <- get_upper_tri(cormat)
  23. melted_cormat <- melt(upper_tri, na.rm = TRUE)
  24. # строим хитмэп
  25. ggheatmap <- ggplot(data = melted_cormat, aes(Var2, Var1, fill = value))+
  26.   geom_tile(color = "white")+
  27.   scale_fill_gradient2(low = "blue", high = "red", mid = "white",
  28.                        midpoint = 0, limit = c(-1,1), space = "Lab",
  29.                        name="Pearson\nCorrelation") +
  30.   theme_minimal()+
  31.   theme(axis.text.x = element_text(angle = 45, vjust = 1,
  32.                                    size = 12, hjust = 1))+
  33.   coord_fixed()
  34. # расположим значения на хитмэпе
  35. ggheatmap +
  36.   geom_text(aes(Var2, Var1, label = value), color = "black", size = 4) +
  37.   theme(
  38.     axis.title.x = element_blank(),
  39.     axis.title.y = element_blank(),
  40.     panel.grid.major = element_blank(),
  41.     panel.border = element_blank(),
  42.     panel.background = element_blank(),
  43.     axis.ticks = element_blank(),
  44.     legend.justification = c(1, 0),
  45.     legend.position = c(0.6, 0.7),
  46.     legend.direction = "horizontal")+
  47.   guides(fill = guide_colorbar(barwidth = 7, barheight = 1,
  48.                                title.position = "top", title.hjust = 0.5))
  49.  
  50. # исходя из матрицы корреляции необходимо избавиться от living area
  51. drop <- c("living_area")
  52. data = data[,!(names(data) %in% drop)]
  53.  
  54. # стандартизируем значения для корректной кластеризации
  55. data <- scale(data)
  56.  
  57. # определим оптимальное количество кластеров методом силуэта
  58. fviz_nbclust(data, kmeans, method = "silhouette")
  59. n_clust <- 4
  60.  
  61. # проведем кластеризацию методом kmeans
  62. km <- kmeans(data, n_clust)
  63. # сохраним вектор с кластером в отдельной переменной
  64. grp <- km$cluster
  65.  
  66. # отобразим кластеризацию с использованием метода главных компонентов
  67. fviz_cluster(km, data,
  68.              palette = "Set2", ggtheme = theme_minimal())
  69.  
  70. # отобразим диаграмму рассеяния признаков
  71. pairs(data, upper.panel=NULL)
  72.  
  73. # необходимо избавиться от parks_around, citycenter_near, floors_total, ceiling, rooms
  74. drop <- c("X","parks_around3", "rooms", "floors_total", "ceiling_height", "room", "balcony")
  75. data = data[,!(names(data) %in% drop)]
  76.  
  77. # отобразим диаграмму рассеяния признаков с учетом кластеризации
  78. pairs(data, col = brewer.pal(n = n_clust, name = "Set2")[grp], upper.panel=NULL)
  79.  
  80. # посмотрим на расположение центроидов кластеров
  81. km$centers
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement