La variabile city è qualitativa su scala nominale, in
quanto identifica la città a cui si riferisce ciascuna osservazione
senza presentare un ordinamento naturale.
La variabile year è quantitativa continua, ma in questa
analisi viene trattata come una variabile qualitativa ordinale, poiché
gli anni rappresentano periodi temporali distinti caratterizzati da un
naturale ordinamento cronologico.
La variabile month è qualitativa nominale di tipo
ciclico. Sebbene sia codificata mediante valori numerici da 1 a 12,
questi identificano categorie corrispondenti ai diversi mesi dell’anno e
presentano una struttura ciclica: dicembre e gennaio, ad esempio, sono
mesi consecutivi pur avendo rispettivamente i codici 12 e 1.
Le variabili sales e listings sono
quantitative discrete, in quanto rappresentano conteggi e assumono
pertanto valori interi. volume, median price e
months inventory sono invece quantitative continue. Tutte
le variabili quantitative continue sono misurate su scala di rapporti,
poiché è definito uno zero assoluto e i rapporti tra i valori hanno
significato.
Le variabili city, year e
month vengono utilizzate principalmente come variabili di
raggruppamento e come dimensioni temporali per l’analisi delle altre
variabili. In particolare, city permette di confrontare i
diversi mercati locali, mentre year e month
consentono di studiare l’evoluzione temporale e la componente stagionale
del fenomeno.
Per le variabili quantitative è possibile calcolare gli indici di
posizione, variabilità e forma. L’indice di Gini può invece essere
utilizzato per valutare l’eterogeneità della distribuzione, sia rispetto
alla variabile city sia rispetto a classi costruite a
partire da una variabile quantitativa.
L’evoluzione temporale può essere rappresentata mediante grafici a linee, mentre i grafici a barre sono utili per confrontare i valori medi tra le diverse città. Le distribuzioni delle variabili quantitative possono infine essere rappresentate mediante boxplot.
texas <- read.csv('realestate_texas.csv', sep = ',')
attach(texas)
variables <- texas[, c("sales", "volume", "median_price",
"listings", "months_inventory")]
ind.pos <- data.frame(
Min = sapply(variables, min),
Primo_Quart = sapply(variables, quantile, probs=0.25),
Mediana = sapply(variables, median),
Media = sapply(variables, mean),
Terzo_Quart = sapply(variables, quantile, probs=0.75),
Max = sapply(variables, max)
)
rownames(ind.pos) <- c(
"`sales`",
"`volume`",
"`median price`",
"`listings`",
"`months inventory`"
)
knitr::kable(
ind.pos,
digits = 2,
col.names = c("", "Min", "Primo quart.",
"Mediana", "Media", "Terzo quart.", "Max"),
align = c("l", "r", "r", "r", "r", "r", "r"))
| Min | Primo quart. | Mediana | Media | Terzo quart. | Max | |
|---|---|---|---|---|---|---|
sales |
79.00 | 127.00 | 175.50 | 192.29 | 247.00 | 423.00 |
volume |
8.17 | 17.66 | 27.06 | 31.01 | 40.89 | 83.55 |
median price |
73800.00 | 117300.00 | 134500.00 | 132665.42 | 150050.00 | 180000.00 |
listings |
743.00 | 1026.50 | 1618.50 | 1738.02 | 2056.00 | 3296.00 |
months inventory |
3.40 | 7.80 | 8.95 | 9.19 | 10.95 | 14.90 |
CV<-function(x){
return(sd(x)/mean(x)*100)
}
ind.var <- data.frame(
Deviazione_standard = sapply(variables, sd),
Coeff.variazione = sapply(variables, CV)
)
rownames(ind.var) <- c(
"`sales`",
"`volume`",
"`median price`",
"`listings`",
"`months inventory`"
)
knitr::kable(
ind.var,
digits = 2,
col.names = c("", "Deviazione standard", "Coeff. di variazione"),
align = c("c", "c"))
| Deviazione standard | Coeff. di variazione | |
|---|---|---|
sales |
79.65 | 41.42 |
volume |
16.65 | 53.71 |
median price |
22662.15 | 17.08 |
listings |
752.71 | 43.31 |
months inventory |
2.30 | 25.06 |
library(moments)
correct_kurt <- function(x){
return(kurtosis(x)-3)
}
ind.for <- data.frame(
Fisher_Index = sapply(variables, skewness),
Curtosi = sapply(variables, correct_kurt)
)
rownames(ind.for) <- c(
"`sales`",
"`volume`",
"`median price`",
"`listings`",
"`months inventory`"
)
knitr::kable(
ind.for,
digits = 3,
col.names = c("", "Indice di Fisher", "Curtosi"),
align = c("c", "c"))
| Indice di Fisher | Curtosi | |
|---|---|---|
sales |
0.718 | -0.313 |
volume |
0.885 | 0.177 |
median price |
-0.365 | -0.623 |
listings |
0.649 | -0.792 |
months inventory |
0.041 | -0.174 |
Guardando i dati ottenuti, possiamo fare una serie di considerazioni.
Le variabili median price e
months inventory hanno media e mediana molto simili, il che
ci fa pensare che le loro distribuzioni siano particolarmente
simmetriche. Dando uno sguardo agli indici di forma, possiamo vedere che
questo è effettivamente il caso, specialmente per
months inventory.
Il coefficiente di variazione ci permette di confrontare i livelli di
dispersione relativa delle varie variabili. Possiamo quindi affermare
che volume è la variabile che presenta la maggiore
variabilità relativa, mentre median price è quella che
presenta la minore variabilità relativa.
Tutte le variabili tranne median price hanno
distribuzione asimmetrica positiva, come possiamo vedere dal segno
dell’indice di Fisher. Per quanto riguarda lo schiacciamento dei dati,
la distribuzione di volume è leptocurtica, mentre tutte le
altre sono platicurtiche.
La variabile con la più alta variabilità è la variabile
volume, perché ha il coefficiente di variazione più alto.
Sempre volume è anche la variabile più asimmetrica, con
asimmetria positiva, dal momento che il valore assoluto del suo indice
di Fisher è il più alto.
Suddividiamo la variabile sales in classi. Scegliamo il
numero di classi utlizzando la regola di Sturges:
N <- round(1+log(length(sales), base = 2))
N
## [1] 9
Quindi il numero di classi è uguale a 9.
In basso ecco una tabella con frequenze assolute e relative:
freq_ass<-table(sales_cl)
freq_rel<-table(sales_cl)/length(sales)
distr_frq_sales_cl<-cbind(freq_ass,freq_rel)
knitr::kable(
distr_frq_sales_cl,
digits = 2,
col.names = c("Classi", "Frequenza assoluta", "Frequenza relativa"),
align = c("c", "c"))
| Classi | Frequenza assoluta | Frequenza relativa |
|---|---|---|
| (78,116] | 45 | 0.19 |
| (116,155] | 50 | 0.21 |
| (155,193] | 46 | 0.19 |
| (193,231] | 27 | 0.11 |
| (231,270] | 23 | 0.10 |
| (270,308] | 26 | 0.11 |
| (308,346] | 10 | 0.04 |
| (346,385] | 9 | 0.04 |
| (385,423] | 4 | 0.02 |
Rappresentiamo ora per maggior chiarezza le frequenze assolute con un grafico a barre.
ggplot(data=texas)+
geom_bar(aes(x=sales_cl),
stat='count',
col='black',
fill='blue')+
labs(title = 'Distribuzione delle classi numero vendite mensili',
x='Classi di vendita',
y='Frequenze assolute')+
theme_classic()
gini.index<-function(x){
ni=table(x)
fi=ni/length(x)
fi2=fi^2
J=length(table(x))
gini=1-sum(fi2)
gini.norm=gini/((J-1)/J)
return(gini.norm)
}
paste("L'indice di Gini è", round(gini.index(sales_cl), digits = 3))
## [1] "L'indice di Gini è 0.954"
L’indice di eterogeneità è molto alto, indicando una distribuzione relativamente equa del numero di vendite tra le varie classi.
“Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”?”
C’è una riga col nome di una delle quattro città per ogni mese degli anni dal 2010 al 2014. Quindi c’è lo stesso numero di righe per ogni città. Di conseguenza, la probabilità è 1/4.
“E la probabilità che riporti il mese di Luglio?”
Il mese di luglio è presente una volta per ogni anno, ognuno dei quali contiene 12 mesi, perciò la probabilità è di 1/12.
“E la probabilità che riporti il mese di dicembre 2012?”
Per dicembre 2012 ci sono quattro osservazioni, una per ciascuna città, su un totale di 240 righe. La probabilità è quindi 4/240=1/60.
Creiamo una nuova variabile che rappresenti il prezzo medio degli
immobili dividendo il volume totale delle vendite per il numero delle
vendite: mean price=volume/salesx
1000000, dove abbiamo moltiplicato per un milione perché
volume è espresso in milioni di dollari. Poi misuriamo
l’efficacia degli annunci di vendita introducendo una variabile che
fornisca il numero di vendite per ogni annuncio pubblicato:
efficacy=sales/listings.
Per poter commentare e analizzare queste nuove variabili, ci chiediamo ad esempio, come variano i loro valori medi tra le varie città.
texas %>%
group_by(city) %>%
summarise(
mean_price = mean(mean_price),
efficacy = mean(listings_efficacy)
)%>%
knitr::kable(
digits = 3,
col.names = c("Città", "Prezzo medio", "Efficacia annunci"),
align = c("l", "r", "r"))
| Città | Prezzo medio | Efficacia annunci |
|---|---|---|
| Beaumont | 146640.4 | 0.106 |
| Bryan-College Station | 183534.3 | 0.147 |
| Tyler | 167676.8 | 0.093 |
| Wichita Falls | 119430.0 | 0.128 |
Dalla tabella risulta che nell’arco degli anni dal 2010 al 2014 i prezzi più alti e la maggiore efficacia degli annunci sono stati a Bryan-College Station, mentre i prezzi più bassi a Wichita Falls e l’efficacia peggiore a Tyler.
Calcoliamo ora i valori medi delle variabili nei 5 anni presi in considerazione.
texas %>%
group_by(year) %>%
summarise(
mean_price = mean(mean_price),
efficacy = mean(listings_efficacy)
)%>%
knitr::kable(
digits = 3,
col.names = c("Anno", "Prezzo medio", "Efficacia annunci"),
align = c("l", "r", "r"))
| Anno | Prezzo medio | Efficacia annunci |
|---|---|---|
| 2010 | 150188.6 | 0.100 |
| 2011 | 148250.6 | 0.093 |
| 2012 | 150898.7 | 0.110 |
| 2013 | 158705.2 | 0.135 |
| 2014 | 163558.7 | 0.157 |
Possiamo osservare, quindi, che complessivamente nelle quattro città considerate sia i prezzi medi che l’efficacia degli annunci sembra essere cresciuta nei 5 anni in esame, specialmente nel 2013 e 2014.
Procediamo a usare il pacchetto dplyr per effettuare analisi statistiche condizionate per città, anno e mese. I risultati saranno rappresentati graficamente.
sales_city <- texas %>%
group_by(city)%>%
summarise(media=mean(sales),
dev.standard=sd(sales)
)
knitr::kable(
sales_city,
digits = 2,
col.names = c("Città", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Città | Media | Deviazione standard |
|---|---|---|
| Beaumont | 177.38 | 41.48 |
| Bryan-College Station | 205.97 | 84.98 |
| Tyler | 269.75 | 61.96 |
| Wichita Falls | 116.07 | 22.15 |
ggplot(sales_city, aes(x = city, y = media)) +
geom_col(fill = 'blue') +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
), width = 0.2) +
labs(
x = "Città",
y = "Media delle vendite",
title = "7.1.1 Vendite medie per città"
)
sales_year <- texas %>%
group_by(year)%>%
summarise(media=mean(sales),
dev.standard=sd(sales))
knitr::kable(
sales_year,
digits = 2,
col.names = c("Anno", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Anno | Media | Deviazione standard |
|---|---|---|
| 2010 | 168.67 | 60.54 |
| 2011 | 164.12 | 63.87 |
| 2012 | 186.15 | 70.91 |
| 2013 | 211.92 | 84.00 |
| 2014 | 230.60 | 95.51 |
ggplot(sales_year, aes(x = year, y = media)) +
geom_line(col = 'blue') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 2010:2014) +
labs(
x = "Anno",
y = "Media delle vendite",
title = "7.1.2 Vendite medie per anno"
)
sales_month <- texas %>%
group_by(month)%>%
summarise(media=mean(sales),
dev.standard=sd(sales))
knitr::kable(
sales_month,
digits = 2,
col.names = c("Mese", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Mese | Media | Deviazione standard |
|---|---|---|
| 1 | 127.40 | 43.38 |
| 2 | 140.85 | 51.07 |
| 3 | 189.45 | 59.18 |
| 4 | 211.70 | 65.40 |
| 5 | 238.85 | 83.12 |
| 6 | 243.55 | 95.00 |
| 7 | 235.75 | 96.27 |
| 8 | 231.45 | 79.23 |
| 9 | 182.35 | 72.52 |
| 10 | 179.90 | 74.95 |
| 11 | 156.85 | 55.47 |
| 12 | 169.40 | 60.75 |
ggplot(sales_month, aes(x = month, y = media)) +
geom_line(col = 'blue') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 1:12) +
labs(
x = "Mese",
y = "Media delle vendite",
title = "7.1.3 Vendite medie per mese"
)
I valori medi delle vendite differiscono sensibilmente tra le città, con Tyler che presenta il valore medio più elevato e Wichita Falls quello più basso. Nel tempo si osserva una crescita della media annuale, mentre l’andamento mensile evidenzia una componente stagionale, con valori generalmente più elevati nei mesi estivi.
volume_city<-texas %>%
group_by(city)%>%
summarise(media=mean(volume),
dev.standard=sd(volume))
knitr::kable(
volume_city,
digits = 2,
col.names = c("Città", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Città | Media | Deviazione standard |
|---|---|---|
| Beaumont | 26.13 | 6.97 |
| Bryan-College Station | 38.19 | 17.25 |
| Tyler | 45.77 | 13.11 |
| Wichita Falls | 13.93 | 3.24 |
ggplot(volume_city, aes(x = city, y = media)) +
geom_col(fill = 'darkgreen') +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
), width = 0.2) +
labs(
x = "Città",
y = "Media valori vendite",
title = "7.2.1 Valore medio delle vendite per città"
)
volume_year<-texas %>%
group_by(year)%>%
summarise(media=mean(volume),
dev.standard=sd(volume))
knitr::kable(
volume_year,
digits = 2,
col.names = c("Anno", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Anno | Media | Deviazione standard |
|---|---|---|
| 2010 | 25.68 | 10.80 |
| 2011 | 25.16 | 12.20 |
| 2012 | 29.27 | 14.52 |
| 2013 | 35.15 | 17.93 |
| 2014 | 39.77 | 21.19 |
ggplot(volume_year, aes(x = year, y = media)) +
geom_line(col = 'darkgreen') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 2010:2014) +
labs(
x = "Anno",
y = "Media valori vendite",
title = "7.2.2 Valore medio delle vendite per anno"
)
volume_month<-texas %>%
group_by(month)%>%
summarise(media=mean(volume),
dev.standard=sd(volume))
knitr::kable(
volume_month,
digits = 2,
col.names = c("Mese", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Mese | Media | Deviazione standard |
|---|---|---|
| 1 | 19.00 | 8.37 |
| 2 | 21.65 | 10.09 |
| 3 | 29.38 | 12.02 |
| 4 | 33.30 | 14.52 |
| 5 | 39.70 | 19.02 |
| 6 | 41.30 | 21.08 |
| 7 | 39.12 | 21.41 |
| 8 | 38.01 | 18.05 |
| 9 | 29.60 | 15.22 |
| 10 | 29.08 | 15.13 |
| 11 | 24.81 | 11.15 |
| 12 | 27.09 | 12.57 |
ggplot(volume_month, aes(x = month, y = media)) +
geom_line(col = 'darkgreen') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 1:12) +
labs(
x = "Mese",
y = "Media valori vendite",
title = "7.2.3 Valore medio delle vendite per mese"
)
L’andamento del valore totale delle vendite è coerente con quello
osservato per sales: Tyler presenta mediamente i valori più
elevati, mentre Wichita Falls quelli più bassi. Anche in questo caso si
osserva una crescita nel periodo considerato e una marcata variabilità
tra i mesi.
list_city<-texas %>%
group_by(city)%>%
summarise(media=mean(listings),
dev.standard=sd(listings))
knitr::kable(
list_city,
digits = 2,
col.names = c("Città", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Città | Media | Deviazione standard |
|---|---|---|
| Beaumont | 1679.32 | 91.13 |
| Bryan-College Station | 1458.13 | 252.53 |
| Tyler | 2905.05 | 226.75 |
| Wichita Falls | 909.58 | 73.76 |
ggplot(list_city, aes(x = city, y = media)) +
geom_col(fill = 'orange') +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
), width = 0.2) +
labs(
x = "Città",
y = "Media degli annunci",
title = "7.3.1 Numero annunci medio per città"
)
list_year<-texas %>%
group_by(year)%>%
summarise(media=mean(listings),
dev.standard=sd(listings))
knitr::kable(
list_year,
digits = 2,
col.names = c("Anno", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Anno | Media | Deviazione standard |
|---|---|---|
| 2010 | 1826.00 | 785.02 |
| 2011 | 1849.65 | 780.38 |
| 2012 | 1776.81 | 738.45 |
| 2013 | 1677.60 | 743.52 |
| 2014 | 1560.04 | 706.71 |
ggplot(list_year, aes(x = year, y = media)) +
geom_line(col = 'orange') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 2010:2014) +
labs(
x = "Anno",
y = "Media degli annunci",
title = "7.3.2 Numero annunci medio per anno"
)
list_month<-texas %>%
group_by(month)%>%
summarise(media=mean(listings),
dev.standard=sd(listings))
knitr::kable(
list_month,
digits = 2,
col.names = c("Mese", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Mese | Media | Deviazione standard |
|---|---|---|
| 1 | 1647.05 | 704.61 |
| 2 | 1692.50 | 711.20 |
| 3 | 1756.70 | 727.35 |
| 4 | 1825.70 | 770.43 |
| 5 | 1823.85 | 790.22 |
| 6 | 1833.25 | 811.63 |
| 7 | 1821.20 | 826.72 |
| 8 | 1786.30 | 815.87 |
| 9 | 1748.90 | 802.66 |
| 10 | 1710.35 | 779.16 |
| 11 | 1652.70 | 741.25 |
| 12 | 1557.75 | 692.57 |
ggplot(list_month, aes(x = month, y = media)) +
geom_line(col = 'orange') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 1:12) +
labs(
x = "Mese",
y = "Media degli annunci",
title = "7.3.3 Numero annunci medio per mese"
)
Per quanto riguarda il numero di annunci attivi, Bryan-College
Station presenta valori medi inferiori rispetto alle altre città. A
livello temporale, la media annuale mostra una diminuzione nel periodo
considerato, mentre l’andamento mensile presenta variazioni
proporzionalmente più contenute rispetto a quelle osservate per
sales e volume.
invent_city<-texas %>%
group_by(city)%>%
summarise(media=mean(months_inventory),
dev.standard=sd(months_inventory))
knitr::kable(
invent_city,
digits = 2,
col.names = c("Città", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Città | Media | Deviazione standard |
|---|---|---|
| Beaumont | 9.97 | 1.65 |
| Bryan-College Station | 7.66 | 2.25 |
| Tyler | 11.32 | 1.89 |
| Wichita Falls | 7.82 | 0.78 |
ggplot(invent_city, aes(x = city, y = media)) +
geom_col(fill = 'purple') +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
), width = 0.2) +
labs(
x = "Città",
y = "Media mesi di inventario",
title = "7.4.1 Media dei mesi di inventario per città"
)
invent_year<-texas %>%
group_by(year)%>%
summarise(media=mean(months_inventory),
dev.standard=sd(months_inventory))
knitr::kable(
invent_year,
digits = 2,
col.names = c("Anno", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Anno | Media | Deviazione standard |
|---|---|---|
| 2010 | 9.97 | 2.08 |
| 2011 | 10.90 | 2.07 |
| 2012 | 9.88 | 1.61 |
| 2013 | 8.15 | 1.69 |
| 2014 | 7.06 | 1.75 |
ggplot(invent_year, aes(x = year, y = media)) +
geom_line(col = 'purple') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 2010:2014) +
labs(
x = "Anno",
y = "Media mesi di inventario",
title = "7.4.2 Media dei mesi di inventario per anno"
)
invent_month<-texas %>%
group_by(month)%>%
summarise(media=mean(months_inventory),
dev.standard=sd(months_inventory))
knitr::kable(
invent_month,
digits = 2,
col.names = c("Mese", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Mese | Media | Deviazione standard |
|---|---|---|
| 1 | 8.84 | 1.97 |
| 2 | 9.06 | 1.98 |
| 3 | 9.40 | 2.06 |
| 4 | 9.72 | 2.24 |
| 5 | 9.68 | 2.38 |
| 6 | 9.70 | 2.41 |
| 7 | 9.62 | 2.50 |
| 8 | 9.39 | 2.45 |
| 9 | 9.19 | 2.52 |
| 10 | 8.94 | 2.44 |
| 11 | 8.66 | 2.37 |
| 12 | 8.12 | 2.27 |
ggplot(invent_month, aes(x = month, y = media)) +
geom_line(col = 'purple') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 1:12) +
labs(
x = "Mese",
y = "Media mesi di inventario",
title = "7.4.3 Media dei mesi di inventario per mese"
)
La variabile months inventory presenta valori medi
relativamente bassi a Bryan-College Station e mostra una diminuzione
della media annuale a partire dal 2011. L’andamento mensile presenta
caratteristiche di stagionalità, meno marcate di sales e
volume, ma più di listings.
median_city<-texas %>%
group_by(city)%>%
summarise(media=mean(median_price),
dev.standard=sd(median_price))
knitr::kable(
median_city,
digits = 2,
col.names = c("Città", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Città | Media | Deviazione standard |
|---|---|---|
| Beaumont | 129988.3 | 10104.99 |
| Bryan-College Station | 157488.3 | 8852.24 |
| Tyler | 141441.7 | 9336.54 |
| Wichita Falls | 101743.3 | 11320.03 |
ggplot(median_city, aes(x = city, y = media)) +
geom_col(fill = 'lightgreen') +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
), width = 0.2) +
labs(
x = "Città",
y = "Media prezzo mediano",
title = "7.5.1 Media prezzo mediano per città"
)
median_year<-texas %>%
group_by(year)%>%
summarise(media=mean(median_price),
dev.standard=sd(median_price))
knitr::kable(
median_year,
digits = 2,
col.names = c("Anno", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Anno | Media | Deviazione standard |
|---|---|---|
| 2010 | 130191.7 | 21821.76 |
| 2011 | 127854.2 | 21317.80 |
| 2012 | 130077.1 | 21431.52 |
| 2013 | 135722.9 | 21708.08 |
| 2014 | 139481.2 | 25625.41 |
ggplot(median_year, aes(x = year, y = media)) +
geom_line(col = 'lightgreen') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 2010:2014) +
labs(
x = "Anno",
y = "Media prezzo mediano",
title = "7.5.2 Media prezzo mediano per anno"
)
median_month<-texas %>%
group_by(month)%>%
summarise(media=mean(median_price),
dev.standard=sd(median_price))
knitr::kable(
median_month,
digits = 2,
col.names = c("Mese", "Media", "Deviazione standard"),
align = c("l", "c", "c"))
| Mese | Media | Deviazione standard |
|---|---|---|
| 1 | 124250 | 25151.28 |
| 2 | 130075 | 22822.59 |
| 3 | 127415 | 23442.03 |
| 4 | 131490 | 21458.40 |
| 5 | 134485 | 18796.26 |
| 6 | 137620 | 19231.02 |
| 7 | 134750 | 21944.78 |
| 8 | 136675 | 22488.38 |
| 9 | 134040 | 24344.10 |
| 10 | 133480 | 26358.07 |
| 11 | 134305 | 24691.47 |
| 12 | 133400 | 22809.76 |
ggplot(median_month, aes(x = month, y = media)) +
geom_line(col = 'lightgreen') +
geom_point() +
geom_errorbar(
aes(
ymin = media - dev.standard,
ymax = media + dev.standard
),
width = 0.1, col='red'
) +
scale_x_continuous(breaks = 1:12) +
labs(
x = "Mese",
y = "Media prezzo mediano",
title = "7.5.3 Media prezzo mediano per mese"
)
Il prezzo mediano presenta valori medi nettamente più elevati a Bryan-College Station e più bassi a Wichita Falls. Nel periodo considerato si osserva inoltre un aumento della media annuale, mentre l’andamento stagionale appare un po’meno evidente rispetto ai casi precedenti.
ggplot(data=texas)+
geom_boxplot(aes(x=city, y=median_price), fill='lightblue')+
labs(x='Città', y='Prezzo mediano', title = '8.1 Boxplot del prezzo mediano per città')
texas3 <- data.frame(texas)
texas3$year <- as.character(texas$year)
Il grafico 8.1 evidenzia una netta differenza nei livelli dei prezzi mediani tra le quattro città. Bryan-College Station presenta i valori più elevati, seguita da Tyler, Beaumont e infine Wichita Falls. Per quanto riguarda la dispersione, Wichita Falls mostra l’intervallo interquartile più ampio, mentre Bryan-College Station presenta una distribuzione centrale relativamente più concentrata. Sono inoltre presenti valori anomali per Beaumont, Wichita Falls e Bryan-College Station.
ggplot(data=texas3)+
geom_boxplot(aes(x=year, y=volume, fill=city))+
labs(x='Anni', y='Totale vendite (in milioni di $)',
title = '8.2 Boxplot del totale vendite per anni e città')
Il grafico 8.2 presenta una forte variabilità del valore totale delle vendite, che differisce tra città e anni. Bryan-College Station e Tyler presentano in diversi anni intervalli interquartili più ampi, indicando una maggiore dispersione dei valori mensili, mentre Wichita Falls mostra generalmente una variabilità più contenuta. Si osserva inoltre uno spostamento verso valori più elevati negli anni successivi e dei valori anomali per Beaumont nel 2012.
ggplot(data=texas)+
geom_bar(aes(x=month, y=volume,
fill=city),
position = 'stack',
stat='identity',
col='black')+
facet_wrap(year, ncol=2)+
labs(title = '8.3 Totale vendite per mese, anno e città',
x='Mesi',
y='Totale vendite (in milioni di $)')+
scale_x_continuous(breaks=1:12)+
theme_classic()
Il grafico 8.3 mostra la componente stagionale del valore totale delle
vendite e permette allo stesso tempo di osservare il contributo delle
singole città. I valori complessivi tendono a essere maggiori nei mesi
primaverili ed estivi e inferiori nei mesi invernali. L’anno 2010
presenta un andamento parzialmente diverso, con il picco concentrato tra
aprile e giugno.
ggplot(data=texas)+
geom_bar(aes(x=month, y=volume,
fill=city),
position = 'fill',
stat='identity',
col='black')+
facet_wrap(year, ncol=2)+
labs(title = '8.4 Totale vendite normalizzato per mese, anno e città',
x='Mesi',
y='Quota percentuale del totale')+
scale_x_continuous(breaks=1:12)+
theme_classic()
La normalizzazione in 8.4 permette di confrontare il peso relativo delle diverse città indipendentemente dal valore assoluto delle vendite. Tyler e Bryan-College Station rappresentano generalmente le quote maggiori del volume complessivo, mentre Beaumont e soprattutto Wichita Falls contribuiscono in misura minore. Le proporzioni risultano abbastanza stabili negli anni.
texas2 <- data.frame(texas)
texas2$year <- rep(seq(2010+1/24,2014+23/24,1/12),times=4)
texas2$month <- NULL
ggplot(texas2, aes(x = year, y = sales, color = city, group = city)) +
geom_line(linewidth = 1) +
geom_point() +
labs(
x = "Anno",
y = "Numero di vendite",
title = "8.5 Andamento delle vendite per città"
) +
scale_x_continuous(breaks = 2010:2014)
Infine, il grafico 8.5 consente di osservare l’andamento delle vendite nelle singole città lungo l’intero periodo considerato. Beaumont, Bryan-College Station e Tyler mostrano un andamento complessivamente crescente, pur con marcate oscillazioni stagionali. Wichita Falls si mantiene invece su livelli inferiori e non presenta un andamento globale chiaramente crescente o decrescente.
Dall’analisi emerge una marcata componente stagionale delle vendite, con valori generalmente più elevati nei mesi tardo primaverili ed estivi e più bassi nei mesi invernali. Tale andamento è presente nella maggior parte degli anni, sebbene il 2010 costituisca un’eccezione, e interessa in misura diversa le singole città.
Un secondo elemento rilevante è la forte eterogeneità tra i mercati locali. Tyler e Bryan-College Station presentano generalmente livelli più elevati di numero e valore delle vendite, mentre Wichita Falls si colloca sui livelli più bassi. L’analisi disaggregata mostra inoltre che la crescita osservata a livello aggregato non è uniforme tra tutte le città.
Nel periodo considerato, il numero delle vendite, il valore delle vendite e il prezzo mediano mostrano complessivamente una crescita a partire dal 2011, mentre il numero degli annunci e i mesi di inventario diminuiscono. Tuttavia, le elevate deviazioni standard osservate in molte analisi indicano che le medie aggregate non rappresentano pienamente la variabilità dei singoli mercati. Per questo motivo, l’analisi per città risulta fondamentale per interpretare correttamente le dinamiche osservate.
Sulla base dei risultati ottenuti, Texas Realty Insights dovrebbe tenere conto della componente stagionale delle vendite nella pianificazione e nell’interpretazione dei dati, evitando di confrontare direttamente periodi appartenenti a stagioni diverse senza considerare questo effetto. Inoltre, le marcate differenze osservate tra i mercati locali suggeriscono di affiancare agli indicatori aggregati attività di monitoraggio e analisi specifiche per ciascuna città.