# install.packages("ggplot2")
# install.packages("moments")
# install.packages("dplyr")
dati <- read.csv("datasets/realestate_texas.csv",sep = ",")
attach(dati)
N<-dim(dati)[1] #salvo il numero totale di osservazioni per utilizzarlo in seguito
dim(dati)
## [1] 240 8
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.
str(dati) #mostra la struttura del dataset
## '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 ...
Nel dataset sono presenti 8 variabili: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.
Creo una distribuzione di frequenza per la variabile qualitativa city e per le variabili temporali year e month. Successivamente calcolo gli indici di posizione, variabilità e forma sia per le variabili quantitative discrete (sales e listings) che per quelle quantitative continue (volume, median_price, months_inventory).
#distribuzione di frequenza assoluta
freq_ass_city<-table(city)
#distribuzione di frequenza relativa
freq_rel_city<-table(city)/N
#distribuzione di frequenza
distr_freq_city<-cbind(freq_ass_city,freq_rel_city)
distr_freq_city
## freq_ass_city freq_rel_city
## Beaumont 60 0.25
## Bryan-College Station 60 0.25
## Tyler 60 0.25
## Wichita Falls 60 0.25
#distribuzione di frequenza assoluta
freq_ass_year<-table(year)
#distribuzione di frequenza relativa
freq_rel_year<-table(year)/N
#distribuzione di frequenza
distr_freq_year<-cbind(freq_ass_year,freq_rel_year)
distr_freq_year
## freq_ass_year freq_rel_year
## 2010 48 0.2
## 2011 48 0.2
## 2012 48 0.2
## 2013 48 0.2
## 2014 48 0.2
min(year);max(year)
## [1] 2010
## [1] 2014
month
#distribuzione di frequenza assoluta
freq_ass_month<-table(month)
#distribuzione di frequenza relativa
freq_rel_month<-table(month)/N
#distribuzione di frequenza
distr_freq_month<-cbind(freq_ass_month,freq_rel_month)
distr_freq_month
## freq_ass_month freq_rel_month
## 1 20 0.08333333
## 2 20 0.08333333
## 3 20 0.08333333
## 4 20 0.08333333
## 5 20 0.08333333
## 6 20 0.08333333
## 7 20 0.08333333
## 8 20 0.08333333
## 9 20 0.08333333
## 10 20 0.08333333
## 11 20 0.08333333
## 12 20 0.08333333
summary(sales)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 79.0 127.0 175.5 192.3 247.0 423.0
min(sales);max(sales)
## [1] 79
## [1] 423
mean(sales)
## [1] 192.2917
median(sales)
## [1] 175.5
quantile(sales)
## 0% 25% 50% 75% 100%
## 79.0 127.0 175.5 247.0 423.0
boxplot(sales,main="Boxplot di sales")
#intervallo di variazione
max(sales)-min(sales)
## [1] 344
#differenza interquartile
IQR(sales) #Q3 - Q1
## [1] 120
#varianza
var(sales)
## [1] 6344.3
#deviazione standard
sd(sales)
## [1] 79.65111
#coefficiente di variazione
sd(sales) / mean(sales)
## [1] 0.4142203
skewness(sales)
## [1] 0.718104
kurtosis(sales)-3
## [1] -0.3131764
# asimmetria
mu<-mean(sales)
sigma <- sd(sales)
m3 <- sum( (sales-mu)^3 ) / length(sales)
asim.fisher <- m3 / sigma^3
asim.fisher
## [1] 0.7136206
# curtosi
m4 <- sum( (sales-mu)^4 ) / length(sales)
curtosi <- m4 / sigma^4 -3
curtosi
## [1] -0.33552
# grafico
ggplot()+
geom_density(aes(x=sales),
col="lightblue",
fill="lightblue")+
xlab("sales")+
ggtitle("Density plot di sales")
summary(listings)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 743 1026 1618 1738 2056 3296
min(listings);max(listings)
## [1] 743
## [1] 3296
mean(listings)
## [1] 1738.021
median(listings)
## [1] 1618.5
quantile(listings)
## 0% 25% 50% 75% 100%
## 743.0 1026.5 1618.5 2056.0 3296.0
boxplot(listings,main="Boxplot di listings")
#intervallo di variazione
max(listings)-min(listings)
## [1] 2553
range(listings)
## [1] 743 3296
#differenza interquartile
IQR(listings)
## [1] 1029.5
#varianza
var(listings)
## [1] 566569
#deviazione standard
sd(listings)
## [1] 752.7078
#coefficiente di variazione
sd(listings) / mean(listings)
## [1] 0.4330833
skewness(listings)
## [1] 0.6494982
kurtosis(listings)-3
## [1] -0.79179
# asimmetria
mu<-mean(listings)
sigma <- sd(listings)
m3 <- sum( (listings-mu)^3 ) / length(listings)
asim.fisher <- m3 / sigma^3
asim.fisher
## [1] 0.6454431
# curtosi
m4 <- sum( (listings-mu)^4 ) / length(listings)
curtosi <- m4 / sigma^4 -3
curtosi
## [1] -0.8101534
# grafico
ggplot()+
geom_density(aes(x=listings),
col="lightblue",
fill="lightblue")+
xlab("listings")+
ggtitle("Density plot di listings")
summary(volume)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.166 17.660 27.062 31.005 40.893 83.547
min(volume);max(volume)
## [1] 8.166
## [1] 83.547
mean(volume)
## [1] 31.00519
median(volume)
## [1] 27.0625
quantile(volume)
## 0% 25% 50% 75% 100%
## 8.1660 17.6595 27.0625 40.8930 83.5470
boxplot(volume,main="Boxplot di volume")
#intervallo di variazione
max(volume)-min(volume)
## [1] 75.381
range(volume)
## [1] 8.166 83.547
#differenza interquartile
IQR(volume) #terzo q - primo q
## [1] 23.2335
#varianza
var(volume)
## [1] 277.2707
#deviazione standard
sd(volume)
## [1] 16.65145
#coefficiente di variazione
sd(volume)/mean(volume)
## [1] 0.5370536
skewness(volume)
## [1] 0.884742
kurtosis(volume)-3
## [1] 0.176987
# asimmetria
mu<-mean(volume)
sigma <- sd(volume)
m3 <- sum( (volume-mu)^3 ) / length(volume)
asim.fisher <- m3 / sigma^3
asim.fisher
## [1] 0.8792182
# curtosi
m4 <- sum( (volume-mu)^4 ) / length(volume)
curtosi <- m4 / sigma^4 -3
curtosi
## [1] 0.1505673
# grafico
ggplot()+
geom_density(aes(x=volume),
col="lightblue",
fill="lightblue")+
labs(x="volume")+
ggtitle("Density plot di volume")
summary(median_price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 73800 117300 134500 132665 150050 180000
min(median_price);max(median_price)
## [1] 73800
## [1] 180000
mean(median_price)
## [1] 132665.4
median(median_price)
## [1] 134500
quantile(median_price)
## 0% 25% 50% 75% 100%
## 73800 117300 134500 150050 180000
boxplot(median_price,main="Boxplot di median_price")
#intervallo di variazione
max(median_price)-min(median_price)
## [1] 106200
range(median_price)
## [1] 73800 180000
#differenza interquartile
IQR(median_price)
## [1] 32750
#varianza
var(median_price)
## [1] 513572983
#deviazione standard
sd(median_price)
## [1] 22662.15
#coefficiente di variazione
sd(median_price) / mean(median_price)
## [1] 0.1708218
skewness(median_price)
## [1] -0.3645529
kurtosis(median_price)-3
## [1] -0.6229618
# asimmetria
mu<-mean(median_price)
sigma <- sd(median_price)
m3 <- sum( (median_price-mu)^3 ) / length(median_price)
asim.fisher <- m3 / sigma^3
asim.fisher
## [1] -0.3622768
# curtosi
m4 <- sum( (median_price-mu)^4 ) / length(median_price)
curtosi <- m4 / sigma^4 -3
curtosi
## [1] -0.6427292
# grafico
ggplot()+
geom_density(aes(x=median_price),
col="lightblue",
fill="lightblue")+
xlab("median_price")+
ggtitle("Density plot di median_price")
summary(months_inventory)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.400 7.800 8.950 9.193 10.950 14.900
min(months_inventory);max(months_inventory)
## [1] 3.4
## [1] 14.9
mean(months_inventory)
## [1] 9.1925
median(months_inventory)
## [1] 8.95
quantile(months_inventory)
## 0% 25% 50% 75% 100%
## 3.40 7.80 8.95 10.95 14.90
boxplot(months_inventory,main="Boxplot di months_inventory")
#intervallo di variazione
max(months_inventory)-min(months_inventory)
## [1] 11.5
range(months_inventory)
## [1] 3.4 14.9
#differenza interquartile
IQR(months_inventory)
## [1] 3.15
#varianza
var(months_inventory)
## [1] 5.306889
#deviazione standard
sd(months_inventory)
## [1] 2.303669
#coefficiente di variazione
sd(months_inventory) / mean(months_inventory)
## [1] 0.2506031
skewness(months_inventory)
## [1] 0.04097527
kurtosis(months_inventory)-3
## [1] -0.1744475
# asimmetria
mu<-mean(months_inventory)
sigma <- sd(months_inventory)
m3 <- sum( (months_inventory-mu)^3 ) / length(months_inventory)
asim.fisher <- m3 / sigma^3
asim.fisher
## [1] 0.04071944
# curtosi
m4 <- sum( (months_inventory-mu)^4 ) / length(months_inventory)
curtosi <- m4 / sigma^4 -3
curtosi
## [1] -0.1979448
# grafico
ggplot()+
geom_density(aes(x=months_inventory),
col="lightblue",
fill="lightblue")+
labs(x="months_inventory")+
ggtitle("Density plot di months_inventory")
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 determinare quale variabile presenta la maggiore variabilità
bisogna confrontare i coefficienti di variazione. Dunque, di seguito,
creo una tabella per raggrupparli e facilitare il confronto.
Da
questo confronto si osserva che la variabile con coefficiente di
variazione più alto è volume. Questo indica che i suoi valori
sono più dispersi rispetto alla media e che le vendite totali variano
considerevolmente in base al periodo o alla città di riferimento.
cv<-data.frame()
cv <- rbind(cv,c("sales",sd(sales) / mean(sales)))
cv <- rbind(cv,c("listings",sd(listings) / mean(listings)))
cv <- rbind(cv,c("volume",sd(volume) / mean(volume)))
cv <- rbind(cv,c("median_price",sd(median_price) / mean(median_price)))
cv <- rbind(cv,c("months_inventory",sd(months_inventory) / mean(months_inventory)))
colnames(cv) <- c("variabile", "coefficiente di variazione")
cv
## variabile coefficiente di variazione
## 1 sales 0.414220296482492
## 2 listings 0.433083275909432
## 3 volume 0.537053586805415
## 4 median_price 0.170821825732064
## 5 months_inventory 0.250603059264982
Per individuare la variabile con maggiore asimmetria, eseguo lo
stsesso procedimento.
Dalla tabella risulta che la variabile con
maggiore asimmetria è volume, questo indica la presenza di
valori estremi che allungano la coda destra della distribuzione.
asimmetria <-data.frame()
asimmetria <- rbind(asimmetria,c("sales",skewness(sales)))
asimmetria <- rbind(asimmetria,c("listings",skewness(listings)))
asimmetria <- rbind(asimmetria,c("volume",skewness(volume)))
asimmetria <- rbind(asimmetria,c("median_price",skewness(median_price)))
asimmetria <- rbind(asimmetria,c("months_inventory",skewness(months_inventory)))
colnames(asimmetria) <- c("variabile", "asimmetria")
asimmetria
## variabile asimmetria
## 1 sales 0.718104024884959
## 2 listings 0.649498226273971
## 3 volume 0.884742026325995
## 4 median_price -0.364552878177372
## 5 months_inventory 0.040975265871081
Il fatto che volume presenti sia la maggiore variabilità sia la maggiore asimmetria suggerisce che in alcuni periodi o città si registrano vendite eccezionalmente elevate.
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.
Scelgo la variabile sales e creo classi di ampiezza 50.
#min e max
min(sales);max(sales)
## [1] 79
## [1] 423
#suddivisione in classi
sales_classi<-cut(sales,
breaks = seq(50,max(sales)+50,by=50),
right = FALSE)
#distribuzione di frequenze
ni<-table(sales_classi)
fi<-table(sales_classi)/N
Ni<-cumsum(ni)
Fi<-Ni/N
distr_freq_sales_cl<-as.data.frame(cbind(ni,fi,Ni,Fi))
distr_freq_sales_cl
## ni fi Ni Fi
## [50,100) 20 0.08333333 20 0.08333333
## [100,150) 69 0.28750000 89 0.37083333
## [150,200) 58 0.24166667 147 0.61250000
## [200,250) 33 0.13750000 180 0.75000000
## [250,300) 34 0.14166667 214 0.89166667
## [300,350) 14 0.05833333 228 0.95000000
## [350,400) 9 0.03750000 237 0.98750000
## [400,450) 3 0.01250000 240 1.00000000
#distribuzione di frequenza doppia
table(city,sales_classi)
## sales_classi
## city [50,100) [100,150) [150,200) [200,250) [250,300)
## Beaumont 1 13 29 13 4
## Bryan-College Station 2 17 17 6 10
## Tyler 0 1 7 14 20
## Wichita Falls 17 38 5 0 0
## sales_classi
## city [300,350) [350,400) [400,450)
## Beaumont 0 0 0
## Bryan-College Station 3 3 2
## Tyler 11 6 1
## Wichita Falls 0 0 0
La maggior parte delle osservazioni si concentra nelle classi
[100,150) e [150,200), indicando che i valori di sales sono
prevalentemente distribuiti in questo intervallo.
max_y <- max(distr_freq_sales_cl$ni) + 20
bp<-barplot(distr_freq_sales_cl$ni,
main = "Distribuzione classi di sales",
xlab = "",
ylab = "Frequenze assolute",
ylim=c(0,max_y),
col="darkgreen",
names.arg = (rownames(distr_freq_sales_cl)),
cex.names = 0.7
)
title(xlab = "Classi di sales", line = 4)
text(bp, distr_freq_sales_cl$ni, labels = paste(round(distr_freq_sales_cl$fi*100,1),"%"), pos = 3, font = 2, col = "black")
G in [0,1], con 0 eterogeneità nulla e 1 massima. L’indice di Gini è circa 0.9 dunque indica un’alta eterogeneità della variabile sales.
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)
}
gini.index(sales_classi)
## [1] 0.9234921
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?
La probabilità che presa una riga a caso dal dataset questa riporti
la città “Beaumont” è uguale al numero di casi favorevoli
(city=“Beaumont”) diviso il numero totale di osservazioni, ovvero:
P(city==‘Beaumont’) = distribuzione di frequenza assoluta/N
v=nrow(subset(dati,city=="Beaumont"))
p1=v/N
sprintf("P(city=='Beaumont') = %.0f / %.0f = %.4f",v,N,p1)
## [1] "P(city=='Beaumont') = 60 / 240 = 0.2500"
Seguo lo stesso procedimento.
v=nrow(subset(dati,month==7))
p2=v/N
sprintf("P(month=='Luglio') = %.0f / %.0f = %.4f",v,N,p2)
## [1] "P(month=='Luglio') = 20 / 240 = 0.0833"
v=nrow(subset(dati,month==12&year==2012))
p3=v/N
sprintf("P(month=='Dicembre'& year==2012) = %.0f / %.0f = %.4f",v,N,p3)
## [1] "P(month=='Dicembre'& year==2012) = 4 / 240 = 0.0167"
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.
il prezzo medio si ottiene calcolando le vendite totali (volume) (in milioni di dollari) diviso il numero di vendite (sales) e moltiplicando per 1.000.000 per ottenere il prezzo in dollari. Questa variabile fornisce una stima del prezzo medio per immobile, ma può essere influenzata da valori estremi.
avg_price=c((volume/sales)*1000000)
dati$avg_price<-avg_price
si può calcolare dividendo le vendite totali (sales) per il numero totale di annunci attivi (listings). Valori più elevati indicano maggiore efficacia degli annunci.
efficacia_annunci=c(sales/listings)
dati$efficacia_annunci<-efficacia_annunci
Ecco il dataset con le nuove colonne
head(dati)
## city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010 1 83 14.162 163800 1533 9.5
## 2 Beaumont 2010 2 108 17.690 138200 1586 10.0
## 3 Beaumont 2010 3 182 28.701 122400 1689 10.6
## 4 Beaumont 2010 4 200 26.819 123200 1708 10.6
## 5 Beaumont 2010 5 202 28.833 123100 1771 10.9
## 6 Beaumont 2010 6 189 27.219 122800 1803 11.1
## avg_price efficacia_annunci
## 1 170626.5 0.05414220
## 2 163796.3 0.06809584
## 3 157697.8 0.10775607
## 4 134095.0 0.11709602
## 5 142737.6 0.11405985
## 6 144015.9 0.10482529
Usa il pacchetto dplyr o il linguaggio base di R per effettuare analisi statistiche condizionate per città, anno e mese. Genera dei summary (media, deviazione standard) e rappresenta graficamente i risultati.
city_summary <-
dati %>%
group_by(city) %>%
summarise(
media_sales = mean(sales), devst_sales = sd(sales), #media e sd del numero di vendite per città
media_volume = mean(volume), devst_volume = sd(volume), #media e sd del prezzo totale di vendite per città
media_avg_price = mean(avg_price), devst_avg_price = sd(avg_price), #media e sd del prezzo medio di un immobile
media_eff_ann = mean(efficacia_annunci), devst_eff_ann = sd(efficacia_annunci) #media e sd dell'efficacia degli annunci per città
)
city_summary%>%print(width=Inf)
## # A tibble: 4 × 9
## city media_sales devst_sales media_volume devst_volume
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Beaumont 177. 41.5 26.1 6.97
## 2 Bryan-College Station 206. 85.0 38.2 17.2
## 3 Tyler 270. 62.0 45.8 13.1
## 4 Wichita Falls 116. 22.2 13.9 3.24
## media_avg_price devst_avg_price media_eff_ann devst_eff_ann
## <dbl> <dbl> <dbl> <dbl>
## 1 146640. 11232. 0.106 0.0267
## 2 183534. 15149. 0.147 0.0729
## 3 167677. 12351. 0.0935 0.0235
## 4 119430. 11398. 0.128 0.0247
# Vendite medie per città
ggplot(city_summary) +
geom_col(aes(x=city, y=media_sales), fill="cadetblue1") +
geom_errorbar(aes(x=city,
ymin=media_sales - devst_sales,
ymax=media_sales + devst_sales), col="black") +
labs(x="Città", y="Vendite medie", title="Vendite medie per città")
# Volume di vendite per città
ggplot(city_summary) +
geom_col(aes(x=city, y=media_volume), fill="cadetblue2") +
geom_errorbar(aes(x=city,
ymin=media_volume - devst_volume,
ymax=media_volume + devst_volume), col="black") +
labs(x="Città", y="Volume di vendite medie", title="Volume di vendite medie per città")
# Prezzo medio per città
ggplot(city_summary) +
geom_col(aes(x=city, y=media_avg_price), fill="cadetblue3") +
geom_errorbar(aes(x=city,
ymin=media_avg_price - devst_avg_price,
ymax=media_avg_price + devst_avg_price), col="black") +
labs(x="Città", y="Prezzo medio ($)", title="Prezzo medio per città")
# Efficacia degli annunci per città
ggplot(city_summary) +
geom_col(aes(x=city, y=media_eff_ann), fill="cadetblue4") +
geom_errorbar(aes(x=city,
ymin=media_eff_ann - devst_eff_ann,
ymax=media_eff_ann + devst_eff_ann), col="black") +
labs(x="Città", y="Efficacia media degli annunci", title="Efficacia media degli annunci per città")
L’analisi per città mostra differenze significative sia nel prezzo medio che nelle vendite. Alcune città presentano valori medi più elevati. La deviazione standard indica il grado di variabilità all’interno di ciascuna città: valori più alti segnalano una maggiore eterogeneità.
year_summary <-
dati %>%
group_by(year) %>%
summarise(
media_sales=mean(sales),devst_sales=sd(sales),
media_volume=mean(volume),devst_volume=sd(volume),
media_avg_price=mean(avg_price), devst_avg_price=sd(avg_price),
media_eff_ann=mean(efficacia_annunci), devst_eff_ann=sd(efficacia_annunci)
)
year_summary%>%print(width=Inf)
## # A tibble: 5 × 9
## year media_sales devst_sales media_volume devst_volume media_avg_price
## <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2010 169. 60.5 25.7 10.8 150189.
## 2 2011 164. 63.9 25.2 12.2 148251.
## 3 2012 186. 70.9 29.3 14.5 150899.
## 4 2013 212. 84.0 35.2 17.9 158705.
## 5 2014 231. 95.5 39.8 21.2 163559.
## devst_avg_price media_eff_ann devst_eff_ann
## <dbl> <dbl> <dbl>
## 1 23280. 0.0997 0.0337
## 2 24938. 0.0927 0.0232
## 3 26438. 0.110 0.0281
## 4 26524. 0.135 0.0448
## 5 31741. 0.157 0.0618
# Vendite medie per anno
ggplot(year_summary) +
geom_col(aes(x=year, y=media_sales), fill="darkseagreen1") +
geom_errorbar(aes(x=year,
ymin=media_sales - devst_sales,
ymax=media_sales + devst_sales), col="black") +
labs(x="Anno", y="Vendite medie", title="Vendite medie per anno")
# Volume di vendite per anno
ggplot(year_summary) +
geom_col(aes(x=year, y=media_volume), fill="darkseagreen2") +
geom_errorbar(aes(x=year,
ymin=media_volume - devst_volume,
ymax=media_volume + devst_volume), col="black") +
labs(x="Anno", y="Volume di vendite medie", title="Volume di vendite medie per anno")
# Prezzo medio per anno
ggplot(year_summary) +
geom_col(aes(x=year, y=media_avg_price), fill="darkseagreen3") +
geom_errorbar(aes(x=year,
ymin=media_avg_price - devst_avg_price,
ymax=media_avg_price + devst_avg_price), col="black") +
labs(x="Anno", y="Prezzo medio ($)", title="Prezzo medio per anno")
# Efficacia degli annunci per anno
ggplot(year_summary) +
geom_col(aes(x=year, y=media_eff_ann), fill="darkseagreen4") +
geom_errorbar(aes(x=year,
ymin=media_eff_ann - devst_eff_ann,
ymax=media_eff_ann + devst_eff_ann), col="black") +
labs(x="Anno", y="Efficacia media degli annunci", title="Efficacia media degli annunci per anno")
L’analisi per anno consente di osservare eventuali trend temporali. Si osserva una leggera crescita del prezzo medio e delle vendite nel corso degli anni.
month_summary <-
dati %>%
group_by(month) %>%
summarise(
media_sales=mean(sales), devst_sales=sd(sales),
media_volume=mean(volume), devst_volume=sd(volume),
media_avg_price=mean(avg_price), devst_avg_price=sd(avg_price),
media_eff_ann=mean(efficacia_annunci), devst_eff_ann=sd(efficacia_annunci)
)
month_summary%>%print(width=Inf)
## # A tibble: 12 × 9
## month media_sales devst_sales media_volume devst_volume media_avg_price
## <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 127. 43.4 19.0 8.37 145640.
## 2 2 141. 51.1 21.7 10.1 148840.
## 3 3 189. 59.2 29.4 12.0 151137.
## 4 4 212. 65.4 33.3 14.5 151461.
## 5 5 239. 83.1 39.7 19.0 158235.
## 6 6 244. 95.0 41.3 21.1 161546.
## 7 7 236. 96.3 39.1 21.4 156881.
## 8 8 231. 79.2 38.0 18.0 156456.
## 9 9 182. 72.5 29.6 15.2 156522.
## 10 10 180. 75.0 29.1 15.1 155897.
## 11 11 157. 55.5 24.8 11.2 154233.
## 12 12 169. 60.7 27.1 12.6 154996.
## devst_avg_price media_eff_ann devst_eff_ann
## <dbl> <dbl> <dbl>
## 1 29819. 0.0831 0.0230
## 2 25120. 0.0878 0.0219
## 3 23238. 0.116 0.0346
## 4 26174. 0.125 0.0380
## 5 25787. 0.141 0.0503
## 6 23470. 0.142 0.0576
## 7 27220. 0.143 0.0740
## 8 28253. 0.142 0.0526
## 9 29669. 0.112 0.0348
## 10 32527. 0.112 0.0360
## 11 29685. 0.102 0.0293
## 12 27009. 0.117 0.0379
# Vendite medie per mese
ggplot(month_summary)+
geom_col(aes(x=factor(month), y=media_sales), fill="plum1") +
geom_errorbar(aes(x=factor(month),
ymin=media_sales - devst_sales,
ymax=media_sales + devst_sales), col="black") +
labs(x="Mese", y="Vendite medie", title="Vendite medie per mese")
# Volume di vendite per mese
ggplot(month_summary)+
geom_col(aes(x=factor(month), y=media_volume), fill="plum2") +
geom_errorbar(aes(x=factor(month),
ymin=media_volume - devst_volume,
ymax=media_volume + devst_volume), col="black") +
labs(x="Mese", y="Volume di vendite medie", title="Volume di vendite medie per mese")
# Prezzo medio per mese
ggplot(month_summary)+
geom_col(aes(x=factor(month), y=media_avg_price), fill="plum3") +
geom_errorbar(aes(x=factor(month),
ymin=media_avg_price - devst_avg_price,
ymax=media_avg_price + devst_avg_price), col="black") +
labs(x="Mese", y="Prezzo medio ($)", title="Prezzo medio per mese")
# Efficacia degli annunci per mese
ggplot(month_summary)+
geom_col(aes(x=factor(month), y=media_eff_ann), fill="plum4") +
geom_errorbar(aes(x=factor(month),
ymin=media_eff_ann - devst_eff_ann,
ymax=media_eff_ann + devst_eff_ann), col="black") +
labs(x="Mese", y="Efficacia media degli annunci", title="Efficacia media degli annunci per mese")
L’analisi mensile permette di individuare possibili effetti stagionali. Si osserva che il prezzo medio è più elevato nel mese di giugno, mentre la variabilità più elevata è nel mese di ottobre. Le vendite mostrano un andamento stagionale con un picco nei mesi estivi.
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(outlier.colour = "red", outlier.shape = 8) +
labs(x = "Città", y = "Prezzo mediano",
title = "Distribuzione del prezzo mediano per città") +
theme(legend.position = "none")
# Totale vendite per mese
ggplot(dati, aes(x = factor(month), y = sales)) +
geom_col(fill = "salmon1") +
labs(x = "Mese", y = "Totale vendite (sales)",
title = "Totale delle vendite per mese")
# Totale vendite per città
ggplot(dati, aes(x = city, y = sales)) +
geom_col(fill = "salmon3") +
labs(x = "Città", y = "Totale vendite (sales)",
title = "Totale delle vendite per città")
# Totale vendite per mese e città
ggplot(dati, aes(x = factor(month), y = sales, fill = city)) +
geom_col(position = "dodge") +
labs(x = "Mese", y = "Totale vendite (sales)", fill = "Città",
title = "Totale delle vendite per mese e città")
# Andamento del volume di vendite raggruppato per città
ggplot(dati, aes(x = month, y = volume, color = factor(year))) +
geom_line(linewidth = 0.8, alpha=0.7) +
geom_point(size = 2, alpha=0.7) +
facet_wrap(~ city, axes = "all",scales = "free_y") +
scale_x_continuous(breaks = 1:12) +
labs(x = "Mese", y = "Vendite (volume)", color = "Anno",
title = "Andamento del volume di vendite raggruppato per città")
# Andamento del volume di vendite raggruppato per anno
ggplot(dati, aes(x = month, y = volume, color = factor(city))) +
geom_line(linewidth = 0.8, alpha=0.7) +
geom_point(size = 2, alpha=0.7) +
facet_grid(rows =vars(year), scales = "free_y") +
scale_x_continuous(breaks = 1:12) +
labs(x = "Mese", y = "Vendite (volume)", color = "Città",
title = "Andamento del volume di vendite raggruppato per anno")
# Andamento dell'efficacia degli annunci raggruppata per città
ggplot(dati, aes(x = month, y = efficacia_annunci, color = factor(year))) +
geom_line(linewidth = 0.8, alpha=0.7) +
geom_point(size = 2, alpha=0.7) +
facet_wrap(~ city, axes = "all",scales = "free_y") +
scale_x_continuous(breaks = 1:12) +
labs(x = "Mese", y = "Efficacia degli annunci", color = "Anno",
title = "Andamento dell'efficacia degli annunci raggruppata per città")
# Andamento dell'efficacia degli annunci raggruppata per anno
ggplot(dati, aes(x = month, y = efficacia_annunci, color = factor(city))) +
geom_line(linewidth = 0.8, alpha=0.7) +
geom_point(size = 2, alpha=0.7) +
facet_grid(rows =vars(year), scales = "free_y") +
scale_x_continuous(breaks = 1:12) +
labs(x = "Mese", y = "Efficacia degli annunci", color = "Città",
title = "Andamento dell'efficacia degli annunci raggruppata per anno")
Fornisci una sintesi dei risultati ottenuti, facendo riferimento alle principali tendenze emerse e fornendo raccomandazioni basate sull’analisi. Questo non è un progetto di programmazione, ma di statistica, e ci si aspetta di leggere commenti e considerazioni statistiche per i vari passaggi e risultati.
Dai punti 2 e 3 emerge che la variabile con maggiore variabilità e
asimmetria è volume, questo indica che le vendite non sono
distribuite in modo uniforme, ma presentano variazioni significative per
diverse città o per diversi periodi temporali. Questo può essere
approfondito tramite le analisi condizionate fatte nel punto 7 e le
visualizzazioni grafiche create nel punto 8.
In particolare, dal
grafico “Totale delle vendite per città”, creato nel punto 8, si osserva
che nella città “Tyler” si registrano volumi di vendite più elevati.
Come evidenziato anche dalle analisi per città, è dovuto principalmente
al numero maggiore di vendite (sales) rispetto alle altre
città, sebbene il prezzo medio per immobile (avg_price) non sia
il più alto.
Osservando ulteriormente i grafici e i summary creati nel punto 7 si
possono fare altre considerazioni.
Dall’analisi per anno si osserva
una leggera crescita del prezzo medio e del numero di vendite nel corso
degli anni. Tuttavia, l’anno 2010 presenta valori medi di tutte le
variabili più elevati rispetto all’anno successivo. Questo andamento,
apparentemente anomalo, è spiegabile osservando i dati in modo più
disaggregato. Infatti, dal grafico “Andamento del volume di vendite
raggruppato per città”, creato nel punto 8, si osserva che nella città
di “Wichita Falls” sono stati registrati dei picchi nel volume di
vendite nei mesi di marzo, aprile, maggio e giugno del 2010. Questo può
spiegare i valori più alti della media di sales e avg_price e volume
registrati nel 2010 che sono stati evidenziati in precedenza. La
variabilità, invece, segue un andamento sempre crescente.
Dall’analisi mensile si osserva che il prezzo medio è rimasto stabile
durante tutto l’anno, con un lieve aumento nel mese di giugno e una
maggiore variabilità nel mese di ottobre. Il numero medio di vendite
segue invece un andamento crescente raggiungendo il massimo nel mese di
giugno per poi decrescere nei mesi successivi, fino a raggiungere il
minimo nel mese di novembre. Il volume di vendite mostra un andamento
analogo a quello delle vendite, con lo stesso picco nei mesi estivi.
Questo andamento potrebbe suggerire la presenza di un possibile
effetto stagionale, con un’intensificazione delle vendite nel periodo
estivo e un massimo nel mese di giugno. Tuttavia, osservando i
coefficienti di variazione si nota che i mesi di maggio, giugno e luglio
sono caratterizzati da una maggiore variabilità, sia per il numero di
vendite che per il volume.
Dunque, per approfondire la presenza di
un possibile effetto stagionale per tutte le città è necessario
considerare i dati disaggregando per città. I grafici al punto 8, in
particolare il grafico “Totale delle vendite per mese e città” mostra
che il picco osservato nei mesi estivi è influenzato in modo
significativo dalla città “Tyler”, che registra un maggior numero di
vendite nel mese di giugno. Al contrario, le altre città, mostrano
massimi distribuiti in mesi diversi.
Pertanto, l’apparente
stagionalità osservata a livello aggregato non riflette la realtà di
tutte le città. L’andamento mensile è fortemente influenzato dalla città
per cui sono state registrate più vendite.
Dai line charts creati nel punto 8 emerge che per tutte le città il
volume di vendite è più elevato per gli anni 2013 e 2014, questo è
coerente con l’andamento crescente osservato nel punto 7 e con le
osservazioni fatte per l’anno 2010.
Osservando l’andamento del
volume di vendite nelle diverse città, si osservano andamenti coerenti
durante tutti gli anni presi in considerazione, le città di
“Bryan-College Station” e “Tyler” sono quelle per cui sono stati
registrati volumi di vendite maggiori, questo si può riscontrare nei
risultati ottenuti dall’analisi per città.
Analizziamo anche l’efficacia degli annunci di vendita.
Dall’analisi per città si osserva che la città di “Bryan-College
Station” presenta un’efficacia media degli annunci più elevata rispetto
alle altre città, ma anche la variabilità maggiore. Osservando i grafici
creati nel punto 8, si nota che questa efficacia è influenzata
principalmente dal mese di luglio del 2013 e del 2014, per i quali sono
stati registrati dei picchi, questo indica la presenza di eventi
specifici che hanno aumentato temporaneamente l’efficacia degli annunci
in quei periodi.
Dall’analisi per anno si osserva che l’efficacia
media degli annunci è più elevata nel 2013 e 2014, questo si riscontra
anche nei line charts creati nel punto 8 che mostrano, per tutte le
città, un’efficacia degli annunci maggiore in questi due anni. Fanno
eccezione valori particolarmente elevati registrati nella città di
“Wichita Falls” durante i mesi di marzo, aprile e maggio del 2010,
probabilmente dovuti alla presenza di eventi particolari.