Jak (nie)pokazywać bilansu urodzin, zgonów i migracji

Co jakiś czas dostaję od czytelników interesujące sugestie dotyczące raportów / wizualizacji / tematów. Bardzo mnie one cieszą. Mam nadzieję, że kiedyś blog fundacji będzie prowadzony przez więcej osób, a to podsyłanie materiałów jest krokiem w tym kierunku.

Dziś będzie o wykresie z raportu ,,Huszlew Strategia Rozwiązywania Problemów Społecznych”, na który uwagę zwróciła mi Natalia J.

Czytaj dalej Jak (nie)pokazywać bilansu urodzin, zgonów i migracji

Jak wyglądają ceny aut używanych w segmencie C, część 2

 

W poprzednim tygodniu (w tym wpisie) pisałem o tym jak modelować można cenę aut używanych, na przykładzie aut z segmentu C.

Dziś pokażę trzy wizualizacje tego zbioru danych, mam nadzieję, że interesujące.

Zobaczymy więc jak zmieniają się ceny aut w zależności od wieku aut, jak wygląda liczba oferowanych aut różnych marek i również jak wygląda wyposażenie aut różnych marek.

Zacznijmy od ceny.

[Rysunek 1. Rozkład cen ofertowych aut używanych w rozbiciu na markę i wiek auta. Czarna kropka odpowiada medianie, pudełka dolnemu i górnemu kwartylowi. Dla zwiększenia czytelności oś OY przedstawiono w skali logarytmicznej. ]

Spójrzmy teraz na dostępność ofert dla różnych marek. Dodatkowo przedstawimy liczbę oferowanych aut w danym roku w podziale na typy nadwozia.

[Rysunek 2. Liczba ofert sprzedaży używanego auta w rozbiciu na typ nadwozia, wiek auta i markę.  Dla niektórych modeli widoczna jest duża podaż +-5-letnich samochodów. Prawdopodobnie kończą się okresy gwarancyjne, auto się amortyzuje i takie auta są sprzedawane przez firmy leasingujące.]

I jeszcze rzut oka na wyposażenie.

[Rysunek 3. Na osi OY przedstawiono procent używanych aut oferowanych do sprzedaży, posiadających określony element wyposażenia. Najwięcej aut serwisowane w ASO stanowią auta mające 4 lata. Ciekawe trendy obserwuje się dla przyciemnianych szyb. Nowsze Astry, C4 i Cee’dy mają je coraz częściej, podczas gdy dla Audi A4 mamy odwrotny trend, przynajmniej  w ostatnich latach. Coraz więcej aut jest wyposażonych w takie elementy jak czujnik parkowania czy ESP (hmm, dziwny jest ten trend z ESP w Ceed’ach)]

 

Btw: wszystkie powyższe wykresy zostały wykonane funkcją xyplot() lub bwplot() w R z użyciem pakietu lattice.

Na ile protest w sprawie ACTA jest ważny?

Przez cały tydzień krążyliśmy wokół ACTA. Najwyższy czas zamknąć ten temat. Dzisiejszy wpis ma dwie warstwy, w jednej spróbujemy odpowiedzieć na pytanie kto i dlaczego protestuje przeciwko ACTA, a w drugiej zastanowimy się jak czytelne są różne metody graficznego przedstawiania macierzy kontyngencji.

Tydzień temu użytkownik anuszka podał odnośnik do ciekawego wpisu na blogu CentrumCyfrowe.pl. Tytuł i odnośnik do wpisu: ,,Protest w sprawie ACTA to walka młodych o wolność w internecie – potwierdzają wyniki badań”.  W pierwszym akapicie tego wpisu znajduje się zdanie ,,Z przeprowadzonego przez MB SMG/KRC i Centrum Cyfrowe Projeku: Polska badania wynika, że stosunek do protestu ma charakter pokoleniowy. Protest jest szczególnie istotny dla ludzi młodych”. Hmmm… Zaraz zobaczymy.

Do wymienionego wpisu podlinkowane są dane zebrane w badaniu (na reprezentatywnej próbie ponad 1000 polaków). Tym razem zamiast surowych danych mamy dostęp tylko do agregatów, tzn. mamy policzone procenty i liczebności odpowiedzi na kilka pytań z ankiety w podziale na wiek, płeć i miejsce zamieszkania. Mnie interesować będzie podział na grupy wiekowe. Jak wygląda stosunek do ACTA i do praw autorskich u gorącokrwistej młodzieży a jak u osób starszych, które urodziły się w czasach gdy nie było internetu, ale nie było też poszanowania dla własności prywatnej? Zobaczymy. Przedstawię poniżej odpowiedzi ankietowanych na trzy pytania.

,,C2. Na ile protest w sprawie ACTA jest dla Pana(i) ważny?”

W formularzu jest pięć odpowiedzi na to pytanie: ,,jest dla mnie mało ważny nie rozumiem o co w nim chodzi”, ,,jest dla mnie ważny, ale nie na tyle żeby uważnie śledzić co się dzieje”, ,,jest dla mnie ważny, aktywnie śledzę rozwój wydarzeń”, ,,jest dla mnie bardzo ważny – jestem osobiście zaangażowany w protest przeciwko ACTA” i ,,nie wiem”. Są więc cztery odpowiedzi opisujące skalę od mało ważny do bardzo ważny. Ale nie ma odpowiedzi nie obchodzi mnie”. Trochę przypomina to niedawno przedstawiany artykuł dotyczący manipulacji listą możliwych odpowiedzi w ankietach (wpis ,,ankiety a manipulacja”). I pytanie i odpowiedzi sugerują że protest w sprawie ACTA jest ważny pytanie tylko czy bardzo czy tylko trochę.

[Rysunek 1. Wyniki odpowiedzi na pytanie o ważność protestu w sprawie ACTA przedstawione z użyciem analizy korespondencji. Jeżeli trójkąty opisujące grupy wiekowe są blisko zwrotów strzałek opisujących odpowiedzi na pytania, to dana para występuje częściej niż losowo. Z tego typu wykresów odczytuje się współwystępowania, np. widzimy, że odpowiedzi ,,mało ważny” częściej inż inni udzielały osoby po 60 roku życia, odpowiedź ,,jest ważny ale nie na tyle …” częściej padała z ust osób po 45 roku życia, protesty były bardzo ważne dla osób młodych. Wersja wektorowa powyższego rysunku jest tutaj].

Swoją drogą pytanie można różnie rozumieć. Dosłownie oznacza ono na ile ważny jest protest = „ostre wystąpienie przeciw działaniu uważanemu za niesłuszne” (za słownikiem PWN), może być więc odczytane jako poparcie dla formy ostrego wystąpienia. Inna interpretacja tego pytania to czy jest się przeciw ACTA czy za ACTA.

 

,,C3. Czy Pana(i) zdaniem darmowy dostęp do książek, muzyki i filmów przez internet – nawet, jeśli odbywa się z naruszeniem praw autorskich – powinien być elementem swobód obywatelskich?”

Mam znajomego który wierzy, że niewidzialna ręka rynku wszystko wyreguluje. A tym którzy podnoszą rękę na niewidzialną rękę odciąłby tę rękę (dużo tych rąk, ale mam nadzieję, że wiecie o co chodzi). Czytając więc argumenty w stylu ,,Państwo powinno płacić za…” (bo koniec końców ktoś zawsze płaci) zawsze słyszę w tyle głowy jego soczysty komentarz.

Ale można wierzyć w różne rzeczy, zobaczmy co na ten temat myślą nasi ankietowani.

[Rysunek 2. Poparcie dla ,,darmowego” dostępu do książek, muzyki, filmów w Internecie. Im starsze osoby są pytane, tym mniej skłonne są one poprzeć bezpłatny dostęp do filmów, książek i muzyki w Internecie nawet z naruszeniem praw autorskich. Osoby młodsze w większości są 'raczej’ lub 'zdecydowanie’ za. Wersja wektorowa grafiki znajduje się tutaj.]

 

,,C1. Co jest Pana(i) zdaniem głównym źródłem protestu w sprawie Acta?”

Do wyboru były cztery odpowiedzi. Jak dla mnie zabrakło kilku innych wariantów, dotyczących np. informacji komu i kiedy mogą być przekazane informacje o aktywności w Internecie Polaków. No ale w tym badaniu skupiono się na innych problemach. Zobaczmy jakie odpowiedzi wybierali ankietowani.

[Rysunek 3. Im młodsza grupa ankietowanych tym większy procent uważa, że chodzi o wolność. Im starsza grupa ankietowanych tym większy procent (przyznaje?) nie wie o co chodzi]

Za nami szybki rzut oka na odpowiedzi reprezentatywnej próby polaków. Moim zdaniem wykresy mówią same za siebie, daruję więc sobie stronnicze komentarze.

Widzieliśmy trzy wykresy, ciekawy jestem który z nich trzech jest dla Was najbardziej czytelny. Najczęściej w opracowaniach spotyka się wykres słupkowy (ostatni) z uwagi na jego prostotę, a z drugiej strony najbardziej zaawansowana matematyka stoi za analizą korespondencji (wykres pierwszy).

 

Gdzie można zarobić? Kto może zarobić?

Tym wpisem mam nadzieję, że zakończę pokaźną serię wizualizacji danych z Diagnozy Społecznej i znajdziemy kolejne ciekawe dane.

Jakiś czas temu pojawiła się w komentarzach sugestia, by sprawdzić jak na dochody wpływa miejsce zmieszkania, wykształcenie, zawód, stan cywilny itp. Nie każdą z tych rzeczy łatwo sprawdzić na danych z Diagnozy, np. frakcja osób, które podały zawód jest dosyć nieduża. Ograniczymy się więc do zależności, które możemy badać na dużych grupach ankietowanych

Widzieliśmy już, że dochody zależą istotnie od wieku i od płci. Aby usunąć wpływ tych zmiennych poniżej wykonamy analizą tylko dla pracujących mężczyzn w wieku od 30 do 45 lat.

Zaczniemy od związku miejsca zamieszkania z dochodami. Prosta dwukierunkowa analiza wariancji pokazuje, że dochody zależą od województwa i od wielkości miasta i również, że ta zależność nie jest addytywna. Tzn. wpływ/efekt wielkości miasta jest różnych w różnych województwach. Wyników analizy wariancji nie zamieszczam ale można ją odtworzyć z skryptu w R. Co ciekawe otrzymujemy podobne wyniki bez względu na to czy analizujemy dochody zlogarytmowane czy nie, czy użycjemy transformacji Boxa Coxa czy nie.

Wielkość miasta w którym pracuje akietowany podzielono na trzy grupy: 'wieś’, do 200 tys’ i 'powyżej 200tys’. W oryginalnych danych tych grup jest więcej, ale połączone zostały te najbardziej do siebie podobne w celu otrzymania możliwie czytelnych wykresów. Województw jest 16, w czterech z nich nie ma miast o wielkości powyżej 200tys mieszkańców, stąd brakujące elementy ponizej.

Na poniższym wykresie zaznaczono dla każdego województwa rozkład dochodów netto w rozbiciu na wielkość miasta zamieszkania. Kolory odpowiadają wielkości miasta. Jasny/blady pasek odpowiada rozpiętości średnich dochodów 50% zarabiających osób z danej lokalizacji, lewy brzeg odpowiada dolnemu kwartylowi, prawy brzeg górnemu kwartylowi. Czyli możemy potraktować ten pasek jako reprezentację najbardziej typowych dochodów. (Uwaga! oś logarytmiczna). Kropką zaznaczono medianę dochodów a krzyżykiem średnią. Średnia potrafi być znacznie wyższa niż mediana, ale tak to już jest z dochodami. Po prawej stronie wykresu podano dla każdego województwa informację o liczbie osób na podstawie której konstruowany jest ten wykres (odpowiednio na wsi, małym mieście, dużym mieście).

Co ciekawego tu widać? Zazwyczaj im większe miasto tym wyższe dochody. Stolica znacząco odstaje od pozostałych lokalizacji. Ale są też wyjątki od tej reguły. W województwie Podlaskim duże miasto (czyli Białystok) charakteryzuje się mniejszymi dochodami niż otaczające go małe miasta i wsie (region żyje z turystyki). W innych województwach najniższe dochody mają osoby mieszkające na wsi.

 

Poniżej przedstawiamy te same dane ale zamieniając kolejność zmiennych, tym razem pokazemy obok siebie województwa. To samo województwo jest oznaczone tym samym kolorem, a kolejność odpowiada średniemu dochodowi. W grupie dużych i średnich miast najwyższe dochody mają osoby mieszkające w województwie Mazowieckim. Ale juz  w kategori wieś najlepiej zarabiają mieszkańcy Pomorza. Przy czym średnia bardzo odstaje od mediany, więc nie wszystkim mieszkańcom tego województwa się tak świetnie powodzi.

 

Jako uzupełnianie tematu poniżej przedstawiam zależności pomiędzy stanem cywilnym a dochodami oraz pomiędzy liczbą lat edukacji a dochodami. Miło zobaczyć piękną korelacje pomiędzy liczbą lat nauki a dochodami.

 

Jakie będą ceny mieszkań za 12 miesięcy?

Przeglądałem dzisiaj stare wydania Rzeczpospolitej, i znalazłem ciekawy wykres w kwietniowym wydaniu (http://www.rp.pl/galeria/8,2,641431.html).

Deweloperom zadano pytanie czy ceny mieszkań wzrosną czy spadną w przyszłym roku. Porównano wyniki z odpowiedzi z czerwca i grudnia roku 2010. Odpowiedzi przedstawiono za pomocą następującego wykresu.

 

Ponownie, najdziwniejsze w tym wykresie jest to, że na pierwszy rzut oka nie widać czy i jak odpowiedzi się zmieniły. Najbardziej w oczy rzuca się para dwóch czerwonych i dwóch zielonych słupków. Nie wiedzieć czemu czerwone odpowiadają grudniowi a zielone czerwcowi.

Do pokazywania uporządkowanych zmiennych jakościowych lepsze są wykresy paskowe. Pozwalają ona na łatwe porównywanie skumulowanych liczebności. Przedstawmy więc te dane co powyżej za pomocą prostego wykresu paskowego.

Myślę, że po spojrzeniu na ten wykres nikt nie ma wątpliwości że opinie pytanych deweloperów zmieniły się znacznie przez te 6 miesięcy.

 

Kto i kiedy się uczy

Dzisiaj pojawiło się interesujące pytanie/komentarz do poprzedniego wpisu, mianowicie czy i ile uczą się Polacy po trzydziestce. Czy jest tak, że uczymy się tylko do pełnoletności a później z rozpędu jeszcze przez studia, czy też nieustannie rozwijamy swoje umiejętności.

Pytanie, na które będę chciał poniżej odpowiedzieć to czy i ile uczymy się. Będziemy porównywać jak wygląda ilość czasu poświęcanego na dodatkową edukację teraz w porównaniu z poprzednią dekadą. Zobaczymy jak kontynuacja edukcji zależy od wieku oraz od juz posiadanego bagażu lat eukacji.
Odpowiedź na powyższe pytania postaram się zmieścić na niewielkiej liczbie ,,upakowanych” wykresów. Może więc trudno będzie je odczytać na pierwszy rzut oka, ale mam nadzieje że jak już się to uda to okażą się one informatywne.

Tak więc poniżej kilka trudniejszych wykresów.

Kod w programie R, użyty do wygenerowania poniższych wykresów znajduje się w katalogu tutaj. W tym katalogu znajdują się rownież poniższe wykresy w formacie SVG. Ponieważ niektóre pliki mają ponad 600kB wolałem do wpisu podlinkowac znacznie lżejsze pliki PNG.

Przejdźmy do analiz. Poniżej przedstawione są dwie serie wykresów. Jedne wykorzystują paletę kolorów – odcieni fioletu, drugie odcieni koloru ceglastego. Oba komplety wykresów przedstawiają te same dane ale w trochę innej formie.

Należy zaznaczyć, że liczba lat edukacji jest deklarowana przez ankietowanego, a ankieter tej liczby nie sprawdza. Ankietowany mógł nie pamiętać co odpowiedział dwa lata wcześniej, nie zawsze też ze zmienioną liczbą lat edukacji idzie prawdziwe szkolenie.

Na poniższym wykresie przedstawiamy liczbę lat edukacji respondentów w latach 2005 i 2003. Wszystkich respondentów podzieliliśmy na 16 grup wiekowych, każda grupa o rozpiętości 5 lat. Na osi OX zaznaczono, która grupa jest aktualnie opisywana. Wiek tu podany dotyczy roku 2003. Dla każdej grupy na górze wykresu zaznaczono ile średnio lat edukacji przybyło osobom w tej grupie wiekowej po dwóch latach badania. Czyli przykładowo, w najmłodszej grupie wiekowej, osób od 15 do 20 lat, deklarowana liczba lat nauki w roku 2005 wzrosła o 1.4 w stosunku do roku 2003. Jeżeli spojrzymy na grupę osób od 21 do 25 lat to liczba lat edukacji wzrosła o dwa razy mniej, czyli 0.71 roku. Długość czerwonej kreski nad liczbą jest proporcjonalna do tej liczby. Umożliwia to szybką orientację w jakim wieku Polacy najwięcej się uczą. Największy przyrost liczby lat edukacji obserwujemy w grupie osób 15-20 lat. Ale osoby starsze też się uczą. Przykładowo w grupie 40-45 lat przybyło przez 2 lata średnio 0.14 lat edukacji. Pytanie oczywiście czy edukowali się dodatkowo Ci już z dużym stażem, czy też raczej osoby o krótkiej historii edukacji uzupełniały swoją wiedzę. Na to pytanie odpowie pozostała część wykresu.

Dla każdej grupy wiekowej przedstawiono za pomocą wykresu pudełkowego rozkład liczby lat nauki w roku 2003. Z tego wykresu można odczytać ile interesująca nas grupa miała lat nauki na koncie w roku 2003. Z każdego wykresu pudełkowego wychodzi kolekcja kresek na prawo do góry. Każda z tych kresek dotyczy podgrupy osób o zadanej liczbie lat edukacji i zadanym wieku. Przykładowo najgrubsza, cała ceglana, kreska w lewym dolnym brzegu dotyczy osób będących w grupie wiekowej 15-20 lat i mających w roku 2003 na koncie 9 lat edukacji.

Długość tej kreski i kolor opisuje ile osób kontynuowało naukę i jak długo. Grubość kreski odpowiada liczbie osób w danej grupie, jest ona proporcjonalna do logarytmu dwójkowego z liczby osób. Ale na potrzeby tego opisu wystarczy zauważyć, że im grubsza kreska tym więcej osób było w tej grupie.  Mamy wieć grupę 15-20 latków, którzy w roku 2003 mieli 9 lat edukacji, zapytamy się teraz ilu z nich kontynuowało edukację i przez jak długo. A dokładniej zapytamy się jak wyglądały w tej grupe kwantyle liczby lat edukacji rzędu 0.25, 0.5, 0.75 i 0.9 po dwóch latach. Im ciemniejszy kolor tym niższy kwantyl, czyli więcej osób uczyło sie przynajmniej tyle lat. Ponieważ liczbę lat edukacji podawano jako liczbę całkowitą, to każda z tych kresek może mieć długość 0, 1 lub 2. Wspomniana już gruba ceglasta kreska ma długość 2, co oznacza, że ponad 3/4 osób (ponieważ kwantyl 0.25 oznaczany jest ciemnym bordowym) kontynuowało edukacje przez 2 lata i w roku 2005 miało już na koncie 11 lat edukacji. Poniżej tek kreski jest inna dwukolorowa kreska, która odpowiada stwierdzeniu że ponad 1/2 osób startujących w roku 2003 z 8 latami edukcji kontynuowała edukację przez 2 lata, a ponad 3/4 z nich przez przynajmniej jeden rok.

Generalnie im ciemniejsza kreska tym więcej osób a im dłuższa to tym dłuzej się eudkowało. Pojedyncze kropki czerone oznaczają, że w danej grupie nikt nie zdecydował się na kontynuowanie nauki.

Co ciekawego widać? Np. że w grupie 30-35 lat są i osoby które uzupełniają edukację o studia wyższe i podyplomowe (15 i więcej lat edukacji), jak równiez osoby, które kończa szkołę średnią. W grupach osób starszych studentów jest już mniej, ale cały czas jakiś procent osób (ponad 10% – kolor beżowy) uzupełnia edukację najpewniej o szkołę średnią.

Zobaczmy teraz podobny wykres pokazujący lata 2009-2011.

Jeżeli otworzyć oba powyższe obrazki na dwóch sąsiednich zakładkach to łątwiej zobaczyć czym się różnią. Generalny wniosek jest taki, że jest więcej i też ciemniejszych kresek, więc w ostatnich dwóch latach więcej osób edukowało się (lub przynajmniej tak twierdziło w badaniu). Nawet w grupie osób starszych, powyżej 75 roku życia obserwuje się znaczny (ponad 25%) odsetek osób uzupełniających edukację, szczególnie podstawową.

Również porównując czerwone paski i procenty na górze wykresu widzimy że średni przyrosk liczby lat edukacji jest większy pomiędzy latami 2009-2011 niż 2005-2003.

 

Problem z powyższymi wykresami jest taki, że poniewa lata edukacji są dyskretne, również kwantyle sa dyskretne i nie widać gładkiego rozkładu. Poniżej więc przedstawiono długością kreski coś innego, minowicie frakcję osób, które edukowały się przynajmniej określoną liczbę lat. Jako przykład wybierzmy grupę osób w wieku 15-20 lat, które w roku 2003 miały na koncie 13 lat edukcji (kreska najbardziej na lewo a później do góry). Frakcje osób można odczytać porównując długość tego odcina z odcinkiem od wykresu pudełkowego o najbliższej szarej pionowej linii. W rozważanej grupie mniej więcej 1/3 tego odcinka pomalowana jest na kolor średnio fioletowy, kolejna jedna trzecia na kolor jasno fioletowy a pozostała 1/3 nie jest pomalowana. Oznacza to, że mniej więcej (dokładne liczby trudno odczytać bez skali, nie są jednak tak bardzo ważne) 33% osób z w wieku 15-20 lat , które miały już na koncie 13 lat edukacji kontynuowały edukację przez kolejny rok, 33% osob kontnuowała edukację przez dwa lata, a reszta nie kontynuowała edukacji. Porównując długości kresek w każdej z grup wiekowych łatwiej nam ustalić kto w danej grupie wiekowej kontunuował edukację i jak długo.

I wkres dla lat 2009-2011

 

Zdaję sobie sprawę, że wykresy wymagają trochę koncentracji by je odczytać. Który z nich jest czytelniejszy i lepiej nadaje się do przedstawiania kontynuacji eduakcji (ceglasty czy fioletowy)? Czy te wykresy sa jakkolwiek czytelne? Czy może macie pomysł jak inaczej przedstawić tą samą informację by była czytelniejsza? Czy jest w tych wynikach coś naprawdę zaskakującego?

 

Rysujemy rozkład cen krok po kroku, część 4

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)

Rysujemy rozkład cen krok po kroku, część 3

Dzisiaj kontynuujemy rozpisywanie krok po kroku wizualizacji cen mieszkań. Ten wpis poświęcony jest wykresowi pudełkowemu. Kory w programie R użyte poniżej można znaleźć na stronie tutaj.

Podobnie jak poprzedni pierwsza część to przygotowanie danych, druga to ich wizualizacja.

Częśc 1.

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
library(lattice)
library(RColorBrewer)
library(MASS)
 
# wczytujemy dane o mieszkaniach
mieszkaniaKWW2011 <-
     read.table("http://tofesi.mimuw.edu.pl/~cogito/smarterpoland/mieszkaniaKWW2011/mieszkaniaKWW2011.csv",
         row.names=NULL, sep=";", header=TRUE,
         colClasses=c("factor", "factor", "numeric", "numeric", "factor", "numeric", "numeric", "factor", "Date"))
 
# wybieramy tylko mieszkania z Warszawy o powierzchni do 300m2
mieszkaniaKWW2011Warszawa <- mieszkaniaKWW2011[mieszkaniaKWW2011$miasto =="Warszawa", ]
mieszkaniaKWW2011Warszawa$dzielnica <- factor(mieszkaniaKWW2011Warszawa$dzielnica)
mieszkaniaKWW2011Warszawa <- mieszkaniaKWW2011Warszawa[mieszkaniaKWW2011Warszawa$powierzchnia<300, ]
 
# do analiz trafią tylko oferty złożone po 13 września 2007
dataStart <- as.Date("13-09-2007","%d-%m-%Y")
mieszkaniaKWW2011Warszawa2 <- mieszkaniaKWW2011Warszawa
mieszkaniaKWW2011Warszawa2 <- mieszkaniaKWW2011Warszawa2[mieszkaniaKWW2011Warszawa2$data >= dataStart,]
#
# dodajemy zmienną określającą miesiąc w którym złożona została oferta
mieszkaniaKWW2011Warszawa2$dataF <- factor(as.character(mieszkaniaKWW2011Warszawa2$data, "%Y-%m"))
 
#
# z wszystkich meiszkań do obiektu mieszkaniaKWW2011Warszawa3 wybieramy tylko te o średnim rozmiarze, tz o powierzchni d 49 do 68m2
mieszkaniaKWW2011Warszawa2$rozmiar <- cut(mieszkaniaKWW2011Warszawa2$powierzchnia, c(0,49,68,200), labels=c("do 49 m2", "od 49 do 68 m2", "powyzej 68 m2"))
mieszkaniaKWW2011Warszawa3 <- mieszkaniaKWW2011Warszawa2[which(mieszkaniaKWW2011Warszawa2$rozmiar == "od 49 do 68 m2"),]
 
#
# na potrzeby tego wykresu wybieramy tylko mieszkania z Zoliborza
mieszkaniaKWW2011Warszawa3Zoliborz    <- mieszkaniaKWW2011Warszawa3[which(mieszkaniaKWW2011Warszawa3$dzielnica == "Zoliborz"),]
 
at = seq(1000,24000,1000)

Dane są wczytane, czas na wykres. Wykorzystamy funkcję bwplot() z pakietu lattice.
Narysujemy jak zmieniają się ceny m2 średniej wielkości mieszkań w kolejnych miesiącach.

34
35
36
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         main="Zoliborz")

Nie wygląda to najlepiej, zajmijmy się na początek osiami. Ponieważ cena jest zmienną silnie prawo skośną, przedstawimy ją na osi logarytmicznej. Ponieważ etykiety na osi OX zachodzą na siebie to zmniejszymy je i pokażemy pionowo.

37
38
39
40
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         main="Zoliborz")

Przy takiej rozpiętości na osi OY trudno analizować delikatne zmiany w cenach mieszkań, więc w dalszej części zawęzimy zainteresowania do przedziału osi OY od 7 do 14k.

41
42
43
44
45
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main="Zoliborz")

Trudno zauważyć jakiś trend. Dorysujmy więc krzywą trendu liniowego przedefiniowując funkcję rysującą panel. Nowa funkcja rysująca panel rysuje linie pomocnicze siatki, rysuje wykresy pudełkowe używając panel.bwplot() oraz dorysowuje linię odpornej regresji liniowej.

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main="Zoliborz",
         panel =  function(...) {
            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)
          }
)

Trend liniowy liczony na wszystkich punktach to tylko jedno z możliwych podejść do zagadnienia oceny trendu. Dodajemy trend lokalnie ważony wielomianami stopnia pierwszego oraz trend liniowy wyznaczony tylko na podstawie median cen w kolejnych miesiącach.

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main="Zoliborz",
         panel =  function(...) {
            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)
 
            mediany <- sapply(miesiace, function(x) median(args$y[args$x == x], na.rm=T))
            mod2    <- rlm(mediany~seq_along(miesiace))
            panel.abline(mod2)
            indtmp  <- c(1, length(mediany))
            llines(indtmp, mediany[indtmp])
 
            panel.loess(...)
          }
)

Mało czytelne są te linie trendu. Narysujemy je grubszą kreską i dodatkowo użyjemy kolorów z pakietu RColorBrewer, które powinny być przyjemniejsze dla oka.

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main="Zoliborz",
         panel =  function(...) {
            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)
          }
)

Solą w oku są już tylko te niebieskie wykresy pudełkowe, lepiej wyglądałyby one w kolorze szarym, mają być tłem dla linii trendu. Aby zmienić kolor tych punktów używamy funkcji trellis.par.set() i trellis.par.get().

106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main="Zoliborz",
         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)
          }
)

Już jest nieźle. Ostatnia modyfikacja wykresu to dodanie opisu wykresu z liczbą procent o który zmieniła się cena mieszkania. Konstruujemy funkcję, która te procenty wyliczy i doklei do nazwy dzielnicy. Przy da się to do kolejnego przykładu, tutaj wyglądać może trochę sztucznie.

142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#
# ta funkcja doda do nazw dzielnic informacje o zmianie wartosci mieszkan w danej dzielnicy
# w badanym okresie czasu uzywajac czterech roznych metod
#
nazwyIProcenty <- function(mieszkaniaTmp) {
  # wektor z nazwami dzielnic ze zbioru danych i wektor nazw miesiecy
  ndzielnic  <- levels(mieszkaniaTmp$dzielnica2)
  miesiace   <- levels(mieszkaniaTmp$dataF)
  # anonimowa funkcja wyznacza cztery liczby
  # opisujace procentowa zmianę ceny
  ndzielnic <- paste(ndzielnic," ",sapply(ndzielnic, function(dzielnica) {
     tmp   <- mieszkaniaTmp[mieszkaniaTmp$dzielnica2==dzielnica,]
     skala <- diff(range(as.numeric(tmp$dataF)))
     # odporna (robust) regresja liniowa
     # szukamy trendu liniowego biorąc pod uwagę wszystkie ceny
     mod   <- rlm(tmp$cenam2 ~ I(as.numeric(tmp$dataF)/skala))$coeff
     proc1 <- round(1000*mod[2]/mod[1])
 
     mediany <- sapply(miesiace, function(miesiac) median(tmp[tmp$dataF == miesiac,"cenam2"]))
     # ponownie odporna regresja liniowa,
     # tym razem liczymy wspóczynniki trendu tylko na podstawie median dla kadego miesiąca
     mod2    <- rlm(mediany~I(seq_along(miesiace)/length(mediany)))$coeff
     proc2   <- round(1000*mod2[2]/mod2[1])
 
     # zmianę liczymy porównując medianę ceny z wrzenia 2007 z ceną z wrzesnia 2011
     # ceny w okresie przejciowym są ignorowane
     mediany <- na.omit(mediany)
     proc4   <- round(1000*(mediany[length(mediany)]-mediany[1])/mediany[1])
 
     # regresja lokalnie wygadzana wielomianami pierwszego stopnia
     # dodatkowe argumenty sa wymienione by zachowac zgodnosc z funkcj panel.loess
     tmp2  <- loess(tmp$cenam2 ~ I(as.numeric(tmp$dataF)/skala), span = 2/3, degree = 1, family = "symmetric" )$fitted
     # zmiane liczymy porówując oszacowany trend na wrzesien 2007
     # z oszacowanym trendem na wrzesien 2011
     tmp2  <- tmp2[order(I(as.numeric(tmp$dataF)/skala))]
     proc3 <- round(1000*(tmp2[length(tmp2)] - tmp2[1])/tmp2[1])
 
     paste(proc1/10, "% / ", proc2/10, "% / ", proc3/10, "% / ", proc4/10, "% ", sep="")
  }), sep="")
  ndzielnic
}
 
levels(mieszkaniaKWW2011Warszawa3$dzielnica2) = nazwyIProcenty(mieszkaniaKWW2011Warszawa3)
mieszkaniaKWW2011Warszawa3Zoliborz = mieszkaniaKWW2011Warszawa3[which(mieszkaniaKWW2011Warszawa3$dzielnica == "Zoliborz"),]
 
bwplot(cenam2~dataF,
         data=mieszkaniaKWW2011Warszawa3Zoliborz,
         scales=list(y=list(log=T, at=at), x=list(rot=90, cex=0.6)),
         ylim=c(7000, 14000),
         main=as.character(mieszkaniaKWW2011Warszawa3Zoliborz$dzielnica2)[1],
         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)
          }
)

Wykres gotowy, w kolejnym odcinku pokażemy jak wygenerować taki wykres dla wszystkich dzielnic.

Ceny mieszkań spadły o 20%!!! albo wzrosły o 5%!!! albo się nie zmieniły!!!

Ostatnio w gazetach pojawiło się kilka artykułów w których aby przyciągnąć więcej czytelników zastosowano bardzo głupie tytułu w stylu ,,Realne ceny mieszkań spadły/ mieszkania potaniały o 25% także w Warszawie”. Artykuły np. [gazeta na podstawie open finance], [raport oferty net], [wyborcza biz finanse] mają tą cechę wspólną, że podają liczby bez żadnej refleksji na temat tego jak liczby uzyskano i jakie ma to znaczenie. W każdym z przypadków badano zmianę ceny w trakcie ostatnich czterech lat (czyli od tzw górki 2007) tak więc i poniższe rozważania oprzemy na tym okresie.

Celem tego wpisu jest nie polemika z tym co to znaczy realna cena mieszkania, ani z tym czy spadek wynosił 25% czy nie, ale z tym, że jeżeli nie porównujemy ceny tego samego mieszkania to mówiąc o zmianie wartości należy dokładnie opisać zmianę wartości czego liczymy, bo wyniki mogą być bardzo różne. Dla każdej dzielnicy Warszawy na 8 sposobów policzymy jak zmieniały się ceny przez ostatnie 4 lata. I w każdym przypadku otrzymamy 8 różnych liczb opisujących zmianę ceny.

We wczorajszym wpisie dyskutowaliśmy różnice pomiędzy cenami m2 w dużych i małych mieszkaniach różnych dzielnic. Pisząc o strukturze koszyka pokazaliśmy, że badanie ,,tak po prostu” średniej mieszkań sprzedanych/oferowanych nie ma sensu jeżeli nie uwzględnimy jakie mieszkania (powierzchnia/lokalizacja/stan itp) wchodzą w skład koszyka. Poniżej będziemy podawać różne liczby ale nie po to by dowieść że cena zmieniła się o X%, ale by zaznaczyć jakie problemy wiążą się z analiza zmiany ceny. Wszystkie ceny to ceny ofertowe, nie pokrywają one całego rynku i pewnie nie są całkowicie reprezentacyjne. Nie mniej powinno być fajnie popatrzeć na obrazki.

Przyjrzyjmy się dzielnicy Żolibórz. Oś OY jest w skali logarytmicznej, pionowe szare linie oznaczają koniec roku. Na poniższym wykresie dla każdego miesiąca począwszy od września 2007 wyznaczamy wykres pudełkowy opisujący zmiany cen w danym miesiącu. W środku pudełka czarną kropką oznaczamy medianę cen w danym miesiącu. Następnie czterema liniami oznaczamy następujące trendy:

* linią czerwoną zaznaczamy trend liniowy wyznaczony na bazie wszystkich obserwacji używając regresji odpornej (funkcja rlm() w R), regresja odporna ma nas uchronić przed wpływem pojedynczych obserwacji odstających, nie uchroni nas jednak przed obciążeniem wynikającym z tego, że większość ofert sprzedaży dotyczy ostatniego roku.\ i to ten okres będzie głównie wpływał na ocenę trendu liniowego. W nagłówku wykresu podano cztery procenty, pierwszy z nich opisuje o ile ten trend liniowy się zmienił prze ostatnie cztery lata (-15.6%).

* linią niebieską zaznaczamy trend liniowy wyznaczony na bazie median cen używając regresji odpornej. Czyli najpierw wyznaczamy mediany cen w każdym miesiącu a później wyznaczamy trend. Tym razem trend nie jest już dominowany przez ceny z ostatniego roku. W nagłówku wykresu druga liczba to zmiana tego trendu przez ostatnie 4 lata (-7.6%, czyli około połowa poprzedniej liczby),

* linia zielona i trzecia liczba odpowiadają trendowi wyznaczonemu za pomocą lokalnego wygładzania. Ponieważ używanie trendu liniowego wydaje się być słabo uzasadnione, porównujemy trend liniowy z trendem wyznaczonym przez funkcję loess z parametrami rodzina = symmetric, span = 2/3, stopień wielomianu = 1. Oczywiście dla innych parametrów otrzymalibyśmy inne wygładzenie, te jednak wygląda w miarę dobrze. Trzecia liczba nagłówku opisuje o ile się zmieniła ocena trendu we wrześniu 2011 w stosunku do września 2007 (-11.1%).

* linia fioletowa łączy medianę ceny m2 mieszkań ferowanych we wrześniu 2007 z medianą ceny m2 mieszkań oferowanych we wrześniu 2011. Ponieważ danych o sprzedaży we wrześniu 2007 jest niewiele, ta linia wykazuje spora zmienność pomiędzy dzielnicami. Dla Żoliborza zmiana medianowej ceny m2 pomiędzy wrześniem 2007 a wrześniem 2011 to (-3.6%).

 

Mamy więc cztery liczby, począwszy od spadku niecałych 4% w cztery lata do spadku o ponad 15%. A to jeszcze nie wszystko. Te same analizy możemy zrobić uwzględniając strukturę wielkości mieszkań. Odrzućmy więc mieszkania najmniejsze i największe (te największe najwięcej straciły) i zajmujmy się tylko cenami m2 mieszkań o powierzchni od 49 do 68m2. Poniżej odpowiadający im wykres z oznaczeniami jak powyżej,

Jak widzimy ograniczając się tylko do segmentu mieszkań o średniej powierzchni otrzymujemy 4 inne trendy i cztery inne % opisujące zmianę tych trendów.

Która z tych 8 liczb lepiej opisuje zmianę cen mieszkań? Oczywiście to zależy jaki aspekt zmiany chcemy analizować. Ceny mieszkań zmieniają się w sposób złożony. Mnie najbardziej podoba się  trend lokalnie wygładzany, nie zakłada on liniowości tak jak linie czerwone i niebieskie a jednocześnie czerpie informacje z prawie wszystkich danych (w przeciwieństwie do linii fioletowej która patrzy tylko na skrajne miesiące).

W przypadku trendu nieliniowego nadużyciem jest stwierdzenie, że ceny spadały o X%, ponieważ w różnych okresach zachowywały się różnie.

Poniżej wyniki dla wszystkich dzielnic, pierwszy wykres bazuje na wszystkich obserwacjach, drugi dotyczy tylko mieszkań o średniej wielkości.

 

 

Zakup kontrolowany, czyli wybieramy auto dla rodziny

Od prawie czterech lat szukam rodzinnego auta. Ostatnio rozmawiałem ze znajomym, który był zdziwiony dlaczego to taki trudny wybór. Jak to stwierdził wystarczy wprowadzić dane do komputera, określić funkcje celu i wybrać najlepszą opcję. Hmmm, może i tak.

Mamy już dane zebrane  z serwisu otomoto.pl, więc spróbujmy zobaczyć jak wyglądają rozkłady cen w czasie różnych marek. Informacje o zmianach cen znaleźć można na wielu serwisach, np. autocentrum.pl, ale tutaj przedstawimy te zmiany lepiej i czytelniej. Tak jest, konkurujemy z eutotax.

Aktualnie wysoko na liście rozważanych marek stoi Passat. Poniższe wykresy będą wykonane dla prawie każdej marki obecnej w zbiorze danych cenyAut2011. Ale dla ustalenia uwagi zobaczmy  wygląda cena Passata i jak ta cena zależy od roku produkcji (oś OX), pojemności i typu silnika (poszczególne panele) oraz wersji marki (rożne kolory kropek).

Na panelu po prawej stronie podana jest nazwa marki, liczba ofert sprzedaży aut tej marki, oraz informacja o rozkładzie cen dla aut produkowanych w danym roczniku. Każda niebieska kropka to jedna oferta sprzedaży. Czerwona kropka oznacza medianę cen, czerwone kreski oznaczają odpowiednio kwantyle 5-25% i 75-95%. Ceny są w skali logarytmicznej. Na wykresie mamy tylko dane o autach używanych, w tej kategorii mediany cen układają się prawie idealnie w linii prostej, co odpowiada stałej procentowej zmianie w cenie. Tę informację jeszcze wykorzystamy.

Z wykresów widzimy, że passaty  w dieslu z silnikiem 1900cm3 są dosyć popularne. 5 lat to jeszcze wersja B6. Zobaczmy teraz jak wyglądają podobne wykresy dla konkurencji.

 

Obrazki dla innych marek można znaleźć w katalogu tutaj.

Lub korzystając z poniższej listy marek, dla której zebrano takie wykresy.
Alfa Romeo 147, Alfa Romeo 156, Alfa Romeo 159, Alfa Romeo 166, Alfa Romeo GT,
Audi A2, Audi A3, Audi A4, Audi A5, Audi A6, Audi A6 Allroad, Audi A7, Audi A8, Audi Q5, Audi Q7, Audi TT,
BMW 118, BMW 316, BMW 318, BMW 320, BMW 325, BMW 330, BMW 520, BMW 525, BMW 530, BMW 535, BMW 730, BMW 740, BMW X3, BMW X5, BMW X6,
Chevrolet Aveo, Chevrolet Lacetti,
Chrysler 300C, Chrysler Grand Voyager, Chrysler Pacifica, Chrysler PT Cruiser, Chrysler Sebring, Chrysler Town & Country, Chrysler Voyager,
Citroen Berlingo, Citroen C1, Citroen C2, Citroen C3, Citroen C4, Citroen C4 Picasso, Citroen C5, Citroen C8, Citroen Saxo, Citroen Xsara, Citroen Xsara Picasso,
Dacia Logan,
Daewoo Lanos, Daewoo Matiz, Daewoo Nubira,
Dodge Grand Caravan, Dodge RAM,
Fiat 500, Fiat Brava, Fiat Bravo, Fiat Croma, Fiat Doblo, Fiat Ducato, Fiat Grande Punto, Fiat Marea, Fiat Multipla, Fiat Palio, Fiat Panda, Fiat Punto, Fiat Seicento, Fiat Stilo, Fiat Uno,
Ford C-MAX, Ford Fiesta, Ford Focus, Ford Focus C-Max, Ford Fusion, Ford Galaxy, Ford KA, Ford Mondeo, Ford Mustang, Ford S-Max, Ford Transit,
Honda Accord, Honda Civic, Honda CR-V, Honda Jazz,
Hyundai Accent, Hyundai Coupe, Hyundai Getz, Hyundai i30, Hyundai Matrix, Hyundai Santa Fe, Hyundai Tucson,
Jaguar S-Type, Jaguar X-Type,
Jeep Cherokee, Jeep Grand Cherokee,
Kia Carens, Kia Carnival, Kia Cee’d, Kia Picanto, Kia Rio, Kia Sorento, Kia Sportage,
Lancia Lybra,
Land Rover Discovery, Land Rover Freelander, Land Rover Range Rover,
Lincoln Town Car,
Mazda 2, Mazda 3, Mazda 323, Mazda 323F, Mazda 5, Mazda 6, Mazda 626, Mazda CX-7, Mazda MPV, Mazda Premacy, Mazda RX-8,
Mercedes-Benz A 140, Mercedes-Benz A 160, Mercedes-Benz A 170, Mercedes-Benz A 180, Mercedes-Benz B 180, Mercedes-Benz C 180, Mercedes-Benz C 200, Mercedes-Benz C 220, Mercedes-Benz CLK 200, Mercedes-Benz E 200, Mercedes-Benz E 220, Mercedes-Benz E 270, Mercedes-Benz E 280, Mercedes-Benz E 320, Mercedes-Benz E 350, Mercedes-Benz ML 270, Mercedes-Benz ML 320, Mercedes-Benz ML 350, Mercedes-Benz S 320, Mercedes-Benz S 350, Mercedes-Benz S 500, Mercedes-Benz SLK 200, Mercedes-Benz Sprinter, Mercedes-Benz Vito,
Mini Cooper,
Mitsubishi Carisma, Mitsubishi Colt, Mitsubishi Eclipse, Mitsubishi Galant, Mitsubishi L200, Mitsubishi Lancer, Mitsubishi Outlander, Mitsubishi Pajero, Mitsubishi Space Star,
Nissan Almera, Nissan Almera Tino, Nissan Micra, Nissan Navara, Nissan Note, Nissan Patrol, Nissan Primera, Nissan Qashqai, Nissan Terrano, Nissan X-Trail,
Opel Agila, Opel Astra, Opel Combo, Opel Corsa, Opel Frontera, Opel Insignia, Opel Meriva, Opel Omega, Opel Signum, Opel Tigra, Opel Vectra, Opel Vivaro, Opel Zafira,
Peugeot 106, Peugeot 107, Peugeot 206, Peugeot 206 CC, Peugeot 207, Peugeot 306, Peugeot 307, Peugeot 308, Peugeot 406, Peugeot 407, Peugeot 607, Peugeot 807,
Peugeot Partner,
Porsche 911, Porsche Cayenne,
Renault Clio, Renault Espace, Renault Grand Espace, Renault Grand Scenic, Renault Kangoo, Renault Laguna, Renault Megane, Renault Modus, Renault Scenic, Renault Thalia, Renault Trafic, Renault Twingo,
Renault Vel Satis,
Rover 25, Rover 45, Rover 75,
Saab 9-3, Saab 9-5,
Seat Alhambra, Seat Altea, Seat Arosa, Seat Cordoba, Seat Ibiza, Seat Leon, Seat Toledo,
Skoda Fabia, Skoda Felicia, Skoda Octavia, Skoda Roomster, Skoda Superb,
Smart Fortwo,
Subaru Forester, Subaru Impreza, Subaru Legacy,
Suzuki Grand Vitara, Suzuki Jimny, Suzuki Swift, Suzuki SX4,
Toyota Auris, Toyota Avensis, Toyota Aygo, Toyota Camry, Toyota Celica, Toyota Corolla, Toyota Corolla Verso, Toyota Land Cruiser, Toyota RAV-4, Toyota Yaris,
Volkswagen Bora, Volkswagen Caddy, Volkswagen Caravelle, Volkswagen Fox, Volkswagen Golf, Volkswagen Golf Plus, Volkswagen Jetta, Volkswagen Lupo, Volkswagen Multivan, Volkswagen New Beetle, Volkswagen Passat, Volkswagen Passat CC, Volkswagen Polo, Volkswagen Sharan, Volkswagen Tiguan, Volkswagen Touareg, Volkswagen Touran, Volkswagen Transporter,
Volvo C30, Volvo S40, Volvo S60, Volvo S80, Volvo V40, Volvo V50, Volvo V70, Volvo XC 70, Volvo XC 90