• No results found

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

Related documents