texas = read.csv("realestate_texas.csv", sep = ",", encoding = "utf-8")
head(texas, 5)
##       city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010     1    83 14.162       163800     1533              9.5
## 2 Beaumont 2010     2   108 17.690       138200     1586             10.0
## 3 Beaumont 2010     3   182 28.701       122400     1689             10.6
## 4 Beaumont 2010     4   200 26.819       123200     1708             10.6
## 5 Beaumont 2010     5   202 28.833       123100     1771             10.9
attach(texas)

library(dplyr)
## 
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
## 
##     filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     intersect, setdiff, setequal, union
library(moments)
library(ggplot2)

1) ANALISI DELLE VARIABILI

dim(texas)
## [1] 240   8

dataset con 8 variabili e 240 osservazioni

VARIABILE CITY

table(city)
## city
##              Beaumont Bryan-College Station                 Tyler 
##                    60                    60                    60 
##         Wichita Falls 
##                    60

varaibile categorica nominale equidistribuita tra le 4 modalità

VARIABILE YEAR

table(year)
## year
## 2010 2011 2012 2013 2014 
##   48   48   48   48   48

variabile temporale equidistribuita tra le sue 5 modalità

VARIABILE MONTH

table(month)
## month
##  1  2  3  4  5  6  7  8  9 10 11 12 
## 20 20 20 20 20 20 20 20 20 20 20 20

variabile temporale inerente i 12 mesi dell’anno. L’analisi delle frequenze assolute denota anche qui una equidistribuzione

VARIABILE SALES

summary(sales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    79.0   127.0   175.5   192.3   247.0   423.0

variabile quantitativa discreta inerente al numero delle vendite effettuate. I valori oscillano in un range rientrante nell’intervallo 79 - 423

VARIABILE VOLUME

summary(volume)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.166  17.660  27.062  31.005  40.893  83.547

variabile quantitativa discreta inerente al volume delle vendite effettuate in milioni di dollari il cui range va da un minimo di 8.166 milioni di usd ad un massimo di 83.547 milioni usd

VARIABILE MEDIAN PRICE

summary(median_price)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   73800  117300  134500  132665  150050  180000

variabile quantitativa discreta che descrive il valore mediano del prezzo delle vendite

VARIABILE LISTINGS

summary(listings)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     743    1026    1618    1738    2056    3296

varaibile quantitativa discreta inerente al numero di annunci attivi di vendita

VARAIBILE MONTH INVENTORY

summary(months_inventory)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.400   7.800   8.950   9.193  10.950  14.900

varaibile quantitatvi espressa in mesi ed inerente al tempo necessario per effettiva una vendita una volta pubblicato il relativo annuncio

2) INDICI DI POSIZIONE, VARIABILITÀ E FORMA per le variabili categoriche verrà calcolata media,mediana, varianza, dev std, indice di asimmetria e curtosi. Gli indici verrano riuniti in un datafame, in cui le colonne saranno i nomi delle variabili del dataset texas, mentre le osservazioni saranno rappresentate dagli indici calcolati. Per le varibili categoriche invece verrà creata una distribuzione di frequenza assoluta e relativa.

indexes = function(x){
  return(c(mean(x),
           median(x),
           var(x),
           sd(x),
           skewness(x),
           kurtosis(x)-3))
}
indexes_sales = indexes(sales)
indexes_volume = indexes(volume)
indexes_median_price = indexes(median_price)
indexes_listings = indexes(listings)
indexes_months_inventory = indexes(months_inventory)

row_names = c("mean", "median","variance", "standard deviation", "skweness",
              "kurtosis")

indexes_data = data.frame(indexes_sales, 
                          indexes_volume,
                          indexes_median_price,
                          indexes_listings,
                          indexes_months_inventory,
                          row.names = row_names)

indexes_data
##                    indexes_sales indexes_volume indexes_median_price
## mean                 192.2916667      31.005188         1.326654e+05
## median               175.5000000      27.062500         1.345000e+05
## variance            6344.2995119     277.270692         5.135730e+08
## standard deviation    79.6511112      16.651447         2.266215e+04
## skweness               0.7181040       0.884742        -3.645529e-01
## kurtosis              -0.3131764       0.176987        -6.229618e-01
##                    indexes_listings indexes_months_inventory
## mean                   1.738021e+03               9.19250000
## median                 1.618500e+03               8.95000000
## variance               5.665690e+05               5.30688912
## standard deviation     7.527078e+02               2.30366862
## skweness               6.494982e-01               0.04097527
## kurtosis              -7.917900e-01              -0.17444754

VARIABILI CARìTEGORICHE CITY

N_city = length(city)
ni_city = table(city)
fi_city = ni_city / N_city

ni_city
## city
##              Beaumont Bryan-College Station                 Tyler 
##                    60                    60                    60 
##         Wichita Falls 
##                    60
fi_city
## city
##              Beaumont Bryan-College Station                 Tyler 
##                  0.25                  0.25                  0.25 
##         Wichita Falls 
##                  0.25

YEAR

N_year = length(year)
ni_year = table(year)
fi_year = ni_year / N_year

ni_year
## year
## 2010 2011 2012 2013 2014 
##   48   48   48   48   48
fi_year
## year
## 2010 2011 2012 2013 2014 
##  0.2  0.2  0.2  0.2  0.2

3) IDENTIFICAZIONE DELLE VARAIBILI CON MAGGIOR ASIMMETRIA E VARABILITÀ 3.1) ASIMMETRIA

skweness_data = indexes_data["skweness",]
skweness_data
##          indexes_sales indexes_volume indexes_median_price indexes_listings
## skweness      0.718104       0.884742           -0.3645529        0.6494982
##          indexes_months_inventory
## skweness               0.04097527

La variabile con la maggior asimmetria risulta essere “volume”. Essa presenta il più alto valoe positivo determinando pertanto un’asimmetria negativa ovvero la distribuzione dela variabile tende a concentrarsi verso i valori più bassi e a sinisra della media, come è possibile osservare dal grafico sottostante:

plot(density(volume), main = "")+
  abline(v = mean(volume), col = "blue")+
  title("Distribuzione della variabile volume")

## integer(0)

l’unica varabile ad avere una skewness negaiva è la variabile median_price, facendo si che la sua distribuzione concentri le osservazioni verso valori più alti e a destra della media

plot(density(median_price), main = "")+
  abline(v = mean(median_price), col = "blue")+
  title("Distribuzione della variabile median price")

## integer(0)

3.2) MAGGIOR VARIABILITA’ Per calcolare la variabilità tra variabili di diversa grandezza, applico il coefficiente di variazione

CV = function(x){
  return((sd(x) / mean(x)*100))
}

CV_sales = CV(sales)
CV_volume = CV(volume)
CV_median_price = CV(median_price)
CV_listing = CV(listings)
CV_months_inventory = CV(months_inventory)

cv_data = data.frame(CV_sales, CV_volume, CV_median_price, CV_listing,
                     CV_months_inventory,
                     row.names = "CV")

cv_data
##    CV_sales CV_volume CV_median_price CV_listing CV_months_inventory
## CV 41.42203  53.70536        17.08218   43.30833            25.06031

come può essere osservato dal dataset sopra riportato, la variabile volume presenta la maggior variabilità grazie ad un coefficiente di variazione pari a 53,70, mentre la variabile median_price presenta la minor variabilità con coefficiente di variaizone di 17,08

4) CREAZIONE DI CLASSI PER UNA VARIABILE QUANTITATIVA VARAIBILE SALES

verifichiamo i valori minimi e massimi per decidere con quali classi suddividere le osservazioni della variabile

min(sales) 
## [1] 79
max(sales)
## [1] 423

suddividiamo la distribuzione della variabile in classi di ampiezza 50 partendeo da 50 e terminando con 450

texas$sales_cl = cut(texas$sales,
                     breaks = c(50, 100, 150, 200, 250, 300, 350, 400, 450))

tabella di distribuzione di frequenza

N = length(texas$sales_cl)
ni = table(texas$sales_cl)
fi = ni / N
Ni = cumsum(ni)
Fi = Ni / N

distr_freq_sales = data.frame(cbind(ni,fi,Ni, Fi))
distr_freq_sales
##           ni         fi  Ni        Fi
## (50,100]  21 0.08750000  21 0.0875000
## (100,150] 72 0.30000000  93 0.3875000
## (150,200] 56 0.23333333 149 0.6208333
## (200,250] 32 0.13333333 181 0.7541667
## (250,300] 34 0.14166667 215 0.8958333
## (300,350] 13 0.05416667 228 0.9500000
## (350,400]  9 0.03750000 237 0.9875000
## (400,450]  3 0.01250000 240 1.0000000

La tabella ci permette di osservare come nel mercato immobiliare la maggior frequenza di vendite rientri nella classe 100-150. Inoltre è interessante osservare come l’89% delle valori rientri nel range 50-300. Ciò ci permette di affermare che nel mercato immobiliare del texas risulti difficile superare un numero di vendite di immobili superiore a 300.

ggplot(texas)+
  geom_bar(aes(x = texas$sales_cl),
           stat = "count",
           col = "black",
           fill = "darkorange")+
  labs(title = "Distribuzione di frequenze assolute di sales_cl",
       x = "Classi di sales",
       y = "Frequenza assolute") +
  theme_light()
## Warning: Use of `texas$sales_cl` is discouraged.
## ℹ Use `sales_cl` instead.

5) CALCOLO DELLE PROBABILITÀ *#5.1) Probabilità che una vendita sia effettuata nella città di Beaumont

casi_tot = sum(listings)
casi_fav_beaumont = texas %>%
  group_by(city) %>% 
  filter(city == "Beaumont") %>% 
  summarise(casi_favorevoli = sum(listings))

prob_Beaumont = casi_fav_beaumont$casi_favorevoli / casi_tot
prob_Beaumont
## [1] 0.2415559

5.2) Probabilità che la vendita sia stata effettuata a luglio

casi_possibili_jul = sum(sales)

casi_favorevoli_jul = texas %>% 
  group_by(month) %>% 
  filter(month == 7) %>% 
  summarise(sum_sales_july =sum(sales))

prob_sale_july = casi_favorevoli_jul$sum_sales_july / casi_possibili_jul
prob_sale_july
## [1] 0.1021668

5.3) Probabilità che una casa sia stata venduta nel mese di dicembre 2012

casi possibili uguale al punto di sopra pertanto non procedo nuovamente al calcolo ma la inizializzo in un nuovo oggetto

casi_possibili_dec12 = casi_possibili_jul

casi_fav_dec12 = texas %>% 
  group_by(year) %>% 
  filter(year == 2012)%>% 
  filter(month == 12) %>% 
  summarise(sum_sales_dec12 = sum(sales))

prob_sale_dec12 = casi_fav_dec12$sum_sales_dec12 / casi_possibili_dec12
prob_sale_dec12
## [1] 0.01393283

6)CREAZIONE NUOVE VARIABILI Nuova colonna prezzo medio a partire dalle variaibli disponibili Prezzo medio ricavato da volume su sales per ogni mese in percentuale

avarage_selling_price = c((volume/sales)*100)
texas$avarage_selling_price = avarage_selling_price

Indice di penterazione del mercato con rapprto in % tra sales e listings

mkt_penetration_rate_index = c((sales / listings)*100)
texas$mkt_penetration_rate_index = mkt_penetration_rate_index
head(texas, 10)
##        city year month sales volume median_price listings months_inventory
## 1  Beaumont 2010     1    83 14.162       163800     1533              9.5
## 2  Beaumont 2010     2   108 17.690       138200     1586             10.0
## 3  Beaumont 2010     3   182 28.701       122400     1689             10.6
## 4  Beaumont 2010     4   200 26.819       123200     1708             10.6
## 5  Beaumont 2010     5   202 28.833       123100     1771             10.9
## 6  Beaumont 2010     6   189 27.219       122800     1803             11.1
## 7  Beaumont 2010     7   164 22.706       124300     1857             11.7
## 8  Beaumont 2010     8   174 25.237       136800     1830             11.6
## 9  Beaumont 2010     9   124 17.233       121100     1829             11.7
## 10 Beaumont 2010    10   150 23.904       138500     1779             11.5
##     sales_cl avarage_selling_price mkt_penetration_rate_index
## 1   (50,100]              17.06265                   5.414220
## 2  (100,150]              16.37963                   6.809584
## 3  (150,200]              15.76978                  10.775607
## 4  (150,200]              13.40950                  11.709602
## 5  (200,250]              14.27376                  11.405985
## 6  (150,200]              14.40159                  10.482529
## 7  (150,200]              13.84512                   8.831449
## 8  (150,200]              14.50402                   9.508197
## 9  (100,150]              13.89758                   6.779661
## 10 (100,150]              15.93600                   8.431703

7) ANALISI CONDIZIONATA

cities = texas %>% 
  group_by(city) %>% 
  summarise(mean_sales = mean(sales), 
            dev_std_sales = sd(sales))
ggplot(cities)+
  geom_bar(aes(x = city,
               y = mean_sales),
           stat = "identity",
           col = "black",
           fill = "lightblue")+
  labs(title = "Media delle vendite nelle città",
       x = "Città",
       y ="Media delle vendite")

ggplot(cities)+
  geom_bar(aes(x = city,
               y = dev_std_sales),
           stat = "identity",
           col = "black",
           fill = "blue")+
  labs(title = "Deviazione standard delle vendite nelle città",
       x = "Città",
       y ="Deviazione standard")

La città di Tyler è quella in cui mediamente negli anni sono state eseguite il maggior numero di vendite, mentre Wichita Falls è la città che ha registrato il minor numero di vendite. Analizzando la dev_std è possibile veriifcare come a Wichita Falls le vendite sono state piuttosto costanti negli anni in quanto presenta una dev std più bassa di tutte; considerando sempre l’indice della deviazione standard, esso presenta i maggiori valori nelle città di Bryan-College Station in primis e Tyler a seguire, presupponendo pertanto che vi sia un mercato piuttosto instabile e costituito da periodi cd “morti” ad altri con alta frequenza di vendite.

cities2 = texas %>% 
  group_by(city) %>% 
  summarise(mean_volume = mean(volume),
            dev_std_volume = sd(volume))
ggplot(cities2) +
  geom_bar(aes(x = city,
               y  = mean_volume), 
           stat = "identity",
           col = "black",
           fill = "green")+
  labs(title = "Volumi medi di vendita espressi in milioni di $",
       x = "Città",
       y = "Volumi medi di vendita")

ggplot(cities2) +
  geom_bar(aes(x = city,
               y  = dev_std_volume), 
           stat = "identity",
           col = "black",
           fill = "darkgreen")+
  labs(title = "Deviazione std dei volumi vendita espressi in milioni di $",
       x = "Città",
       y = "Dev Std volumi di vendita")

L’andamento della variabile volume segue la falsa riga di sales. Anche in questo caso i maggiori profitti si hanno nella città di Tyler e a seguire in quella di Bryan-College Station, solo che quest’ultima presenta un’alta variabilità anche nei volumi di vendita, ppresupponendo che il mercato sia molto variegato anche a livello di prezzo.

ANDAMENTO DELLE VENDITE MEDIE DURANTE L’ANNO NELLE CITTA’

BEAUMONT

years_beaumont = texas %>% 
  group_by(month) %>% 
  filter(city == "Beaumont") %>% 
  summarise(mean_sales = mean(sales))

BRYAN-COLLEGE STATION

years_Bryan_College_Station = texas %>% 
  group_by(month) %>% 
  filter(city == "Bryan-College Station") %>% 
  summarise(mean_sales = mean(sales))

TYLER

years_tyler = texas %>% 
  group_by(month) %>% 
  filter(city == "Tyler") %>% 
  summarise(mean_sales = mean(sales))

WICHITA FALLS

years_wichita_falls = texas %>% 
  group_by(month) %>% 
  filter(city == "Wichita Falls") %>% 
  summarise(mean_sales = mean(sales))
ggplot()+
  geom_line(data = years_beaumont, aes(x = month, y = mean_sales, col = "Beaumont"))+
  geom_line(data = years_Bryan_College_Station,
            aes(x = month, y = mean_sales, col = "Bryan-College Station"))+
  geom_line(data = years_tyler, aes(x = month, y = mean_sales, col = "Tyler"))+
  geom_line(data = years_wichita_falls, 
            aes(x = month, y = mean_sales, col = "Wichita Falls"))+
  scale_x_continuous(breaks = seq(1,12,1))+
  scale_color_manual(name = "Legenda",
                     breaks = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls"),
                     values = c("blue", "green", "red", "orange"),
                     labels = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls")) + 
  labs(title = "Andamento medio del numero di vendite nei mesi",
       x ="Mesi", y ="Numero totale delle vendite") +
  theme_get()

VALORE DELLE VENDITE NEGLI ANNI

years = texas %>% group_by(year)
ggplot(years,
       aes(x = year, y= sales, fill = city))+
  geom_bar(stat = "identity",
           position = "dodge")+
  labs(title = "Confronto vendite negli anni tra le città",
       x = "Anni",
       y = "Totale vendite")

ggplot(years,
       aes(x = year, y= volume, fill = city))+
  geom_bar(stat = "identity",
           position = "dodge")+
  labs(title = "Confronto volumi di vendite in milioni di $ negli anni tra le città",
       x = "Anni",
       y = "Totale volumi di vendita")

8) CREAZIONE DI VISUALIZZAZIONI CON GGPLOT2

Boxplot prezzo mediano

ggplot(texas)+
  geom_boxplot(aes(x = city, y = median_price))+
  labs(title = "Confronto del prezzo mediano tra città",
       x  ="Città",
       y = "Prezzo mediano")

beaumont  = texas %>% 
  group_by(year) %>% 
  filter(city == "Beaumont") %>% 
  summarise(mean_sales = mean(sales),
            tot_sales = sum(sales),
            mean_volume = mean(volume), 
            tot_volume = sum(volume))

bcs  = texas %>% 
  group_by(year) %>% 
  filter(city == "Bryan-College Station") %>% 
  summarise(mean_sales = mean(sales),
            tot_sales = sum(sales),
            mean_volume = mean(volume), 
            tot_volume = sum(volume))

tyler  = texas %>% 
  group_by(year) %>% 
  filter(city == "Tyler") %>% 
  summarise(mean_sales = mean(sales),
            tot_sales = sum(sales),
            mean_volume = mean(volume), 
            tot_volume = sum(volume))

wichita  = texas %>% 
  group_by(year) %>% 
  filter(city == "Wichita Falls") %>% 
  summarise(mean_sales = mean(sales),
            tot_sales = sum(sales),
            mean_volume = mean(volume), 
            tot_volume = sum(volume))

andamento medio delle vendite negli anni divisi per città

ggplot()+
  geom_line(data = beaumont, 
            aes(x = year, y = mean_sales, col = "Beaumont"))+
  geom_line(data = bcs, 
            aes(x = year, y = mean_sales, col = "Bryan-College Station"))+
  geom_line(data = tyler,
            aes(x = year, y=mean_sales, col = "Tyler"))+
  geom_line(data  = wichita,
            aes(x = year, y = mean_sales, col = "Wichita Falls")) +
  scale_color_manual(name = "Legenda",
                     breaks = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls"),
                     values = c("blue", "green", "red", "orange"),
                     labels = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls")) + 
  labs(title = "Andamento medio del numero di vendite negli anni",
       x ="Anni", y ="Medie delle vendite") +
  theme_get()

vendite totali negli anni nelle diverse città

ggplot()+
  geom_line(data = beaumont, 
            aes(x = year, y = tot_sales, col = "Beaumont"))+
  geom_line(data = bcs, 
            aes(x = year, y = tot_sales, col = "Bryan-College Station"))+
  geom_line(data = tyler,
            aes(x = year, y=tot_sales, col = "Tyler"))+
  geom_line(data  = wichita,
            aes(x = year, y = tot_sales, col = "Wichita Falls")) +
  scale_color_manual(name = "Legenda",
                     breaks = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls"),
                     values = c("blue", "green", "red", "orange"),
                     labels = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls")) + 
  labs(title = "Numero di vendite totali negli anni",
       x ="Anni", y ="Totale delle vendite") +
  theme_get()

andamento delle medie dei volumi di vendita negli anni

ggplot()+
  geom_line(data = beaumont, 
            aes(x = year, y = mean_volume, col = "Beaumont"))+
  geom_line(data = bcs, 
            aes(x = year, y = mean_volume, col = "Bryan-College Station"))+
  geom_line(data = tyler,
            aes(x = year, y=mean_volume, col = "Tyler"))+
  geom_line(data  = wichita,
            aes(x = year, y = mean_volume, col = "Wichita Falls")) +
  scale_color_manual(name = "Legenda",
                     breaks = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls"),
                     values = c("blue", "green", "red", "orange"),
                     labels = c("Beaumont", "Bryan-College Station",
                                "Tyler", "Wichita Falls")) + 
  labs(title = "Andamento medio dei volumi di vendita negli anni",
       x ="Anni", y ="Media dei volumi di vendita") +
  theme_get()

*CONSIDERAZIONI FINALI

BEUAMONT la città dopo un iniziale trend negativo, ha ripreso in positivo l’attività immobiliare sia per quanto concerne il numero di vendite che i suoi volumi.

TYLER Tyler si dimostra essere la città con il più alto valore aggiunto del settore. Infatti non solo registra negli anni il più alto numero di vendite ma anche i più alti volumi di vendita, dimostrando che in questa città vengono vendute molti immobilie e ad un alto prezzo.

BRYAN-COLLEGE STATION I dati riscontrati sono secondi solo alla città di Tyler, ma il mercato risulta essere più variegato: infatti essa denota un’alta deviazione standard che denota la possibilità di acquistare diverse tipoogie di immobili a differenti prezzi

WICHITA FALLS L’unica città in cui sia il numero che i volumi di vendita sono rimasti sempre bassi. Gli immobili hanno scarso appeal e il loro prezzo riuslta essere netta- mente inferiore rispetto alle altre città.