#Librerire
options(repos = c(CRAN = "https://cran.mirror.garr.it/CRAN/"))
install.packages("e1071") # Per kurtosi e asimmetria
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'e1071' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("moments")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'moments' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("tidyverse")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'tidyverse' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("dplyr") #per manipolare il dataframe
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'dplyr' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("kableExtra")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'kableExtra' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("tidyr")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'tidyr' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
library(kableExtra)
## Warning: il pacchetto 'kableExtra' è stato creato con R versione 4.4.2
library(tidyverse)
## Warning: il pacchetto 'tidyverse' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'ggplot2' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'tidyr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'readr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'purrr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'dplyr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'forcats' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'lubridate' è stato creato con R versione 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(gghalves)
## Warning: il pacchetto 'gghalves' è stato creato con R versione 4.4.2
library(dplyr)
library(knitr)
## Warning: il pacchetto 'knitr' è stato creato con R versione 4.4.2
library(moments)
library(kableExtra)
L’azienda Texas Realty Insights desidera analizzare le tendenze del mercato immobiliare nello stato del Texas, sfruttando i dati storici relativi alle vendite di immobili.
L’obiettivo è fornire insight statistici e visivi che supportino le decisioni strategiche di vendita e ottimizzazione delle inserzioni immobiliari.
Identificare e interpretare i trend storici delle vendite immobiliari in Texas.
Valutare l’efficacia delle strategie di marketing delle inserzioni immobiliari.
Offrire una rappresentazione grafica dei dati che evidenzi la distribuzione dei prezzi e delle vendite tra città, mesi e anni.
dati <- read.csv("C:/Users/User/Desktop/PROG_DESCRITTIVA/realestate_texas.csv")
##1. Analisi delle variabili
summary(dati)
## city year month sales
## Length:240 Min. :2010 Min. : 1.00 Min. : 79.0
## Class :character 1st Qu.:2011 1st Qu.: 3.75 1st Qu.:127.0
## Mode :character Median :2012 Median : 6.50 Median :175.5
## Mean :2012 Mean : 6.50 Mean :192.3
## 3rd Qu.:2013 3rd Qu.: 9.25 3rd Qu.:247.0
## Max. :2014 Max. :12.00 Max. :423.0
## volume median_price listings months_inventory
## Min. : 8.166 Min. : 73800 Min. : 743 Min. : 3.400
## 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026 1st Qu.: 7.800
## Median :27.062 Median :134500 Median :1618 Median : 8.950
## Mean :31.005 Mean :132665 Mean :1738 Mean : 9.193
## 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056 3rd Qu.:10.950
## Max. :83.547 Max. :180000 Max. :3296 Max. :14.900
str(dati)
## 'data.frame': 240 obs. of 8 variables:
## $ city : chr "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : int 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : int 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num 163800 138200 122400 123200 123100 ...
## $ listings : int 1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
## $ months_inventory: num 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
N<-dim(dati)[1] #numero di osservzaioni fatte
| Variabile | tipologia | |
|---|---|---|
| City | città di riferimento | qualitativa nominale |
| Year | anno di riferimento | quantitativa continua |
| Month | mese di riferimento | qualitativa nominale |
| Sales | numero totale di vendite | quantitativa discreta |
| Volume | valore totale delle vendite (in milioni di dollari) | quantitativa continua |
| Median_price | prezzo mediano di vendita (in dollari) | quantitativa continua |
| Listings | numero totale di annunci attivi | quantitativa discreta |
| Month_inventory | quantità di tempo necessaria per vendere tutte le inserzioni correnti, espresso in mesi | quantitativa continua |
definita la tipologia di variabile vado a calcolare: - per le variabili quantitative: indici di posizione, indici di forma (asimmetria e curtosi) e variabilità (devizione standard e variabilità); - per le variabili qualitative: distribzion di frequenza;
ni_city <- table (dati$city)
fi_city <- table (dati$city)/N
Ni_city <- cumsum (ni_city)
Fi_city <- Ni_city/N
dist_freq_città <- cbind(ni_city, fi_city, Ni_city, Fi_city)
dist_freq_città
## ni_city fi_city Ni_city Fi_city
## Beaumont 60 0.25 60 0.25
## Bryan-College Station 60 0.25 120 0.50
## Tyler 60 0.25 180 0.75
## Wichita Falls 60 0.25 240 1.00
barplot(
ni_city,
main = "Ditribuzione della variabile città",
col="red",
xlab = "Città",
ylab = "Frequenza"
)
ni_year <- table (dati$year)
fi_year <- table (dati$year)/N
Ni_year <- cumsum (ni_year)
Fi_year <- Ni_year/N
dist_freq_year <- cbind(ni_year, fi_year, Ni_year, Fi_year)
dist_freq_year
## ni_year fi_year Ni_year Fi_year
## 2010 48 0.2 48 0.2
## 2011 48 0.2 96 0.4
## 2012 48 0.2 144 0.6
## 2013 48 0.2 192 0.8
## 2014 48 0.2 240 1.0
max_freq_year <- max(ni_year) +5
barplot(
ni_year,
main = "Ditribuzione della variabile Year",
col="red",
xlab = "Year",
ylab = "Frequenza",
ylim = c(0,max_freq_year),
las=1
)
ni_month <- table (dati$month)
fi_month <- table (dati$month)/N
Ni_month <- cumsum (ni_month)
Fi_month <- Ni_month/N
dist_freq_month <- cbind(ni_month, fi_month, Ni_month, Fi_month)
dist_freq_month
## ni_month fi_month Ni_month Fi_month
## 1 20 0.08333333 20 0.08333333
## 2 20 0.08333333 40 0.16666667
## 3 20 0.08333333 60 0.25000000
## 4 20 0.08333333 80 0.33333333
## 5 20 0.08333333 100 0.41666667
## 6 20 0.08333333 120 0.50000000
## 7 20 0.08333333 140 0.58333333
## 8 20 0.08333333 160 0.66666667
## 9 20 0.08333333 180 0.75000000
## 10 20 0.08333333 200 0.83333333
## 11 20 0.08333333 220 0.91666667
## 12 20 0.08333333 240 1.00000000
max_freq_month <- max(ni_month) +5
barplot(
ni_month,
main = "Ditribuzione della variabile month",
col="red",
xlab = "month",
ylab = "Frequenza",
ylim = c(0,max_freq_month),
las=1
)
Osservzioni su variabili qualitative:
- city: le osservazioni si distribuiscono in modo uniforme sulle quattro città oggetto di studio. Per ogni città lo studio riporta 60 osservazioni;
- year : le osservazioni si susseguono per ogni anno dal 2010 al 2024. Per ciascun anno lo studio riporta 48 osservazioni.
- month : le osservazioni si distribuiscono in modo uniforme per ciascuno dei 12 mesi di ciascin anno. Per ogni mese vengono riportate 20 oesservazioni.
La distribuzione di frequenza delle singole variabili quanlitative dimostra che le varie osservazioni sono state distribuite in modo uniforme nel corso dei 5 anni oggetto di studio, in modo da avere un andamento continui del mercato immobiliare del Texas.
library(dplyr)
names(dati)
## [1] "city" "year" "month" "sales"
## [5] "volume" "median_price" "listings" "months_inventory"
df_var_quantitative <- dati%>% select(sales, volume, median_price, listings, months_inventory)
summary(df_var_quantitative)
## sales volume median_price listings
## Min. : 79.0 Min. : 8.166 Min. : 73800 Min. : 743
## 1st Qu.:127.0 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026
## Median :175.5 Median :27.062 Median :134500 Median :1618
## Mean :192.3 Mean :31.005 Mean :132665 Mean :1738
## 3rd Qu.:247.0 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056
## Max. :423.0 Max. :83.547 Max. :180000 Max. :3296
## months_inventory
## Min. : 3.400
## 1st Qu.: 7.800
## Median : 8.950
## Mean : 9.193
## 3rd Qu.:10.950
## Max. :14.900
attach(dati)
stats <- function(x) {
skewness <- function(x) {
mu <- mean(x)
sigma <- sd(x)
n <- length(x)
return(sum((x - mu)^3) / (n * sigma^3))
}
kurtosis <- function(x) {
mu <- mean(x)
sigma <- sd(x)
n <- length(x)
m4_value <- sum((x - mu)^4) / n
return(m4_value / sigma^4 - 3)
}
return(list(
Asimmetria = round(skewness(x), 2),
Curtosi = round(kurtosis(x), 2)
))
}
selected_columns<-c("sales", "volume","median_price","listings","months_inventory")
results_list <- list() #raccolta dati
for (col in selected_columns) {
stats_result <- stats(dati[[col]])
results_list[[col]] <- unlist(stats_result) # Salva i risultati in un vettore.
}
# Trasformare in dataframe
results_df <- as.data.frame(results_list) # ogni colonna rappresenta una variabile
results_df$Statistiche <- rownames(results_df) # aggiunge le statistiche come colonna
rownames(results_df) <- NULL # Rimuove i nomi delle righe
#definizione tabella
results_df <- results_df[, c(ncol(results_df), 1:(ncol(results_df) - 1))]
results_df %>%
kable(format = "html", digits = 2, align = "c") %>%
kable_styling(full_width = FALSE, position = "center", bootstrap_options = c("striped", "hover")) %>%
column_spec(2:ncol(results_df), width = "150px")
| Statistiche | sales | volume | median_price | listings | months_inventory |
|---|---|---|---|---|---|
| Asimmetria | 0.71 | 0.88 | -0.36 | 0.65 | 0.04 |
| Curtosi | -0.34 | 0.15 | -0.64 | -0.81 | -0.20 |
COMMENTO:
sales: asimmetria: distribuzione asimmetrica positiva, quindi tendente a dx. kurtosi: Distribuzione leggermente platicurtica, con code meno pronunciate.
volume: asimmetria: distribuzione asimmetrica positiva , maggiore della precedente con valori alti. kurtosi: distribuzione simile alla normale;
median_price: asimmetria:distribuzione asimmetrica negativa, indica la presenza di valori maggiori in corrispondenza della fascia alta prezzi; kurtosi: distribuzione platicurtica;
listings: asimmetria: distribuzione asimmetrica positiva, quindi tendente a dx quindi presenti valori alti; kurtosi : distribuzione platicurtica;
months_inventory: simmetrica. asimmetria: distribuzione simmetrica; kurtosi : distribuzione platicurtica, di poco.
Coefficiente di Variazione:
install.packages("kableExtra")
## Warning: il pacchetto 'kableExtra' è in uso e non sarà installato
library(dplyr)
library(kableExtra)
cv <- function(x) {
return(sd(x) / mean(x) * 100)
}
sd_values_cv <- data.frame(
Variabile = c("Sales", "Volume", "Median_Price", "Listings", "Months_Inventory"),
C_Variazione= c(cv(dati$sales),
cv(dati$volume),
cv(dati$median_price),
cv(dati$listings),
cv(dati$months_inventory))
)
# Arrotondamento a due cifre decimali
sd_values_cv$C_Variazione <- round(sd_values_cv$C_Variazione, 2)
# Visualizzazione della tabella di variabilità
kableExtra:: kable(sd_values_cv, caption = "Incidi di variabilità - Coefficiente di Variazione") %>%
kable_styling(latex_options = c("hold_position"))
| Variabile | C_Variazione |
|---|---|
| Sales | 41.42 |
| Volume | 53.71 |
| Median_Price | 17.08 |
| Listings | 43.31 |
| Months_Inventory | 25.06 |
install.packages("kableExtra")
## Warning: il pacchetto 'kableExtra' è in uso e non sarà installato
library(dplyr)
library(kableExtra)
sd_values <- data.frame(
Variabile = c("Sales", "Volume", "Median_Price", "Listings", "Months_Inventory"),
Deviazione_Standard = c(sd(dati$sales),
sd(dati$volume),
sd(dati$median_price),
sd(dati$listings),
sd(dati$months_inventory))
)
# Arrotondamento a due cifre decimali
sd_values$Deviazione_Standard <- round(sd_values$Deviazione_Standard, 2)
# Visualizzazione della tabella di variabilità
kableExtra:: kable(sd_values, caption = "Incidi di variabilità - Deviazione Standard per Variabile") %>%
kable_styling(latex_options = c("hold_position"))
| Variabile | Deviazione_Standard |
|---|---|
| Sales | 79.65 |
| Volume | 16.65 |
| Median_Price | 22662.15 |
| Listings | 752.71 |
| Months_Inventory | 2.30 |
In Sintesi:
stats <- function(x) {
cv <- function(x) {
return(sd(x) / mean(x) * 100)
}
return(list(
DeviazioneStandard_DS = round(sd(x), 2),
CoefficienteVariazione_CV = round(cv(x), 2),
Range_R = round(max(x) - min(x), 2),
IntervalloInterquartile_IQR= round(IQR(x), 2),
Varianza_VAR = round(var(x), 2)
))
}
#prima riga: elenco delle variabili
selected_columns<-c("sales", "volume","median_price","listings","months_inventory")
results_list <- list() #risultati in lista
# Calcolo indici per variabile
for (col in selected_columns) {
stats_result <- stats(dati[[col]])
results_list[[col]] <- unlist(stats_result)
}
# lista da utilizzare nel dataframe
results_df <- as.data.frame(results_list)
results_df$Statistiche <- rownames(results_df)
rownames(results_df) <- NULL # Rimuove i nomi delle righe
#prima colonna: elenco indici variabilità
results_df <- results_df[, c(ncol(results_df), 1:(ncol(results_df) - 1))]
results_df %>%
kable(format = "html", digits = 2, align = "c") %>%
kable_styling(full_width = FALSE, position = "center", bootstrap_options = c("striped", "hover")) %>%
column_spec(2:ncol(results_df), width = "150px")
| Statistiche | sales | volume | median_price | listings | months_inventory |
|---|---|---|---|---|---|
| DeviazioneStandard_DS | 79.65 | 16.65 | 22662.15 | 752.71 | 2.30 |
| CoefficienteVariazione_CV | 41.42 | 53.71 | 17.08 | 43.31 | 25.06 |
| Range_R | 344.00 | 75.38 | 106200.00 | 2553.00 | 11.50 |
| IntervalloInterquartile_IQR | 120.00 | 23.23 | 32750.00 | 1029.50 | 3.15 |
| Varianza_VAR | 6344.30 | 277.27 | 513572983.09 | 566568.97 | 5.31 |
Da questi dati si deduce che:
Sales: Varibilità notevole, il Rage va di 344 , con una variazione del corpo centrale dei dati di 120 (IQR).
Volume: La variabilità dei dati è molto ampia, con un CV del 53%.
Median_price : La variabilità decisamente più bassa, passando al 17%. I valori indicano che i prezzi degli immoili non si allontanano molto dalla media.
Listing : Variabilità notevole, confemta dal Range importante e l’ampia differenza tra il terzo quartile ed il primo quartile (IQR). var= 43.31%
Month_inventory: i dati indicano che , in media, per poter vendere tutte le inserzioni correnti, sono necessari 11,5 mesi , con una varianza molto bassa.
Dai dati raccolti all’interno delle tabelle ho potuto confrontare i vari risultati constatando che VOLUME (Valore totale delle vendite in milioni di dollari) e sia la variabile con maggiore VARIABILITA’(53.71%) sia la variabile più asimmetrica (0.88).
Questo dimostra che c’è un’ampia variabilità della distribuzione delle vendite, con periodi più vantaggiosi e periodi meno vantaggiosi. Quindi il mercato non di distribuisce in modo uniforme ed il valore elevato dell’asimmetria indica che ci sono dei numeri elevati che indicano che in determinate città o in determinati periodi le vendite sono mettamente maggiori.
Se le vendite fossero state uniformi o se fosse un mericato in merdita saremmo in una condizione normale, nel primo caso , o negativa, nel secodo caso.
Dato che Variabile volume si è dimostrata essere così di rilievo nella valutazione dell’andamento del mercato immobiliare del Texas, continuo a studiarla:
#definisco gli estremi che contengono i valori
cat("Minimo =", min(volume), "\n")
## Minimo = 8.166
cat("Massimo =", max(volume), "\n")
## Massimo = 83.547
volume_intervals <- cut(volume,breaks = seq(from = 8, to = max(volume, na.rm = TRUE) + 1, by = 15),right = FALSE)
distr_freq <- function(x, n) {
abs_freq <- table(x)
rel_freq <- round(abs_freq / n, 2)
freq_distr <- cbind(abs_freq, rel_freq)
return(freq_distr)
}
distr_freq_volume <- distr_freq(volume_intervals, N)
abs_freq<-distr_freq_volume[,"abs_freq"]
rel_freq<-distr_freq_volume[,"rel_freq"]
rel_cum<-cumsum(abs_freq)
abs_cum <- rel_cum/N
volume_distr <- cbind(
round(distr_freq_volume, 2),
rel_cum = round(rel_cum, 2),
abs_cum = round(abs_cum, 2)
)
volume_distr<-as.data.frame(volume_distr)
volume_distr$Volume<-row.names(volume_distr)
row.names(volume_distr)<-NULL
volume_distr<-volume_distr[,c(ncol(volume_distr), 1: ncol(volume_distr) -1)]
volume_distr %>%
kable(format="html", digits=2, align = "c")%>%
kable_styling(full_width = FALSE, position="center", bootstrap_options = c("striped", "hover")) %>%
column_spec(2:ncol(volume_distr), width = "50px")
| Volume | abs_freq | rel_freq | rel_cum | abs_cum |
|---|---|---|---|---|
| [8,23) | 92 | 0.38 | 92 | 0.38 |
| [23,38) | 79 | 0.33 | 171 | 0.71 |
| [38,53) | 43 | 0.18 | 214 | 0.89 |
| [53,68) | 17 | 0.07 | 231 | 0.96 |
| [68,83) | 8 | 0.03 | 239 | 1.00 |
#Grafico
volume_intervals <- na.omit(volume_intervals)
ggplot(data = data.frame(volume_intervals), aes(x = volume_intervals)) +
geom_bar(stat = "count", col = "black", fill = "red") +
labs(title = "Distribuzione del valore totale delle vendite nel mercato immobiliare del Texas",
x = "Valore totale delle vendite per classe (mln $)",
y = "Frequenze assolute") +
theme_bw()
Indice dell’indice di eterogeneità di Gini :
indice_gini<-function(x){
fi= table(x)/length(x)
J= length(table(x))
G = 1-sum(fi^2)
return(G/((J-1)/J))
}
indice_gini(volume_intervals)
## [1] 0.8800179
L’indice di Gini permette di misurate la variabilità utilizzata per descrivere la distribuzione della variabile Volume. essendo di 0.8800179 , quindi vicino ad 1, l’eterogeneità è massima, la variabile non è distribuita equamente ed è concentrata, come mostra il grafico, nelle classi più basse. Ciò vuol dire che c’è un maggior numero di vendite di immobili con un prezzo più basso, con vendite di immobili dai valori più alti meno frequanti.
Quindi la variabile, altamente variabile, spega come sia maggiore la vendita di immobili meno costori in Texas, ripetto a quelli più costosi. Questo potrebbe orientare gli imprenditori nel decidere quali immobili acquistare per poi vendere.
oss_Beaumont <- sum(dati$city == "Beaumont" ) #numero di osservazioni
probabilità_Beaumont <- oss_Beaumont/N
oss_Luglio <- sum(dati$month == "7" ) #numero di ossevazioni
probabilità_Luglio <- oss_Luglio/N
ni_year #numero di osservazioni per ciascun anno
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
oss_dic_12 <- ni_year/12
oss_dic_12
##
## 2010 2011 2012 2013 2014
## 4 4 4 4 4
prob_dic_12 <- oss_dic_12/N
prob_dic_12
##
## 2010 2011 2012 2013 2014
## 0.01666667 0.01666667 0.01666667 0.01666667 0.01666667
dati$mean_price<- dati$volume*10^6/dati$sales
summary(dati)
## city year month sales
## Length:240 Min. :2010 Min. : 1.00 Min. : 79.0
## Class :character 1st Qu.:2011 1st Qu.: 3.75 1st Qu.:127.0
## Mode :character Median :2012 Median : 6.50 Median :175.5
## Mean :2012 Mean : 6.50 Mean :192.3
## 3rd Qu.:2013 3rd Qu.: 9.25 3rd Qu.:247.0
## Max. :2014 Max. :12.00 Max. :423.0
## volume median_price listings months_inventory
## Min. : 8.166 Min. : 73800 Min. : 743 Min. : 3.400
## 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026 1st Qu.: 7.800
## Median :27.062 Median :134500 Median :1618 Median : 8.950
## Mean :31.005 Mean :132665 Mean :1738 Mean : 9.193
## 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056 3rd Qu.:10.950
## Max. :83.547 Max. :180000 Max. :3296 Max. :14.900
## mean_price
## Min. : 97010
## 1st Qu.:132939
## Median :156588
## Mean :154320
## 3rd Qu.:173915
## Max. :213234
In questo modo conosco il prezzo dell’immobile più economico ed il prezzo dell’immobile più costoso. La media dei costi di vendita di un immobile è 154.320 dollari.
-creare una colonna che misuri l’efficacia degli annunci di vendita: questo paramentro si può ottenere dividento il numero delle vendite effettuate(Sales) per la quantità di tempo necessaria per vendere tutte le inserzioni correnti (Months_inventory).
dati$efficacy_listings <- dati$sales/dati$months_inventory
summary(dati)
## city year month sales
## Length:240 Min. :2010 Min. : 1.00 Min. : 79.0
## Class :character 1st Qu.:2011 1st Qu.: 3.75 1st Qu.:127.0
## Mode :character Median :2012 Median : 6.50 Median :175.5
## Mean :2012 Mean : 6.50 Mean :192.3
## 3rd Qu.:2013 3rd Qu.: 9.25 3rd Qu.:247.0
## Max. :2014 Max. :12.00 Max. :423.0
## volume median_price listings months_inventory
## Min. : 8.166 Min. : 73800 Min. : 743 Min. : 3.400
## 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026 1st Qu.: 7.800
## Median :27.062 Median :134500 Median :1618 Median : 8.950
## Mean :31.005 Mean :132665 Mean :1738 Mean : 9.193
## 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056 3rd Qu.:10.950
## Max. :83.547 Max. :180000 Max. :3296 Max. :14.900
## mean_price efficacy_listings
## Min. : 97010 Min. : 8.737
## 1st Qu.:132939 1st Qu.:14.165
## Median :156588 Median :18.477
## Mean :154320 Mean :22.457
## 3rd Qu.:173915 3rd Qu.:26.424
## Max. :213234 Max. :98.293
Ci si sposta da un minimo di 8 immobili venduti al mese ad un massimo di 98. La media è di 22 immobili venduti per mese, lontano da numero max. Analizzando l’asimmetria della distribuzione
attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 3):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
curtosi_efficacy_listings <- kurtosis(dati$efficacy_listings)-3
asimmetria_efficacy_listings <- skewness(dati$efficacy_listings)
print(curtosi_efficacy_listings)
## [1] 7.763269
print(asimmetria_efficacy_listings)
## [1] 2.433237
# Calcolo delle statistiche per città
city_summary <- dati %>%
group_by(city) %>%
summarise(
mean_sales = mean(sales),
sd_sales = sd(sales),
mean_volume = mean(volume),
sd_volume = sd(volume),
mean_median_price = mean(median_price),
sd_median_price = sd(median_price),
mean_efficacy_listings = mean(efficacy_listings),
sd_efficacy_listings = sd(efficacy_listings)
)
# Arrotondamento
city_summary <- city_summary %>%
mutate(across(where(is.numeric), ~ round(., 2)))
# Risultati
kable(city_summary, caption = "Statistiche Riassuntive per Città") %>%
kable_styling(latex_options = c("hold_position"))
| city | mean_sales | sd_sales | mean_volume | sd_volume | mean_median_price | sd_median_price | mean_efficacy_listings | sd_efficacy_listings |
|---|---|---|---|---|---|---|---|---|
| Beaumont | 177.38 | 41.48 | 26.13 | 6.97 | 129988.3 | 10104.99 | 18.72 | 6.90 |
| Bryan-College Station | 205.97 | 84.98 | 38.19 | 17.25 | 157488.3 | 8852.24 | 31.18 | 20.26 |
| Tyler | 269.75 | 61.96 | 45.77 | 13.11 | 141441.7 | 9336.54 | 24.95 | 8.91 |
| Wichita Falls | 116.07 | 22.15 | 13.93 | 3.24 | 101743.3 | 11320.03 | 14.98 | 3.25 |
#Grafico risultati
ggplot(data = city_summary, aes(x = city, y = mean_efficacy_listings)) +
geom_bar(stat = "identity", color="black",fill="lightblue") +
geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings,
ymax = mean_efficacy_listings + sd_efficacy_listings),
width = 0.2, color = "black") +
labs(title = "Efficacia media degli annunci per città",
x = "Città",
y = "Efficacia annunci") +
coord_cartesian(ylim = c(0, 50)) +
theme_bw() +
theme(legend.position = "none")
Nella città Bryan-Colleg station gli annunci hanno una maggiore efficacia.
-Calcolo delle statistiche per Year
year_summary <- dati %>%
group_by(year) %>%
summarise(
mean_sales = mean(sales),
sd_sales = sd(sales),
mean_volume = mean(volume),
sd_volume = sd(volume),
mean_median_price = mean(median_price),
sd_median_price = sd(median_price),
mean_efficacy_listings = mean(efficacy_listings),
sd_efficacy_listings = sd(efficacy_listings)
)
# Arrotondamento
year_summary <- year_summary %>%
mutate(across(where(is.numeric), ~ round(., 2)))
#Risultati
kable(year_summary, caption = "Statistiche Riassuntive per Anno") %>%
kable_styling(latex_options = c("hold_position"))
| year | mean_sales | sd_sales | mean_volume | sd_volume | mean_median_price | sd_median_price | mean_efficacy_listings | sd_efficacy_listings |
|---|---|---|---|---|---|---|---|---|
| 2010 | 168.67 | 60.54 | 25.68 | 10.80 | 130191.7 | 21821.76 | 16.95 | 5.36 |
| 2011 | 164.12 | 63.87 | 25.16 | 12.20 | 127854.2 | 21317.80 | 14.73 | 3.87 |
| 2012 | 186.15 | 70.91 | 29.27 | 14.52 | 130077.1 | 21431.52 | 18.65 | 5.94 |
| 2013 | 211.92 | 84.00 | 35.15 | 17.93 | 135722.9 | 21708.08 | 26.51 | 11.27 |
| 2014 | 230.60 | 95.51 | 39.77 | 21.19 | 139481.2 | 25625.41 | 35.45 | 19.50 |
#Grafico Risultati
ggplot(data = year_summary, aes(x = year, y = mean_efficacy_listings)) +
geom_bar(stat = "identity", color="black",fill="lightblue") +
geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings,
ymax = mean_efficacy_listings + sd_efficacy_listings),
width = 0.2, color = "black") +
labs(title = "Efficacia media degli annunci per città",
x = "Anno",
y = "Efficacia annunci") +
coord_cartesian(ylim = c(0, 50)) +
theme_bw() +
theme(legend.position = "none")
Nell’anno 2014 gli annunci hanno una maggior effiacia.
# Calcolo delle statistiche per mese
month_summary <- dati %>%
group_by(month) %>%
summarise(
mean_sales = mean(sales),
sd_sales = sd(sales),
mean_volume = mean(volume),
sd_volume = sd(volume),
mean_median_price = mean(median_price),
sd_median_price = sd(median_price),
mean_efficacy_listings = mean(efficacy_listings),
sd_efficacy_listings = sd(efficacy_listings)
)
# Arrotondamento
month_summary <- month_summary %>%
mutate(across(where(is.numeric), ~ round(., 2)))
#Risultati
kable(month_summary, caption = "Statistiche Riassuntive per Mese") %>%
kable_styling(latex_options = c("hold_position"))
| month | mean_sales | sd_sales | mean_volume | sd_volume | mean_median_price | sd_median_price | mean_efficacy_listings | sd_efficacy_listings |
|---|---|---|---|---|---|---|---|---|
| 1 | 127.40 | 43.38 | 19.00 | 8.37 | 124250 | 25151.28 | 14.87 | 5.68 |
| 2 | 140.85 | 51.07 | 21.65 | 10.09 | 130075 | 22822.59 | 15.95 | 6.35 |
| 3 | 189.45 | 59.18 | 29.38 | 12.02 | 127415 | 23442.03 | 21.03 | 9.33 |
| 4 | 211.70 | 65.40 | 33.30 | 14.52 | 131490 | 21458.40 | 22.97 | 10.66 |
| 5 | 238.85 | 83.12 | 39.70 | 19.02 | 134485 | 18796.26 | 26.60 | 14.40 |
| 6 | 243.55 | 95.00 | 41.30 | 21.08 | 137620 | 19231.02 | 27.37 | 17.15 |
| 7 | 235.75 | 96.27 | 39.12 | 21.41 | 134750 | 21944.78 | 27.68 | 20.65 |
| 8 | 231.45 | 79.23 | 38.01 | 18.05 | 136675 | 22488.38 | 27.10 | 15.39 |
| 9 | 182.35 | 72.52 | 29.60 | 15.22 | 134040 | 24344.10 | 21.49 | 11.14 |
| 10 | 179.90 | 74.95 | 29.08 | 15.13 | 133480 | 26358.07 | 21.78 | 12.02 |
| 11 | 156.85 | 55.47 | 24.81 | 11.15 | 134305 | 24691.47 | 19.66 | 9.79 |
| 12 | 169.40 | 60.75 | 27.09 | 12.57 | 133400 | 22809.76 | 22.99 | 12.93 |
#Grafico Risultati
ggplot(data = month_summary, aes(x = month, y = mean_efficacy_listings)) +
geom_bar(stat = "identity", color="black",fill="lightblue") +
geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings,
ymax = mean_efficacy_listings + sd_efficacy_listings),
width = 0.2, color = "black") +
labs(title = "Efficacia media annunci degli annunci per mese",
x = "Mese",
y = "Efficacia annunci") +
coord_cartesian(ylim = c(0, 50)) +
theme_bw() +
theme(legend.position = "none")
Nei mesi centrali centrali dell’anno, giugno e luglio, gli annunci hanno una maggiore efficacia.
Con queste analisi statistiche , a mio parere, conviene intenificare la pubblicizzazione degli annunci nel periodo estivo dove e persone , probabilmente, hanno maggiore libertà e quindi più probabilita di poter incappare in quale annuncio pubblicitario.
ggplot(data = dati, aes(x = city, y = median_price, fill = city)) +
geom_boxplot() +
labs(
title = "condronto del prezzo medio degli immobili tra le città",
x = "Città",
y = "Prezzo mediano di vendita"
) +
theme_bw()
ggplot(data = dati, aes(x = factor(month), y = sales, fill = city)) +
geom_bar(stat = "identity", position = "fill") +
labs(
title = "Distribuzione percentuale delle vendite per mese e città",
x = "Mesi",
y = "Percentuale di vendite"
) +
scale_x_discrete(labels = c("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic")) +
theme_bw()
ggplot(dati, aes(x = year, y = sales, colour = city)) +
geom_smooth(method = , se = FALSE)+
labs(title = "Andamento delle vendite per città in diversi periodi storici",
x = "Anni",
y = "Vendite")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
L’analisi del mercato immobiliare del Texas analizza 240 osservazioni raccolte equamente tra le 4 città, nei 5 anni di osservazioni e nei 12 mesi di ciascun anno. Le osservazioni iniziano nel gennaio del 2010 e ternimano nel dicembre 2014.
Sono stati venduti 423 immobili con un volume di affari compreso tra gli 8.166 e gli 83.547 milioni di dollari.
Gli immobili più venduti hanno un costo che varia dai 97010 dollari e i 154320 dollari.
Il mercato immobiliare si basa molto sulla pubblicità mediante annunci che hanno un maggiore successo nei mesi estivi, dove il tempo necessario per vendere diminuisce, specialmente nella città di Brayan-College Station. Con il passare degli anni l’efficacia degli annunci è andata sempre più aumentando, trovando il suo picco nel 2014, ultimo anno di osservazioni.
Dalle analisi emerse consiglio l’emissione di annunci in funzione del periodo estivo, giugno e luglio nello specifico, dove probabilmente la possibile clientela ha una maggiore disponibilità di tempo e risorse.
Il campo è sicuramente florido. Nelle città di Tyler e Bryan-College Station l’andamento delle vendite, costantemente in aumento, da una maggiore affidabilità al mercato.
La città di Wikita Falls mantiene un andamento costante nel tempo ma basso. Questo dato, molto probabilmente, dipende dal fatto che la città non ha visto un rapido aumento della popolazione, come altre città texane, e la comunità si era consolidata come un mix di famiglie tradizionali, veterani e studenti. Ciò ha reso la città poco allettante, anche per il suo aspetto un pò vintage e la siccità di quegli anni.
Nonostante ciò , data la sua ricchezza paesagistica, storica ed industriale, fortificherei il mercato in funzione degli anni a venire.