Tätortsklassificering servicebredd
Denna klassificering grundar sig på på antal förekomster av varje servicefunktion.
Script kommer att presenteras både för Wards metod och för k-means, och kommentarer
i koden finns för att öka förståelsen.
Wards metod
Detta script är uppdelat i två delar. En del där detektion av outliers sker, och en där
själva klusteranalysen sker på data-materialet med eliminerade outliers.
# läser in filen, döper den till tatorter
tatorter <- read.delim("To2010_SR99TM_komplett.txt", header = TRUE, sep="\t")
# Z är delmatris som används för att detektera outliers mha en scatterplotmatris
pdf("scattermatris")
Z <- tatorter[, c("handel_mat","grundskola","apotek","bensinstation")] pairs(Z, pch = ".", cex=4)
dev.off()
# detektera vilka tätorter som är outliers subset(tatorter, grundskola>6)
---
# läser in filen, döper den till tatorter
tatorter <- read.delim("To2010_SR99TM_utan_outliers.txt", header = TRUE, sep="\t") # X är viktad matris X <- scale(tatorter[, c("polis","brand","arbetsformedling","ledning","forskola","grundskola" ,"gymnasie","universitet","boende","oppen_vard","sluten_vard","apotek" ,"handel_mat","handel_ovr","systembolag","bensinstation","bibliotek"," kultur","museum","idrott","frisor","restaurang_bar","hotell","tandlaka re", "resecentrum")], center = FALSE, scale = TRUE)
# Y är oviktad matris att använda för statistik över resp. kluster i senare skede Y <- tatorter[, c("Folkmängd101231","polis","brand","arbetsformedling","ledning","fors kola","grundskola","gymnasie","universitet","boende","oppen_vard","slu ten_vard","apotek","handel_mat","handel_ovr","systembolag","bensinstat ion","bibliotek","kultur","museum","idrott","frisor","restaurang_bar", "hotell","tandlakare", "resecentrum")]
# Z är delmatris som används för att skapa en scatterplotmatris pdf("scattermatris_klassificering1")
Z <- tatorter[, c("handel_mat","grundskola","apotek","bensinstation")] pairs(Z, pch = ".", cex=4)
dev.off()
# skapa avståndsmatris för viktad data dj <- dist(X)
dj2 <- dj^2
# plotta dendrogram pdf("ward_antal.pdf")
plot(w <- hclust(dj2, method="ward"), labels=tatorter$NAMN, main = "Wards, squared eucludean distance")
dev.off() w
# skär dendrogrammet vid sju och skriv ut (oviktad) information (medelvärde och medianvärde) om grupperna
groups.7 = cutree(hclust(dj2, method="ward"), 7) table(groups.7)
sapply(unique(groups.7),function(g)tatorter$NAMN[groups.7==g]) aggregate(Y, list(groups.7), mean)
aggregate(Y, list(groups.7), median) groups.7
k-means
#läser in filen, döper den till tatorter
tatorter <- read.table("To2010_SR99TM_utan_outliers.txt", header = TRUE, sep="\t") #sammanfatta data summary(tatorter) #standardisera variabler X <- scale(tatorter[, c("polis","brand","arbetsformedling","ledning","forskola","grundskola" ,"gymnasie","universitet","boende","oppen_vard","sluten_vard","apotek" ,"handel_mat","handel_ovr","systembolag","bensinstation","bibliotek"," kultur","museum","idrott","frisor","restaurang_bar","hotell","tandlaka re","resecentrum","dagbef")], center = FALSE, scale = TRUE)
#räkna ut "within cluster sum of squares" och plotta för antal kluster 1 till 15
wss <- (nrow(X)-1)*sum(apply(X,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(X, centers=i)$withinss) pdf("kmeans")
plot(1:15, wss, type="b", xlab="Number of clusters", ylab="within group sum of squares")
dev.off()
#utför kmeans med antal kluster satt till 7 (100 iterationer) k <- kmeans(X, centers=7, 100)
#skriv ut resultatet k
print(k)
plot(X, col = k$cluster)
points(k$centers, col = 1:3, pch=8)
#alla objekt binds till rätt klustertillhörighet out <- data.frame(cbind(X, clustNum = k$cluster))
Tätortsklassificering servicegrad
Klassificering 2 är den som är grundad på antal förekomster av varje servicefunktion,
per tusen invånare. Precis som för klassificering 1 kommer script både för Wards metod
och för k-means att presenteras.
Wards metod
# läser in filen, döper den till tatorter
tatorter <- read.delim("To2010_SR99TM_komplett.txt", header = TRUE, sep="\t")
# Z är delmatris som används för att detektera outliers mha en scatterplotmatris pdf("scattermatris_klassificering2") Z <- tatorter[, c("handelmat_per_k","grundskola_per_k","apotek_per_k","bensinstation_p er_k")] pairs(Z, pch = ".", cex=4) dev.off()
# detektera vilka tätorter som är outliers subset(tatorter, bensinstation_per_k>6) ---
# läser in filen, döper den till tatorter
tatorter <- read.delim("To2010_SR99TM_utan_outlier.txt", header = TRUE, sep="\t") # X är viktad matris X <- scale(tatorter[, c("polis_per_k","brand_per_k","arbetsformedling_per_k","ledning_per_k" ,"forskola_per_k","grundskola_per_k","gymnasie_per_k","universitet_per _k","boende_per_k","oppenvard_per_k","slutenvard_per_k","apotek_per_k" ,"handelmat_per_k","handelovr_per_k","systembolag_per_k","bensinstatio n_per_k","bibliotek_per_k","kultur_per_k","museum_per_k","idrott_per_k ","frisor_per_k","restaurang_bar_per_k","hotell_per_k","tandlakare_per _k","resecentrum_per_k")], center = FALSE, scale = TRUE)
# Y är oviktad matris att använda för statistik över resp. kluster i senare skede Y <- scale(tatorter[, c("polis_per_k","brand_per_k","arbetsformedling_per_k","ledning_per_k" ,"forskola_per_k","grundskola_per_k","gymnasie_per_k","universitet_per _k","boende_per_k","oppenvard_per_k","slutenvard_per_k","apotek_per_k" ,"handelmat_per_k","handelovr_per_k","systembolag_per_k","bensinstatio n_per_k","bibliotek_per_k","kultur_per_k","museum_per_k","idrott_per_k ","frisor_per_k","restaurang_bar_per_k","hotell_per_k","tandlakare_per _k","resecentrum_per_k","dagbef")], center = FALSE, scale = FALSE) # Z är delmatris som används för att skapa en scatterplotmatris pdf("scattermatris_per_k_utan_grano")
Z <- tatorter[,
c("handelmat_per_k","grundskola_per_k","apotek_per_k","bensinstation_p er_k")]
dev.off()
# skapa avståndsmatris för viktad data dj <- dist(X)
# squared euclidean skall användas vid wards metod dj2 <- dj^2
# plotta dendrogram och spara till en pdf-fil pdf("ward.pdf")
plot(w <- hclust(dj2, method="ward"), labels=tatorter$NAMN, main = "Wards, squared eucludean distance")
dev.off() w
# skära dendrogram vid nio och skriva ut (oviktad) information (medelvärde och medianvärde) om grupperna
groups.9 = cutree(hclust(dj2, method="ward"), 9) table(groups.9)
sapply(unique(groups.9),function(g)tatorter$NAMN[groups.9==g]) aggregate(Y, list(groups.9), mean)
aggregate(Y, list(groups.9), median) groups.9
k-means
# läser in filen, döper den till tatorter
tatorter <- read.table("To2010_SR99TM_utan_outlier.txt", header = TRUE, sep="\t") #sammanfatta data summary(tatorter) #standardisera variabler X <- scale(tatorter[, c("polis_per_k","brand_per_k","arbetsformedling_per_k","ledning_per_k" ,"forskola_per_k","grundskola_per_k","gymnasie_per_k","universitet_per _k","boende_per_k","oppenvard_per_k","slutenvard_per_k","apotek_per_k" ,"handelmat_per_k","handelovr_per_k","systembolag_per_k","bensinstatio n_per_k","bibliotek_per_k","kultur_per_k","museum_per_k","idrott_per_k ","frisor_per_k","restaurang_bar_per_k","hotell_per_k","tandlakare_per _k","resecentrum_per_k")], center = FALSE, scale = TRUE)
#räkna ut "within cluster sum of squares" och plotta för antal kluster 1 till 15
wss <- (nrow(X)-1)*sum(apply(X,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(X, centers=i)$withinss) pdf("kmeans_per_k")
plot(1:15, wss, type="b", xlab="Number of clusters", ylab="within group sum of squares")
dev.off()
#utför kmeans med antal kluster satt till 9 (100 iterationer) k <- kmeans(X, centers=9, 100)
#skriv ut resultatet k