agencja <- read.csv("agencja_nieruchomosci.csv")
library(outliers)
library(DMwR)
## Ładowanie wymaganego pakietu: lattice
## Ładowanie wymaganego pakietu: grid
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(magrittr)
library(ggplot2)
library(scales)
library(ggstatsplot)
## You can cite this package as:
## Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
## Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
library(ggpubr)
library(summarytools)
library(knitr)
library(qwraps2)
##
## Dołączanie pakietu: 'qwraps2'
## Następujące obiekty zostały zakryte z 'package:ggpubr':
##
## mean_ci, mean_sd, median_iqr
## Następujący obiekt został zakryty z 'package:ggplot2':
##
## mean_se
library(arsenal)
##
## Dołączanie pakietu: 'arsenal'
## Następujące obiekty zostały zakryte z 'package:qwraps2':
##
## gmean, gsd
## Następujący obiekt został zakryty z 'package:scales':
##
## ordinal
## Następujący obiekt został zakryty z 'package:magrittr':
##
## set_attr
library(e1071)
library(haven)
library(papeR)
## Ładowanie wymaganego pakietu: car
## Ładowanie wymaganego pakietu: carData
##
## Dołączanie pakietu: 'car'
## Następujący obiekt został zakryty z 'package:qwraps2':
##
## logit
## Ładowanie wymaganego pakietu: xtable
##
## Dołączanie pakietu: 'xtable'
## Następujące obiekty zostały zakryte z 'package:summarytools':
##
## label, label<-
## Registered S3 methods overwritten by 'papeR':
## method from
## Anova.lme car
## labels.data.frame arsenal
##
## Dołączanie pakietu: 'papeR'
## Następujący obiekt został zakryty z 'package:arsenal':
##
## labels<-
## Następujący obiekt został zakryty z 'package:utils':
##
## toLatex
library(dplyr)
##
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:papeR':
##
## summarise, summarize
## Następujący obiekt został zakryty z 'package:car':
##
## recode
## Następujące obiekty zostały zakryte z 'package:stats':
##
## filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ✔ readr 2.1.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ readr::col_factor() masks scales::col_factor()
## ✖ purrr::discard() masks scales::discard()
## ✖ tidyr::extract() masks magrittr::extract()
## ✖ dplyr::filter() masks stats::filter()
## ✖ lubridate::is.Date() masks arsenal::is.Date()
## ✖ dplyr::lag() masks stats::lag()
## ✖ qwraps2::mean_se() masks ggplot2::mean_se()
## ✖ dplyr::recode() masks car::recode()
## ✖ arsenal::set_attr() masks magrittr::set_attr()
## ✖ purrr::set_names() masks magrittr::set_names()
## ✖ purrr::some() masks car::some()
## ✖ dplyr::summarise() masks papeR::summarise()
## ✖ dplyr::summarize() masks papeR::summarize()
## ✖ tibble::view() masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(kableExtra)
##
## Dołączanie pakietu: 'kableExtra'
##
## Następujący obiekt został zakryty z 'package:dplyr':
##
## group_rows
library(classInt)
library(pastecs)
##
## Dołączanie pakietu: 'pastecs'
##
## Następujący obiekt został zakryty z 'package:tidyr':
##
## extract
##
## Następujące obiekty zostały zakryte z 'package:dplyr':
##
## first, last
##
## Następujący obiekt został zakryty z 'package:magrittr':
##
## extract
library(desctable)
## Ładowanie wymaganego pakietu: pander
##
## Dołączanie pakietu: 'desctable'
##
## Następujący obiekt został zakryty z 'package:scales':
##
## percent
##
## Następujące obiekty zostały zakryte z 'package:stats':
##
## chisq.test, fisher.test, IQR
library(frequency)
## Ładowanie wymaganego pakietu: rmarkdown
## Ładowanie wymaganego pakietu: DT
##
## Dołączanie pakietu: 'DT'
##
## Następujący obiekt został zakryty z 'package:desctable':
##
## datatable
##
##
## Dołączanie pakietu: 'frequency'
##
## Następujący obiekt został zakryty z 'package:summarytools':
##
## freq
library(corrplot)
## corrplot 0.92 loaded
library(ggpubr)
library(psych)
##
## Dołączanie pakietu: 'psych'
##
## Następujący obiekt został zakryty z 'package:car':
##
## logit
##
## Następujący obiekt został zakryty z 'package:qwraps2':
##
## logit
##
## Następujące obiekty zostały zakryte z 'package:scales':
##
## alpha, rescale
##
## Następujące obiekty zostały zakryte z 'package:ggplot2':
##
## %+%, alpha
##
## Następujący obiekt został zakryty z 'package:DMwR':
##
## crossValidation
##
## Następujący obiekt został zakryty z 'package:outliers':
##
## outlier
attach(agencja)
Analiza danych agencji nieruchomości stanowi kluczowe narzędzie w zrozumieniu dynamicznych aspektów rynku nieruchomości. W ramach tego projektu, przeprowadzono szczegółową analizę zestawu danych, który zawiera informacje na temat 13 zmiennych istotnych dla charakteryzacji nieruchomości. Te dane obejmują aspekty, takie jak cena nieruchomości, powierzchnia, liczba sypialni, łazienek, a także różnorodne udogodnienia i cechy domów.
Celem analizy jest zidentyfikowanie istotnych zależności, które mogą mieć wpływ na ceny nieruchomości. Zbadano zarówno zmienne ilościowe, jak i jakościowe, aby uzyskać pełniejszy obraz rynku nieruchomości. Analiza ta może dostarczyć istotnych wskazówek dla agencji nieruchomości, inwestorów czy potencjalnych nabywców, pomagając im podejmować bardziej świadome decyzje.
W pierwszym etapie analizy skoncentrowano się na procesie czyszczenia danych, co obejmuje identyfikację, zarządzanie i eliminację potencjalnych nieprawidłowości w danych.
Na początku sprawdzono, czy nie ma obserwacji brakujących.
na_indicates <- which(is.na(agencja))
print(na_indicates)
## integer(0)
W zbiorze danych nie występują brakujące obserwacje, więc nie należy ich zamieniać np. według średniej do dalszej analizy.
Kolejnym krokiem jest zidentyfikowanie obserwacji odstających, ponieważ mogą one wpływać na wynik analizy i prowadzić do błędnych wniosków.
Na wstępie przedstawiono wykresy ramkowe, ilustrujące rozkład zmiennych ilościowych.
par(mfrow = c(2, 3))
for (col in colnames(agencja)) {
if (is.numeric(agencja[[col]])) {
boxplot(agencja[[col]],
main = paste("Wykres Ramkowy dla", col),
ylab = col,
col = "skyblue",
border = "darkblue",
pch = 19,
cex = 1.5
)
}
}
Cena: Kilka nieruchomości ma znacznie wyższą cenę niż pozostałe, co może świadczyć o ich wysokim standardzie, atrakcyjnej lokalizacji lub innych cechach podnoszących wartość. Powierzchnia: Niektóre nieruchomości mają bardzo dużą powierzchnię, co może oznaczać, że są to domy jednorodzinne lub posiadają dużą ilość pięter. Liczba sypialni: Niektóre nieruchomości mają 5 i 6 sypialni, co jest znacznie więcej niż średnia. Może to być związane z dużą powierzchnią lub specyficznym układem pomieszczeń. Liczba łazienek: Jedna nieruchomość ma 4 łazienki. Może to być związane z dużą liczbą sypialni lub wysokim standardem. Liczba pięter: Kilka nieruchomości ma 4 piętra. Może to oznaczać, że są to domy z poddaszem lub piwnicą. Liczba miejsc parkingowych: Niektóre nieurchomości mają 3 miejsca parkingowe.Może to oznaczać, że są to domy z garażem lub podjazdem.
Następnie zaprezentowano wykresy rozrzutu, ukazujące zależności między dwiema zmiennymi ilościowymi.
par(mar = c(2, 2, 2, 2))
par(mfrow = c(6, 5))
for (col1 in colnames(agencja)) {
for (col2 in colnames(agencja)) {
if (is.numeric(agencja[[col1]]) && is.numeric(agencja[[col2]]) && col1 != col2) {
plot(agencja[[col1]], agencja[[col2]],
main = paste("Wykres Rozrzutu dla", col1, "i", col2),
xlab = col1, ylab = col2)
}
}
}
Postawiono warunki pozwalają zidentyfikować, które obserwacje w poszczególnych kolumnach mają wartości odstające w kontekście standardowego odchylenia. Wartości TRUE wskazują na to, że dana obserwacja spełnia warunek, natomiast FALSE oznacza, że nie spełnia warunku.
conditions <- data.frame(
price = abs(scale(agencja$price)) > 3,
area = abs(scale(agencja$area)) > 3,
bedrooms = abs(scale(agencja$bedrooms)) > 3,
bathrooms = abs(scale(agencja$bathrooms)) > 3,
stories = abs(scale(agencja$stories)) > 3,
parking = abs(scale(agencja$parking)) > 3
)
summary(conditions)
## price area bedrooms bathrooms
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:539 FALSE:538 FALSE:543 FALSE:534
## TRUE :6 TRUE :7 TRUE :2 TRUE :11
## stories parking
## Mode :logical Mode :logical
## FALSE:545 FALSE:545
##
Cena: 6 z 545 nieruchomości ma cenę, która jest odstająca. Powierzchnia: 7 z 545 nieruchomości ma powierzchnię, która jest odstająca. Liczba sypialni: 2 z 545 nieruchomości ma liczbę sypialni, która jest odstająca. Liczba łazienek: 11 z 545 nieruchomości ma liczbę łazienek, która jest odstająca. Liczba pięter: Żadna z 545 nieruchomości nie ma liczby pięter, która jest odstająca. Może to oznaczać, że wszystkie nieruchomości mają podobną liczbę pięter lub że zmienna stories nie ma rozkładu normalnego. Liczba miejsc parkingowych: Żadna z 545 nieruchomości nie ma liczby miejsc parkingowych, która jest odstająca. Może to oznaczać, że wszystkie nieruchomości mają podobną liczbę miejsc parkingowych lub że zmienna parking nie ma rozkładu normalnego.
Zastosowano test Grubbsa dla jednego odstającego elementu dla kilku zmiennych kluczowych.
grubbs.test(agencja$price)
##
## Grubbs test for one outlier
##
## data: agencja$price
## G = 4.56217, U = 0.96167, p-value = 0.001126
## alternative hypothesis: highest value 13300000 is an outlier
grubbs.test(agencja$area)
##
## Grubbs test for one outlier
##
## data: agencja$area
## G = 5.09159, U = 0.95226, p-value = 7.038e-05
## alternative hypothesis: highest value 16200 is an outlier
grubbs.test(agencja$bedrooms)
##
## Grubbs test for one outlier
##
## data: agencja$bedrooms
## G = 4.11192, U = 0.96886, p-value = 0.009358
## alternative hypothesis: highest value 6 is an outlier
grubbs.test(agencja$bathrooms)
##
## Grubbs test for one outlier
##
## data: agencja$bathrooms
## G = 5.40085, U = 0.94628, p-value = 1.205e-05
## alternative hypothesis: highest value 4 is an outlier
grubbs.test(agencja$stories)
##
## Grubbs test for one outlier
##
## data: agencja$stories
## G = 2.52970, U = 0.98821, p-value = 1
## alternative hypothesis: highest value 4 is an outlier
grubbs.test(agencja$parking)
##
## Grubbs test for one outlier
##
## data: agencja$parking
## G = 2.6770, U = 0.9868, p-value = 1
## alternative hypothesis: highest value 3 is an outlier
Test Grubbsa wskazuje na obecność potencjalnych odstępstw w kilku zmiennych. Wartości najwyższe w przypadku price, area, bedrooms, oraz bathrooms różnią się istotnie od reszty danych, co sugeruje, że mogą stanowić potencjalne wartości odstające. Ostatnie dwie zmienne (stories, parking) nie wykazują istotnych różnic w najwyższych wartościach.
Przeprowadzono kilka kroków walidacyjnych, w tym sprawdzenie poprawności typów danych, braku duplikatów, oraz spełnienia określonych warunków dla poszczególnych zmiennych. W szczególności, zweryfikowano, czy wartości kolumn price, area, bedrooms, bathrooms, stories, oraz parking są przechowywane jako liczby, czy liczba sypialni, łazienek, pięter i miejsc parkingowych są liczbami całkowitymi i nieujemnymi, a także czy kolumny mainroad, guestroom, basement, hotwaterheating, airconditioning, Furnishing status, oraz Prefarea zawierają tylko odpowiednie wartości.
#sprawdzenie czy dane mają poprawny typ
str(agencja)
## 'data.frame': 545 obs. of 13 variables:
## $ price : int 13300000 12250000 12250000 12215000 11410000 10850000 10150000 10150000 9870000 9800000 ...
## $ area : int 7420 8960 9960 7500 7420 7500 8580 16200 8100 5750 ...
## $ bedrooms : int 4 4 3 4 4 3 4 5 4 3 ...
## $ bathrooms : int 2 4 2 2 1 3 3 3 1 2 ...
## $ stories : int 3 4 2 2 2 1 4 2 2 4 ...
## $ mainroad : chr "yes" "yes" "yes" "yes" ...
## $ guestroom : chr "no" "no" "no" "no" ...
## $ basement : chr "no" "no" "yes" "yes" ...
## $ hotwaterheating : chr "no" "no" "no" "no" ...
## $ airconditioning : chr "yes" "yes" "no" "yes" ...
## $ parking : int 2 3 2 3 2 2 2 0 2 1 ...
## $ prefarea : chr "yes" "no" "yes" "yes" ...
## $ furnishingstatus: chr "furnished" "furnished" "semi-furnished" "furnished" ...
summary(agencja)
## price area bedrooms bathrooms
## Min. : 1750000 Min. : 1650 Min. :1.000 Min. :1.000
## 1st Qu.: 3430000 1st Qu.: 3600 1st Qu.:2.000 1st Qu.:1.000
## Median : 4340000 Median : 4600 Median :3.000 Median :1.000
## Mean : 4766729 Mean : 5151 Mean :2.965 Mean :1.286
## 3rd Qu.: 5740000 3rd Qu.: 6360 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :13300000 Max. :16200 Max. :6.000 Max. :4.000
## stories mainroad guestroom basement
## Min. :1.000 Length:545 Length:545 Length:545
## 1st Qu.:1.000 Class :character Class :character Class :character
## Median :2.000 Mode :character Mode :character Mode :character
## Mean :1.806
## 3rd Qu.:2.000
## Max. :4.000
## hotwaterheating airconditioning parking prefarea
## Length:545 Length:545 Min. :0.0000 Length:545
## Class :character Class :character 1st Qu.:0.0000 Class :character
## Mode :character Mode :character Median :0.0000 Mode :character
## Mean :0.6936
## 3rd Qu.:1.0000
## Max. :3.0000
## furnishingstatus
## Length:545
## Class :character
## Mode :character
##
##
##
#sprawdzenie czy dane nie mają duplikatów
anyDuplicated(agencja)
## [1] 0
#sprawdzenie czy cena nieruchomości jest przechowywana jako liczba
all(sapply(agencja$price, function(x) is.numeric(x)))
## [1] TRUE
#sprawdzenie czy powierzchnia jest przechowywana jako liczba
all(sapply(agencja$area, function(x) is.numeric(x)))
## [1] TRUE
# sprawdzenie czy liczba sypialni jest liczbą całkowitą i nieujemną
all(agencja$bedrooms %% 1 == 0) && all(agencja$bedrooms >= 0)
## [1] TRUE
#sprawdzenie czy liczba łazienek jest liczbą całkowitą i nieujemną
all(agencja$bathrooms %% 1 == 0) && all(agencja$bathrooms >= 0)
## [1] TRUE
#sprwdzenie czy liczba pięter jest liczbą całkowitą i nieujemną?
all(agencja$stories %% 1 == 0) && all(agencja$stories >= 0)
## [1] TRUE
#sprwdzenie czy liczba miejsc parkingowych jest liczbą całkowitą i nieujemną
all(agencja$parking %% 1 == 0) && all(agencja$parking >= 0)
## [1] TRUE
#sprawdzenie czy wszystkie wartości w kolumnie Mainroad to "Tak" lub "Nie"
all(agencja$mainroad %in% c("yes", "no"))
## [1] TRUE
#sprawdzenie czy wszystkie wartości w kolumnie Guestroom to "Tak" lub "Nie"
all(agencja$guestroom %in% c("yes", "no"))
## [1] TRUE
#sprawdzenie czy wszystkie wartości w kolumnie Basement to "Tak" lub "Nie"
all(agencja$basement %in% c("yes", "no"))
## [1] TRUE
#sprawdzenie czy wszystkie wartości w kolumnie Hot water heating to "Tak" lub "Nie"
all(agencja$hotwaterheating %in% c("yes", "no"))
## [1] TRUE
#sprawdzenie czy wszystkie wartości w kolumnie Airconditioning to "Tak" lub "Nie"
all(agencja$airconditioning %in% c("yes", "no"))
## [1] TRUE
#sprawdzenie czy Furnishing status zawiera tylko dopuszczalne wartości?
all(agencja$`Furnishing status` %in% c("w pełni umeblowany", "częściowo umeblowany", "nieumeblowany"))
## [1] TRUE
#sprawdzenie czy Prefarea zawiera tylko "Tak" lub "Nie"?
all(agencja$Prefarea %in% c("yes", "no"))
## [1] TRUE
Podczas analizy danych o nieruchomościach stwierdzono, że wszystkie kluczowe warunki walidacyjne zostały spełnione. Cena nieruchomości oraz powierzchniajest przechowywana jako liczba, a liczba sypialni, łazienek, pięter oraz miejsc parkingowych zawiera tylko nieujemne liczby całkowite. Dodatkowo, kolumny Mainroad, Guestroom, Basement, Hot water heating, Airconditioning, Furnishing status i Prefarea zawierają tylko oczekiwane wartości ‘Tak’ lub ‘Nie’. Dane są gotowe do dalszej analizy.
W tej części projektu zaprezentowano różne typy wykresów, takie jak histogramy, wykresy punktowe, wykresy liniowe, wykresy bąbelkowe i inne.
Wykresy histogramów przedstawiające ceny nieruchomości zostały stworzone z uwzględnieniem liczby sypialni, łazienek, pięter i miejsc parkingowych. Każdy histogram wizualizuje rozkład cen w zależności od danej kategorii, umożliwiając łatwe porównanie dystrybucji cen między różnymi parametrami nieruchomości.
ggplot(agencja, aes(x = price , fill = factor(bedrooms))) +
geom_histogram(binwidth = 2000000, position = "dodge", color = "black", alpha = 0.7) +
labs(title = "Histogram cen nieruchomości z podziałem na liczebność sypialni",
x = "Cena",
y = "Liczba nieruchomości") +
scale_fill_discrete(name = "Liczba sypialni")
ggplot(agencja, aes(x = price , fill = factor(bathrooms))) +
geom_histogram(binwidth = 2000000, position = "dodge", color = "black", alpha = 0.7) +
labs(title = "Histogram cen nieruchomości z podziałem na liczebność łazienek",
x = "Cena",
y = "Liczba nieruchomości") +
scale_fill_discrete(name = "Liczba łazienek")
ggplot(agencja, aes(x = price , fill = factor(stories))) +
geom_histogram(binwidth = 2000000, position = "dodge", color = "black", alpha = 0.7) +
labs(title = "Histogram cen nieruchomości z podziałem na liczebność pięter",
x = "Cena",
y = "Liczba nieruchomości") +
scale_fill_discrete(name = "Liczba pięter")
ggplot(agencja, aes(x = price , fill = factor(parking))) +
geom_histogram(binwidth = 2000000, position = "dodge", color = "black", alpha = 0.7) +
labs(title = "Histogram cen nieruchomości z podziałem na liczebność miejsc parkingowych",
x = "Cena",
y = "Liczba nieruchomości") +
scale_fill_discrete(name = "Liczba miejsc parkingowych")
Pierwszy histogram przedstawia rozkład cen nieruchomości w zależności od liczby sypialni. Dominującym trendem są nieruchomości z trzema sypialniami, osiągające średnio cenę około 4 000 000 zł. Nieruchomości z dwiema sypialniami są zazwyczaj tańsze, natomiast te z czterema sypialniami charakteryzują się wyższą ceną. Nieruchomości z jedną, pięcioma lub sześcioma sypialniami są rzadko spotykane na rynku. Drugi histogram ilustruje rozkład cen nieruchomości w zależności od liczby łazienek. Najczęstsze są nieruchomości z jedną łazienką, osiągające przeciętnie cenę około 4 000 000 zł. Niższe ceny zazwyczaj korelują z jedną łazienką, podczas gdy wyższe ceny związane są z dwiema łazienkami. Nieruchomości z trzema lub czterema łazienkami są rzadkością. Trzeci histogram prezentuje rozkład liczby nieruchomości w zależności od liczby pięter. Nieruchomości jedno- i dwupiętrowe występują z podobną częstością, natomiast te z trzema lub czterema piętrami są rzadkie, a ich ceny zazwyczaj rosną. Czwarty histogram ukazuje rozkład cen nieruchomości w zależności od liczby miejsc parkingowych. Nieruchomości bez miejsc parkingowych dominują, podobnie jak te z jednym lub dwoma miejscami parkingowymi. Trzy miejsca parkingowe są rzadkością.
Wykresy gęstości rozkładu cen nieruchomości zostały stworzone z uwzględnieniem liczby sypialni, łazienek, pięter i miejsc parkingowych. Prezentowane wykresy dostarczają głębokiej analizy zróżnicowania cenowego w kontekście różnych parametrów nieruchomości.
ggplot(agencja, aes(x = price, fill = factor(bedrooms))) +
geom_density(alpha = 0.25) +
labs(title = 'Gęstość rozkładu cen', x = 'Cena', y = 'Gęstość') +
scale_fill_discrete(name = 'Liczba sypialni')
ggplot(agencja, aes(x = price, fill = factor(bathrooms))) +
geom_density(alpha = 0.25) +
labs(title = 'Gęstość rozkładu cen', x = 'Cena', y = 'Gęstość') +
scale_fill_discrete(name = 'Liczba łazienek')
## Warning: Groups with fewer than two data points have been dropped.
## Warning in max(ids, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
ggplot(agencja, aes(x = price, fill = factor(stories))) +
geom_density(alpha = 0.25) +
labs(title = 'Gęstość rozkładu cen', x = 'Cena', y = 'Gęstość') +
scale_fill_discrete(name = 'Liczba pięter')
ggplot(agencja, aes(x = price, fill = factor(parking))) +
geom_density(alpha = 0.25) +
labs(title = 'Gęstość rozkładu cen', x = 'Cena', y = 'Gęstość') +
scale_fill_discrete(name = 'Liczba miejsc parkingowych')
Pierwszy wykres przedstawia gęstość rozkładu cen nieruchomości w zależności od liczby sypialni. Wykres pokazuje, że im więcej sypialni ma nieruchomość, tym bardziej zróżnicowane są jej ceny. Nieruchomości z jedną sypialnią mają najwyższą gęstość cenową wokół 8e-07, co oznacza, że większość z nich ma podobną cenę. Nieruchomości z większą liczbą sypialni mają niższe i szersze szczyty gęstości, co oznacza, że ich ceny są bardziej rozproszone. Drugi wykres prezentuje gęstość rozkładu cen w zależności od liczby łazienek. Podobnie jak w przypadku sypialni, większa liczba łazienek wiąże się z bardziej zróżnicowanymi cenami. Nieruchomości z jedną łazienką wykazują skupienie cenowe wokół 3e-07, podczas gdy dla tych z większą liczbą łazienek obserwujemy niższe i bardziej rozproszone wartości. Trzeci wykres ukazuje gęstość rozkładu cen w zależności od liczby pięter. Interesująco, niezależnie od liczby pięter, rozkład cenowy utrzymuje podobny wzorzec, skoncentrowany wokół 3e-07. To sugeruje, że ilość pięter nie ma istotnego wpływu na zróżnicowanie cen nieruchomości. Na czwartym wykresie widać, że gęstość rozkładu cen związanych z liczbą miejsc parkingowych. Nieruchomości bez miejsc parkingowych prezentują największe skupienie cen wokół 3e-07. Dla miejsc parkingowych od 1 do 3, gęstość rozkładu jest bardziej rozproszona, jednak zachowuje pewne podobieństwo.
Wykres punktowy między ceną, a powierzchnią nieruchomości stanowi kluczowy aspekt zrozumienia rynku mieszkaniowego. Dodatkowo, podział na liczbę pokoi wprowadza dodatkową warstwę informacji, pozwalając na lepsze zrozumienie, jak te trzy zmienne współgrają ze sobą.
ggplot(agencja, aes(x = area, y = price, color = factor(bedrooms))) +
geom_point() +
labs(title = 'Wykres punktowy: Cena vs. Powierzchnia',
x = 'Powierzchnia',
y = 'Cena') +
scale_color_discrete(name = 'Liczba sypialni')
Wykres pokazuje, że im większa jest powierzchnia, tym wyższa jest cena, ale istnieje duża zmienność, co wskazuje na wpływ innych czynników na cenę. Różne kolory oznaczają nieruchomości z różną liczbą sypialni, jednak nie widać wyraźnego wzorca, który by wskazywał, że liczba sypialni ma znaczący wpływ na cenę.
Zaprezentowano wykres przedstawiajacy porównanie cen nieruchomości w zależności od tego, czy znajdują się one przy głównej drodze.
medians <- agencja %>%
group_by(mainroad) %>%
summarize(m = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = mainroad, y = price, group = mainroad)) +
geom_boxplot(aes(fill = mainroad), outlier.alpha = 0.25) +
geom_text(data = medians, aes(x = mainroad, y = m, label = m), color = 'blue', hjust = -0.5) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean, geom = 'errorbar',
width = .75, linetype = 'solid', position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Brak podłączenia do głównej drogi powoduje niższą średnią cenę nieruchomości. Ceny w tym przypadku również są mniej zróżnicowane od cen nieruchomości z dostępem do drogi głównej.
Kolejny wykres przedstawia porównanie cen nieruchomości w zależności od tego, czy posiadają one dodatkową sypialnię dla gości.
medians <- agencja %>%
group_by(guestroom) %>%
summarize(m = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = guestroom, y = price, group = guestroom)) +
geom_boxplot(aes(fill = guestroom), outlier.alpha = 0.25) +
geom_text(data = medians, aes(x = guestroom, y = m, label = m), color = 'blue', hjust = -0.5) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean, geom = 'errorbar',
width = .75, linetype = 'solid', position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
Nieruchomości z pokojem gościnnym posiadają wyższą średnią cenę od tych, które jej nie mają, jednak cene są rozproszone w podobnym stopniu w obu przypadkach. Można zauważyć o wiele więcej cen odstających od pudełka w przypadku nieruchomości bez pokoju gościnnego, które są wyższe od odstających w wariancie z pokojem gościnnym.
Następny wykres przedstawia porównanie cen nieruchomości w zależności od obecności klimatyzacji.
medians <- agencja %>%
group_by(airconditioning) %>%
summarize(m = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = airconditioning, y = price, group = factor(airconditioning))) +
geom_boxplot(aes(fill = factor(airconditioning)), outlier.alpha = 0.25) +
geom_text(data = medians, aes(x = airconditioning, y = m, label = m), color = 'blue', hjust = -0.5) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean, geom = 'errorbar',
width = .75, linetype = 'solid', position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
Dostęp do klimatyzacji powoduje zdecydowany wzrost średniej ceny nieruchomości, dodatkowo odstające wartości również są wyższe od odstających wartości dla drugiego wariantu co może sugerować, że jest to ważny czynnik cenowy dla nieruchomości.
Kolejny wykres przedstawia porównanie cen nieruchomości w zależności od obecności piwnicy.
medians <- agencja %>%
group_by(basement) %>%
summarize(m = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = factor(basement), y = price, group = factor(basement))) +
geom_boxplot(aes(fill = factor(basement)), outlier.alpha = 0.25) +
geom_text(data = medians, aes(x = factor(basement), y = m, label = m), color = 'blue', hjust = -0.5) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean, geom = 'errorbar',
width = .75, linetype = 'solid', position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
Nieruchomości bez piwnic mają niewiele niższą średnią cenę od nieruchomości z piwnicami.
Następny wykres przedstawia porównanie cen nieruchomości w zależności od stanu umeblowania.
medians <- agencja %>%
group_by(furnishingstatus) %>%
summarize(m = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = furnishingstatus, y = price, group = factor(furnishingstatus))) +
geom_boxplot(aes(fill = factor(furnishingstatus)), outlier.alpha = 0.25) +
geom_text(data = medians, aes(x = factor(furnishingstatus), y = m, label = m), color = 'blue', hjust = -0.5) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean, geom = 'errorbar',
width = .75, linetype = 'solid', position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
Najwyższą średnią cenę posiadają nieruchomości umeblowane w pełni, a najniższą te w stanie deweloperskim, również w przypadku cen odstających.
Prezentowane wykresy przedstawiają rozproszenie danych dotyczących obecności klimatyzacji i ogrzewania wody w nieruchomościach.
agencja %>%
filter(hotwaterheating != '') %>%
ggplot(aes(x = airconditioning, y = hotwaterheating)) +
geom_jitter(aes(color = airconditioning)) +
theme(legend.position = 'none') +
scale_y_discrete(
limits = c(x = "no")
) +
labs(x = 'airconditioning', y = 'hotwaterheating')
## Warning: Removed 25 rows containing missing values (`geom_point()`).
Większa liczba mieszkań nieposiadająca wewnętrznego systemu ogrzewania wody również nie posiada klimatyzacji.
agencja %>%
filter(hotwaterheating != '') %>%
ggplot(aes(x = airconditioning, y = hotwaterheating)) +
geom_jitter(aes(color = airconditioning)) +
theme(legend.position = 'none') +
scale_y_discrete(limits = c("yes")) +
labs(x = 'airconditioning', y = 'hotwaterheating')
## Warning: Removed 520 rows containing missing values (`geom_point()`).
Zdeycydowanie mniej jest mieszkań posiadających wewnętrzny system ogrzewania wody oraz istnieje tylko jedna nieruchomość posiadająca podgrzewanie oraz klimatyzację.
Wykres przedstawia zależność między ceną domu a liczbą sypialni. Z wykresu wynika, że im więcej sypialni ma dom, tym jest droższy. Jednak w kategoriach 2, 3 i 4 sypialni występują wartości odstające, które zwiększają zmienność cen. Największa różnica cenowa jest między domami z 4 i 5 sypialniami, co widać po długich wąsach wykresów pudełkowych. Domy z 6 sypialniami nie pasują do ogólnej tendencji, ponieważ są tańsze niż domy z mniejszą liczbą sypialni.
medians <- agencja %>%
group_by(bedrooms) %>%
dplyr::summarize(median_price = median(price, na.rm = TRUE))
ggplot(agencja, aes(x = factor(bedrooms), y = price)) +
geom_boxplot(aes(fill =bedrooms), outlier.alpha = 0.25, position = 'dodge') +
geom_text(data = medians, aes(x = factor(bedrooms), y = median_price, label = median_price),
color = 'red', hjust = -0.5, vjust = 0.5, size = 3) +
stat_summary(aes(ymax = after_stat(y), ymin = after_stat(y)), fun = mean,
geom = 'errorbar', width = 0.75, linetype = 'solid',
position = 'dodge', color = 'white', size = 1) +
theme(legend.position = 'none')
Z wykresu wynika, że im więcej sypialni ma dom, tym jest droższy. Jednak w kategoriach 2, 3 i 4 sypialni występują wartości odstające, które zwiększają zmienność cen. Największa różnica cenowa jest między domami z 4 i 5 sypialniami, co widać po długich wąsach wykresów pudełkowych. Domy z 6 sypialniami nie pasują do ogólnej tendencji, ponieważ są tańsze niż domy z mniejszą liczbą sypialni.
Wykres bąbelkowy przedstawia zależność między dwoma zmiennymi: powierzchnią nieruchomości (oś x) i ceną nieruchomości (oś y). Dodatkowo, rozmiar bąbelków reprezentuje liczbę sypialni w nieruchomości, a kolor bąbelków reprezentuje, czy nieruchomość jest wyposażona w system klimatyzacji (Tak/Nie).
ggplot(agencja, aes(x = area, y = price, size = bedrooms, color = airconditioning)) +
geom_point(alpha = 0.7) +
labs(title = "Wykres bąbelkowy nieruchomości",
x = "Powierzchnia",
y = "Cena",
size = "Liczba sypialni",
color = "System klimatyzacji") +
theme_minimal()
Analiza wykresu bąbelkowego sugeruje, że istnieje tendencja do braku klimatyzacji w nieruchomościach o niższej cenie i mniejszej powierzchni. Jednakże, wraz ze wzrostem ceny nieruchomości, staje się ona bardziej powszechna. Liczba sypialni nie wydaje się mieć znaczącego wpływu na posiadanie klimatyzacji, z wyjątkiem nieruchomości posiadających minimalną ilość sypialni, gdzie raczej nie ma klimatyzacji.
Ten wykres przedstawia podział liczby sypialni w zależności od obecności piwnicy w nieruchomościach. Każdy panel wykresu reprezentuje osobny poziom zmiennej basement. Na osi x znajduje się liczba sypialni, a wysokość słupków odpowiada liczbie obserwacji.
agencja %>%
filter(area != '') %>%
ggplot(aes(x = bedrooms)) +
geom_histogram(
aes(fill = basement),
bins = 50,
color = 'black'
) +
facet_wrap(vars(basement), nrow = 2) +
theme(legend.position = 'top')
W trzecim etapie projektu przeprowadzono kompleksową analizę opisową danych agencji nieruchomości, wspartą odpowiednimi grafikami.
Dokonano odpowiedniego dostosowania formatów zmiennych, uwzględniając ich skalę pomiarową oraz przyszłe zastosowanie. Ten proces ma na celu zapewnienie spójności i odpowiedniego reprezentowania danych, co umożliwi bardziej precyzyjną analizę oraz ułatwi przyszłe używanie tych informacji.
agencja$bedrooms<-factor(agencja$bedrooms,ordered=TRUE)
agencja$bathrooms<-factor(agencja$bathrooms,ordered=TRUE)
agencja$stories<-factor(agencja$stories,ordered=TRUE)
agencja$parking<-factor(agencja$parking,ordered=TRUE)
agencja$furnishingstatus<-as.factor(agencja$furnishingstatus)
agencja$mainroad<-as.factor(agencja$mainroad)
agencja$guestroom<-as.factor(agencja$guestroom)
agencja$basement<-as.factor(agencja$basement)
agencja$hotwaterheating<-as.factor(agencja$hotwaterheating)
agencja$airconditioning<-as.factor(agencja$airconditioning)
agencja$prefarea<-as.factor(agencja$prefarea)
Zestawienie prezentuje rozkład cen mieszkań w różnych przedziałach cenowych.
etykiety<-c("1,5-3 mln","3-4,5 mln","4,5-6 mln","6-7,5 mln","7,5-9 mln","9-10,5 mln","10,5-12 mln","12-13,5 mln")
limits<-cut(agencja$price,seq(1500000,13500000,by=1500000),labels=etykiety)
tabela1<-freq(limits,type="html")
## Building tables
##
|
| | 0%
|
|======================================================================| 100%
## Temporary file saved to: C:\Users\kinga\AppData\Local\Temp\RtmpiYX6Qz\file22d84ffd505e.html
## To open by default use: options(frequency_open_output = TRUE)
kbl(tabela1,caption = "Mieszkania - ceny w mln") %>%
kable_material(c("striped", "hover"))
|
tab1<-classIntervals(agencja$price,n=8,style="fixed",fixedBreaks=seq(1500000,13500000,by=1500000))
jenks.tests(tab1)
## # classes Goodness of fit Tabular accuracy
## 8.0000000 0.9484050 0.7471392
W analizie cen mieszkań można zauważyć, że największą grupę stanowią nieruchomości w przedziale od 3 do 4,5 mln, reprezentujące 40,4% zbioru. Ogólnie, mieszkania o cenach od 1,5 do 6 mln stanowią 78,5% zbioru, co wskazuje na dominację nieruchomości w średnich przedziałach cenowych na rynku. Mimo obecności mieszkań o wyższych cenach, ich udziały są stosunkowo niższe. Analiza kumulacyjna podkreśla, że większość rynku koncentruje się w przedziałach cenowych od 3 do 6 mln. Warto także zauważyć, że nieruchomości w przedziale 10,5-12 mln stanowią zaledwie 0,7% całego zbioru, co świadczy o ich znacznej mniejszej liczbie na rynku.
Skonstruowano wykresy pudełkowe dla ceny oraz powierzchni.
par(mfrow = c(1, 2))
boxplot(agencja$price, main = "Boxplot", ylab = "Cena")
boxplot(agencja$area, main = "Boxplot", ylab = "powierzchnia")
Średnia cena nieruchmości wynosi około 3 mln złotych, kilka z nich posiada cenę odstającą co może świadczyć o ich nadzwyczajnej jakości, lokalizacji czy wyposażeniu bądź wielkości
Średnia powierzchnia nieruchmości wynosi około 5 tys. m^2, kilka z nich posiada powierzchnie odstające od reszty wzwyż co może wyjaśniać również odstające wzwyż ceny niektórych nieruchomości.
Skonstruowano wykresy powierzchni, liczby łazienk, oraz sypialni w zależności od ceny.
ggplot(agencja, aes(x = area, y = price)) +
geom_point() +
labs(title = "Powierzchnia, a cena",
x = "Powierzchnia mieszkania (m^2)",
y = "Cena")
ggplot(agencja, aes(x = bedrooms, y = price)) +
geom_point() +
labs(title = "Liczba sypialni, a cena",
x = "Liczba sypialni",
y = "Cena")
ggplot(agencja, aes(x = bathrooms, y = price)) +
geom_point() +
labs(title = "Liczba łazienek, a cena",
x = "Liczba łazienek",
y = "Cena")
ggplot(agencja, aes(x = area, y = price)) +
geom_point() +
labs(title = "Powierzchnia, a cena odniesiona do powierzchni i piętra",
x = "Powierzchnia mieszkania (m^2)",
y = "Cena") +
facet_grid(bedrooms ~ stories, labeller = label_both) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Najwięcej nieruchomości charakteryzuje się podsiadaniem 3 pięter bądź 2 sypialni. W największej grupie nieruchomości powierzchnia mieści się między 0 - 13000 m^2. Co ciekawe nieruchomości z największą powierzchnią nie posiadają wcale największej liczby sypialni, badź pięter.
Dokonano podsumowania statystyk opisowych badanych zmiennych.
summary(agencja)
## price area bedrooms bathrooms stories mainroad
## Min. : 1750000 Min. : 1650 1: 2 1:401 1:227 no : 77
## 1st Qu.: 3430000 1st Qu.: 3600 2:136 2:133 2:238 yes:468
## Median : 4340000 Median : 4600 3:300 3: 10 3: 39
## Mean : 4766729 Mean : 5151 4: 95 4: 1 4: 41
## 3rd Qu.: 5740000 3rd Qu.: 6360 5: 10
## Max. :13300000 Max. :16200 6: 2
## guestroom basement hotwaterheating airconditioning parking prefarea
## no :448 no :354 no :520 no :373 0:299 no :417
## yes: 97 yes:191 yes: 25 yes:172 1:126 yes:128
## 2:108
## 3: 12
##
##
## furnishingstatus
## furnished :140
## semi-furnished:227
## unfurnished :178
##
##
##
price: Ceny nieruchomości wahają się od 1 750 000 do 13 300 000 jednostek waluty.
area: Powierzchnia nieruchomości miesci się w zakresie od 1650 do 16 200 jednostek powierzchni.
bedrooms: Liczba sypialni w nieruchomościach oscyluje od 1 do 6.
bathrooms: Liczba łazienek w nieruchomościach mieści się w zakresie od 1 do 4.
stories: Liczba pięter w budynkach mieszkalnych waha się od 1 do 4.
mainroad: Zmienna kategoryczna reprezentująca dostępność do głównej drogi. Modelem danych jest tekst.
guestroom: Zmienna kategoryczna reprezentująca dostępność pokoju dla gości. Modelem danych jest tekst.
basement: Zmienna kategoryczna reprezentująca dostępność piwnicy. Modelem danych jest tekst.
hotwaterheating: Zmienna kategoryczna reprezentująca dostępność podgrzewania wody. Modelem danych jest tekst.
airconditioning: Zmienna kategoryczna reprezentująca dostępność klimatyzacji. Modelem danych jest tekst.
parking: Liczba miejsc parkingowych dostępnych przy nieruchomościach waha się od 0 do 3.
prefarea: Zmienna kategoryczna reprezentująca preferowany obszar. Modelem danych jest tekst.
furnishingstatus: Zmienna kategoryczna reprezentująca status umeblowania nieruchomości. Modelem danych jest tekst.
Ogólnie rzecz biorąc, dane obejmują różnorodne informacje na temat nieruchomości, takie jak cena, liczba sypialni, łazienek, pięter, dostępność do głównej drogi, dostępność pokoju dla gości, dostępność piwnicy, dostępność podgrzewania wody, dostępność klimatyzacji, liczba miejsc parkingowych, preferowany obszar i status umeblowania. Warto zauważyć, że wiele zmiennych kategorycznych zostało przedstawionych w formie tekstowej.
print(cbind(table(guestroom),
table(mainroad),
table(airconditioning),
table(basement),
table(hotwaterheating)))
## [,1] [,2] [,3] [,4] [,5]
## no 448 77 373 354 520
## yes 97 468 172 191 25
describe(agencja)
## vars n mean sd median trimmed mad
## price 1 545 4766729.25 1870439.62 4340000 4559299.43 1556730.00
## area 2 545 5150.54 2170.14 4600 4908.41 2060.81
## bedrooms* 3 545 2.97 0.74 3 2.93 0.00
## bathrooms* 4 545 1.29 0.50 1 1.21 0.00
## stories* 5 545 1.81 0.87 2 1.66 1.48
## mainroad* 6 545 1.86 0.35 2 1.95 0.00
## guestroom* 7 545 1.18 0.38 1 1.10 0.00
## basement* 8 545 1.35 0.48 1 1.31 0.00
## hotwaterheating* 9 545 1.05 0.21 1 1.00 0.00
## airconditioning* 10 545 1.32 0.47 1 1.27 0.00
## parking* 11 545 1.69 0.86 1 1.59 0.00
## prefarea* 12 545 1.23 0.42 1 1.17 0.00
## furnishingstatus* 13 545 2.07 0.76 2 2.09 1.48
## min max range skew kurtosis se
## price 1750000 13300000 11550000 1.21 1.91 80120.83
## area 1650 16200 14550 1.31 2.69 92.96
## bedrooms* 1 6 5 0.49 0.70 0.03
## bathrooms* 1 4 3 1.58 2.12 0.02
## stories* 1 4 3 1.08 0.65 0.04
## mainroad* 1 2 1 -2.05 2.22 0.01
## guestroom* 1 2 1 1.68 0.82 0.02
## basement* 1 2 1 0.63 -1.61 0.02
## hotwaterheating* 1 2 1 4.33 16.78 0.01
## airconditioning* 1 2 1 0.79 -1.38 0.02
## parking* 1 4 3 0.84 -0.59 0.04
## prefarea* 1 2 1 1.25 -0.44 0.02
## furnishingstatus* 1 3 2 -0.12 -1.27 0.03
summary(agencja)
## price area bedrooms bathrooms stories mainroad
## Min. : 1750000 Min. : 1650 1: 2 1:401 1:227 no : 77
## 1st Qu.: 3430000 1st Qu.: 3600 2:136 2:133 2:238 yes:468
## Median : 4340000 Median : 4600 3:300 3: 10 3: 39
## Mean : 4766729 Mean : 5151 4: 95 4: 1 4: 41
## 3rd Qu.: 5740000 3rd Qu.: 6360 5: 10
## Max. :13300000 Max. :16200 6: 2
## guestroom basement hotwaterheating airconditioning parking prefarea
## no :448 no :354 no :520 no :373 0:299 no :417
## yes: 97 yes:191 yes: 25 yes:172 1:126 yes:128
## 2:108
## 3: 12
##
##
## furnishingstatus
## furnished :140
## semi-furnished:227
## unfurnished :178
##
##
##
mean(bedrooms)
## [1] 2.965138
mean(stories)
## [1] 1.805505
mean(agencja$price)
## [1] 4766729
mean(area)
## [1] 5150.541
median(bedrooms)
## [1] 3
sd(bedrooms)
## [1] 0.7380639
cat("średnia:", mean(bedrooms), "\n")
## średnia: 2.965138
cat("mediana", median(bedrooms), "\n")
## mediana 3
cat("Odchylenie standardowe", sd(bedrooms), "\n")
## Odchylenie standardowe 0.7380639
cat("średnia:", mean(stories), "\n")
## średnia: 1.805505
cat("mediana", median(stories), "\n")
## mediana 2
cat("Odchylenie standardowe", sd(stories), "\n")
## Odchylenie standardowe 0.8674925
cat("średnia:", mean(area), "\n")
## średnia: 5150.541
cat("mediana", median(area), "\n")
## mediana 4600
cat("Odchylenie standardowe", sd(area), "\n")
## Odchylenie standardowe 2170.141
cat("średnia:", mean(price), "\n")
## średnia: 4766729
cat("mediana", median(price), "\n")
## mediana 4340000
cat("Odchylenie standardowe", sd(price), "\n")
## Odchylenie standardowe 1870440
cat("średnia:", mean(bathrooms), "\n")
## średnia: 1.286239
cat("mediana", median(bathrooms), "\n")
## mediana 1
cat("Odchylenie standardowe", sd(bathrooms), "\n")
## Odchylenie standardowe 0.5024696
cat("średnia:", mean(parking), "\n")
## średnia: 0.693578
cat("mediana", median(parking), "\n")
## mediana 0
cat("Odchylenie standardowe", sd(parking), "\n")
## Odchylenie standardowe 0.8615858
Średnia ilość sypialń w nieruchomościach wynosi 2.96. Środkową ilością sypialni w nieruchomościach jest 3.Niska wartość odchylenia standardowego sugeruje, że większość nieruchomości posiada podobną ilość sypialni jak średnia. Średnia ilość pięter w nieruchomościach wynosi 1.80. Środkową ilością pięter w nieruchomościach jest 2.Wartość odchylenia standardowego sugeruje, że większość nieruchomości posiada podobną znajduje się pomiędzy parterem a 2 piętrem. Średnia powierzchnia nieruchomości wynosi 5150.5. Środkową ilością sypialni w nieruchomościach jest 4600.Wysokie odchylenie standardowe sugerujeduże zróżnicowanie pomiędzy metrarzem nieruchomości Średnia cena nieruchomości wynosi 4 766 729. Środkową ceną nieruchomości jest 4 340 000. Ceny zazwyczaj wahają się w przedziale +/- 1 870 440 od średniej. Średnia ilość łazienek w nieruchomościach wynosi 1.29 Środkową ilością sypialni w nieruchomościach jest 1.Niska wartość odchylenia standardowego sugeruje, że większość nieruchomości posiada podobną ilość łazienek jak średnia. Średnia ilość miejsc parkingowych przypadających na nieruchomość wynosi 0.69 Środkową ilością miejsc p. w nieruchomościach jest 0. Większość nieruchomości posiada 0.69 +/- 0.86 miejsc parkingowych.
Analiza korelacji stanowi kluczowy element w badaniu związków między różnymi parametrami nieruchomości. W celu lepszego zrozumienia tych wzajemnych relacji, przeprowadzono obliczenia współczynników korelacji oraz utworzono macierz korelacji dla kluczowych parametrów, takich jak cena nieruchomości, powierzchnia, liczba łazienek, sypialni oraz pięter.
agencja[, c(1:5, 11)] <- lapply(agencja[, c(1:5, 11)], as.numeric)
corr_matrix <- cor(agencja[, c(1:5, 11)])
corrplot(corr_matrix, method = "number", type = "upper", diag = FALSE)
corrplot(corr_matrix, method = "color")
Analiza korelacji przedstawiona na wykresie wskazuje na związki między ceną a powierzchnią, liczbą sypialni, łazienek i pięter. Największa korelacja występuje między ceną a powierzchnią (0.54) oraz ceną a liczbą łazienek (0.52), co oznacza, że te zmienne są średnio skorelowane dodatnio. Oznacza to, że wzrost wartości jednej zmiennej jest związany ze wzrostem wartości drugiej zmiennej.
W ramach analizy danych dotyczących cen nieruchomości przeprowadzono szereg testów statystycznych mających na celu zrozumienie zależności między cenami a różnymi zmiennymi, w tym powierzchnią mieszkania. Kluczowe wyniki obejmują testy normalności, testy Wilcoxona oraz ewentualną analizę korelacji.
H0: normalność rozkładu
ggqqplot(price)
ggqqplot(area)
shapiro.test(price)
##
## Shapiro-Wilk normality test
##
## data: price
## W = 0.92163, p-value = 3.155e-16
shapiro.test(area)
##
## Shapiro-Wilk normality test
##
## data: area
## W = 0.91129, p-value < 2.2e-16
Na podstawie testu normalności Shapiro-Wilka można stwierdzić, że zarówno dane dotyczące ceny, jak i powierzchni nie spełniają założenia normalności.
var(price)
## [1] 3.498544e+12
var(area)
## [1] 4709512
var.test(price, area, alternative="greater")
##
## F test to compare two variances
##
## data: price and area
## F = 742868, num df = 544, denom df = 544, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is greater than 1
## 95 percent confidence interval:
## 645064 Inf
## sample estimates:
## ratio of variances
## 742867.7
Wyniki testu F sugerują, że wariancje między cenami a powierzchnią są istotnie różne, przy czym wariancja cen jest znacząco większa.
H0: Nie istnieje istotna statystycznie różnica między cenami a powierzchnią mieszkań. H1: Istnieje istotna statystycznie różnica między cenami a powierzchnią mieszkań.
wilcox.test(price, area, alternative = "two.sided", paired = FALSE, exact = FALSE, correct = TRUE, conf.int = FALSE, conf.level = 0.95)
##
## Wilcoxon rank sum test with continuity correction
##
## data: price and area
## W = 297025, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
Hipoteza zerowa zostaje odrzucona na rzecz hipotezy alternatywnej. Istnieją statystycznie istotne różnice w cenach mieszkań w zależności od powierzchni, przy użyciu testu Wilcoxona.
ggscatterstats(
data = agencja,
x = area,
y = price,
type = "np",
)
## Registered S3 method overwritten by 'ggside':
## method from
## +.gg ggplot2
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Nieruchomości przedstawione w zestawieniu byly dość charakterystyczne. Po wielkościach powierzchni jak i cenach można sugerować, że były to nieruchomości z gruntami rolnymi czy po prostu zielonymi typu ogród. W wielu przypadkach więcej nie oznaczało lepiej pod względem cenowym. Jak się okazuje najdroższe nieruchomości nie posiadały maksymalnej ilośći sypialni czy też pięter bądź łazienek. Na cenę zdecydowanie miało wpływ umeblowanie. Przy nieruchomościach “wykończonych” cena byłą wyższa od tych w stanie deweloperskim co może sugerować, że strona popytowa wolała zakupić nieruchomości gotowe do pełni użytku. Dane były bardzo dokładne oraz “czyste” o czym świadczy chociażby brak brakujących obserwacji czy poprawny zapis danych. W większości przypadków nieruchomości posiadały coś kosztem czegoś. Np. większość nieruchomości posiadających klimatyzację nie posiadała wewnętrznego ocieplania wody i vice versa. Zdecydowana większość nieruchomości posiadała więcej niż 1 piętro ale i mniej niż 5 pięter. Do tego najliczniejszą grupą nieruchomości były te, które posiadały 2 do 3 sypialni. Średnia powierzchnia nieruchomości wynosiła 5150.5 m^2 co jest ogromną liczbą stąd wniosek na temat gruntów zielonych. Mniejszość nieruchomości nie posiadała piwnic co jest dość typowe dla zabudowy amerykańskiej skąd prawdopodobnie są zebrane dane zważywszy również na nietypowo wysokie ceny oraz metraże. Dość logiczną, aczkolwiek wartą podkreślenia obserwacją był fakt, że brak podłączenia drogi głównej do nieruchomości powodował spadek ceny we wszystkich przypadkach.