Descrizione del progetto

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.

Obiettivi del progetto

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

1. Analisi delle variabili

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:

2. Indici di posizione, variabilità e forma

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

Analisi del numero di vendite

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
Tabella degli Indici di Posizione, Variabilità e Forma
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")

Osservazioni sui quantitativi di vendita

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.

Analisi dei volumi di vendita

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
Tabella degli Indici di Posizione, Variabilità e Forma
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.

Analisi dei prezzi mediani

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
Tabella degli Indici di Posizione, Variabilità e Forma
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")

Osservazioni sui prezzi mediani

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.

Analisi tempo vendita annunci

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
Tabella degli Indici di Posizione, Variabilità e Forma
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")

Osservazioni sui prezzi mediani

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.

Analisi della distribuzione dei dati per le varie città

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
Ripartizione delle osservazioni per città
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à.

3. Identificazione delle variabili con maggiore variabilità e asimmetria

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
Coefficienti di variazione delle variabili
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
Indice di asimmetria
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.

4. Creazione di classi per una variabile quantitativa

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.

5. Calcolo della probabilità

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

6. Creazione di nuove variabili

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:

  1. il valore medio delle compravendite ottenuto dividendo i volumi di vendita per il numero di vendite. Il valore è espresso in dollari.

  2. 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
Indici di Posizione, Variabilità e Forma
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.

7. Analisi Condizionata

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
Analisi condizonata città|mese
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
Statistica della probabilità condizionata città|mese
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.

8. Creazione di visualizzazioni con ggplot2

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.

Analisi dei prezzi mediani tra le città:

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.

Confronto del totale delle vendite per mese e città:

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.

Analisi dell’andamento delle vendite nei diversi periodi storici nelle diverse località.

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

9. Conclusioni

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.