Analiza mieszkań na sprzedaż w Polsce

Analiza opisowa

Kinga Kreft, Wiktoria Guz, Edyta Drząszcz

2025-02-02

Dane zostały wczytane z pliku CSV, który zawiera informacje o mieszkaniach dostępnych na sprzedaż w Polsce w maju 2024 roku.

1. Data wrangling

Data wrangling, znane również jako data munging, to proces przygotowywania danych do analizy poprzez oczyszczanie, transformowanie i strukturalizowanie surowych danych. Celem jest przekształcenie danych w formę, która jest łatwiejsza do analizy, eliminując błędy, usuwając duplikaty, uzupełniając brakujące wartości i konwertując dane do odpowiednich formatów.

1.1 Wizualizacja brakujących danych

Na początku identyfikujemy brakujące dane w zestawie, aby upewnić się, że analiza będzie oparta na kompletnych i spójnych danych. Używamy funkcji vis_miss() do wizualizacji braków oraz missing_pattern() do zrozumienia wzorców brakujących wartości.

Łącznie brakujących danych w całym zbiorze jest 6,3%. Zmienną, dla której wystąpił największy brak danych (aż 73%) była zmienna “condition”, która jest zmienną binarną, określającą kondycję lokalu. Drugą zmienną z największymi brakami (41%) była zmienna określająca rodzaj materiału, z jakiego jest zbudowany budynek, w którym znajduje się mieszkanie. Kolejne zmienne, które miały znaczące braki dane to: rodzaj mieszkania (20%), piętro, na którym się znajduje (17%) i rok wybudowania (16%).

##       id city type squareMeters rooms latitude longitude centreDistance
## 13813  1    1    1            1     1        1         1              1
## 2582   1    1    1            1     1        1         1              1
## 2537   1    1    1            1     1        1         1              1
## 479    1    1    1            1     1        1         1              1
## 340    1    1    1            1     1        1         1              1
## 100    1    1    1            1     1        1         1              1
## 47     1    1    1            1     1        1         1              1
## 7      1    1    1            1     1        1         1              1
## 89     1    1    1            1     1        1         1              1
## 118    1    1    1            1     1        1         1              1
## 2      1    1    1            1     1        1         1              1
## 3      1    1    1            1     1        1         1              1
## 5      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
## 27     1    1    1            1     1        1         1              1
## 10     1    1    1            1     1        1         1              1
## 4      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
## 24     1    1    1            1     1        1         1              1
## 3      1    1    1            1     1        1         1              1
## 2      1    1    1            1     1        1         1              1
## 2      1    1    1            1     1        1         1              1
## 9      1    1    1            1     1        1         1              1
## 6      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
## 5      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
## 3      1    1    1            1     1        1         1              1
## 6      1    1    1            1     1        1         1              1
## 2      1    1    1            1     1        1         1              1
## 1      1    1    1            1     1        1         1              1
##        0    0    0            0     0        0         0              0
##       poiCount ownership buildingMaterial condition hasParkingSpace hasBalcony
## 13813        1         1                1         1               1          1
## 2582         1         1                1         1               1          1
## 2537         1         1                1         1               1          1
## 479          1         1                1         1               1          1
## 340          1         1                1         1               1          1
## 100          1         1                1         1               1          1
## 47           1         1                1         1               1          1
## 7            1         1                1         1               1          1
## 89           1         1                1         1               1          1
## 118          1         1                1         1               1          1
## 2            1         1                1         1               1          1
## 3            1         1                1         1               1          1
## 5            1         1                1         1               1          1
## 1            1         1                1         1               1          1
## 27           1         1                1         1               1          1
## 10           1         1                1         1               1          1
## 4            1         1                1         1               1          1
## 1            1         1                1         1               1          1
## 24           1         1                1         1               1          1
## 3            1         1                1         1               1          1
## 2            1         1                1         1               1          1
## 2            1         1                1         1               1          1
## 9            1         1                1         1               1          1
## 6            1         1                1         1               1          1
## 1            1         1                1         1               1          1
## 1            1         1                1         1               1          1
## 5            1         1                1         1               1          1
## 1            1         1                1         1               1          1
## 3            1         1                1         1               1          1
## 6            1         1                1         1               1          1
## 2            1         1                1         1               1          1
## 1            1         1                1         1               1          1
##              0         0                0         0               0          0
##       hasElevator hasSecurity hasStorageRoom price schoolDistance
## 13813           1           1              1     1              1
## 2582            1           1              1     1              1
## 2537            1           1              1     1              1
## 479             1           1              1     1              1
## 340             1           1              1     1              1
## 100             1           1              1     1              1
## 47              1           1              1     1              1
## 7               1           1              1     1              1
## 89              1           1              1     1              1
## 118             1           1              1     1              1
## 2               1           1              1     1              1
## 3               1           1              1     1              1
## 5               1           1              1     1              1
## 1               1           1              1     1              1
## 27              1           1              1     1              1
## 10              1           1              1     1              1
## 4               1           1              1     1              1
## 1               1           1              1     1              1
## 24              1           1              1     1              1
## 3               1           1              1     1              1
## 2               1           1              1     1              1
## 2               1           1              1     1              1
## 9               1           1              1     1              1
## 6               1           1              1     1              1
## 1               1           1              1     1              1
## 1               1           1              1     1              1
## 5               1           1              1     1              1
## 1               1           1              1     1              1
## 3               1           1              1     1              1
## 6               1           1              1     1              0
## 2               1           1              1     1              0
## 1               1           1              1     1              0
##                 0           0              0     0              9
##       kindergartenDistance postOfficeDistance pharmacyDistance
## 13813                    1                  1                1
## 2582                     1                  1                1
## 2537                     1                  1                1
## 479                      1                  1                1
## 340                      1                  1                1
## 100                      1                  1                1
## 47                       1                  1                1
## 7                        1                  1                1
## 89                       1                  1                1
## 118                      1                  1                1
## 2                        1                  1                1
## 3                        1                  1                1
## 5                        1                  1                1
## 1                        1                  1                1
## 27                       1                  1                1
## 10                       1                  1                1
## 4                        1                  1                1
## 1                        1                  1                1
## 24                       1                  1                1
## 3                        1                  1                1
## 2                        1                  1                1
## 2                        1                  1                1
## 9                        1                  1                0
## 6                        1                  0                1
## 1                        1                  0                1
## 1                        1                  0                0
## 5                        0                  1                1
## 1                        0                  1                1
## 3                        0                  0                0
## 6                        0                  0                0
## 2                        0                  0                0
## 1                        0                  0                0
##                         18                 20               22
##       restaurantDistance clinicDistance floorCount collegeDistance buildYear
## 13813                  1              1          1               1         1
## 2582                   1              1          1               1         1
## 2537                   1              1          1               1         0
## 479                    1              1          1               1         0
## 340                    1              1          1               0         1
## 100                    1              1          1               0         1
## 47                     1              1          1               0         0
## 7                      1              1          1               0         0
## 89                     1              1          0               1         1
## 118                    1              1          0               1         0
## 2                      1              1          0               0         1
## 3                      1              1          0               0         0
## 5                      1              0          1               1         1
## 1                      1              0          1               1         1
## 27                     1              0          1               0         1
## 10                     1              0          1               0         1
## 4                      1              0          1               0         0
## 1                      1              0          1               0         0
## 24                     0              1          1               1         1
## 3                      0              1          1               1         1
## 2                      0              1          1               1         0
## 2                      0              1          1               0         1
## 9                      1              1          1               1         1
## 6                      1              1          1               1         1
## 1                      1              0          1               0         1
## 1                      0              1          1               0         1
## 5                      1              1          1               1         1
## 1                      1              1          1               1         1
## 3                      0              0          1               0         1
## 6                      0              0          1               0         1
## 2                      0              0          1               0         1
## 1                      0              0          1               0         0
##                       44             61        212             557      3199
##       floor     
## 13813     1    0
## 2582      0    1
## 2537      1    1
## 479       0    2
## 340       1    1
## 100       0    2
## 47        1    2
## 7         0    3
## 89        0    2
## 118       0    3
## 2         0    3
## 3         0    4
## 5         1    1
## 1         0    2
## 27        1    2
## 10        0    3
## 4         1    3
## 1         0    4
## 24        1    1
## 3         0    2
## 2         1    2
## 2         0    3
## 9         1    1
## 6         1    1
## 1         1    3
## 1         1    4
## 5         1    1
## 1         0    2
## 3         1    6
## 6         1    7
## 2         0    8
## 1         1    8
##        3400 7542

1.2 Reguły walidacji danych

Tworzymy zestaw reguł, które definiują poprawność danych. Reguły te pozwalają wyłapać wartości błędne, np. ujemne ceny lub powierzchnie mieszkań. Dzięki temu możemy upewnić się, że dane spełniają podstawowe założenia logiczne.

reguly <- editset(c(
  "price>0",
  "squareMeters>0",
  "rooms>0",
  "floor>0",
  "floorCount>0"
  ))

Kolejno sprawdzamy naruszenie reguł. Wyniki pokazują, ile rekordów łamie zdefiniowane reguły, co może wskazywać na błędy w danych. summary(violatedEdits(reguly, mieszkania))

## No violations detected, 3612 checks evaluated to NA
## NULL

Następnie przeprowadzona została zamiana pustych ciągów lub niepoprawnych wartości na NA Dane mogły zawierać puste ciągi (” “,”“) lub nieprawidłowe wartości, które zostały zamienione na NA, aby łatwiej było je wykluczyć.

mieszkania[mieszkania == " "] <- NA

mieszkania[mieszkania == "  "] <- NA

mieszkania[mieszkania == ""] <- NA

mieszkania[localizeErrors(reguly,mieszkania)$adapt] <- NA

1.3 Imputacja brakujących danych

Uzupełnianie brakujących danych metodą hot-deck, która zastępuje brakujące wartości na podstawie podobnych rekordów. Jest to efektywna metoda w przypadku, gdy dane mają wiele braków, ale są wystarczająco kompletne do uzupełnienia na podstawie istniejących wzorców.

czyste_mieszkania <- hotdeck(mieszkania)

Po uzupełnieniu braków sprawdzamy podsumowanie danych, aby upewnić się, że proces przebiegł pomyślnie.

##       id                city               type            squareMeters   
##  Length:20231       Length:20231       Length:20231       Min.   : 25.00  
##  Class :character   Class :character   Class :character   1st Qu.: 43.00  
##  Mode  :character   Mode  :character   Mode  :character   Median : 53.00  
##                                                           Mean   : 57.42  
##                                                           3rd Qu.: 67.00  
##                                                           Max.   :150.00  
##      rooms           floor          floorCount       buildYear   
##  Min.   :1.000   Min.   : 1.000   Min.   : 1.000   Min.   :1850  
##  1st Qu.:2.000   1st Qu.: 2.000   1st Qu.: 3.000   1st Qu.:1970  
##  Median :3.000   Median : 3.000   Median : 4.000   Median :1996  
##  Mean   :2.636   Mean   : 3.355   Mean   : 5.425   Mean   :1987  
##  3rd Qu.:3.000   3rd Qu.: 4.000   3rd Qu.: 7.000   3rd Qu.:2016  
##  Max.   :6.000   Max.   :29.000   Max.   :29.000   Max.   :2024  
##     latitude       longitude     centreDistance      poiCount     
##  Min.   :49.98   Min.   :14.45   Min.   : 0.020   Min.   :  0.00  
##  1st Qu.:51.11   1st Qu.:18.52   1st Qu.: 2.120   1st Qu.:  7.00  
##  Median :52.19   Median :19.91   Median : 4.140   Median : 14.00  
##  Mean   :52.00   Mean   :19.46   Mean   : 4.444   Mean   : 20.55  
##  3rd Qu.:52.39   3rd Qu.:20.99   3rd Qu.: 6.250   3rd Qu.: 24.00  
##  Max.   :54.58   Max.   :23.21   Max.   :16.510   Max.   :212.00  
##  schoolDistance   clinicDistance   postOfficeDistance kindergartenDistance
##  Min.   :0.0050   Min.   :0.0040   Min.   :0.0020     Min.   :0.0010      
##  1st Qu.:0.1780   1st Qu.:0.3600   1st Qu.:0.2400     1st Qu.:0.1540      
##  Median :0.2890   Median :0.6810   Median :0.3950     Median :0.2580      
##  Mean   :0.4132   Mean   :0.9748   Mean   :0.5151     Mean   :0.3596      
##  3rd Qu.:0.4660   3rd Qu.:1.2615   3rd Qu.:0.6220     3rd Qu.:0.4110      
##  Max.   :4.9200   Max.   :4.9180   Max.   :4.9320     Max.   :4.7730      
##  restaurantDistance collegeDistance pharmacyDistance  ownership        
##  Min.   :0.0010     Min.   :0.008   Min.   :0.0010   Length:20231      
##  1st Qu.:0.1120     1st Qu.:0.572   1st Qu.:0.1410   Class :character  
##  Median :0.2260     Median :1.121   Median :0.2390   Mode  :character  
##  Mean   :0.3387     Mean   :1.450   Mean   :0.3521                     
##  3rd Qu.:0.4070     3rd Qu.:2.065   3rd Qu.:0.4060                     
##  Max.   :4.9280     Max.   :4.997   Max.   :4.9130                     
##  buildingMaterial    condition         hasParkingSpace     hasBalcony       
##  Length:20231       Length:20231       Length:20231       Length:20231      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  hasElevator        hasSecurity        hasStorageRoom         price        
##  Length:20231       Length:20231       Length:20231       Min.   : 194999  
##  Class :character   Class :character   Class :character   1st Qu.: 550000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 722000  
##                                                           Mean   : 826193  
##                                                           3rd Qu.: 970000  
##                                                           Max.   :2999000  
##    id_imp         city_imp        type_imp       squareMeters_imp
##  Mode :logical   Mode :logical   Mode :logical   Mode :logical   
##  FALSE:20231     FALSE:20231     FALSE:16107     FALSE:20231     
##                                  TRUE :4124                      
##                                                                  
##                                                                  
##                                                                  
##  rooms_imp       floor_imp       floorCount_imp  buildYear_imp  
##  Mode :logical   Mode :logical   Mode :logical   Mode :logical  
##  FALSE:20231     FALSE:16831     FALSE:20019     FALSE:17032    
##                  TRUE :3400      TRUE :212       TRUE :3199     
##                                                                 
##                                                                 
##                                                                 
##  latitude_imp    longitude_imp   centreDistance_imp poiCount_imp   
##  Mode :logical   Mode :logical   Mode :logical      Mode :logical  
##  FALSE:20231     FALSE:20231     FALSE:20231        FALSE:20231    
##                                                                    
##                                                                    
##                                                                    
##                                                                    
##  schoolDistance_imp clinicDistance_imp postOfficeDistance_imp
##  Mode :logical      Mode :logical      Mode :logical         
##  FALSE:20222        FALSE:20170        FALSE:20211           
##  TRUE :9            TRUE :61           TRUE :20              
##                                                              
##                                                              
##                                                              
##  kindergartenDistance_imp restaurantDistance_imp collegeDistance_imp
##  Mode :logical            Mode :logical          Mode :logical      
##  FALSE:20213              FALSE:20187            FALSE:19674        
##  TRUE :18                 TRUE :44               TRUE :557          
##                                                                     
##                                                                     
##                                                                     
##  pharmacyDistance_imp ownership_imp   buildingMaterial_imp condition_imp  
##  Mode :logical        Mode :logical   Mode :logical        Mode :logical  
##  FALSE:20209          FALSE:20231     FALSE:12012          FALSE:5390     
##  TRUE :22                             TRUE :8219           TRUE :14841    
##                                                                           
##                                                                           
##                                                                           
##  hasParkingSpace_imp hasBalcony_imp  hasElevator_imp hasSecurity_imp
##  Mode :logical       Mode :logical   Mode :logical   Mode :logical  
##  FALSE:20231         FALSE:20231     FALSE:19241     FALSE:20231    
##                                      TRUE :990                      
##                                                                     
##                                                                     
##                                                                     
##  hasStorageRoom_imp price_imp      
##  Mode :logical      Mode :logical  
##  FALSE:20231        FALSE:20231    
##                                    
##                                    
##                                    
## 

## 1.5 Transformacja danych Aby dostarczyć dodatkowych informacji wartych przeanalizowania, tworzymy nowe zmienne. Pomagają one w lepszym zrozumieniu danych i umożliwiają bardziej szczegółowe analizy. W tym celu tworzymy zmienną “pricePerSquareMeter” określającą cenę za metr kwadratowy. Jest to ważna metryka w analizie rynku nieruchomości, ponieważ pozwala na porównanie cen mieszkań niezależnie od ich wielkości.

czyste_mieszkania <- czyste_mieszkania %>% mutate(pricePerSquareMeter = price / squareMeters)

Dodatkowo, warto jet utworzyć kategorię wielkości mieszkań. W tym celu zastosujemy podział mieszkań na małe, średnie i duże na podstawie powierzchni użytkowej. Kategoryzacja ta ułatwi analizę porównawczą.

czyste_mieszkania <- czyste_mieszkania %>% mutate(
  sizeCategory = case_when(
    squareMeters < 40 ~ "Małe", # Mieszkania poniżej 40m2
    squareMeters >= 40 & squareMeters < 80 ~ "Średnie", # Mieszkania od 40m2 do 80m2
    squareMeters >= 80 ~ "Duże" # Mieszkania powyżej 80m2
  )
)

Dodatkowo, w celu ułatwienia przetwarzania danych, usuwamy kolumny z wartościami logicznymi. Zmiennych z tymi danymi i tak nie będziemy analizować w dalszej części projektu, więc usuwamy je w celem uzyskania większej przejrzystości oraz zminimalizowania wielkości danych.

czyste_mieszkania <- czyste_mieszkania[, !sapply(czyste_mieszkania, is.logical)]

2.Wizualizacja danych

Wizualizujemy ceny mieszkań na sprzedaż w Polsce w zależności od stanu mieszkania, całościowo oraz za metr kwadratowy

options(scipen=999)
ggplot(czyste_mieszkania, aes(x=price,fill=condition)) + geom_histogram(binwidth=100000) + labs(title="ceny mieszkań na sprzedaż w zależności od stanu mieszkania", x="cena", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-6, prefix = "", suffix = " MLN ZŁ", accuracy = 1)) 

ggplot(czyste_mieszkania, aes(x=pricePerSquareMeter,fill=condition)) + geom_histogram(binwidth=1000) + labs(title="ceny mieszkań za metr kwadratowy w zależności od stanu mieszkania", x="cena za metr kwadratowy", y="ilość") + theme_ipsum(base_family="sans") + scale_x_continuous(labels  = 
                       label_number(scale = 1e-3, prefix = "", suffix = " TYS ZŁ", accuracy = 1))

INTERPRETACJA: Większość mieszkań na sprzedaż, zarówno w standardzie “low”, jak i “premium”, znajduje się w przedziale cenowym poniżej 1 mln zł, przy czym mieszkania w niższym standardzie dominują w tym segmencie. Mieszkania typu premium są częściej spotykane w wyższych przedziałach cenowych (1-3 mln zł) i charakteryzują się bardziej zróżnicowanym rozkładem cen. W miarę wzrostu ceny proporcja mieszkań “premium” rośnie, co wskazuje, iż wyższy standard jest kluczowym czynnikiem wpływającym na cenę. Mieszkania o niższym standardzie są najczęściej wybierane w budżetowym segmencie rynku, podczas gdy droższe oferty reprezentowane są przez mieszkania o wyższym standardzie.

Dodatkowo, jak widać na drugiej wizualizacji, mieszkania typu „low” dominują w niższych przedziałach cen za metr kwadratowy, szczególnie w zakresie do 10 tys. zł/m². Analogicznie, mieszkania „premium” są reprezentowane w wyższych przedziałach cenowych, zwłaszcza powyżej 15 tys. zł/m². Wraz ze wzrostem ceny za metr kwadratowy, udział mieszkań “low” maleje, a “premium” rośnie, co wskazuje na wyraźne różnice w cenach między standardami.

Wizualizujemy ceny mieszkań na sprzedaż w Polsce w zależności od tego czy jest parking, całościowo oraz za metr kwadratowy

ggplot(czyste_mieszkania, aes(x=price,fill=hasParkingSpace)) + geom_histogram(binwidth=100000) + labs(title="ceny mieszkań w zależności od występowania parkingu", x="Cena", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-6, prefix = "", suffix = " MLN ZŁ", accuracy = 1)) 

ggplot(czyste_mieszkania, aes(x=pricePerSquareMeter,fill=hasParkingSpace)) + geom_histogram(binwidth=1000) + labs(title="ceny mieszkań za metr kwadratowy w zależności od występowania parkingu", x="Cena za metr kwadratowy", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-3, prefix = "", suffix = " TYS ZŁ", accuracy = 1)) 

INTERPRETACJA: Znacząca liczba mieszkań nie posiada miejsca parkingowego. Jednak mieszkania, które posiadają miejsce parkingowe stanowią ok 30% dostępnych na rynku mieszkań. Największa liczba mieszkań z parkingiem skupia się wokół ceny ok. 700 tys. zł, tak samo jak mieszkania bez parkingu. Ogólna analiza wskazuje na to, iż ceny mieszkań nie są silnie skorelowane z cechą posiadania miejsca parkingowego.

Wizualizujemy ceny mieszkań na sprzedaż w Polsce w zależności od rodzaju zabudowania, całościowo oraz za metr kwadratowy

ggplot(czyste_mieszkania, aes(x=price,fill=type)) + geom_histogram(binwidth=100000) + labs(title="ceny mieszkań na sprzedaż w zależności od rodzaju zabudowy ", x="cena", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-6, prefix = "", suffix = " MLN ZŁ", accuracy = 1)) 

ggplot(czyste_mieszkania, aes(x=pricePerSquareMeter,fill=type)) + geom_histogram(binwidth=500) + labs(title="ceny mieszkań na sprzedaż za metr kwadratowy w zależności od rodzaju zabudowy", x="cena za metr kwadratowy", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-3, prefix = "", suffix = " TYS ZŁ", accuracy = 1)) 

INTERPRETACJA: Największy udział nieruchomości mieszkań dostępnych na rynku stanowią mieszkania typu “apartmentBuilding”, czyli mieszkania znajdujące się w typowych apartamentowcach, następnie mieszkania znajdujące się w blokach mieszkalnych, a wchodzące w skład kamienice tworzą najmniejszą część. Jak można zauważyć, najwięcej obserwacji mieści się w przedziale 0,6 - 0,75 mln zł. Ceny na metr kwadratowy rozkładają się równomiernie dla mieszkań w kamienicach, co znaczy, że cena za metr kawdratowy w tego przypadku mieszkaniach różni się znacząco, niezależnie od typu tego mieszkania. W apartamentowcach natomiast, najwięcej mieszkań charkateryzuje się ceną ok. 14 tys. zł za m2, tak samo jak w przypadku mieszkania w bloku.

Wizualizujemy ceny mieszkań na sprzedaż w Polsce w zależności od rodzaju materiałów budowalnych, całościowo oraz za metr kwadratowy

ggplot(czyste_mieszkania, aes(x=price,fill=buildingMaterial)) + geom_histogram(binwidth=100000) + labs(title="ceny mieszkań na sprzedaż w zależności od materiałów budowlanych", x="cena", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-6, prefix = "", suffix = " MLN ZŁ", accuracy = 1)) 

ggplot(czyste_mieszkania, aes(x=pricePerSquareMeter,fill=buildingMaterial)) + geom_histogram(binwidth=500) + labs(title="ceny mieszkań na sprzedaż za metr kwadratowy w zależności od materiałów budowlanych", x="cena za metr kwadratowy", y="Liczba mieszkań") + theme_ipsum(base_family="sans") +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-3, prefix = "", suffix = " TYS ZŁ", accuracy = 1)) 

INTERPRETACJA: Wykres reprezentuje wyraźnie, iż mieszkania w budynkach zbudowanych z cegły budowlanej stanowią decydującą większość, a te z płyty betonowej mniejszość. Udział obu typów mieszkań wzrasta wraz ceną do ok. 700 tys. zł, po czym ich udział maleje wraz z wzrostem ceny. Podobnie w przypadku ceny za m2, jednak można zauważyć, że ceny za metr kwadratowy w mieszkniach w budynkach z płty budowlanej są bardziej stabilne, jako że rozkładają się bardziej równomiernie. Droższe mieszkania znajdują się w znacznej większości w budynkach z cegły budowlanej.

Wizualizujemy rozkład cen mieszkań na sprzedaż w Polsce w zależności od wielkości mieszkania, całościowo oraz za metr kwadratowy

ggplot(czyste_mieszkania, aes(x = price, fill = sizeCategory)) +
geom_density(alpha = 0.5) +
labs(
title = "Rozkład cen mieszkań według wielkości lokalu",
x = "Cena" ,
y = "Liczba",
fill = "Wielkość"
) +
theme_minimal() +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-6, prefix = "", suffix = " MLN ZŁ", accuracy = 1)) 

ggplot(czyste_mieszkania, aes(x = pricePerSquareMeter, fill = sizeCategory)) +
  geom_density(alpha = 0.5) +
  labs(
    title = "Rozkład cen mieszkań za metr kwadratowy według wielkości lokalu",
    x = "Cena za metr kwadratowy" ,
    y = "Liczba",
    fill = "Wielkość"
  ) +
  theme_minimal() +  scale_x_continuous(labels  = 
                       label_number(scale = 1e-3, prefix = "", suffix = " TYS ZŁ", accuracy = 1)) 

INTERPRETACJA: Cena całościowa za mieszkanie różni się znacząco w zależności od wielkości mieszkania. Najwięcej na rynku jest mieszkań małych w cenie ok. 0,5 mln zł., następnie średnich za ok 0,6 mln zł. Dużych mieszkań jest najwięcej w przedziale cenowym od ok. 0,8 mln zł do 1,6 mln zł. Mieszkania o wyższej cenie, np. pow. 1,5 mln zł to głównie mieszkania o dużej wielkości. Te mniejsze, są analogicznie tańsze.

Na rynku nieruchomości dominują dwa typy mieszkań: średnie i małe, z czego te średnie, wraz z dużymi skupiają się wokół ceny ok. 14 tys. zł za m2. Jednak te małe oscylują głównie wokól ceny 18 tys. zł za m2. Wnioskując, małe mieszkania pow. 16 tys. zł są droższe za m2 od tych większych wielkościowo. Duże mieszkania są najmniej stabilne, jako że cena za m2 w ich przypadku rozkłada się najbardziej równomiernie, np. jest tyle samo dużych mieszkań za 12 tys, zł/m2, co tych za 20 tys. zł/m2.

Wizualizujemy rozkład cen mieszkań na sprzedaż w Polsce w zależności od miasta, całościowo oraz za metr kwadratowy

miasta <- czyste_mieszkania %>%
  mutate(city_change = case_when(city == "lodz"~ "Łódź",
                                 city == "bialystok" ~ "Białystok",
                                 city == "bydgoszcz" ~ "Bydgoszcz",
                                 city == "czestochowa" ~ "Częstochowa",
                                 city == "gdansk" ~ "Gdańsk",
                                 city == "gdynia" ~ "Gdynia",
                                 city == "katowice" ~ "Katowice",
                                 city == "krakow" ~ "Kraków",
                                 city == "lublin" ~ "Lublin",
                                 city == "poznan" ~ "Poznań",
                                 city == "radom" ~ "Radom",
                                 city == "rzeszow" ~ "Rzeszów",
                                 city == "szczecin" ~ "Szczecin",
                                 city == "warszawa" ~ "Warszawa",
                                 city == "wroclaw" ~ "Wrocław"))

ggplot(miasta, aes(x = city_change, y = price)) +
geom_boxplot(fill = "pink", color = "blue") +
labs(
title = "Cena mieszkań według miasta",
x = "miasto" ,
y = "cena"
) +
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplot(miasta, aes(x = city_change, y = pricePerSquareMeter)) +
  geom_boxplot(fill = "pink", color = "blue") +
  labs(
    title = "Cena mieszkań według miasta",
    x = "miasto" ,
    y = "cena za metr kwadratowy"
  ) +
  theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

INTERPRETACJA: Najdroższe mieszkania zarówno pod względem całkowitej ceny za nieruchomość, jak i ceny za metr kwadratowy to: 1. Warszawa, 2. Kraków, 3. Gdańsk, 4. Gdynia. Większość cen mieszkań w tych miastach zaczyna się od ok. 600 tys zł., a konczy na ponad 1 mln zł. Charakteryzują się one również największymi obserwacjami odstającymi, szczególnie górnymi, gdzie ceny mieszkań potrafią sięgać nawet do 3 mln zł. Najtańsze mieszkania występują nastomiast w Częstochowie i Radomiu. Miasta charakteryzujące się najmniejszą liczbą obserwacji odstających to BIałystok, Bydgoszcz, Lublin, Radom i Rzeszów.

Wizualizujemy cenę za m2 w zależności od liczby pokoi INTERPRETACJA: Mieszkania z jednym pokojem posiadają największą cenę za m2 sięgając nawet do ponad 20 tys/m2 (co oznacza,że 25% tzw. kawalerek może kosztować więcej niż 20 tys/m2), kolejno są mieszkania 6-pokojowe odnaczające się górnym kwartylem bliskim 18 tys. zł/m2. Najtańsze są mieszkania z 3-ma lub 5-ma pokojami, gdzie 25% mieszkań w zestawieniu ma cenę za metr kwadratowy niższą niż ok. 8 tys. zł/m2.

Powyżej przedstawiona jest macierz korelacji. Najsilniej skorelowane są ze sobą odległości od poszczególnych miejsc (np. szkoła z restauracją, czy apteką). Może być to spowodowane tym, że zwykle tego typu placówki są w centrum i znajdują się blisko siebie. Silnie skorelowane są ze sobą również ilość pokoi i ilość metrów kwadratowych. Oznacza to, że wraz ze wzrostem metrażu, rośnie ilość pokoi ceteris paribus, co jest dość logiczną zależnością. Podobna, nieco słabsza zależność zachodzi pomiędzy ilością pokoi, a ceną oraz ceną, a metrażem.

3. Analiza opisowa

Statystki opisowe dla zmiennej cena

mean(czyste_mieszkania$price)
## [1] 826193.1
    median(czyste_mieszkania$price)
## [1] 722000
    sd(czyste_mieszkania$price) #standard deviation
## [1] 432677.8
    var(czyste_mieszkania$price) #variance
## [1] 187210059317
    coeff_var<-sd(czyste_mieszkania$price)/mean(czyste_mieszkania$price) #coefficient of variability %
    coeff_var
## [1] 0.5237005
    IQR(czyste_mieszkania$price)# difference between quartiles =Q3-Q1 
## [1] 420000
    sx<-IQR(czyste_mieszkania$price)/2  #interquartile deviation
    coeff_varx<-sx/median(czyste_mieszkania$price) #IQR coefficient of variability %
    coeff_varx
## [1] 0.2908587
    min(czyste_mieszkania$price)
## [1] 194999
    max(czyste_mieszkania$price)
## [1] 2999000
    quantile(czyste_mieszkania$price,probs=c(0,0.1,0.25,0.5,0.75,0.95,1),na.rm=TRUE)
##      0%     10%     25%     50%     75%     95%    100% 
##  194999  399000  550000  722000  970000 1715000 2999000

INTERPRETACJA:

  1. Średnia cena mieszkania (mean) = 826 193,1 zł – przeciętna cena mieszkania w zbiorze danych

  2. Mediana (median) = 722 000 zł – połowa mieszkań ma cenę niższą, a połowa wyższą niż 722 000. Ponieważ mediana jest niższa od średniej, sugeruje to prawdopodobną prawoskośność rozkładu (kilka bardzo drogich mieszkań podnosi średnią).

  3. Odchylenie standardowe (sd) = 432 677,8 – duża wartość wskazuje na znaczne zróżnicowanie cen, oznacza to, że przeciętnie każda cena mieszkania różni się od średniej o ok. 432 tys. zł

  4. Wariancja (var) = 187 210 059 317 – wysoka wartość, ponownie wskazująca na duże zróżnicowanie cen na rynku mieszkaniowym

  5. Współczynnik zmienności (coeff_var) = 0,5237 (52,37%) – oznacza, że rozrzut cen w stosunku do średniej jest stosunkowo duży, bo odchylenie standardowe stanowi ponad połowę wartości średniej, co oznacza duże rozproszenie cen w stosunku do przeciętnej wartości

  6. Rozstęp międzykwartylowy (IQR) = 420 000 – różnica między ceną 75. a 25. percentyla, czyli zakres cen środkowych 50% mieszkań wynosi 420 000 zł

  7. IQR-współczynnik zmienności (coeff_varx) = 0,2909 (29,09%) – bardziej odporna miara zmienności, sugeruje umiarkowane zróżnicowanie cen w zakresie międzykwartylowym

  8. Cena minimalna (min) = 194 999 zł – najtańsze mieszkanie w naszym zbiorze danych

  9. Cena maksymalna (max) = 2 999 000 zł – najdroższe mieszkanie w naszym zbiorze danych

  10. Kwantyle: • 10% mieszkań kosztuje mniej niż 399 000 zł, • 25% mieszkań kosztuje mniej niż 550 000 zł, • 50% mieszkań kosztuje mniej niż 722 000 zł (mediana), • 75% mieszkań kosztuje mniej niż 970 000 zł, • 95% mieszkań kosztuje mniej niż 1 715 000 zł, • 100% - najdroższe mieszkanie kosztuje 2 999 000 zł.

  11. Wnioski: • Rozkład cen mieszkań jest prawdopodobnie prawoskośny – kilka bardzo drogich mieszkań podnosi średnią powyżej mediany. • Istnieje duże zróżnicowanie cen mieszkań, co widać po wysokim odchyleniu standardowym i współczynniku zmienności. • Środkowe 50% mieszkań kosztuje od 550 000 do 970 000, co daje dobrą miarę typowego przedziału cen. • Najtańsze mieszkania zaczynają się od ok. 195 000, ale ceny mogą sięgać prawie 3 milionów, co sugeruje duży rozstrzał w zależności od standardu, lokalizacji i innych czynników.

Statystyki opisowe dla zmiennej cena za metr kwadratowy

mean(czyste_mieszkania$pricePerSquareMeter)
## [1] 14531.21
median(czyste_mieszkania$pricePerSquareMeter)
## [1] 14161.29
sd(czyste_mieszkania$pricePerSquareMeter) #standard deviation
## [1] 5167.517
var(czyste_mieszkania$pricePerSquareMeter) #variance
## [1] 26703237
coeff_var<-sd(czyste_mieszkania$pricePerSquareMeter)/mean(czyste_mieszkania$pricePerSquareMeter) #coefficient of variability %
coeff_var
## [1] 0.3556151
IQR(czyste_mieszkania$pricePerSquareMeter)# difference between quartiles =Q3-Q1 
## [1] 7286.462
sx<-IQR(czyste_mieszkania$pricePerSquareMeter)/2  #interquartile deviation
coeff_varx<-sx/median(czyste_mieszkania$pricePerSquareMeter) #IQR coefficient of variability %
coeff_varx
## [1] 0.2572669
min(czyste_mieszkania$pricePerSquareMeter)
## [1] 4359.862
max(czyste_mieszkania$pricePerSquareMeter)
## [1] 30732.48
quantile(czyste_mieszkania$pricePerSquareMeter,probs=c(0,0.1,0.25,0.5,0.75,0.95,1),na.rm=TRUE)
##        0%       10%       25%       50%       75%       95%      100% 
##  4359.862  7906.182 10570.681 14161.290 17857.143 23966.092 30732.484

INTERPRETACJA:

  1. Średnia cena za m2 = 14 531,21 zł – przeciętny koszt metra kwadratowego w analizowanych mieszkaniach

  2. Mediana = 14 161,29 zł – połowa mieszkań ma cenę za m2 niższą, a połowa wyższą. Średnia jest nieznacznie wyższa od mediany, co może wskazywać na lekko prawoskośny rozkład ( ponownie kilka drogich mieszkań zawyża średnią)

  3. Odchylenie standardowe = 5 167,52 zł – wysoka wartość, oznaczająca duże zróżnicowanie cen za metr kwadratowy

  4. Wariancja = 26 703 237 – bardzo wysoka wartość, bardzo duże odchylenie od wartości średniej

  5. Współczynnik zmienności = 0,3556 (35,56%) – rozrzut cen w stosunku do średniej jest spory, ale mniejszy niż dla całkowitej ceny mieszkań (gdzie wynosił 52,37%)

  6. Rozstęp międzykwartylowy (IQR) = 7 286,46 zł – różnica między 75. a 25. percentylem, czyli zakres cen dla środkowych 50% mieszkań

  7. IQR-współczynnik zmienności = 0,2573 (25,73%) – umiarkowana zmienność cen w zakresie międzykwartylowym.

  8. Cena minimalna = 4 359,86 zł/m2 – najtańsze mieszkanie w przeliczeniu na metr kwadratowy.

  9. Cena maksymaln = 30 732,48 zł/m2 – najwyższa cena za m2.

  10. Kwantyle: • 10% mieszkań ma cenę za m2 poniżej 7 906,18 zł. • 25% mieszkań ma cenę za m2 poniżej 10 570,68 zł. • 50% mieszkań (mediana): 14 161,29 zł/m2. • 75% mieszkań kosztuje mniej niż 17 857,14 zł/m2. • 95% mieszkań kosztuje mniej niż 23 966,09 zł/m2. • Najdroższe mieszkania osiągają ceny do 30 732,48 zł/m2.

  11. Wnioski: • Ceny za metr kwadratowy są mocno zróżnicowane – różnice między tańszymi a droższymi mieszkaniami są duże, tak samo jak w przypadku ogólnych cen za mieszkanie. • Środkowe 50% mieszkań mieści się w zakresie od 10 570,68 zł do 17 857,14 zł/m2, co daje dobry obraz typowego przedziału cen. • Rozkład cen jest prawdopodobnie asymetryczny (lekko prawoskośny), ponieważ średnia jest wyższa od mediany – oznacza to, że istnieje grupa bardzo drogich mieszkań zawyżających średnią. • Dolne 10% mieszkań ma cenę poniżej 7 906 zł/m2, co może sugerować starsze budownictwo, gorszą lokalizację lub mieszkania wymagające remontu. • Górne 5% mieszkań kosztuje ponad 23 966 zł/m2, co wskazuje na mieszkania premium, np. w bardzo atrakcyjnych lokalizacjach.

raport_ <-
       list("Min"=  min(czyste_mieszkania$price),
            "Max"=  max(czyste_mieszkania$price),
            "Kwartyl dolny"=  quantile(czyste_mieszkania$price,0.25),
            "Mediana"=  round(median(czyste_mieszkania$price),2),
            "Kwartyl górny"=  quantile(czyste_mieszkania$price,0.75),
            "Średnia"=  round(mean(czyste_mieszkania$price),2),
            "Odch. std."=  round(sd(czyste_mieszkania$price),2),
            "IQR"=  round(IQR(czyste_mieszkania$price),2),
            "Odchylenie ćwiartkowe"=round(IQR(czyste_mieszkania$price)/2,2),
            "Odch. std. w %"=round((sd(czyste_mieszkania$price)/mean(czyste_mieszkania$price)),2),
            "Odch. ćwiartkowe w %"=round((IQR(czyste_mieszkania$price)/median(czyste_mieszkania$price)),2),
            "Skośność"=round(skewness(czyste_mieszkania$price),2),
            "Kurtoza"=round(kurtosis(czyste_mieszkania$price),2)
            )

raport <- as.data.frame(raport_)
raport
##        Min     Max Kwartyl.dolny Mediana Kwartyl.górny  Średnia Odch..std.
## 25% 194999 2999000        550000  722000        970000 826193.1   432677.8
##        IQR Odchylenie.ćwiartkowe Odch..std..w.. Odch..ćwiartkowe.w.. Skośność
## 25% 420000                210000           0.52                 0.58     1.74
##     Kurtoza
## 25%    6.99
#table<-summary_table(czyste_mieszkania, summaries = raport, by = c("city"))

INTERPRETACJA: Powyższy raport pokazuje wcześniej obliczone statystyki opisowe, ale w bardziej przystępny dla oka sposób. Dodatkowo, obliczone zostało:

  1. Odchylenie ćwiartkowe (IQR/2) = 210 000 zł – średnia odległość kwartylowa od mediany
  2. Odchylenie ćwiartkowe w % (IQR/Median) = 0,58 (58%) – pokazuje względną zmienność w środkowym zakresie cen
  3. Skośność (skewness) = 1,74 – wskazuje na prawostronną skośność, czyli długi ogon w stronę wyższych cen (nasza hipoteza się potwierdziła - kilka bardzo drogich mieszkań zawyża średnią)
  4. Kurtoza (kurtosis) = 6,99 – wskazuje na rozkład skoncentrowany wokół średniej, co oznacza, że dane mają bardziej spiczasty rozkład niż rozkład normalny i występuje więcej wartości odstających (droższe mieszkania)

Rozkład cen za metr kwadratowy według wielkości mieszkania

czyste_mieszkania %>%
  select(pricePerSquareMeter,sizeCategory) %>%
  tbl_summary(
    by=sizeCategory,
    type = all_continuous() ~ "continuous2",
    statistic = all_continuous() ~ c(
      "{N_nonmiss}","{mean}","{sd}",
      "{median} ({p25}, {p75})",
      "{min}, {max}"),
    missing = "no",
    label = pricePerSquareMeter ~ "Cena za metr kwadratowy") %>%
  modify_header(label ~ "**Zmienna**") %>%
  modify_caption("**Tabela 1. Rozkład cen za metr kwadratowy wg wielkości mieszkania**") %>%
  bold_labels() %>% 
  add_p(pvalue_fun = ~ style_pvalue(.x, digits = 2))
Tabela 1. Rozkład cen za metr kwadratowy wg wielkości mieszkania
Zmienna Duże
N = 2,611
Małe
N = 3,836
Średnie
N = 13,784
p-value1
Cena za metr kwadratowy


<0.001
    N Non-missing 2,611 3,836 13,784
    Mean 14,802 16,201 14,015
    SD 5,805 5,247 4,909
    Median (Q1, Q3) 14,327 (10,158, 18,962) 16,604 (12,500, 19,656) 13,611 (10,369, 16,915)
    Min, Max 4,420, 30,625 5,181, 30,333 4,360, 30,732
1 Kruskal-Wallis rank sum test

INTERPRETACJA:

Małe mieszkania mają najwyższe ceny za m2 • Średnia cena to 16 201 zł/m2, a mediana 16 604 zł/m2, co oznacza, że połowa mieszkań kosztuje więcej niż 16,6 tys. zł/m2. • Najwyższy kwartyl (Q3) pokazuje, że 25% najdroższych małych mieszkań ma cenę powyżej 19 656 zł/m2. • Maksymalna cena to 30 333 zł/m2, co sugeruje istnienie bardzo drogich apartamentów w tej kategorii.

Średnie mieszkania mają najniższą cenę za m2 • Średnia wynosi 14 015 zł/m2, a mediana 13 611 zł/m2, czyli mniej niż w innych grupach. • Największa grupa mieszkań (N = 13 784) – oznacza, że to dominujący segment na rynku. • Duże zróżnicowanie cen: ceny wahają się od 4 360 do 30 732 zł/m2, ale Q3 to 16 915 zł/m2, więc większość mieszkań nie osiąga maksymalnych wartości.

Duże mieszkania są droższe niż średnie, ale tańsze niż małe • Średnia cena to 14 802 zł/m2, a mediana 14 327 zł/m2. • Większa różnorodność cen (SD = 5 805) niż w przypadku średnich mieszkań, co sugeruje większe różnice w standardzie lub lokalizacji. • Wysoka maksymalna cena 30 625 zł/m2, co oznacza, że luksusowe apartamenty w tej kategorii mocno zawyżają ceny. ________________________________________ PODUSUMOWANIE:

  • Najmniejsze mieszkania są najdroższe za metr kwadratowy – popyt na małe nieruchomości jest wyższy, szczególnie w dużych miastach.
  • Średnie mieszkania są najbardziej przystępne cenowo za m2 – większa podaż, niższe zainteresowanie inwestorów.
  • Duże mieszkania mają ceny pomiędzy małymi a średnimi, ale duże rozproszenie sugeruje, że standard i lokalizacja odgrywają istotną rolę.
  • Różnice są istotne statystycznie (p-value < 0.001) – wielkość mieszkania faktycznie wpływa na cenę za m2.

4. Wnioskowanie statystyczne

Dla ułatwienia analizy rozpoczynamy od zamiany zmiennych z opcjami “no” i “yes” na zmienne binarne

testy_mieszkania <- czyste_mieszkania %>%
  mutate(across(where(~ all(. %in% c("no", "yes"))), ~ ifelse(. == "yes", 1, 0)))

1. Test t-Studenta - porównanie cen mieszkań w Warszawie i Gdańsku

Hipoteza zerowa (H0): Średnie ceny mieszkań w Gdańsku i Warszawie są równe. Hipoteza alternatywna (HA): Średnie ceny mieszkań w Gdańsku i Warszawie różnią się.

Przeprowadzony test t-Studenta dla niezależnych prób wykazał istotną statystycznie różnicę w średnich cenach mieszkań między Warszawą a Gdańskiem (t = -16.015, df = 3607.3, p < 2.2e-16). Średnia cena mieszkania w Gdańsku wynosiła 889 465,9 zł, natomiast w Warszawie była wyższa i wynosiła 1 057 419,3 zł. Przedział ufności dla różnicy średnich wynosił (-188 514,8 zł; -147 391,9 zł), co oznacza, że ceny w Warszawie były średnio o 147-188 tys. zł wyższe. Otrzymane wyniki pozwalają odrzucić hipotezę zerową i potwierdzają, że różnica cen mieszkań między tymi miastami nie jest przypadkowa, lecz statystycznie istotna.

2. Analiza wariacji Welche’a

Analiza wariancji Welch’a wykazała istotne statystycznie różnice w średnich cenach za metr kwadratowy mieszkań w zależności od liczby pokoi (F(5, 1151.61) = 91.69, p < 2.53e-81). Wartość wskaźnika siły efektu sugeruje umiarkowany wpływ liczby pokoi na cenę za m². Średnia cena za m² systematycznie maleje wraz ze wzrostem liczby pokoi – najwyższą wartość odnotowano dla kawalerek (16 934,25 PLN/m²), a najniższą dla mieszkań pięciopokojowych (13 458,16 PLN/m²). Wyniki testu post-hoc Gamesa-Howella potwierdzają istotne różnice między większością porównywanych grup, co wskazuje, że wielkość mieszkania ma istotny wpływ na jego cenę za metr kwadratowy. Wnioski te są również widoczne na wykresie, gdzie rozkłady cen dla poszczególnych kategorii różnią się zarówno pod względem mediany, jak i rozrzutu wartości.

3. Test chi-kwadrat - zależność między rodzajem budownictwa a posiadaniem parkingu

## 
##  Pearson's Chi-squared test
## 
## data:  tablica_kontyngencji
## X-squared = 627.07, df = 2, p-value < 2.2e-16
## Warning: The `scale_name` argument of `continuous_scale()` is deprecated as of ggplot2
## 3.5.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `trans` argument of `continuous_scale()` is deprecated as of ggplot2 3.5.0.
## ℹ Please use the `transform` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `unite()` instead.
## ℹ The deprecated feature was likely used in the ggmosaic package.
##   Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Przeprowadzony test chi-kwadrat badał zależność między rodzajem budownictwa a dostępnością miejsca parkingowego. Wartość statystyki chi-kwadrat wynosi 652,94 przy 2 stopniach swobody (df = 2), a bardzo niski poziom istotności (p < 2,2e-16) wskazuje, że istnieje silna zależność między tymi zmiennymi. Oznacza to, że dostępność parkingu nie jest losowo rozłożona między różnymi typami budownictwa – pewne rodzaje zabudowy mają istotnie wyższe lub niższe prawdopodobieństwo posiadania miejsc parkingowych.

4. Test korelacji - zależność między ceną a występowaniem windy

## 
##  Pearson's product-moment correlation
## 
## data:  testy_mieszkania$price and testy_mieszkania$hasElevator
## t = 27.534, df = 20229, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.1767416 0.2033060
## sample estimates:
##       cor 
## 0.1900586

Przeprowadzony test korelacji Pearsona pokazuje istotną statystycznie dodatnią korelację między ceną mieszkania a obecnością windy (r ≈ 0.194, p < 2.2e-16). Oznacza to, że mieszkania w budynkach z windą mają tendencję do wyższych cen w porównaniu do tych bez windy.

95% przedział ufności dla współczynnika korelacji wynosi (0.180, 0.207), co potwierdza, że zależność ta nie jest przypadkowa. Mimo to, korelacja nie jest bardzo silna (wartość r bliska 0.2), co sugeruje, że inne czynniki również istotnie wpływają na cenę mieszkania.

Wizualizacja w postaci wykresu pudełkowego pokazuje różnice w medianach cen dla obu grup, co potwierdza wynik testu korelacji ## 5. Różnice cenowe (za metr kwadratowy) między kategorią wielkości

Analiza wariancji (ANOVA Welcha) wykazała istotne różnice w średnich cenach za m² między kategoriami mieszkań (F(2, 5400.09) = 272.18, p < 2.39e-113, ω² = 0.09). Najwyższą cenę odnotowano dla małych mieszkań (16 201,32 PLN/m²), a najniższą dla średnich (14 015,22 PLN/m²). Test Gamesa-Howella potwierdził istotność tych różnic. Wyższa cena małych mieszkań może wynikać z ich popularności w centrach miast, a średnie oferują najlepszy stosunek ceny do powierzchni. Wykres wiolinowy ilustruje te zależności, pokazując mediany i zakres cen.

Podsumowanie

Projekt dotyczył analizy rynku mieszkaniowego w Polsce na podstawie danych z maja 2024 roku. Stwierdzono, że średnia cena mieszkania wyniosła 826 193,1 zł, a mediana 722 000 zł, przy czym cena za metr kwadratowy wahała się od 4 359,86 zł/m² do 30 732,48 zł/m², ze średnią 14 531,21 zł/m². Najdroższe mieszkania znajdują się w Warszawie, Krakowie i Trójmieście, natomiast najtańsze w Radomiu i Częstochowie. Wielkość mieszkania istotnie wpływa na cenę za m² – najmniejsze lokale są najdroższe, a obecność windy koreluje dodatnio z ceną mieszkań. Stwierdzono również silną zależność między typem budownictwa a dostępnością miejsc parkingowych. Test t-Studenta wykazał istotną różnicę cen mieszkań między Warszawą a Gdańskiem, a analiza ANOVA potwierdziła wpływ liczby pokoi na cenę za m². Rynek nieruchomości w Polsce cechuje duże zróżnicowanie cenowe, zależne od lokalizacji, standardu wykończenia, wielkości mieszkań oraz dodatkowych czynników.