Wprowadzenie

Analiza danych agencji nieruchomości stanowi kluczowe narzędzie w zrozumieniu dynamicznych aspektów rynku nieruchomości. W ramach tego projektu, przeprowadzimy 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, liczba sypialni, łazienek, a także różnorodne udogodnienia i cechy domów.

Celem naszej analizy jest zidentyfikowanie istotnych zależności, które mogą mieć wpływ na ceny nieruchomości. Będziemy badać 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.

Czyszczenie danych

W pierwszym etapie naszej analizy skoncentrujemy się na procesie czyszczenia danych, co obejmuje identyfikację, zarządzanie i eliminację potencjalnych nieprawidłowości w danych.

Brakujące obserwacje

Obserwacje odstające

Kolejnym krokiem jest zidentyfikowanie obserwacji odstających, ponieważ mogą one wpływać na wynik analizy i prowadzić do błędnych wniosków.

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.

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)
    }
  }
}

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.

library(outliers)
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

Cena: Najwyższa wartość ceny, czyli 13300000, jest odstająca. Powierzchnia: Najwyższa wartość powierzchni, czyli 16200, jest odstająca. Liczba sypialni: Najwyższa wartość liczby sypialni, czyli 6, jest odstająca. Liczba łazienek: Najwyższa wartość liczby łazienek, czyli 4, jest odstająca. Liczba pięter: Najwyższa wartość liczby pięter, czyli 4, nie jest odstająca. Liczba miejsc parkingowych: Najwyższa wartość liczby miejsc parkingowych, czyli 3, nie jest odstająca.

Walidacja danych

#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.