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:
Średnia cena mieszkania (mean) = 826 193,1 zł – przeciętna cena mieszkania w zbiorze danych
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ą).
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ł
Wariancja (var) = 187 210 059 317 – wysoka wartość, ponownie wskazująca na duże zróżnicowanie cen na rynku mieszkaniowym
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
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ł
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
Cena minimalna (min) = 194 999 zł – najtańsze mieszkanie w naszym zbiorze danych
Cena maksymalna (max) = 2 999 000 zł – najdroższe mieszkanie w naszym zbiorze danych
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ł.
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:
Średnia cena za m2 = 14 531,21 zł – przeciętny koszt metra kwadratowego w analizowanych mieszkaniach
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ą)
Odchylenie standardowe = 5 167,52 zł – wysoka wartość, oznaczająca duże zróżnicowanie cen za metr kwadratowy
Wariancja = 26 703 237 – bardzo wysoka wartość, bardzo duże odchylenie od wartości średniej
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%)
Rozstęp międzykwartylowy (IQR) = 7 286,46 zł – różnica między 75. a 25. percentylem, czyli zakres cen dla środkowych 50% mieszkań
IQR-współczynnik zmienności = 0,2573 (25,73%) – umiarkowana zmienność cen w zakresie międzykwartylowym.
Cena minimalna = 4 359,86 zł/m2 – najtańsze mieszkanie w przeliczeniu na metr kwadratowy.
Cena maksymaln = 30 732,48 zł/m2 – najwyższa cena za m2.
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.
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:
- Odchylenie ćwiartkowe (IQR/2) = 210 000 zł – średnia odległość kwartylowa od mediany
- Odchylenie ćwiartkowe w % (IQR/Median) = 0,58 (58%) – pokazuje względną zmienność w środkowym zakresie cen
- 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ą)
- 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))
| 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.