knitr::opts_chunk$set(echo = TRUE)
#Operazioni preliminari
#Imposto la directory di lavoro e importo le librerie necessarie
setwd("C:/Users/Laura/Drive/PROGRAMMAZIONE/MASTER DATA SCIENCE/codice/modulo 02 - statistica-descrittiva-per-datascience/progetto finale")
library(rmarkdown)
library(ggplot2)
library(dplyr)
##
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
##
## filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
##
## intersect, setdiff, setequal, union
library(labstatR)
## labstatR 1.0.13
## Insieme di funzioni di supporto al volume
## 'Laboratorio di Statistica con R'
## Iacus-Masarotto, MacGraw-Hill Italia, 2006.
## Si veda 'library(help="labstatR")' per i comandi disponibili.
## Nota: 'mean.a', 'mean.g' e 'hist.pf' sono state sostituite rispettivamente da 'meana', 'meang' e 'histpf'
library(moments)
library(tidyr)
library(gghalves)
library(kableExtra)
##
## Caricamento pacchetto: 'kableExtra'
## Il seguente oggetto è mascherato da 'package:dplyr':
##
## group_rows
library(extrafont)
## Registering fonts with R
library(flextable)
##
## Caricamento pacchetto: 'flextable'
## I seguenti oggetti sono mascherati da 'package:kableExtra':
##
## as_image, footnote
library(lubridate)
##
## Caricamento pacchetto: 'lubridate'
## I seguenti oggetti sono mascherati da 'package:base':
##
## date, intersect, setdiff, union
library(knitr)
vendite <- read.csv("realestate_texas.csv", sep = ",")
Le variabili year e month sono espresse in numeri. Se non facciamo alcuna operazione su di esse le funzioni di R le considererebbero come variabili quantitative ma nella nostra analisi le utilizzeremo come le corrispondenti variabili qualitative. Per renderlo possibile applichiamo la funzione factor alle rispettive colonne e sovrascriviamo i risultati.
vendite$year <- factor(vendite$year)
vendite$month <- factor(vendite$month)
Estraggo le colonne dal dataframe vendite in modo da non dover richiamare tutte le volte il riferimento e usare il simbolo dollaro
attach(vendite)
- city: città
- year: anno di riferimento
- month: mese di riferimento
- sales: numero totale di vendite
- volume: valore totale delle vendite in milioni di
dollari
- median_price: prezzo mediano di vendita in
dollari
- listings: numero totale di annunci attivi
- months_inventory: quantità di tempo necessaria per vendere
tutte le inserzioni correnti al ritmo attuale delle vendite, espresso in
mesi.
Ecco cosa contiene il dataset
head(vendite,5)
Il dataframe contiene 8 colonne, ognuna corrispondente a una variabile:
Gli indici di posizione sono:
Gli indici di variabilità sono:
Gli indici di forma sono:
Gli indici di posizione (fatta eccezione della moda), variabilità e forma sono calcolabili per le variabili quantitative: sales, volume, median_price, listings, months_inventory.
#Creo una funzione per riassumere tutti gli indici di posizione, variabilità e forma che desidero calcolare
indici_uniti <- function(variabile){
#posizione
var_summary <- summary(variabile)
var_names <- names(var_summary)
var_summary <- unname(var_summary)
s = t(data.frame(as.numeric(var_summary)))
#variabilità
r = range(variabile)[2]-range(variabile)[1]
iqr = IQR(variabile)
var = var(variabile)
dev_stand = sd(variabile)
coeff_var = dev_stand/mean(variabile)*100
#forma
fisher = skewness(variabile)
curtosis = kurt(variabile) - 3
indici = cbind(s, r, iqr, var, dev_stand, coeff_var, fisher, curtosis)
colonne <- c("Minimo", "1° Quartile", "Mediana", "Media aritmetica",
"3° Quartile", "Massimo", "Range", "Interquartile Range o IQR",
"Varianza", "Deviazione standard", "Coefficiente di variazione",
"Indice di asimmetria di Fisher", "Curtosi")
matrice=matrix(data=round(indici, 2),
nrow=1,
ncol=13,
dimnames = list(NULL, colonne))
return(matrice)
}
#Creo una funzione per riassumere tutti gli indici di posizione, variabilità e forma che desidero calcolare senza intestazioni di colonna
indici_uniti_no_intestazione <- function(variabile){
#posizione
var_summary <- summary(variabile)
var_names <- names(var_summary)
var_summary <- unname(var_summary)
s = t(data.frame(as.numeric(var_summary)))
#variabilità
r = range(variabile)[2]-range(variabile)[1]
iqr = IQR(variabile)
var = var(variabile)
dev_stand = sd(variabile)
coeff_var = dev_stand/mean(variabile)*100
#forma
fisher = skewness(variabile)
curtosis = kurt(variabile) - 3
indici = cbind(s, r, iqr, var, dev_stand, coeff_var, fisher, curtosis)
matrice=matrix(data=round(indici, 2),
nrow=1,
ncol=13)
return(matrice)
}
Creo una funzione tabella da utilizzare per rappresentare uniformemente i dati
tabella <- function(variabile, variabile2){
return(knitr::kable(x=variabile, "html", caption = variabile2, digits = 2, booktabs=TRUE, linesep = "", longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri"))
}
e la relativa trasposta
tabella_trasposta <- function(variabile, variabile2){
return(knitr::kable(x=t(variabile), "html", caption = variabile2, digits = 2, booktabs=TRUE, linesep = "", longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_up", full_width=FALSE, html_font="Calibri"))
}
Visualizzo gli indici per sales, volume, median price, listings e month_inventory
colonne <- matrix(data=c("Minimo", "1° Quartile", "Mediana", "Media aritmetica",
"3° Quartile", "Massimo", "Range", "Interquartile Range o IQR",
"Varianza", "Deviazione standard", "Coefficiente di variazione",
"Indice di asimmetria di Fisher", "Curtosi"),
nrow=1,
ncol=13)
c <- tabella_trasposta(colonne, "<br>**INDICI**")
t1 <- tabella_trasposta(indici_uniti_no_intestazione(sales), "<br>**sales**")
t2 <- tabella_trasposta(indici_uniti_no_intestazione(volume), "<br>**volume**")
t3 <- tabella_trasposta(indici_uniti_no_intestazione(median_price), "<br>**median price**")
t4 <- tabella_trasposta(indici_uniti_no_intestazione(listings), "<br>**listings**")
t5 <- tabella_trasposta(indici_uniti_no_intestazione(months_inventory), "**months inventory**")
kables(list(c,t1, t2, t3, t4, t5))
|
|
|
|
|
|
Da queste tabelle, a parte scoprire tutti gli indici che ci danno un’idea della forma delle distribuzioni delle singole variabili, possiamo dedurre che: Sales ha una distribuzione asimmetrica positiva, platicurtica Volume ha una distribuzione asimmetrica positiva, leptocurtica. È la variabile con un coefficiente di variazione maggiore quindi con una maggiore variabilità. Median price ha una distribuzione asimmetrica negativa, platicurtica. È la variabile con un coefficiente di variazione minore quindi con una minore variabilità. Listings ha una distribuzione asimmetrica positiva, platicurtica Months inventory ha una distribuzione lievemente asimmetrica positiva, platicurtica
Calcoliamo le distribuzioni di frequenza e gli indici di eterogeneità di Gini per le variabili qualitative.
#creo una funzione per le distribuzioni di frequenza.
distribuzioni_di_frequenza <- function(variabile){
N <- dim(vendite)[1]
ni <- table(variabile)
fi <- ni/N
Ni <- cumsum(ni)
Fi <- Ni/N
distr_freq <- cbind(ni,fi,Ni,Fi)
return(distr_freq)
}
tabella(distribuzioni_di_frequenza(city), "**DISTR.FREQ. CITY**")#etereogeneità massima
| ni | fi | Ni | Fi | |
|---|---|---|---|---|
| Beaumont | 60 | 0.25 | 60 | 0.25 |
| Bryan-College Station | 60 | 0.25 | 120 | 0.50 |
| Tyler | 60 | 0.25 | 180 | 0.75 |
| Wichita Falls | 60 | 0.25 | 240 | 1.00 |
E(city) #gini
## [1] 1
tabella(distribuzioni_di_frequenza(year), "**DISTR.FREQ. YEAR**")#etereogeneità massima
| ni | fi | Ni | Fi | |
|---|---|---|---|---|
| 2010 | 48 | 0.2 | 48 | 0.2 |
| 2011 | 48 | 0.2 | 96 | 0.4 |
| 2012 | 48 | 0.2 | 144 | 0.6 |
| 2013 | 48 | 0.2 | 192 | 0.8 |
| 2014 | 48 | 0.2 | 240 | 1.0 |
E(year)
## [1] 1
N_month <- dim(vendite)[1]
ni_month <- table(month)
fi_month <- ni_month/N_month
distr_freq_month <- cbind(ni_month,fi_month)
Per le variabili city e year abbiamo un’eterogeneità massima (city distribuzione tetramodale, year distribuzione pentamodale)
La frequenza cumulata è utile solo nelle variabili ordinate quindi per i mesi non creiamo le relative colonne
rownames(distr_freq_month) <- c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
colnames(distr_freq_month) <- c("ni", "fi")
tabella(distr_freq_month, "**DISTR.FREQ. MONTH**")#etereogeneità massima
| ni | fi | |
|---|---|---|
| Gennaio | 20 | 0.08 |
| Febbraio | 20 | 0.08 |
| Marzo | 20 | 0.08 |
| Aprile | 20 | 0.08 |
| Maggio | 20 | 0.08 |
| Giugno | 20 | 0.08 |
| Luglio | 20 | 0.08 |
| Agosto | 20 | 0.08 |
| Settembre | 20 | 0.08 |
| Ottobre | 20 | 0.08 |
| Novembre | 20 | 0.08 |
| Dicembre | 20 | 0.08 |
E(month)
## [1] 1
Per la variabile month abbiamo un’eterogeneità massima (distribuzione dodecamodale)
Per confrontare la variabilità di variabili differenti l’indice migliore è il coefficiente di variazione che dà una misura di variabilità relativa, riscalando la deviazione standard dividendola per la media. Dunque è indipendente dall’ordine di grandezza dei dati che si vanno a confrontare. Nel nostro caso è applicabile in quanto non abbiamo variabili con valori negativi. Potrei leggere dalle tabelle riportate sopra, ma per leggere di nuovo i valori qui sotto basta usarela funzione cv() del pacchetto labstatR
cv(sales)
## [1] 0.4133564
cv(volume)
## [1] 0.5359336
cv(median_price)
## [1] 0.1704656
cv(listings)
## [1] 0.4321801
cv(months_inventory)
## [1] 0.2500804
Da questi valori possiamo dedurre che la variabile con variabilità più elevata è volume come visto in precedenza.
Per confrontare invece l’asimmetria delle diverse variabili possiamo confrontare graficamente le distribuzioni tramite il grafico di densità
par(mfrow=c(2,3))
plot(density(sales),
main = "Distr.dens. vendite",
xlab = "Valori di sales",
ylab = "Densità",
col = "blue",
lwd = 2)
plot(density(volume),
main = "Distr.dens. valore totale \ndelle vendite",
xlab = "Valori di volume",
ylab = "Densità",
col = "blue",
lwd = 2)
plot(density(median_price),
main = "Distr.dens. prezzo mediano",
xlab = "Valori di median_price",
ylab = "Densità",
col = "blue",
lwd = 2)
plot(density(listings),
main = "Distr.dens. numero totale \ndi annunci attivi",
xlab = "Valori di listings",
ylab = "Densità",
col = "blue",
lwd = 2)
plot(density(months_inventory),
main = "Distr.dens. mesi necessari \nper vendere tutte \nle inserzioni correnti",
xlab = "Valori di months_inventory",
ylab = "Densità",
col = "blue",
lwd = 2)
Oppure possiamo usare l’indice di asimmetria di Fisher.
skewness(sales)
## [1] 0.718104
skewness(volume)
## [1] 0.884742
skewness(median_price)
## [1] -0.3645529
skewness(listings)
## [1] 0.6494982
skewness(months_inventory)
## [1] 0.04097527
Dai grafici e da questi valori possiamo dedurre che la variabile con asimmetria maggiore è volume.
Scelgo la variabile sales, la divido in classi da 50, partendo da 50 e arrivando a 450 (scelgo in base al minimo e massimo).
vendite$SALES_CL <- cut(sales,
breaks = seq(50,450,50))
distribuzioni_sales <- distribuzioni_di_frequenza(vendite$SALES_CL)
ggplot(vendite)+
geom_bar(aes(x=SALES_CL),
fill="steelblue2",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di vendite",
x = "Numero di vendite suddiviso in classi",
y = "Frequenze assolute")+
geom_text(aes(x=SALES_CL, y=after_stat(count + 3),label=after_stat(count)),
stat = "count")+
scale_y_continuous(breaks = seq(0,72,5))+
theme_classic()
Calcolo l’indice di Gini
E(vendite$SALES_CL)
## [1] 0.9206349
È vicino a 1 quindi la variabile è eterogenea.
L’indice di Gini per la variabile city è 1 perchè abbiamo eterogeneità massima, ovvero lo stesso numero di occorrenze per ogni valore. La distribuzione è infatti tetramodale.
E(city)
## [1] 1
Dato che la variabile city ha una distribuzione tetramodale la probabilità che presa una riga a caso di questo dataset essa riporti la città “Beaumont” è di 1/4 ovvero del 25%
1/4*100
## [1] 25
La variabile month ha una distribuzione dodecamodale (indice di Gini=1 e 12 diversi valori) quindi la probabilità che presa una riga a caso di questo dataset essa riporti il mese di Luglio è 1/12 ovvero dell’8.33%
1/12*100
## [1] 8.333333
La variabile year ha una distribuzione pentamodale (indice di Gini=1 e 5 diversi valori). Tenuto conto delle distribuzioni delle variabili year e month possiamo calcolare che la probabilità che presa una riga a caso di questo dataset essa riporti il mese di dicembre 2012 è data dalla probabilità che essa riporti il mese di dicembre moltiplicata per la probabilità che essa riporti l’anno 2012 quindi 1/12*1/5=1/60 quindi 1.67%
1/12*1/5*100
## [1] 1.666667
Partendo dal volume totale delle vendite (colonna volume) e dal numero totale di vendite (colonna sales) possiamo calcolare il prezzo medio per ogni riga come volume diviso sales per 1000000 perchè volume è espresso in milioni di dollari.
vendite$mean_price <- volume/sales*1000000
La variabile month_inventory ci dà una misura della quantità di tempo necessaria per vendere tutte le inserzioni al ritmo attuale delle vendite espresso in mesi. Se dividiamo questo valore per il numero di annunci attivi (colonna listings) otteniamo il tempo necessario per la vendita di un singolo annuncio (una quantità confrontabile riga per riga al contrario di month_inventory). Visto che verrebbero valori molto piccoli moltiplichiamo quanto ottenuto per 1000. Otteniamo così il tempo necessario per vendere 1000 inserzioni.
vendite$effectiveness <- months_inventory/listings*1000
tabella_trasposta(indici_uniti(vendite$effectiveness), "**INDICI EFFECTIVENESS**")
| Minimo | 3.04 |
| 1° Quartile | 4.24 |
| Mediana | 5.68 |
| Media aritmetica | 5.88 |
| 3° Quartile | 7.15 |
| Massimo | 9.36 |
| Range | 6.32 |
| Interquartile Range o IQR | 2.91 |
| Varianza | 3.39 |
| Deviazione standard | 1.84 |
| Coefficiente di variazione | 31.29 |
| Indice di asimmetria di Fisher | 0.42 |
| Curtosi | -1.07 |
Come si può vedere il valore minimo è 3.04 e il massimo 9.36 Maggiore è il valore della colonna effectiveness e minore è l’“efficacia” degli annunci
Dal grafico sotto vediamo come al crescere del prezzo mediano diminuisce il numero di mesi necessari per la vendita.
ggplot(data = vendite)+
geom_point(aes(x=median_price, y=effectiveness), col="red",size=2)+
labs(x="Prezzo mediano",
y="Tempo necessario per la vendita (mesi per 1000 annunci)",
title = "Mesi necessari per la vendita di 1000 annunci\nin relazione al prezzo mediano case vendute in Texas (dollari)")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))
Mettendo in relazione la nostra variabile effectiveness con il numero di annunci attivi possiamo vedere che all’aumentare del numero di annunci attivi il tempo necessario per la vendita di 1000 annunci tende a diminuire (ovvero aumenta l’efficacia degli annunci stessi)
ggplot(data = vendite)+
geom_point(aes(x=listings, y=effectiveness), col="blue", size=2)+
labs(x="Annunci attivi",
y="Tempo necessario per la vendita (mesi per 1000 annunci)",
title = "Mesi necessari per la vendita di 1000 annunci\nin relazione al numero totale di annunci attivi")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))
Proviamo ad analizzare l’efficacia in relazione alle città. Dividiamo in 3 classi l’effectiveness.
vendite$EFFECTIVENESS_CL <- cut(vendite$effectiveness,
breaks = seq(3,9.5,6.5/3))
Realizziamo un plot con le frequenze assolute e uno con quelle relative delle classi di efficacia rispetto alla variabile City.
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=city),
position = "dodge",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnelle varie città",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze assolute")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=city),
position = "fill",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnelle varie città",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze relative")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
Da questi grafici possiamo dedurre che le inserzioni più efficaci sono quelle relative a Tyler mentre quelle a efficacia minima sono quelle di Wichita Falls. Beaumont e Bryan-College Station sono ad efficacia massima o media.
Realizziamo un grafico relativo alla distribuzione delle classi di efficacia in relazione al prezzo mediano delle case tenendo in considerazione le città. Utilizziamo la funzione geom_half_violin per creare metà grafico a violino che permette di visualizzare il profilo di densità dei valori osservati.
ggplot(data = vendite, aes(x=EFFECTIVENESS_CL, y=median_price/1000, fill=city))+
geom_jitter(aes(col=city), size=1)+
geom_half_boxplot(side="l", alpha=0.5)+
geom_half_violin(side="r", alpha=0.5)+
labs(x="Efficacia degli annunci (mesi)",
y="Prezzo mediano delle case (migliaia di dollari)",
title = "Distribuzione del prezzo mediano delle case \nin relazione alle classi di efficacia")+
scale_y_continuous(breaks = seq(70,200,by=10))+
theme_classic()+
theme(legend.position = "right")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
scale_fill_brewer(palette = "Set1")+
scale_color_brewer(palette = "Set1")+
guides(fill=guide_legend(title="Città"), color=guide_legend(title = "Città"))
Da questo grafico possiamo dedurre, oltre a quanto già dedotto nel grafico appena sopra, che Wichita Falls è caratterizzata da una distribuzione del prezzo mediano delle case più basso rispetto alle altre città. Bryan-College Station è caratterizzata da una distribuzione del prezzo mediano con valori più elevati rispetto alle altre.
Se andiamo a realizzare lo stesso grafico ma relativamente al volume delle vendite possiamo invece notare che chi ha riportato un volume di vendite mediamente maggiore è la città di Tyler.
ggplot(data = vendite, aes(x=EFFECTIVENESS_CL, y=volume, fill=city))+
geom_jitter(aes(col=city), size=1)+
geom_half_boxplot(side="l", alpha=0.5)+
geom_half_violin(side="r", alpha=0.5)+
labs(x="Efficacia degli annunci (mesi)",
y="Volume delle vendite",
title = "Distribuzione del volume delle vendite \nin relazione alle classi di efficacia")+
scale_y_continuous(breaks = seq(10,90,by=10))+
theme_classic()+
theme(legend.position = "right")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
scale_fill_brewer(palette = "Set1")+
scale_color_brewer(palette = "Set1")+
guides(fill=guide_legend(title="Città"), color=guide_legend(title = "Città"))
Con i seguenti due grafici valutiamo la distribuzione delle classi di efficacia rispetto agli anni. Possiamo fare le seguenti considerazioni:
nel 2014 gli annunci hanno avuto un’efficacia massima (principalmente) o minima, mai media.
nel 2013 si ha una prevalenza di annunci ad efficacia massima
gli annunci ad efficacia minima sono presenti in maniera costante nel corso degli anni
nell’intervallo 2010-2012 gli annunci hanno avuto un’efficacia media con una frequenza circa pari alla somma degli annunci con efficacia massima o minima
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=year),
position = "dodge",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnegli anni",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze assolute")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Anni"))
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=year),
position = "fill",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnegli anni",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze relative")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Anni"))
Andiamo a visualizzare invece la distribuzione del volume totale delle vendite in relazione alle classi di efficacia (distinguendo i valori relativi ai vari anni)
ggplot(data = vendite, aes(x=EFFECTIVENESS_CL, y=volume, fill=year))+
geom_jitter(size=1, aes(colour=year))+
geom_boxplot(size=0.35, alpha=0.7)+
labs(x="Efficacia degli annunci (mesi)",
y="Volume totale delle vendite (milioni di dollari)",
title = "Distribuzione del volume totale delle vendite in Texas\nin relazione alle classi di efficacia")+
scale_y_continuous(breaks = seq(0,90,10))+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
scale_fill_brewer(palette = "Set1")+
scale_color_brewer(palette = "Set1")+
guides(fill=guide_legend(title="Anni"), colour=guide_legend("Anni"))
Da questo grafico possiamo dedurre che per gli annunci ad efficacia massima si è osservata una crescita del valore medio del volume totale delle vendite (con aumento anche della variabilità). Anche per gli annunci ad efficacia media si è osservata una crescita del valore medio del volume totale delle vendite. Per gli annunci ad efficacia minima si sono osservate piccole variazioni del valore medio del volume totale delle vendite.
Possiamo mettere a confronto la distribuzione delle classi di efficacia delle vendite nei mesi ma dai grafici non si rileva nulla di significativo se non che negli ultimi 3 mesi dell’anno si ha la tendenza ad avere un lieve aumento dell’efficacia con passaggio da efficacia media ad efficacia massima.
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=month),
position = "dodge",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnei mesi",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze assolute")+
scale_y_continuous(breaks = seq(0, 10, by = 1))+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Mesi"))
ggplot(vendite)+
geom_bar(aes(x=EFFECTIVENESS_CL,
fill=month),
position = "fill",
stat = "count",
col = "black")+
labs(title = "Distribuzione delle classi di efficacia delle vendite\nnei mesi",
x = "Mesi per la vendita di 1000 annunci (classi)",
y = "Frequenze relative")+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Mesi"))
Se invece andiamo a confrontare il volume totale delle vendite per ogni mese dell’anno in relazione all’efficacia degli annunci espressa in mesi otteniamo il seguente grafico:
ggplot(data = vendite, aes(x=EFFECTIVENESS_CL, y=volume, fill=month))+
geom_jitter(size=1, aes(colour=month))+
geom_boxplot(size=0.35, alpha=0.7)+
labs(x="Mesi per la vendita di 1000 annunci (classi)",
y="Volume totale delle vendite (milioni di dollari)",
title = "Distribuzione del volume totale \ndelle vendite in Texas per ogni mese dell'anno \nin relazione alle classi di efficacia")+
scale_y_continuous(breaks = seq(0,90,10))+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
scale_fill_brewer(palette = "Set3")+
scale_color_brewer(palette = "Set3")+
guides(fill=guide_legend(title="Mesi"), colour=guide_legend("Mesi"))
Da tale grafico si può notare un andamento differenziato del volume delle vendite in base ai mesi, il volume cresce sino ai mesi centrali dell’anno per poi decrescere man mano che ci si avvicina alla fine dell’anno (con un piccolo rialzo a dicembre rispetto a novembre). Tale andamento è tanto più evidente tanto più gli annunci presentano un’efficacia alta arrivando ad appiattirsi notevolmente quando gli annunci appartengono alla classe di efficacia bassa.
Ti lascio un suggerimento in pseudocodice, oltre al cheatsheet nel materiale:
dati %>% group_by(una o più variabili di raggruppamento) %>% summarise(nomecolonna1=funzione1(variabile da sintetizzare), nomecolonna2=funzione2(variabile da sintetizzare))
Sfruttando questa notazione puoi creare anche dei grafici super!
Non avendo valori negativi possiamo usare il coefficiente di variazione
primo_quartile <- function(variabile){
return(quantile(variabile)[2])
}
terzo_quartile <- function(variabile){
return(quantile(variabile)[4])
}
Creo un primo summary per la variabile sales condizionatamente alla città e agli anni.
dplyr_city_year_sales <- vendite %>%
group_by(city, year) %>%
summarise("Minimo"=min(sales),
"1° Quartile"=primo_quartile(sales),
"Mediana"=median(sales),
"3° Quartile"=terzo_quartile(sales),
"Massimo"=max(sales),
"Media aritmetica"=mean(sales),
"Dev St"=sd(sales),
"Coeff Var"=cv(sales))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
knitr::kable(x=dplyr_city_year_sales, "html", caption = "**SUMMARY - SALES**", digits = 2, booktabs=TRUE, longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri")
| city | year | Minimo | 1° Quartile | Mediana | 3° Quartile | Massimo | Media aritmetica | Dev St | Coeff Var |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 83 | 142.00 | 157.0 | 183.75 | 202 | 156.17 | 36.92 | 0.23 |
| Beaumont | 2011 | 108 | 126.25 | 148.5 | 160.75 | 177 | 144.00 | 22.66 | 0.15 |
| Beaumont | 2012 | 110 | 161.50 | 175.5 | 184.75 | 218 | 171.92 | 28.39 | 0.16 |
| Beaumont | 2013 | 140 | 175.25 | 202.0 | 217.75 | 273 | 201.17 | 37.73 | 0.18 |
| Beaumont | 2014 | 148 | 185.00 | 210.0 | 248.00 | 262 | 213.67 | 36.49 | 0.16 |
| Bryan-College Station | 2010 | 89 | 105.50 | 153.0 | 205.25 | 286 | 167.58 | 70.75 | 0.40 |
| Bryan-College Station | 2011 | 94 | 121.50 | 148.5 | 206.50 | 284 | 167.42 | 62.19 | 0.36 |
| Bryan-College Station | 2012 | 115 | 145.25 | 161.0 | 292.25 | 296 | 196.75 | 74.28 | 0.36 |
| Bryan-College Station | 2013 | 125 | 165.50 | 188.5 | 331.25 | 402 | 237.83 | 95.85 | 0.39 |
| Bryan-College Station | 2014 | 152 | 192.75 | 246.5 | 315.50 | 403 | 260.25 | 86.69 | 0.32 |
| Tyler | 2010 | 155 | 196.75 | 229.0 | 256.75 | 316 | 227.50 | 48.98 | 0.21 |
| Tyler | 2011 | 143 | 205.50 | 247.0 | 272.75 | 313 | 238.83 | 49.62 | 0.20 |
| Tyler | 2012 | 169 | 231.75 | 276.0 | 292.25 | 322 | 263.50 | 46.40 | 0.17 |
| Tyler | 2013 | 197 | 249.50 | 288.0 | 328.25 | 369 | 287.42 | 53.05 | 0.18 |
| Tyler | 2014 | 238 | 295.50 | 339.5 | 369.50 | 423 | 331.50 | 56.85 | 0.16 |
| Wichita Falls | 2010 | 89 | 102.25 | 123.0 | 135.75 | 167 | 123.42 | 26.62 | 0.21 |
| Wichita Falls | 2011 | 79 | 90.00 | 111.0 | 121.00 | 135 | 106.25 | 19.76 | 0.18 |
| Wichita Falls | 2012 | 90 | 100.75 | 115.5 | 123.50 | 132 | 112.42 | 14.25 | 0.12 |
| Wichita Falls | 2013 | 79 | 99.25 | 122.5 | 145.25 | 159 | 121.25 | 26.00 | 0.21 |
| Wichita Falls | 2014 | 89 | 100.50 | 111.0 | 137.75 | 150 | 117.00 | 21.09 | 0.17 |
Da questa tabella possiamo vedere che per la variabile Sales la città di Bryan-College Station presenta, nel corso degli anni, un coefficiente di variazione più alto delle altre città. La media aritmetica con valore massimo si osserva nella città di Tyler nel 2014 mentre la media aritmetica con valore minimo a Wichita Falls nel 2011 e 2014. Il valore massimo assoluto viene raggiunto dalla città Tyler nel 2014 e il minimo assoluto dalla città di Wichita Falls negli anni 2011 e 2013.
Creo un summary per la variabile volume condizionatamente alla città e agli anni.
dplyr_city_year_volume <- vendite %>%
group_by(city, year) %>%
summarise("Minimo"=min(volume),
"1° Quartile"=primo_quartile(volume),
"Mediana"=median(volume),
"3° Quartile"=terzo_quartile(volume),
"Massimo"=max(volume),
"Media aritmetica"=mean(volume),
"Dev St"=sd(volume),
"Coeff Var"=cv(volume))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
knitr::kable(x=dplyr_city_year_volume, "html", caption = "**SUMMARY - VOLUME**", digits = 2, booktabs=TRUE, longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri")
| city | year | Minimo | 1° Quartile | Mediana | 3° Quartile | Massimo | Media aritmetica | Dev St | Coeff Var |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 14.16 | 18.00 | 23.30 | 26.92 | 28.83 | 22.65 | 4.95 | 0.21 |
| Beaumont | 2011 | 15.49 | 16.73 | 21.38 | 24.30 | 28.48 | 21.10 | 4.30 | 0.20 |
| Beaumont | 2012 | 13.50 | 23.77 | 25.32 | 26.32 | 31.15 | 24.47 | 4.92 | 0.19 |
| Beaumont | 2013 | 20.34 | 25.65 | 30.13 | 34.84 | 42.03 | 30.31 | 6.44 | 0.20 |
| Beaumont | 2014 | 18.08 | 26.96 | 33.26 | 37.10 | 41.19 | 32.13 | 7.05 | 0.21 |
| Bryan-College Station | 2010 | 15.15 | 20.15 | 26.29 | 35.22 | 47.45 | 28.73 | 10.82 | 0.36 |
| Bryan-College Station | 2011 | 15.24 | 23.32 | 25.88 | 33.84 | 47.78 | 28.93 | 10.31 | 0.34 |
| Bryan-College Station | 2012 | 19.79 | 25.70 | 30.07 | 50.69 | 55.45 | 35.36 | 13.49 | 0.37 |
| Bryan-College Station | 2013 | 18.98 | 32.05 | 35.19 | 64.86 | 76.12 | 45.12 | 19.54 | 0.41 |
| Bryan-College Station | 2014 | 29.46 | 40.54 | 48.44 | 63.34 | 83.55 | 52.81 | 17.97 | 0.33 |
| Tyler | 2010 | 24.41 | 31.60 | 34.27 | 41.78 | 49.91 | 36.35 | 8.39 | 0.22 |
| Tyler | 2011 | 21.05 | 33.13 | 39.77 | 46.07 | 52.32 | 38.55 | 9.41 | 0.23 |
| Tyler | 2012 | 25.39 | 36.43 | 45.36 | 53.32 | 57.39 | 44.01 | 10.23 | 0.22 |
| Tyler | 2013 | 32.08 | 41.89 | 51.35 | 60.27 | 63.05 | 50.32 | 10.33 | 0.20 |
| Tyler | 2014 | 36.92 | 51.47 | 63.17 | 67.62 | 80.81 | 59.60 | 12.76 | 0.20 |
| Wichita Falls | 2010 | 8.95 | 11.98 | 15.01 | 18.44 | 20.88 | 14.97 | 4.07 | 0.26 |
| Wichita Falls | 2011 | 8.17 | 9.48 | 13.21 | 13.70 | 15.28 | 12.05 | 2.52 | 0.20 |
| Wichita Falls | 2012 | 9.70 | 11.52 | 12.78 | 14.54 | 17.79 | 13.23 | 2.66 | 0.19 |
| Wichita Falls | 2013 | 9.67 | 12.33 | 15.01 | 17.18 | 19.06 | 14.85 | 3.11 | 0.20 |
| Wichita Falls | 2014 | 9.63 | 11.84 | 13.90 | 17.80 | 18.67 | 14.54 | 3.13 | 0.21 |
Da questa tabella possiamo vedere che anche per la variabile Volume la città di Bryan-College Station presenta, nel corso degli anni, un coefficiente di variazione più alto delle altre città. La media aritmetica con valore massimo si osserva nella città di Tyler nel 2014 mentre la media aritmetica con valore minimo a Wichita Falls nel 2011. Il valore massimo assoluto viene raggiunto dalla città Bryan-College Station nel 2014 e il minimo assoluto dalla città di Wichita Falls nel 2011.
Creo un summary per la variabile prezzo mediano condizionatamente alla città e agli anni.
dplyr_city_year_median_price <- vendite %>%
group_by(city, year) %>%
summarise("Minimo"=min(median_price),
"1° Quartile"=primo_quartile(median_price),
"Mediana"=median(median_price),
"3° Quartile"=terzo_quartile(median_price),
"Massimo"=max(median_price),
"Media aritmetica"=mean(median_price),
"Dev St"=sd(median_price),
"Coeff Var"=cv(median_price))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
knitr::kable(x=dplyr_city_year_median_price, "html", caption = "**SUMMARY - MEDIAN PRICE**", digits = 2, booktabs=TRUE, longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri")
| city | year | Minimo | 1° Quartile | Mediana | 3° Quartile | Massimo | Media aritmetica | Dev St | Coeff Var |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 121100 | 123025 | 128400 | 138275 | 163800 | 133116.67 | 13353.57 | 0.10 |
| Beaumont | 2011 | 111100 | 119175 | 126900 | 131425 | 144600 | 125641.67 | 9603.17 | 0.07 |
| Beaumont | 2012 | 110000 | 121050 | 128300 | 133725 | 134700 | 126533.33 | 7973.29 | 0.06 |
| Beaumont | 2013 | 121100 | 127675 | 132750 | 136250 | 147000 | 132400.00 | 7784.83 | 0.06 |
| Beaumont | 2014 | 106700 | 128850 | 134150 | 138875 | 142400 | 132250.00 | 9835.42 | 0.07 |
| Bryan-College Station | 2010 | 148300 | 149975 | 151800 | 154800 | 165300 | 153533.33 | 5474.13 | 0.03 |
| Bryan-College Station | 2011 | 146700 | 148650 | 150300 | 154475 | 157300 | 151416.67 | 3709.41 | 0.02 |
| Bryan-College Station | 2012 | 140700 | 149250 | 153700 | 155550 | 170000 | 153566.67 | 7095.75 | 0.04 |
| Bryan-College Station | 2013 | 146900 | 156500 | 159900 | 161825 | 167300 | 159391.67 | 5429.12 | 0.03 |
| Bryan-College Station | 2014 | 155300 | 167675 | 170900 | 173625 | 180000 | 169533.33 | 7776.46 | 0.04 |
| Tyler | 2010 | 129400 | 131125 | 134450 | 139025 | 143100 | 135175.00 | 4782.19 | 0.03 |
| Tyler | 2011 | 120600 | 132600 | 134650 | 140625 | 152600 | 136216.67 | 8505.17 | 0.06 |
| Tyler | 2012 | 124200 | 135375 | 138800 | 144650 | 152100 | 139250.00 | 7983.22 | 0.05 |
| Tyler | 2013 | 132400 | 142625 | 146100 | 149200 | 155600 | 146100.00 | 6725.53 | 0.04 |
| Tyler | 2014 | 130700 | 144775 | 151900 | 155900 | 161600 | 150466.67 | 8543.40 | 0.05 |
| Wichita Falls | 2010 | 86400 | 89200 | 98350 | 105350 | 119200 | 98941.67 | 10360.72 | 0.10 |
| Wichita Falls | 2011 | 73800 | 91475 | 101500 | 103475 | 113600 | 98141.67 | 10631.72 | 0.10 |
| Wichita Falls | 2012 | 82100 | 91625 | 99900 | 110225 | 118800 | 100958.33 | 12347.28 | 0.12 |
| Wichita Falls | 2013 | 85900 | 99825 | 103600 | 111900 | 121300 | 105000.00 | 10383.03 | 0.09 |
| Wichita Falls | 2014 | 90000 | 98200 | 104250 | 110825 | 135300 | 105675.00 | 12443.99 | 0.11 |
Da questa tabella possiamo vedere che per la variabile Median price si osservano basse variabilità in tutte le città, la città di Wichita Falls tende ad avere un coefficiente di variazione un po’ più alto. La media aritmetica con valore massimo si osserva nella città di Bryan-College Station nel 2014 mentre la media aritmetica con valore minimo a Wichita Falls nel 2011. Il valore massimo assoluto viene raggiunto dalla città Bryan-College Station nel 2014 e il minimo assoluto dalla città di Wichita Falls nel 2011.
Creo un summary per la variabile listings condizionatamente alla città e agli anni.
dplyr_city_year_listings <- vendite %>%
group_by(city, year) %>%
summarise("Minimo"=min(listings),
"1° Quartile"=primo_quartile(listings),
"Mediana"=median(listings),
"3° Quartile"=terzo_quartile(listings),
"Massimo"=max(listings),
"Media aritmetica"=mean(listings),
"Dev St"=sd(listings),
"Coeff Var"=cv(listings))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
knitr::kable(x=dplyr_city_year_listings, "html", caption = "**SUMMARY - LISTINGS**", digits = 2, booktabs=TRUE, longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri")
| city | year | Minimo | 1° Quartile | Mediana | 3° Quartile | Massimo | Media aritmetica | Dev St | Coeff Var |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1533 | 1678.25 | 1756.5 | 1809.50 | 1857 | 1731.08 | 101.91 | 0.06 |
| Beaumont | 2011 | 1596 | 1690.00 | 1764.5 | 1797.25 | 1845 | 1747.92 | 74.67 | 0.04 |
| Beaumont | 2012 | 1570 | 1662.50 | 1693.5 | 1731.25 | 1765 | 1691.33 | 54.56 | 0.03 |
| Beaumont | 2013 | 1534 | 1610.25 | 1657.0 | 1676.50 | 1708 | 1639.58 | 54.92 | 0.03 |
| Beaumont | 2014 | 1500 | 1542.75 | 1589.5 | 1624.00 | 1672 | 1586.67 | 57.37 | 0.03 |
| Bryan-College Station | 2010 | 1298 | 1492.25 | 1563.0 | 1602.50 | 1984 | 1562.42 | 165.16 | 0.10 |
| Bryan-College Station | 2011 | 1362 | 1489.00 | 1571.5 | 1731.75 | 1840 | 1606.17 | 156.09 | 0.09 |
| Bryan-College Station | 2012 | 1442 | 1479.00 | 1576.0 | 1748.75 | 1834 | 1609.50 | 152.98 | 0.09 |
| Bryan-College Station | 2013 | 1057 | 1189.50 | 1423.5 | 1585.50 | 1750 | 1406.08 | 228.36 | 0.16 |
| Bryan-College Station | 2014 | 882 | 1020.50 | 1096.5 | 1213.50 | 1271 | 1106.50 | 127.44 | 0.11 |
| Tyler | 2010 | 2727 | 2849.25 | 3099.0 | 3268.25 | 3296 | 3051.08 | 226.43 | 0.07 |
| Tyler | 2011 | 2720 | 2922.50 | 3097.5 | 3227.50 | 3266 | 3069.67 | 184.60 | 0.06 |
| Tyler | 2012 | 2633 | 2850.25 | 2918.5 | 2996.00 | 3072 | 2910.42 | 122.95 | 0.04 |
| Tyler | 2013 | 2500 | 2692.25 | 2884.5 | 2947.75 | 2998 | 2823.75 | 159.72 | 0.05 |
| Tyler | 2014 | 2272 | 2607.25 | 2716.5 | 2781.25 | 2875 | 2670.33 | 172.17 | 0.06 |
| Wichita Falls | 2010 | 904 | 914.75 | 957.0 | 996.00 | 1028 | 959.42 | 45.17 | 0.05 |
| Wichita Falls | 2011 | 844 | 953.75 | 982.0 | 1011.00 | 1052 | 974.83 | 58.59 | 0.06 |
| Wichita Falls | 2012 | 801 | 873.00 | 907.0 | 931.50 | 941 | 896.00 | 41.22 | 0.04 |
| Wichita Falls | 2013 | 743 | 808.00 | 847.0 | 874.75 | 923 | 841.00 | 52.91 | 0.06 |
| Wichita Falls | 2014 | 746 | 833.75 | 884.5 | 940.25 | 973 | 876.67 | 73.05 | 0.08 |
Da questa tabella possiamo vedere che per la variabile listings si osserva un coefficiente di variazione un po’ più elevato nella città di Bryan-College Station in particolare nel 2013. La media aritmetica con valore massimo si osserva nella città di Tyler nel 2011 mentre la mediana con valore minimo a Wichita Falls nel 2013. Il valore massimo assoluto viene raggiunto dalla città Tyler nel 2010 e il minimo assoluto dalla città di Wichita Falls nel 2013.
Creo un summary per la variabile effectiveness condizionatamente alla città e agli anni. Solo nel caso della variabile effectiveness possiamo calcolare anche la media armonica.
dplyr_city_year_effectiveness <- vendite %>%
group_by(city, year) %>%
summarise("Min"=min(effectiveness),
"1° Quartile"=primo_quartile(effectiveness),
"Mediana"=median(effectiveness),
"3° Quartile"=terzo_quartile(effectiveness),
"Max"=max(effectiveness),
"M. armonica"=meana(effectiveness),
"M. aritmetica"=mean(effectiveness),
"Dev St"=sd(effectiveness),
"Coeff Var"=cv(effectiveness))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
knitr::kable(x=dplyr_city_year_effectiveness, "html", caption = "**SUMMARY - EFFECTIVENESS**", digits = 2, booktabs=TRUE, longtable = FALSE) %>%
kable_styling(fixed_thead = T, bootstrap_options = c("striped", "hover"), latex_options = "HOLD_position") %>%
kable_classic(latex_options="scale_down", full_width=FALSE, html_font="Calibri")
| city | year | Min | 1° Quartile | Mediana | 3° Quartile | Max | M. armonica | M. aritmetica | Dev St | Coeff Var |
|---|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 6.15 | 6.20 | 6.30 | 6.38 | 6.46 | 6.30 | 6.30 | 0.11 | 0.02 |
| Beaumont | 2011 | 6.32 | 6.53 | 6.82 | 6.88 | 6.95 | 6.70 | 6.71 | 0.24 | 0.03 |
| Beaumont | 2012 | 5.80 | 6.01 | 6.46 | 6.69 | 6.92 | 6.35 | 6.37 | 0.39 | 0.06 |
| Beaumont | 2013 | 4.95 | 5.13 | 5.32 | 5.62 | 5.69 | 5.35 | 5.36 | 0.26 | 0.05 |
| Beaumont | 2014 | 4.66 | 4.76 | 4.83 | 4.87 | 5.02 | 4.81 | 4.82 | 0.10 | 0.02 |
| Bryan-College Station | 2010 | 5.21 | 5.37 | 5.50 | 5.72 | 5.96 | 5.55 | 5.56 | 0.26 | 0.04 |
| Bryan-College Station | 2011 | 5.95 | 6.00 | 6.08 | 6.14 | 6.31 | 6.09 | 6.09 | 0.13 | 0.02 |
| Bryan-College Station | 2012 | 5.06 | 5.24 | 5.63 | 5.87 | 5.92 | 5.51 | 5.53 | 0.34 | 0.06 |
| Bryan-College Station | 2013 | 4.16 | 4.33 | 4.49 | 4.86 | 5.05 | 4.56 | 4.58 | 0.31 | 0.07 |
| Bryan-College Station | 2014 | 3.85 | 3.91 | 3.94 | 3.96 | 4.17 | 3.95 | 3.96 | 0.09 | 0.02 |
| Tyler | 2010 | 3.91 | 4.04 | 4.14 | 4.21 | 4.41 | 4.14 | 4.14 | 0.16 | 0.04 |
| Tyler | 2011 | 4.17 | 4.29 | 4.42 | 4.46 | 4.56 | 4.38 | 4.38 | 0.13 | 0.03 |
| Tyler | 2012 | 3.80 | 3.91 | 4.00 | 4.05 | 4.16 | 3.98 | 3.98 | 0.11 | 0.03 |
| Tyler | 2013 | 3.48 | 3.52 | 3.59 | 3.71 | 3.76 | 3.60 | 3.61 | 0.11 | 0.03 |
| Tyler | 2014 | 3.04 | 3.17 | 3.27 | 3.42 | 3.45 | 3.27 | 3.28 | 0.15 | 0.04 |
| Wichita Falls | 2010 | 7.74 | 7.90 | 8.02 | 8.12 | 8.26 | 8.00 | 8.00 | 0.17 | 0.02 |
| Wichita Falls | 2011 | 8.17 | 8.64 | 8.94 | 9.13 | 9.36 | 8.83 | 8.84 | 0.40 | 0.04 |
| Wichita Falls | 2012 | 8.86 | 9.12 | 9.16 | 9.23 | 9.34 | 9.16 | 9.16 | 0.13 | 0.01 |
| Wichita Falls | 2013 | 8.04 | 8.19 | 8.43 | 8.73 | 9.02 | 8.46 | 8.47 | 0.33 | 0.04 |
| Wichita Falls | 2014 | 8.18 | 8.45 | 8.51 | 8.60 | 8.62 | 8.48 | 8.48 | 0.14 | 0.02 |
Da questa tabella possiamo vedere che per la variabile listings si osserva un coefficiente di variazione basso in tutte le città. La media aritmetica con valore massimo si osserva nella città di Wichita Falls nel 2012 mentre la media aritmetica con valore minimo a Tyler nel 2014. Il valore massimo assoluto viene raggiunto dalla città Wichita Falls nel 2011 e il minimo assoluto dalla città di Tyler nel 2014. Le differenze tra la media aritmetica e la media armonica sono minime.
Da qui in poi utilizza ggplot2 per creare grafici fantastici! Ma non fermarti alla semplice soluzione del quesito, prova un po’ a personalizzare i grafici utilizzando temi, colori e annotazioni, e aggiustando i vari elementi come le etichette, gli assi e la legenda. Consiglio: Stai attento quando specifichi le variabili month e year tra le estetiche, potrebbe essere necessario considerarle come fattori.
ggplot(data = vendite)+
geom_boxplot(size=0.6, alpha=0.5, aes(x=year,
y=median_price/1000,
fill=city))+
scale_y_continuous(breaks = seq(70,200,by=10))+
labs(x="Anno",
y="Prezzo mediano (migliaia di dollari)",
title = "Prezzo mediano delle case vendute in Texas \nnelle varie città per anno")+
theme_classic()+
theme(legend.position = "right")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
Dal grafico possiamo notare che la città con il prezzo mediano più alto è Bryan-College Station seguita da Tyler. Entrambe le città hanno registrato un aumento del prezzo mediano nel corso degli anni. La città di Wichita Falls registra una maggiore variabilità dei prezzi mediani nell’arco dei singoli anni. Bryan-College Station invece è quella con la minore variabilità. Tale osservazione è confermata numericamente anche dalla tabella sopra riportata relativa al summary per la variabile prezzo mediano condizionatamente alla città e agli anni.
ggplot(data = vendite)+
geom_boxplot(aes(x=city,y=volume, fill = year))+
labs(x="Città",
y="Volume totale delle vendite in milioni di dollari",
title = "Andamento negli anni del volume totale delle vendite\n nelle varie città")+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
scale_fill_brewer(palette = "Set1")+
guides(fill=guide_legend(title="Anni"))
Nel corso degli anni per le città Beaumont, Bryan-College Station e Tyler c’è stato un aumento del valore medio del volume totale delle vendite. Per Wichita Falls tale valore è rimasto più o meno stabile nel corso degli anni.
ggplot(vendite)+
geom_col(aes(x=month,
y=volume,
fill=city),
position = "stack")+
labs(title = "Totale delle vendite nei vari mesi per città",
x = "Mesi",
y = "Totale delle vendite (milioni di dollari)")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
ggplot(vendite)+
geom_col(aes(x=month,
y=volume,
fill=city),
position = "fill")+
labs(title = "Distribuzione mensile del totale delle vendite per città",
x = "Mesi",
y = "Percentuale del totale delle vendite")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
Osservando il grafico Totale delle vendite nei vari mesi per città si
può notare come per Wichita falls tale valore non vari in maniera
sostanziale nel corso dei mesi mentre per le altre tre città si ha un
aumento del valore mano mano che l’anno procede verso la sua parte
centrale e una diminuzione man mano che si va verso la parte finale
dell’anno. Osservando invece il grafico normalizzato (Distribuzione
mensile del totale delle vendite per città) si può dedurre che il
contributo percentuale di ogni città al valore totale delle vendite per
ogni mese è pressochè stabile, a parte per un lieve aumento nei mesi
centrali per Bryan-College Station rispetto alle altre 3.
Ecco il grafico che prende in considerazione anche gli anni (a barre sovrapposte e normalizzato).
ggplot(vendite)+
geom_col(aes(x=month,
y=volume,
fill=city),
position = "stack")+
labs(title = "Totale delle vendite nei vari mesi per ogni anno",
x = "Mesi",
y = "Totale delle vendite (milioni di dollari)")+
facet_grid(year~., scales="free")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
ggplot(vendite)+
geom_col(aes(x=month,
y=volume,
fill=city),
position = "fill")+
labs(title = "Distribuzione del totale delle vendite\nnei mesi, per anno e città",
x = "Mesi",
y = "Percentuale del totale delle vendite")+
facet_grid(year~., scales="free")+
theme_classic()+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
Il seguente grafico permette una migliore visione dell’andamento per le varie città nel corso del singolo anno.
ggplot(vendite)+
geom_col(aes(x=month,
y=volume,
fill=city),
position = "stack")+
labs(title = "Totale delle vendite nei vari mesi per ogni anno",
x = "Mesi",
y = "Totale delle vendite (milioni di dollari)")+
facet_grid(year~city, scales="free")+
theme_classic()+
theme(legend.position = "bottom")+
theme(plot.title = element_text(size=14, hjust = 0.5, face = "bold"))+
theme(legend.title = element_text(face="bold"))+
guides(fill=guide_legend(title="Città"))
Nel primo e nel terzo grafico i confronti tra anni differenti non sono
semplici in quanto cambia la scala dell’asse delle y.
Consigli: Prova inserendo una variabile per volta. Prova a usare variabili esterne al dataset, tipo vettori creati da te appositamente.
ggplot(data=vendite,aes(x=lubridate::dmy(paste(1, month, year)), y=volume, group=city))+
geom_line(aes(color=city), linewidth=0.8)+
geom_point(aes(color=city))+
labs(title = "Totale delle vendite per ogni città nel tempo",
x = "Tempo",
y = "Totale delle vendite (milioni di dollari)")+
geom_vline(xintercept = lubridate::dmy(paste(1, 1, 2010)), linetype=2, color = "black", linewidth=0.4, alpha=0.5)+
geom_vline(xintercept = lubridate::dmy(paste(1, 1, 2011)), linetype=2, color = "black", linewidth=0.4, alpha=0.5)+
geom_vline(xintercept = lubridate::dmy(paste(1, 1, 2012)), linetype=2, color = "black", linewidth=0.4, alpha=0.5)+
geom_vline(xintercept = lubridate::dmy(paste(1, 1, 2013)), linetype=2, color = "black", linewidth=0.4, alpha=0.5)+
geom_vline(xintercept = lubridate::dmy(paste(1, 1, 2014)), linetype=2, color = "black", linewidth=0.4, alpha=0.5)+
geom_label(
label="2010",
x=lubridate::dmy(paste(1, 1, 2010)),
y=42,
label.padding = unit(0.2, "lines"),
label.size = 0.35,
color = "black",
fill="bisque"
)+
geom_label(
label="2011",
x=lubridate::dmy(paste(1, 1, 2011)),
y=42,
label.padding = unit(0.2, "lines"),
label.size = 0.35,
color = "black",
fill="bisque"
)+
geom_label(
label="2012",
x=lubridate::dmy(paste(1, 1, 2012)),
y=47,
label.padding = unit(0.2, "lines"),
label.size = 0.35,
color = "black",
fill="bisque"
)+
geom_label(
label="2013",
x=lubridate::dmy(paste(1, 1, 2013)),
y=53,
label.padding = unit(0.2, "lines"),
label.size = 0.35,
color = "black",
fill="bisque"
)+
geom_label(
label="2014",
x=lubridate::dmy(paste(1, 1, 2014)),
y=56,
label.padding = unit(0.2, "lines"),
label.size = 0.35,
color = "black",
fill="bisque"
)+
theme_classic()+
theme(legend.position = "bottom", plot.title = element_text(size=14, hjust = 0.5, face = "bold"), legend.title = element_text(face="bold"), text = element_text(size=7))+
guides(color=guide_legend(title="Città"))+
scale_y_continuous(breaks = seq(0,80,10))+
scale_x_date(breaks = "month", date_labels = "%m")
Il grafico può essere realizzato anche in quest’altra forma
ggplot(data=vendite,aes(x=lubridate::dmy(paste(1, month, year)), y=volume, group=city))+
geom_line(aes(color=city), linewidth=0.8)+
geom_point(aes(color=city))+
labs(title = "Totale delle vendite nei vari mesi per ogni anno",
x = "Mesi",
y = "Totale delle vendite (milioni di dollari)",
color = "Città")+
facet_wrap(.~year, scales="free")+
theme_classic()+
theme(legend.position = "bottom", plot.title = element_text(size=14, hjust = 0.5, face = "bold"), legend.title = element_text(face="bold"), text = element_text(size=8))+
scale_y_continuous(breaks = seq(0,80,10))+
scale_x_date(breaks = "month", date_labels = "%b")
Dai grafici sopra possiamo notare come l’andamento del volume totale delle vendite: - per Wichita Falls vari sostanzialmente poco nel corso del tempo - per Beaumont ha una variazione medio-bassa nel corso del tempo ma con una variabilità maggiore rispetto a Wichita Falls - per Bryan-College Station e Tyler ha un aumento importante col passare del tempo e nel corso degli anni ha un aumento ciclico sostanziale nei mesi centrali dell’anno
Se non riesci proprio a venirne a capo inizia lavorando su dataset ridotti, ad esempio prendendo in considerazione un solo anno o una sola città. Aiutati con il pacchetto dplyr: dati2014 <- filter(dati, year==2014) dati_Beaumont <- filter(dati, city==”Beaumont”)