Czas na ostatnią część wyjaśnień krok po kroku jak konstruowane były wykresy o cenach mieszkań.
Tym razem wykorzystamy wykres pudełkowy pokazany na wpisie tutaj do pokazania rozkładów cen w dzielnicach Warszawy.
Wczytujemy pierwsze 33 linie kodu z poprzedniego wpisu a następnie uruchamiamy linie 142-187. Wyjaśnijmy od razu po co była funkcja nazwyIprocenty(). Otóż w pakiecie lattice dosyć łatwo narysować wykres w podziale na poziomy pewnej zmiennej grupującej. Grupa obserwacji odpowiadająca poszczególnym poziomom rysowana jest na kolejnym panelu. Nazwy poziomów znajdują się w nagłówku panelu. W naszym przykładzie funkcja nazwyIprocenty() zmieniła nazwy wszystkich poziomów w ten sposób, że do nazw dzielnic dodano cztery liczby określające procentową zmianę ceny w określonej dzielnicy (zmianę liczoną na różne sposoby, zobacz komentarze wewnątrz tej funkcji).
Dzięki temu warunkując po zmiennej dzielnica2 powinniśmy uzyskać zbiór wykresów pudełkowych w rozbiciu na dzielnicę.
Poniższy kod od kodu z poprzedniego wpisu różni się praktycznie wyłącznie formułą cenam2~dataF|dzielnica2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | bwplot(cenam2~dataF|dzielnica2, data=mieszkaniaKWW2011Warszawa3, scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)), ylim=c(5000, 20000), panel = function(...) { tmp <- trellis.par.get("plot.symbol") tmp$pch=19 tmp$col="grey20" tmp$cex=1/2 trellis.par.set("plot.symbol",tmp) tmp <- trellis.par.get("box.rectangle") tmp$col="grey20" trellis.par.set("box.rectangle",tmp) tmp <- trellis.par.get("box.umbrella") tmp$col="grey20" trellis.par.set("box.umbrella",tmp) kolory <- brewer.pal(4, "Set1") panel.abline(h=log(at,10), col="grey85") panel.abline(v=4.5 + c(0,12,24,36), col="grey85") panel.bwplot(..., col="grey20") args <- list(...) mod <- rlm(args$y~as.numeric(args$x)) panel.abline(mod, col=kolory[1], lwd=4, alpha=0.85) mediany <- sapply(miesiace, function(x) median(args$y[args$x == x], na.rm=T)) mod2 <- rlm(mediany~seq_along(miesiace)) panel.abline(mod2, col=kolory[2], lwd=4, alpha=0.85) indtmp <- c(1, length(mediany)) llines(indtmp, mediany[indtmp], col=kolory[4], lwd=4, alpha=0.85) panel.loess(..., col=kolory[3], lwd=4, alpha=0.85) } ) |
Wadą tego wykresu są ponownie dzielnice w których mało jest oferowanych mieszkań. Usuńmy dzielnice w których jest mniej niż 1000 mieszkań średniej wielkości oferowanych do sprzedaży w ostatnich 4 latach. Poniżej prezentujemy tylko kod usuwający odpowiednie wiersze, następnie używamy tego samego kodu co powyżej aby wygenerować wykres dla dzielnic, tym razem już tylko 12.
37 38 39 40 | # usun male dzielnice usun <- names(which(table(mieszkaniaKWW2011Warszawa3$dzielnica)<1000)) mieszkaniaKWW2011Warszawa3 <- mieszkaniaKWW2011Warszawa3[!(mieszkaniaKWW2011Warszawa3$dzielnica %in% usun),] mieszkaniaKWW2011Warszawa3$dzielnica <- factor(mieszkaniaKWW2011Warszawa3$dzielnica) |