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.
Si procede con il caricamento dei dati e la varifica di eventuali valori nulli o nodata:
dati <- read.csv("realestate_texas.csv")
#verifico presenza eventuali dati nulli
sum(is.na(dati))
## [1] 0
Identifica e descrivi il tipo di variabili statistiche presenti nel dataset. Valuta come gestire le variabili che sottintendono una dimensione tempo e commenta sul tipo di analisi che può essere condotta su ciascuna variabile.
Di seguito le principali statistiche delle variabili presenti nel dataset.
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
Dalla sintesi dei dati si deduce che il dataset comprende 240 registrazioni fatte dal 2010 al 2014.
la variabile city è una variabile testuale in cui sono memorizzati i nomi delle città in cui opera l’agenzia immobiliare. Si può ritenere a tutti gli effetti una variabile qualitativa di tipo nominale per la quale è possibile effettuare analisi sul numero di osservazioni fatte per città e su come si ripartiscono i dati per ciascuna città
unique(dati$city)
## [1] "Beaumont" "Bryan-College Station" "Tyler"
## [4] "Wichita Falls"
le variabili years e month sono volori numerici che indicano rispettivamente l’anno e il mese che compongono la serie storica. Essi sono da considerare come variabili di tipo qualitative ordinalili, in quanto utilizzate per analizzare le serie storiche delle vendite e confrontare tra loro gli andamenti per anno e mese.
Le variabili years e month sono di tipo numerico, ma per facilitare sia la visualizazione che le prossime analisi, sono combinate tra loro e convertite in tipo data:
dati$Date<-as.Date(with(dati,paste(dati$year,dati$month,'01',sep="-")),"%Y-%m-%d")
Le variabili sales (numero totale di vendite) e listings (numero totale di annunci attivi) sono variabili quantitative discrete perchè costituite da valori numerici discreti. Invece volume (valore totale delle vendite), median_price (prezzo mediano di vendita) e Months of Inventory (mesi necessari per vendere tutti gli annunci del periodo) si possono considerare variabili quantitative continue.
Con i dati a disposizione si possono effettuare analisi al fine di:
Calcola Indici di posizione, variabilità e forma per tutte le variabili per le quali ha senso farlo, per le altre crea una distribuzione di frequenza. Infine, commenta tutto brevemente.
Di seguito è effettuata l’analisi degli indici di posizione per ciascuna variabile numerica.
dati_exc<-dati[4:8]
N <- dim(dati)[1]
attach(dati_exc)
#calcolo indici di posizione e forma
calc_index<-function(x){
x <- na.omit(as.numeric(x))
return(c(
Min=min(x),
Max=max(x),
Mean=mean(x),
Median=median(x),
Q1=quantile(x)[2],
Q3=quantile(x)[4],
Dev.st = sd(x),
IQR = IQR(x),
Skewness = skewness(x),
Kurtosis = kurtosis(x)-3
))
t(x)
}
#formattazione delle tabelle
format_tbl<-function(table,variables_name,title){
tbl_frm <-table %>%
kable(
format = "pipe",
digits = 2,
caption = title,
col.names = c(variables_name),
) %>%
kable_styling(
full_width = FALSE,
position = "center"
)
}
Indici di posizione:
tbl<-calc_index(sales)
tbl_f<-format_tbl(tbl,'Sales (N° vendite)','Tabella degli Indici di Posizione, Variabilità e Forma')
tbl_f
| Sales (N° vendite) | |
|---|---|
| Min | 79.00 |
| Max | 423.00 |
| Mean | 192.29 |
| Median | 175.50 |
| Q1.25% | 127.00 |
| Q3.75% | 247.00 |
| Dev.st | 79.65 |
| IQR | 120.00 |
| Skewness | 0.72 |
| Kurtosis | -0.31 |
Di seguito sarà visualizzata la distribuzione dei dati.
plot(density(sales), main= 'Distribuzione Numero Vendite',xlab="N° vendite",
ylab="Frequenza")
La distribuzione dei dati presenta un’assimmetria verso i valori più bassi della distribuzione. Ne sono indici sia il fatto che il valore medio (192) è maggiore del valore mediano (175) e che il valore positivo dell’indice di Skewness (0,72) indica un’asimmetria con coda a destra. Per qunto riguarda la variabilità questa è da ritenersi elevata in quanto su un valore medio di 192, si registra una deviazione standard di 79, e un valore di IQR pari a 120.
Indici di posizione, variabilità e forma della distribuzione:
tbl<-calc_index(volume)
tbl_f<-format_tbl(tbl,'Volume (milioni $)','Tabella degli Indici di Posizione, Variabilità e Forma')
tbl_f
| Volume (milioni $) | |
|---|---|
| Min | 8.17 |
| Max | 83.55 |
| Mean | 31.01 |
| Median | 27.06 |
| Q1.25% | 17.66 |
| Q3.75% | 40.89 |
| Dev.st | 16.65 |
| IQR | 23.23 |
| Skewness | 0.88 |
| Kurtosis | 0.18 |
Distribuzione dei dati:
plot(density(volume), main= 'Distribuzione Volumi Vendite', xlab="Volume [milioni $]",
ylab="Frequenza")
### Osservazioni sui volumi di vendita I dati assumono una distribuzione
con un’asimmetria positiva, con coda verso i valori più elevati. La
variabilità dei dati è da ritenersi elevata dal fatto che si registra
una deviazione standard di 16,6 e un IQR di 23, che sono valori elevati
rispetto a una media pari a 31.
I valori dei prezzi al fine di migliorarne l’analisi sono stati riportati in migliaia di dollari.
Indici di posizione, variabilità e forma:
d=median_price/1000
tbl<-calc_index(d)
tbl_f<-format_tbl(tbl,'Median Price (migliaia $)','Tabella degli Indici di Posizione, Variabilità e Forma')
tbl_f
| Median Price (migliaia $) | |
|---|---|
| Min | 73.80 |
| Max | 180.00 |
| Mean | 132.67 |
| Median | 134.50 |
| Q1.25% | 117.30 |
| Q3.75% | 150.05 |
| Dev.st | 22.66 |
| IQR | 32.75 |
| Skewness | -0.36 |
| Kurtosis | -0.62 |
Distribuzione dei dati dei prezzi mediani:
plot(density(d), main= 'Distribuzione Prezzi Mediani', xlab="Prezzi [migliaia di dollari]",
ylab="Frequenza")
La distribuzione dei prezzi mediani è leggermente asimmetrica con la coda che tende verso i valori più bassi, quind presenta una leggera asimmetria negativa. Oltre che dall’istogramma della distribuzione, questa tendenza è avvalorata anche dal valore medio che è leggermente più basso del valore mediano e dall’indice di skewness che è pari a -0,36. Con un valore medio di 132 e deviazione standard di 22, si registra una variabilità contenuta dei dati. La distribuzione ha un valore di IQR pari a 32,75 anch’esso tutto sommato contenuto, rispetto al valore medio.
Indici di posizione, variabilità e forma
tbl<-calc_index(months_inventory)
tbl_f<-format_tbl(tbl,'Mesi','Tabella degli Indici di Posizione, Variabilità e Forma')
tbl_f
| Mesi | |
|---|---|
| Min | 3.40 |
| Max | 14.90 |
| Mean | 9.19 |
| Median | 8.95 |
| Q1.25% | 7.80 |
| Q3.75% | 10.95 |
| Dev.st | 2.30 |
| IQR | 3.15 |
| Skewness | 0.04 |
| Kurtosis | -0.17 |
Visualizzazione della distribuzione dei dati.
plot(density(months_inventory), main= 'Distribuzione Tempo Vendita Annunci', xlab="Mesi",
ylab="Frequenza")
la distribuzione presenta un’asimmettria molto contenuta, con un indice di Skewenwss di 0.04. Dall’analisi si può dedurre che in media, per vendere una casa servono circa 9 mesi. E che la metà delle case viene venduta in un periodo abbastanza stretto, tra 7,8 e 10,95 mesi, in quanto l’IQR è pari a 3,15.
Di seguito vedremo come si ripartiscono il numero di osservazioni per le varie città analizzate.
freq_ass <- table(dati$city)
freq_rel<- table(dati$city)/N
distr_freq_loc<-cbind(freq_ass,freq_rel)
tbl_f<-format_tbl(distr_freq_loc,c(' ','Freq. Assoluta','Freq. Relativa'),'Ripartizione delle osservazioni per città')
tbl_f
| Freq. Assoluta | Freq. Relativa | |
|---|---|---|
| Beaumont | 60 | 0.25 |
| Bryan-College Station | 60 | 0.25 |
| Tyler | 60 | 0.25 |
| Wichita Falls | 60 | 0.25 |
I dati sono equiripartiti, come numero nelle varie città.
Determina: - Qual è la variabile con la più alta variabilità - Qual è la variabile con la distribuzione più asimmetrica Spiega come sei giunto a queste conclusioni e fornisci considerazioni statistiche.
Per prima cosa costruiamo una tabella di confronto della variabilità dei dati sulle variabili numeriche, utilizzando il coefficiente di variazione.
#funzione che calcola in coefficiente di variazione
CoefVar<-function(x){
return(sd(x)/mean(x)*100)
}
#creo la tabella di confronto
cv_table<-dati_exc %>%
summarise(
Vendite=CoefVar(sales),
Volumi=CoefVar(volume),
Tempo_vendita=CoefVar(months_inventory),
Prezzo_mediano=CoefVar(median_price),
)%>%
pivot_longer(
cols = everything(), # Se vuoi tutte le colonne
names_to = "Variabile",
values_to = "Coefficiente_di_Variazione"
)
tbl_frm<-format_tbl(cv_table,c(' ','Coef. di Variazione'),'Coefficienti di variazione delle variabili')
tbl_frm
| Coef. di Variazione | |
|---|---|
| Vendite | 41.42 |
| Volumi | 53.71 |
| Tempo_vendita | 25.06 |
| Prezzo_mediano | 17.08 |
Il valore massimo di variazione è quello dei volumi di vendita, seguito dal numero delle vendite (sales). Tutti e due fanno registrare un coefficiente di variazione elevato.
Al fine di valutare l’asimmetria della distribuzione, si utilizzarà la Skweness.
#creo la tabella di confronto
as_table<-dati_exc %>%
summarise(
Vendite=skewness(sales),
Volumi=skewness(volume),
Tempo_vendita=skewness(months_inventory),
Prezzo_mediano=skewness(median_price),
)%>%
pivot_longer(
cols = everything(), # Se vuoi tutte le colonne
names_to = "Variabile",
values_to = "Skewness"
)
tbl_frm<-format_tbl(as_table,c(' ','Skewness'),'Indice di asimmetria')
tbl_frm
| Skewness | |
|---|---|
| Vendite | 0.72 |
| Volumi | 0.88 |
| Tempo_vendita | 0.04 |
| Prezzo_mediano | -0.36 |
I dati riguardanti i volumi di vendita hanno un’asimmetria maggiore rispetto alle altre variabili. I tempi di vendita invece hanno un valore di asimmetria praticamente nullo.
Seleziona una variabile quantitativa (es. sales o median_price) e suddividila in classi. Crea una distribuzione di frequenze e rappresenta i dati con un grafico a barre. Calcola l’indice di eterogeneità Gini e discuti i risultati.
Di seguito si analizzerà la la disuguaglianza nella distribuzione del numero di vendite (sales) attraverso l’indice di Gini
#distribuzione in classi
sales_cl_2<-cut(sales,seq(79,433,27))
ggplot(data=na.omit(data.frame(sales_cl_2)))+
geom_bar(
aes(x=sales_cl_2),
stat = "count",
col = "black",
fill = "darkgreen")+
labs(
title = "Distribuzione del Numero di Vendite in classi",
x = "Classi [n° vendite]",
y = "Frequenze"
)+
theme_classic()+ theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
#Calcolo l'indice di Gini
gini.index<-function(x){
ni=table(x)
fi= ni/length(x)
fi2 = fi^2
j = length(table(x))
gini = 1-sum(fi2)
gini.normalizzato = gini/((j-1)/j)
return(gini.normalizzato)
}
#calcolo indice di gini
paste('Indice di Gini: ', + gini.index(na.omit(sales_cl_2)))
## [1] "Indice di Gini: 0.962958712896923"
Il coefficiente di Gini è una misura statistica della diseguaglianza che descrive quanto omogenea o diseguale il reddito o la ricchezza sono distribuite tra la popolazione di un paese. Il coefficiente assume un valore tra 0 e 1, ed un coefficiente di Gini più elevato è associato ad una più elevata diseguaglianza.
L’indice di gini registrato per la variabile sales è pari a 0.96 che indica una forte diseguaglianza nella distribuzione dei dati. I dati si concentrano nelle prime categorie della distribuzione di frequenza, e indica che il numero delle vendite si concentra sui valori più bassi, mentre la coda è formata dai valori più alti.
Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”? E la probabilità che riporti il mese di Luglio? E la probabilità che riporti il mese di dicembre 2012?
Al fine di valutare la probabilità di estrarre la città di Beaumont, presa una riga a caso del dataset, si analizza la frequenza realtiva delle volte che Beaumont compare nel dataset.
freq_rel_city<- table(dati$city)/N
# porto le frequenze in colonna
tbl_frm<-format_tbl(cbind(freq_rel_city),c('Città','Freq. relativa'), ' ')
tbl_frm
| Città | Freq. relativa |
|---|---|
| Beaumont | 0.25 |
| Bryan-College Station | 0.25 |
| Tyler | 0.25 |
| Wichita Falls | 0.25 |
Dai risultati si evince che si ha il 25% di probabilità di estrarre, dal dataset, una riga che ha come valore di city uguale a Beaumont.
Per valutare la probabilità di estrarre una riga con valore di month = 7, che corrisponde al mese di luglio, si procede valutando la frequenza relativa del valore da esaminare.
freq_rel_month<- as.data.frame( table(as.character(dati$month))/N)
# porto le frequenze in colonna
ds_ord <- freq_rel_month %>%
mutate(Var1 = as.numeric(Var1)) %>% # Converte la colonna 'mesi' in numerica
arrange(Var1)
tbl_frm<-format_tbl(cbind(ds_ord),c('Mese','Freq. relativa'), ' ')
tbl_frm
| Mese | Freq. relativa |
|---|---|
| 1 | 0.08 |
| 2 | 0.08 |
| 3 | 0.08 |
| 4 | 0.08 |
| 5 | 0.08 |
| 6 | 0.08 |
| 7 | 0.08 |
| 8 | 0.08 |
| 9 | 0.08 |
| 10 | 0.08 |
| 11 | 0.08 |
| 12 | 0.08 |
Dall’analisi effettuata emerge che si avrà 8% di probabilità di avere una riga di dati con valore di month = 7.
Di seguito il calcolo della probabilità che si estragga una riga con data uguale a dicembre 2012
sum(dati$Date == "2012-12-01") /N
## [1] 0.01666667
La probabilità di estrarre un valore riportante una data uguale a dicembre 2012 è del 1,67%.
Crea una nuova colonna che calcoli il prezzo medio degli immobili utilizzando le variabili disponibili. Prova a creare una colonna che misuri l’efficacia degli annunci di vendita. Commenta e discuti i risultati.
Creamo due nuove variabili:
il valore medio delle compravendite ottenuto dividendo i volumi di vendita per il numero di vendite. Il valore è espresso in dollari.
il coefficiente di efficienza degli annunci, ottenuto dividendo il numero di vendite per il numero di annunci
#prezzo medio
dati$mean_price<-volume*1000000/sales
#indice di efficienza annunci
dati$listings_eff<- round(sales/listings,3)
#statisiche dei nuovi indici
mean_price<-calc_index(dati$mean_price)
listings_eff<-calc_index(dati$listings_eff)
tbl_new_vaar<-cbind(mean_price,listings_eff)
#formatto la tabella
tbl_frm<-format_tbl(tbl_new_vaar,c(' ','Prezzo medio','Indice efficienza annunci'), 'Indici di Posizione, Variabilità e Forma ')
tbl_frm
| Prezzo medio | Indice efficienza annunci | |
|---|---|---|
| Min | 97010.20 | 0.05 |
| Max | 213233.94 | 0.39 |
| Mean | 154320.37 | 0.12 |
| Median | 156588.48 | 0.11 |
| Q1.25% | 132938.94 | 0.09 |
| Q3.75% | 173915.15 | 0.14 |
| Dev.st | 27147.46 | 0.05 |
| IQR | 40976.22 | 0.05 |
| Skewness | -0.07 | 2.09 |
| Kurtosis | -0.78 | 6.86 |
#rappresentazione delle nuove variabili
x= dati$listings
y= dati$listings_eff
par(mfrow=c(1,2))
plot(x , y, main="Correlazione efficienza vendita\ne numero annunci",cex.main = 1, pch=20, cex=1, col=rgb(0.3,0.5,1,0.4), xlab="n° annunci" , ylab="Indice Efficienza" )
plot(density(dati$listings_eff),xlab="Indice efficienza", main="Distribuzione Indice" )
Il prezzo medio delle vendite va da un minimo di 97.010$ a un massimo di 213.233$. il valore medio è di 154.320$ con un IQR pari a 40.976$ e deviazione standard di 27.147,46$. I valori sono ben distribuiti con un valore di Skewness prossimo allo zero (-0,07)
Per quanto riguarda l’indice di efficienza degli annunci, si ricava che non c’è nessuna correlazione tra numero annunci e numero di vendite. Il valore massimo che si ottiene dall’indice è di 0.39, il che fa pensare che gli annunci abbiano una bassa efficacia. Inoltre analizzando la distribuzione dei dati, si osserva che la figura tende verso valori bassi dell’indice utilizato. Pertanto si può desumere che gli annunci abbiano un basso impatto sulle vendite o che comunque il numero di annunci sia molto più alto del numero di vendite.
Usa il pacchetto dplyr o il linguaggio base di R per effettuare analisi statistiche condizionate per città, anno e mese. Genera dei summary (media, dev. standard e rappresenta graficamente dei risultati
Effettuiamo l’analisi condizionata per calcolare le probabilità che un evento accada in una certa città in un certo mese.
p_cond_city <- dati %>%
group_by(city, month) %>%
summarise(count_city_month_ev = n()) %>% # eventi raggruppati per città e mese
group_by(city) %>%
mutate(count_city_ev = sum(count_city_month_ev)) %>% # eventi totali per ciascuna città
mutate(
prob_cond = count_city_month_ev / count_city_ev, # calcolo prob. condizionata per città e mese
standard_error = sqrt(prob_cond * (1 - prob_cond) / count_city_ev),
# limiti intervallo confidenza 95%.
ci_lower = pmax(0, prob_cond - 1.96 * standard_error), #Limite inferiore non deve essere negativo
ci_upper = prob_cond + 1.96 * standard_error
) %>%
ungroup()
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
# Ordiniamo i mesi per una visualizzazione corretta
p_cond_city$month <- factor(p_cond_city$month)
calcoliano la probabilità che un evento accada nella città di Tyler in gennaio
p<-filter(p_cond_city, city == "Tyler", month == 1)
tbl_frm<-format_tbl(p[0:6],c('Città','Mese','Eventi nel mese','Eventi totali','Probabilità','Errore standard'),
'Analisi condizonata città|mese')
tbl_frm
| Città | Mese | Eventi nel mese | Eventi totali | Probabilità | Errore standard |
|---|---|---|---|---|---|
| Tyler | 1 | 5 | 60 | 0.08 | 0.04 |
Rappresentazione della distribuzione di probabilità condizionata città|mese
ggplot(p_cond_city, aes(x = month, y = prob_cond, fill = city)) +
# Barre affiancate grazie a position_dodge()
geom_col(position = position_dodge(width = 0.9)) +
# Barre di errore allineate con le colonne corrispondenti
geom_errorbar(
aes(ymin = ci_lower, ymax = ci_upper),
width = 1,
color = "grey",
position = position_dodge(width = 0.9)
) +
# Etichette e stile
labs(
title = "Confronto delle Probabilità Condizionate per Città|Mese",
x = "Mese",
y = "Probabilità Condizionata",
fill = ""
) +
theme_minimal()+
theme(legend.position = "top",
axis.text.x = element_text(angle = 0, hjust = 1))
Dal grafico si desume che la probabilità che un evento avvenga in una città in un qualsiasi mese dell’anno è sempre la stessa. Gli eventi sono distributi omogeneamente nei vari mesi dell’anno. Per confermare tale osservazione si calcolano valore medio e deviazione standard dei dati:
sum_city <- p_cond_city %>%
group_by(city) %>%
summarise(
media_prob = mean(prob_cond),
dev_std_prob = sd(prob_cond)
) %>%
ungroup()
sum_city<- format_tbl(sum_city,c('Città','Prob. media', 'Dev. Std. Prob'),'Statistica della probabilità condizionata città|mese')
sum_city
| Città | Prob. media | Dev. Std. Prob |
|---|---|---|
| Beaumont | 0.08 | 0 |
| Bryan-College Station | 0.08 | 0 |
| Tyler | 0.08 | 0 |
| Wichita Falls | 0.08 | 0 |
Le statistiche confermano che gli eventi sono equidistribuiti tra i mesi.
Utilizza ggplot2 per creare grafici personalizzati. Assicurati di esplorare: - Boxplot per confrontare la distribuzione del prezzo mediano tra le città. - Grafici a barre per confrontare il totale delle vendite per mese e città. - Line charts per confrontare l’andamento delle vendite in periodi storici differenti.
ggplot(dati, aes(x = city, y = median_price)) +
geom_boxplot()+
labs(
title = "Distribuzione prezzi mediani nelle città",
x = "Città",
y = "Prezzi mediani [$]"
)+
theme_classic() +
theme(axis.text.x = element_text(angle =90, vjust = 0, hjust=1),
plot.title = element_text(hjust = 0.5))
dati %>%
group_by(city) %>%
summarise(mean = mean(median_price),
max = max(median_price),
min = min(median_price))
## # A tibble: 4 × 4
## city mean max min
## <chr> <dbl> <dbl> <dbl>
## 1 Beaumont 129988. 163800 106700
## 2 Bryan-College Station 157488. 180000 140700
## 3 Tyler 141442. 161600 120600
## 4 Wichita Falls 101743. 135300 73800
La città di Wichita Falls ha i valori mediani dei prezzi più bassi di tutte le altre città. Con un solo valore outliers che raggiunge valori di prezzo equiparabili alle altre località. La città con valori più alti del prezzo mediano è Bryan, seguita da Tyler e Beaumont.
ggplot(dati, aes(x= format(Date,'%m'), y= sales, fill = city)) +
geom_bar(stat='identity', position = "stack")+
labs(title="Numero di vendite suddivise per mese e città",
x ="Mese", y = "N° Vendite", fill = "")+
theme(plot.title = element_text(hjust = 0.5))+
facet_wrap(~year)+
theme(legend.position = "top")
Nel periodo temporale che va dal 2010 al 2014 si riscontra una stagionalità nel numero delle vendite, con i valori maggiori concentrati nel periodo che va da maggio ad agosto. Le città di Bryan e Tyler hanno il numero di vendite maggiori, mentre la città di Wichita Falls ha il numero minore di vendite, e ristente poco o nulla della stagionalità. Si riscontra inoltre che gli anni 2013 e 2014 hanno fatto registrare il numero di vendite maggiori.
#confrontare l’andamento delle vendite in periodi storici differenti
dati%>%
group_by(Date) %>%
tally()
## # A tibble: 60 × 2
## Date n
## <date> <int>
## 1 2010-01-01 4
## 2 2010-02-01 4
## 3 2010-03-01 4
## 4 2010-04-01 4
## 5 2010-05-01 4
## 6 2010-06-01 4
## 7 2010-07-01 4
## 8 2010-08-01 4
## 9 2010-09-01 4
## 10 2010-10-01 4
## # ℹ 50 more rows
ggplot(dati, aes(x = Date, y = sales, color = city)) +
geom_line(linewidth=1) +
geom_point(size=2) +
theme(legend.position = "bottom") +
labs(title="Serie storiche andamenti delle vendite per località",
x ="Data", y = "N° Vendite", fill = "Località:")+
scale_x_date( date_breaks = "months", date_labels = "%b-%y",date_minor_breaks = "months")+
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1),
plot.title = element_text(hjust = 0.5))
Analizzando le serie storiche delle 4 città si mette in veidenza come per le città di Tyler e Bryan ci sia una forte stagionalità delle vendite, ed entrambe raggiungono i picchimassimi come numero di vendite. Per la città di Tyler è evidente una crescita progerriva negli anni del numero di vendite. La città di Beaumont ha sempre un trend in crescita del numero di vendite, ma più limitato. Anche l’effetto stagionale fa registre picchi più contenuti. La città di Wichita Falls si conferma essere la località con il minor numero di vendite e con un trend constante e basso negli anni.
Fornisci una sintesi dei risultati ottenuti, facendo riferimento alle principali tendenze emerse e fornendo raccomandazioni basate sull’analisi.
Dalle analisi dei dati si riscontra che la città con i valri mediani dei prezzi più alti è Bryan-College Station, di contro la città con i prezzi mediani più bassi è Wichita Falls. Il periodo in cui si effettuano più vendite in assoluto, analizzando tutte le città insieme risulta essere quello che va da maggio ad agosto, gli altri mesi fanno registrare numeri di vendite più bassi. E le due città con il volume di vendite maggiore sono Bryan-College Station e Tyler, invece la città di Wichita Falls è quella con il numero più basso di vendite. La serie storica delle vendite invece evidenzia come la città di Tyler risulti essere quella con un trand in crescita per quanto digrarda le vendite, mentre Bryan-College Station ha una nadamento legato molto alla stagionalità e che negli anni risulta però costante. Anche in questo caso Wichita Falls risulta essere la città con meno vendite e un andamento sui volumi di vendita pressochè costante negli anni.
Le grosse criticità riscontrate per la città di Wichita Falls dovute a volumi di vendita bassi, con prezzi mediani bassi potrebbero portare a valutare di abbandonare questa località e concentrare gli sofrzi di ricerca annunci e vendita case sulle altre località. Concentrandosi soprattutto su Beaumont che ha fatto registrare un costante qumento dei columi di vendita e prezzi mediani non troppo bassi riseptto alle altre due città. Invece per i dati riguardanti la stagionaità del numero di vendite, si potrebbe pensare di concentrare una campagna marketing nei periodo dove si registrano meno vendite, così da invogliare i possibili utenti a visionare le case e aumentare le possibilità di un loro acquisto.