Cluster de pontos de acesso sem fio usando o método k-means

Atualmente, a visualização e análise de dados é amplamente utilizada no setor de telecomunicações. Em particular, a análise é altamente dependente do uso de dados geoespaciais. Talvez isso se deva ao fato de as próprias redes de telecomunicações estarem geograficamente dispersas. Consequentemente, a análise de tais dispersões pode ser de tremendo valor.

Dados


Para ilustrar o algoritmo de agrupamento k-means, usaremos o banco de dados geográfico para WiFi público gratuito em Nova York. O conjunto de dados está disponível no NYC Open Data. Em particular, o algoritmo de agrupamento k-means é usado para formar clusters de uso de WiFi com base em dados de latitude e longitude.

Os dados de latitude e longitude são extraídos do próprio conjunto de dados usando a linguagem de programação R:

#1. Prepare data newyork<-read.csv("NYC_Free_Public_WiFi_03292017.csv") attach(newyork) newyorkdf<-data.frame(newyork$LAT,newyork$LON) 

Aqui está um pedaço de dados:



Determinamos o número de clusters


Em seguida, determinamos o número de clusters usando o código abaixo, que mostra o resultado em um gráfico.

 #2. Determine number of clusters wss <- (nrow(newyorkdf)-1)*sum(apply(newyorkdf,2,var)) for (i in 2:20) wss[i] <- sum(kmeans(newyorkdf, centers=i)$withinss) plot(1:20, wss, type="b", xlab="Number of Clusters", ylab="Within groups sum of squares") 



O gráfico mostra como a curva se alinha em torno de 11. Portanto, este é o número de clusters que serão usados ​​no modelo k-means.

Análise K-means


A análise das médias K é realizada:

 #3. K-Means Cluster Analysis set.seed(20) fit <- kmeans(newyorkdf, 11) # 11 cluster solution # get cluster means aggregate(newyorkdf,by=list(fit$cluster),FUN=mean) # append cluster assignment newyorkdf <- data.frame(newyorkdf, fit$cluster) newyorkdf newyorkdf$fit.cluster <- as.factor(newyorkdf$fit.cluster) library(ggplot2) ggplot(newyorkdf, aes(x=newyork.LON, y=newyork.LAT, color = newyorkdf$fit.cluster)) + geom_point() 

O conjunto de dados newyorkdf contém informações sobre latitude, longitude e rótulo do cluster:
> newyorkdf
newyork.lat newyork.lon fit.cluster
1 40,75573 -73,94458 1
2 40.75533 -73.94413 1
3 40.75575 -73.94517 1
4 40.75575 -73.94517 1
5 40.75575 -73.94517 1
6 40.75575 -73.94517 1
...
80 40,84832 -73,82075 11

Aqui está uma ilustração clara:



Esta ilustração é útil, mas a visualização será ainda mais valiosa se você a sobrepor em um mapa da própria Nova York.

 # devtools::install_github("zachcp/nycmaps") library(nycmaps) map(database="nyc") #this should also work with ggplot and ggalt nyc <- map_data("nyc") gg <- ggplot() gg <- gg + geom_map( data=nyc, map=nyc, aes(x=long, y=lat, map_id=region)) gg + geom_point(data = newyorkdf, aes(x = newyork.LON, y = newyork.LAT), colour = newyorkdf$fit.cluster, alpha = .5) + ggtitle("New York Public WiFi") 



Esse tipo de cluster fornece uma excelente idéia da estrutura de uma rede WiFi em uma cidade. Isso indica que a região geográfica marcada pelo cluster 1 mostra muito tráfego WiFi. Por outro lado, menos conexões no cluster 6 podem indicar baixo tráfego de WiFi.

O cluster K-Means sozinho não nos diz por que o tráfego de um cluster específico é alto ou baixo. Por exemplo, quando o cluster 6 tem uma alta densidade populacional, mas as velocidades baixas da Internet resultam em menos conexões.

No entanto, esse algoritmo de agrupamento fornece um excelente ponto de partida para análises adicionais e facilita a coleta de informações adicionais. Por exemplo, usando este mapa como exemplo, você pode construir hipóteses sobre clusters geográficos individuais. O artigo original está aqui .

Source: https://habr.com/ru/post/pt442094/


All Articles