#Importo il CSV
dati <- read.csv("realestate_texas.csv", sep = ",", fileEncoding = "ISO-8859-1")

Sezione per funzioni create manualmente:

# Funzione per il caloclo della moda:

calculate_mode = function(x) {
  freq <- table(x)                                  
  mode <- names(freq[freq == max(freq)])            
  return(mode)
}


# Funzione per il calcolo dell'indice di Gini

gini.index = function(x){
  ni= table(x)
  fi= table(x)/length(x)
  fi2 = fi^2
  J = length(table(x))
  
  gini = 1-sum(fi2)
  gini.normalizzato = gini/((J-1)/J)
  
  return(gini.normalizzato)
}

1. Analisi delle variabili

==================================================

cat("
    


# Variabile          Tipo                    Descrizione
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# city               Categoriale nominale    Nome della città di riferimento per i dati sulle vendite immobiliari.
# year               Categoriale nominale    Anno in cui sono stati registrati i dati.
# month              Categoriale nominale    Mese in cui sono stati registrati i dati.
# sales              Quantitativa discreta   Numero totale di vendite immobiliari registrate.
# volume             Quantitativa continua   Valore totale delle vendite, espresso in milioni di dollari.
# median_price       Quantitativa continua   Prezzo mediano di vendita degli immobili, espresso in dollari.
# listings           Quantitativa discreta   Numero totale di annunci immobiliari attivi.
# months_inventory   Quantitativa continua   Quantità di tempo necessaria per vendere tutte le inserzioni attuali, espressa in mesi.
# ====================================================================================================================================================================================================

#Gestione delle variabili temporali:

#Le variabili year e month forniscono un contesto temporale utile per valutare variazioni temporali, trend e andamenti ciclici delle altre variabili. Potrebbe essere utile combinarle insieme e ottenere un unica variabile data.

# Commento sul tipo di analisi che può essere condotta su ciascuna variabile:

# - VARIABILI CATEGORIALI (city, month year): 
#   Nonosotante esplorando il dataset sia facilmente constatabile che queste variabili sono omogeneamente distribuite, vale la pena verificare il numero di osservazioni con il calcolo delle frequenze. 
#   Queste variabili possono essere usate per ragruppare e definire i range temporale delle analisi per le altre variabili.


# - VARIABILI QUANTITATIVE (sales, volume, median_price, listings, months_inventory):
#   Queste variabili possono essere usate per calcolare:   

#     1. Statistiche descrittive come indici di posizione, variabilità e di forma
#     2. Fare confronti combinandole con le variabili categoriali per verificare trend e stagionalità su specifici raggruppamenti
#     3. Correlazioni con altre variabili quantitative e rapporti per creare nuove variabili. 

    ")
## 
##     
## 
## 
## # Variabile          Tipo                    Descrizione
## # ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
## # city               Categoriale nominale    Nome della città di riferimento per i dati sulle vendite immobiliari.
## # year               Categoriale nominale    Anno in cui sono stati registrati i dati.
## # month              Categoriale nominale    Mese in cui sono stati registrati i dati.
## # sales              Quantitativa discreta   Numero totale di vendite immobiliari registrate.
## # volume             Quantitativa continua   Valore totale delle vendite, espresso in milioni di dollari.
## # median_price       Quantitativa continua   Prezzo mediano di vendita degli immobili, espresso in dollari.
## # listings           Quantitativa discreta   Numero totale di annunci immobiliari attivi.
## # months_inventory   Quantitativa continua   Quantità di tempo necessaria per vendere tutte le inserzioni attuali, espressa in mesi.
## # ====================================================================================================================================================================================================
## 
## #Gestione delle variabili temporali:
## 
## #Le variabili year e month forniscono un contesto temporale utile per valutare variazioni temporali, trend e andamenti ciclici delle altre variabili. Potrebbe essere utile combinarle insieme e ottenere un unica variabile data.
## 
## # Commento sul tipo di analisi che può essere condotta su ciascuna variabile:
## 
## # - VARIABILI CATEGORIALI (city, month year): 
## #   Nonosotante esplorando il dataset sia facilmente constatabile che queste variabili sono omogeneamente distribuite, vale la pena verificare il numero di osservazioni con il calcolo delle frequenze. 
## #   Queste variabili possono essere usate per ragruppare e definire i range temporale delle analisi per le altre variabili.
## 
## 
## # - VARIABILI QUANTITATIVE (sales, volume, median_price, listings, months_inventory):
## #   Queste variabili possono essere usate per calcolare:   
## 
## #     1. Statistiche descrittive come indici di posizione, variabilità e di forma
## #     2. Fare confronti combinandole con le variabili categoriali per verificare trend e stagionalità su specifici raggruppamenti
## #     3. Correlazioni con altre variabili quantitative e rapporti per creare nuove variabili. 
## 
## 

2. Indici di posizione, variabilità e forma

==================================================

# Le distribuzioni di frequenza calcolate di seguito sulle variabili city, year, month confermano che sono variabili uniformi e non introducono distorsioni dovuti a mancanza di dati (stesso numero di osservazioni per ogni città, mese e anno nel range temporale 2010 - 2014).

# Distribuzione di freqeunza per city:

dist_freq_city = as.data.frame(
  cbind(
    ni = table(dati$city),                                    
    fi = table(dati$city) / sum(table(dati$city)),           
    Ni = cumsum(table(dati$city)),                          
    Fi = cumsum(table(dati$city) / sum(table(dati$city)))  
  )
)


# Distribuzione di freqeunza per year:

dist_freq_year = as.data.frame(
  cbind(
    ni = table(dati$year),                                   
    fi = table(dati$year) / sum(table(dati$city)),           
    Ni = cumsum(table(dati$year)),                          
    Fi = cumsum(table(dati$year) / sum(table(dati$year))) 
  )
)

# Distribuzione di freqeunza per month:

dist_freq_month = as.data.frame(
  cbind(
    ni = table(dati$month),                                   
    fi = table(dati$month) / sum(table(dati$city)),           
    Ni = cumsum(table(dati$month)),                          
    Fi = cumsum(table(dati$month) / sum(table(dati$month))) 
  )
)

# Distribuzione di freqeunza per sales:

dist_freq_sales = as.data.frame(
  cbind(
    ni = table(dati$sales),                                    
    fi = table(dati$sales) / sum(table(dati$sales)),          
    Ni = cumsum(table(dati$sales)),                         
    Fi = cumsum(table(dati$sales) / sum(table(dati$sales))) 
  )
)
#  ANALISI DELLA VARIABILE sales:


me_sales = median(dati$sales)

mu_sales = mean(dati$sales)

mode_sales = calculate_mode(dati$sales)

min_sales = min(dati$sales)
max_sales = max(dati$sales)
range_sales = max_sales - min_sales

q_sales = quantile(dati$sales)

IQR_sales = IQR(dati$sales)

sd_sales = sd(dati$sales)

sd2_sales = sd_sales^2

CV_sales = sd_sales/mu_sales*100
#grafico della distribuzione di sales in ggplot2

ggplot(data = dati, aes(x = sales)) +
  geom_density(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Distribuzione della variabile Sales",
       x = "Sales (numero totale di vendite)",
       y = "Densità") +
  theme_minimal()

# Caloclo gli indici di asimmetria e curtosi per sales

skewness_sales = skewness(dati$sales)
kurtosis_sales = kurtosis(dati$sales) - 3
# Riassunto degli indici per la variabile sales:
sales_summary = data.frame(
  Minimum = min_sales,
  Maximum = max_sales,
  Range = range_sales,
  Mean = mu_sales,                 
  Median = me_sales,
  Mode = mode_sales,
  Variance = sd2_sales,            
  Standard_Deviation = sd_sales,
  Coefficient_of_Variation = CV_sales,
  Interquartile_Range = IQR_sales,
  Skewness = skewness_sales,
  Kurtosis = kurtosis_sales
)

print(sales_summary)
##   Minimum Maximum Range     Mean Median Mode Variance Standard_Deviation
## 1      79     423   344 192.2917  175.5  124   6344.3           79.65111
##   Coefficient_of_Variation Interquartile_Range Skewness   Kurtosis
## 1                 41.42203                 120 0.718104 -0.3131764
cat("
    #Considerazioni per sales:
    # ----------------------------------------
    # Index                      Value        
    # ----------------------------------------
    # Minimum                    79           
    # Maximum                    423          
    # Range                      344          
    # Mean                       192.2917     
    # Median                     175.5        
    # Mode                       124          
    # Variance                   6344.3       
    # Standard Deviation         79.65111     
    # Coefficient of Variation   41.42203     
    # Interquartile Range        120          
    # Skewness                   0.718104     
    # Kurtosis                   -0.3131764   
    # ----------------------------------------
    # Distribuzione asimmetrica positiva
    # Distribuzione platicurtica
")
## 
##     #Considerazioni per sales:
##     # ----------------------------------------
##     # Index                      Value        
##     # ----------------------------------------
##     # Minimum                    79           
##     # Maximum                    423          
##     # Range                      344          
##     # Mean                       192.2917     
##     # Median                     175.5        
##     # Mode                       124          
##     # Variance                   6344.3       
##     # Standard Deviation         79.65111     
##     # Coefficient of Variation   41.42203     
##     # Interquartile Range        120          
##     # Skewness                   0.718104     
##     # Kurtosis                   -0.3131764   
##     # ----------------------------------------
##     # Distribuzione asimmetrica positiva
##     # Distribuzione platicurtica
#  ANALISI DELLA VARIABILE volume:


me_volume = median(dati$volume)

mu_volume = mean(dati$volume)

mode_volume = calculate_mode(dati$volume)

min_volume = min(dati$volume)
max_volume = max(dati$volume)
range_volume = max_volume - min_volume

q_volume = quantile(dati$volume)

IQR_volume = IQR(dati$volume)

sd_volume = sd(dati$volume)

sd2_volume = sd_volume^2

CV_volume = sd_volume/mu_volume*100
#grafico della distribuzione di volume in ggplot2

ggplot(data = dati, aes(x = volume)) +
  geom_density(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Distribuzione della variabile Volume",
       x = "Volume (in milioni di dollari)",
       y = "Densità") +
  theme_minimal()

# Caloclo gli indici di asimmetria e curtosi per volume

skewness_volume = skewness(dati$volume)
kurtosis_volume = kurtosis(dati$volume) - 3
# Riassunto con gli indici per la variabile volume:

volume_summary = data.frame(
  Minimum = min_volume,
  Maximum = max_volume,
  Range = range_volume,
  Mean = mu_volume,                 
  Median = me_volume,
  Mode = mode_volume,
  Variance = sd2_volume,            
  Standard_Deviation = sd_volume,
  Coefficient_of_Variation = CV_volume,
  Interquartile_Range = IQR_volume,
  Skewness = skewness_volume,
  Kurtosis = kurtosis_volume
)

print(volume_summary)
##   Minimum Maximum  Range     Mean  Median   Mode Variance Standard_Deviation
## 1   8.166  83.547 75.381 31.00519 27.0625 14.003 277.2707           16.65145
## 2   8.166  83.547 75.381 31.00519 27.0625 35.335 277.2707           16.65145
## 3   8.166  83.547 75.381 31.00519 27.0625 42.553 277.2707           16.65145
##   Coefficient_of_Variation Interquartile_Range Skewness Kurtosis
## 1                 53.70536             23.2335 0.884742 0.176987
## 2                 53.70536             23.2335 0.884742 0.176987
## 3                 53.70536             23.2335 0.884742 0.176987
cat("
    
          #Considerazioni per volume
      # ----------------------------------------
      # Index                      Value
      # ----------------------------------------
      # Minimum                    8.166
      # Maximum                    83.547
      # Range                      75.381
      # Mean                       31.00519
      # Median                     27.0625
      # Mode 1                     14.003
      # Mode 2                     35.335
      # Mode 3                     42.553
      # Variance                   277.2707
      # Standard Deviation         16.65145
      # Coefficient of Variation   53.70536
      # Interquartile Range        23.2335
      # Skewness                   0.884742
      # Kurtosis                   0.176987
      # ----------------------------------------
      # Distribuzione assimetrica positiva
      # Distribuzione leptocurtica 

    
    
    
    ")
## 
##     
##           #Considerazioni per volume
##       # ----------------------------------------
##       # Index                      Value
##       # ----------------------------------------
##       # Minimum                    8.166
##       # Maximum                    83.547
##       # Range                      75.381
##       # Mean                       31.00519
##       # Median                     27.0625
##       # Mode 1                     14.003
##       # Mode 2                     35.335
##       # Mode 3                     42.553
##       # Variance                   277.2707
##       # Standard Deviation         16.65145
##       # Coefficient of Variation   53.70536
##       # Interquartile Range        23.2335
##       # Skewness                   0.884742
##       # Kurtosis                   0.176987
##       # ----------------------------------------
##       # Distribuzione assimetrica positiva
##       # Distribuzione leptocurtica 
## 
##     
##     
##     
## 
#  ANALISI DELLA VARIABILE median_price:


me_median_price = median(dati$median_price)

mu_median_price = mean(dati$median_price)

mode_median_price = calculate_mode(dati$median_price)

min_median_price = min(dati$median_price)
max_median_price = max(dati$median_price)
range_median_price = max_median_price - min_median_price

q_median_price = quantile(dati$median_price)

IQR_median_price = IQR(dati$median_price)

sd_median_price = sd(dati$median_price)

sd2_median_price = sd_median_price^2

CV_median_price = sd_median_price/mu_median_price*100
#Grafico della distribuzione di median_price in ggplot2

ggplot(data = dati, aes(x = median_price)) +
  geom_density(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Distribuzione della variabile Median Price",
       x = "Median Price (in dollari)",
       y = "Densità") +
  theme_minimal()

# Caloclo gli indici di asimmetria e curtosi per median_price

skewness_median_price = skewness(dati$median_price)
kurtosis_median_price = kurtosis(dati$median_price) - 3
# Riassunto con gli indici per la variabile median_price:

median_price_summary = data.frame(
  Minimum = min_median_price,
  Maximum = max_median_price,
  Range = range_median_price,
  Mean = mu_median_price,                 
  Median = me_median_price,
  Mode = mode_median_price,
  Variance = sd2_median_price,            
  Standard_Deviation = sd_median_price,
  Coefficient_of_Variation = CV_median_price,
  Interquartile_Range = IQR_median_price,
  Skewness = skewness_median_price,
  Kurtosis = kurtosis_median_price
)

print(median_price_summary)
##   Minimum Maximum  Range     Mean Median   Mode  Variance Standard_Deviation
## 1   73800  180000 106200 132665.4 134500 130000 513572983           22662.15
##   Coefficient_of_Variation Interquartile_Range   Skewness   Kurtosis
## 1                 17.08218               32750 -0.3645529 -0.6229618
cat("

# Considerazioni per median price
## ----------------------------------------
#  Indice                      Valore       
# ----------------------------------------
#  Minimum                    73800
#  Maximum                    180000
#  Range                      106200
#  Mean                       132665.4
#  Median                     134500
#  Mode                       130000
#  Variance                   513572983
#  Standard Deviation         22662.15
#  Coefficient of Variation   17.08218
#  Interquartile Range        32750
#  Skewness                  -0.3645529
#  Kurtosis                  -0.6229618
# ----------------------------------------
# Distribuzione assimmetrica negativa
# Distribuzione platicurtica

")
## 
## 
## # Considerazioni per median price
## ## ----------------------------------------
## #  Indice                      Valore       
## # ----------------------------------------
## #  Minimum                    73800
## #  Maximum                    180000
## #  Range                      106200
## #  Mean                       132665.4
## #  Median                     134500
## #  Mode                       130000
## #  Variance                   513572983
## #  Standard Deviation         22662.15
## #  Coefficient of Variation   17.08218
## #  Interquartile Range        32750
## #  Skewness                  -0.3645529
## #  Kurtosis                  -0.6229618
## # ----------------------------------------
## # Distribuzione assimmetrica negativa
## # Distribuzione platicurtica
#  ANALISI DELLA VARIABILE listings:


me_listings = median(dati$listings)

mu_listings = mean(dati$listings)

mode_listings = calculate_mode(dati$listings)

min_listings = min(dati$listings)
max_listings = max(dati$listings)
range_listings = max_listings - min_listings

q_listings = quantile(dati$listings)

IQR_listings = IQR(dati$listings)

sd_listings = sd(dati$listings)

sd2_listings = sd_listings^2

CV_listings = sd_listings/mu_listings*100
#grafico della distribuzione di listings in ggplot2

ggplot(data = dati, aes(x = listings)) +
  geom_density(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Distribuzione della variabile Listings",
       x = "Listings (numero totale di annunci attivi)",
       y = "Densità") +
  theme_minimal()

# Caloclo gli indici di asimmetria e curtosi per listings

skewness_listings = skewness(dati$listings)
kurtosis_listings = kurtosis(dati$listings) - 3
# Riassunto degli indici per la variabile listings:

listings_summary = data.frame(
  Minimum = min_listings,
  Maximum = max_listings,
  Range = range_listings,
  Mean = mu_listings,                 
  Median = me_listings,
  Mode = mode_listings,
  Variance = sd2_listings,            
  Standard_Deviation = sd_listings,
  Coefficient_of_Variation = CV_listings,
  Interquartile_Range = IQR_listings,
  Skewness = skewness_listings,
  Kurtosis = kurtosis_listings
)

print(listings_summary)
##   Minimum Maximum Range     Mean Median Mode Variance Standard_Deviation
## 1     743    3296  2553 1738.021 1618.5 1581   566569           752.7078
##   Coefficient_of_Variation Interquartile_Range  Skewness Kurtosis
## 1                 43.30833              1029.5 0.6494982 -0.79179
cat("
    
    #Considerazioni su listings_summary

# ----------------------------------------
#  Indice                      Valore      
# ----------------------------------------
# Minimum:                    743
# Maximum:                    3296
# Range:                      2553
# Mean:                       1738.021
# Median:                     1618.5
# Mode:                       1581
# Variance:                   566569
# Standard Deviation:         752.7078
# Coefficient of Variation:   43.30833
# Interquartile Range:        1029.5
# Skewness:                   0.6494982
# Kurtosis:                  -0.79179
# ---------------------------------------
# Distribuzione assimmetrica positiva, media > mediana > moda.
# Distribuzione platicurtica

    
    ")
## 
##     
##     #Considerazioni su listings_summary
## 
## # ----------------------------------------
## #  Indice                      Valore      
## # ----------------------------------------
## # Minimum:                    743
## # Maximum:                    3296
## # Range:                      2553
## # Mean:                       1738.021
## # Median:                     1618.5
## # Mode:                       1581
## # Variance:                   566569
## # Standard Deviation:         752.7078
## # Coefficient of Variation:   43.30833
## # Interquartile Range:        1029.5
## # Skewness:                   0.6494982
## # Kurtosis:                  -0.79179
## # ---------------------------------------
## # Distribuzione assimmetrica positiva, media > mediana > moda.
## # Distribuzione platicurtica
## 
##     
## 
#  ANALISI DELLA VARIABILE months_inventory:


me_months_inventory = median(dati$months_inventory)

mu_months_inventory = mean(dati$months_inventory)

mode_months_inventory = calculate_mode(dati$months_inventory)

min_months_inventory = min(dati$months_inventory)
max_months_inventory = max(dati$months_inventory)
range_months_inventory = max_months_inventory - min_months_inventory

q_months_inventory = quantile(dati$months_inventory)

IQR_months_inventory = IQR(dati$months_inventory)

sd_months_inventory = sd(dati$months_inventory)

sd2_months_inventory = sd_months_inventory^2

CV_months_inventory = sd_months_inventory/mu_months_inventory*100
#grafico della distribuzione di months_inventory in ggplot2

ggplot(data = dati, aes(x = months_inventory)) +
  geom_density(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Distribuzione della variabile Months Inventory",
       x = "Months Inventory in mesi(tempo necessario per vendere tutte le inserzioni)",
       y = "Densità") +
  theme_minimal()

# Caloclo gli indici di asimmetria e curtosi per months_inventory

skewness_months_inventory = skewness(dati$months_inventory)
kurtosis_months_inventory = kurtosis(dati$months_inventory) - 3
# Riassunto degli indici per la variabile months_inventory:

months_inventory_summary = data.frame(
  Minimum = min_months_inventory,
  Maximum = max_months_inventory,
  Range = range_months_inventory,
  Mean = mu_months_inventory,                 
  Median = me_months_inventory,
  Mode = mode_months_inventory,
  Variance = sd2_months_inventory,            
  Standard_Deviation = sd_months_inventory,
  Coefficient_of_Variation = CV_months_inventory,
  Interquartile_Range = IQR_months_inventory,
  Skewness = skewness_months_inventory,
  Kurtosis = kurtosis_months_inventory
)

print(months_inventory_summary)
##   Minimum Maximum Range   Mean Median Mode Variance Standard_Deviation
## 1     3.4    14.9  11.5 9.1925   8.95  8.1 5.306889           2.303669
##   Coefficient_of_Variation Interquartile_Range   Skewness   Kurtosis
## 1                 25.06031                3.15 0.04097527 -0.1744475
cat("
    
    #Considerazioni su months_inventory
# ----------------------------------------
#  Indice                      Valore      
# ------------------------------------
#  Minimum                     3.4        
#  Maximum                     14.9       
#  Range                       11.5       
#  Mean                        9.1925     
#  Median                      8.95       
#  Mode                        8.1        
#  Variance                    5.306889   
#  Standard Deviation          2.303669   
#  Coefficient of Variation    25.06031  
#  Interquartile Range         3.15       
#  Skewness                    0.04097527 
#  Kurtosis                   -0.1744475 
# ----------------------------------------
# Distribuzione leggermente assimmetrica positiva, media > mediana > moda.
# Distribuzione platicurtica
    
    
    ")
## 
##     
##     #Considerazioni su months_inventory
## # ----------------------------------------
## #  Indice                      Valore      
## # ------------------------------------
## #  Minimum                     3.4        
## #  Maximum                     14.9       
## #  Range                       11.5       
## #  Mean                        9.1925     
## #  Median                      8.95       
## #  Mode                        8.1        
## #  Variance                    5.306889   
## #  Standard Deviation          2.303669   
## #  Coefficient of Variation    25.06031  
## #  Interquartile Range         3.15       
## #  Skewness                    0.04097527 
## #  Kurtosis                   -0.1744475 
## # ----------------------------------------
## # Distribuzione leggermente assimmetrica positiva, media > mediana > moda.
## # Distribuzione platicurtica
##     
##     
## 

3. Identificazione delle variabili con maggiore variabilità e asimmetria

==================================================

cat("

#Variabilità: volume, con il suo coefficiente di variazione del 53.71%, sembra essere la variabile con la maggiore variabilità e maggior dispersione dei dati. 

#Il coefficiente di variazione, che misura la variabilità riscalata per la media, è un numero puro senza unità di misura, ed è quindi l'indice più indicato per confronti di variabilità per variabili misurate su scale diverse.


#Assimetria: con il caloclo della Skewness pari a 0.88, volume sembra essere anche la variabile che possiede la maggiore assimmetria.

    
    ")
## 
## 
## #Variabilità: volume, con il suo coefficiente di variazione del 53.71%, sembra essere la variabile con la maggiore variabilità e maggior dispersione dei dati. 
## 
## #Il coefficiente di variazione, che misura la variabilità riscalata per la media, è un numero puro senza unità di misura, ed è quindi l'indice più indicato per confronti di variabilità per variabili misurate su scale diverse.
## 
## 
## #Assimetria: con il caloclo della Skewness pari a 0.88, volume sembra essere anche la variabile che possiede la maggiore assimmetria.
## 
##     
## 

4. Creazione delle classi per sales

==================================================

dati$sales_CL = cut(dati$sales,
                    breaks = c(79, 165, 251, 337, max(dati$sales)),
                    include.lowest = TRUE)

# Tabella delle frequenze
ni = table(dati$sales_CL)                   
fi = ni / sum(ni)                              
Ni = cumsum(ni)                                
Fi = Ni / sum(ni)                              

# Tabella riassuntiva
dist_freq_sales_CL = as.data.frame(cbind(ni, fi, Ni, Fi))

median(dati$sales)
## [1] 175.5
mean(dati$sales)
## [1] 192.2917
# Grafico a barre che mostra la distribuzione di sales divisa in classi

barplot(dist_freq_sales_CL$ni,
        main = "Distribuzione delle vendite (sales)",
        xlab = "Classi di vendite",
        ylab = "Frequenze assolute",
        col = "skyblue",                           
        names.arg = rownames(dist_freq_sales_CL),  
        ylim = c(0, max(dist_freq_sales_CL$ni) * 1.2),  
        las = 1,                                 
        border = "black")   

# Coefficiente di Gini (funzione creata nella sezione dedicata ad inizio progetto)  

table(dati$sales_CL)
## 
##  [79,165] (165,251] (251,337] (337,423] 
##       110        71        45        14
gini_sales_CL = gini.index(dati$sales_CL)
print(gini_sales_CL)
## [1] 0.8851389
cat("
    
    # L'indice di gini riscalato varia tra 0 (tutte le unità concentrate in una unica modalità) e 1 (unità equamente distribuite tra le modalità). 

    # Per quanto riguarda la variabile sales suddivisa in classi, l'indice di gini misurato possiede un valore di eterogenità intermedio pari a  0.885.

    
    ")
## 
##     
##     # L'indice di gini riscalato varia tra 0 (tutte le unità concentrate in una unica modalità) e 1 (unità equamente distribuite tra le modalità). 
## 
##     # Per quanto riguarda la variabile sales suddivisa in classi, l'indice di gini misurato possiede un valore di eterogenità intermedio pari a  0.885.
## 
##     
## 

5. Calcolo della probabilità

==================================================

cat("
    
# 1. La probabilità che, presa una riga a caso del dataset, essa riporti la città “Beaumont”: 
#    Essendo il dataset omogeneamente distribuito fra le città, è pari a 1 diviso il numero di città, ovvero di 1/4 =  0.25 quindi il 25%

# 2. La probabilità che, presa una riga a caso del dataset, essa riporti il mese di Luglio:
#    La probabilià risulta pari al numero di occorrenze del mese di luglio nei 5 anni, moltiplicato per le rispettive 4 città, tutto diviso il numero di osservazioni, ovvero di 20/240 = 0.083 quindi il 8.3% 3

# 3.La probabilità che, presa una riga a caso del dataset, essa riporti il mese di dicembre 2012:
#   La probabilità è risulta pari alla singola occorrenza del mese di dicembre dell'anno 2012, moltiplicato per le rispettive 4 città del dataset, ovvero 4/240 = 0.0167 quindi il 1.67%

    
    ")
## 
##     
## # 1. La probabilità che, presa una riga a caso del dataset, essa riporti la città “Beaumont”: 
## #    Essendo il dataset omogeneamente distribuito fra le città, è pari a 1 diviso il numero di città, ovvero di 1/4 =  0.25 quindi il 25%
## 
## # 2. La probabilità che, presa una riga a caso del dataset, essa riporti il mese di Luglio:
## #    La probabilià risulta pari al numero di occorrenze del mese di luglio nei 5 anni, moltiplicato per le rispettive 4 città, tutto diviso il numero di osservazioni, ovvero di 20/240 = 0.083 quindi il 8.3% 3
## 
## # 3.La probabilità che, presa una riga a caso del dataset, essa riporti il mese di dicembre 2012:
## #   La probabilità è risulta pari alla singola occorrenza del mese di dicembre dell'anno 2012, moltiplicato per le rispettive 4 città del dataset, ovvero 4/240 = 0.0167 quindi il 1.67%
## 
## 
##     
## 

6. Creazione di nuove variabili

==================================================

# Creazione di una nuova colonna che calcola il prezzo medio della vendita

dati$average_price = round((dati$volume * 10^6) / dati$sales)
# Grafico che mostra l'andamento del prezzo medio per mesi, anni e città
ggplot(dati, aes(x = factor(month), y = average_price, color = city, group = city)) +
  geom_line(linewidth = 1) +  
  geom_point(size = 3) +  
  facet_wrap(~ year, scales = "free", strip.position = "top") +  
  labs(
    title = "Prezzo medio per Città e Anno",
    x = "Mese",
    y = "Prezzo medio ($)"
  ) + 
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  
    strip.text = element_text(size = 12, face = "bold"),  
    panel.spacing = unit(1, "lines")  
  ) + 
  scale_color_brewer(palette = "Set3") 

cat("
    
# Creazione di 2 colonne che cercano di misurare l’efficacia degli annunci di vendita (AdClosureRate e ListingSuccessRate):

#Premessa sulla definizione di efficacia:

#Bisogna innanzitutto definire cosa si intende per efficacia di un annuncio, in quanto un annuncio potrebbe essere considerato efficace se:
  
# 1. vende velocemente (alta velocità di chiusura dell'inserzione).

# 2. chiude una vendita ad un prezzo elevato.

# 3. Attrae un pubblico mirato (nel dataset non possediamo elementi per valutare questa variabile).

#Inoltre l'efficacia degli annunci può essere influenzata da fattori esterni il cui contributo è difficilmente eliminabile: 
# la velocità di vendita e il prezzo sono influenzati da molti fattori oltre la qualità dell'annuncio stesso, come la domanda del mercato, la stagionalità, le condizioni economiche generali, ecc.

    
    
    
    ")
## 
##     
## # Creazione di 2 colonne che cercano di misurare l’efficacia degli annunci di vendita (AdClosureRate e ListingSuccessRate):
## 
## #Premessa sulla definizione di efficacia:
## 
## #Bisogna innanzitutto definire cosa si intende per efficacia di un annuncio, in quanto un annuncio potrebbe essere considerato efficace se:
##   
## # 1. vende velocemente (alta velocità di chiusura dell'inserzione).
## 
## # 2. chiude una vendita ad un prezzo elevato.
## 
## # 3. Attrae un pubblico mirato (nel dataset non possediamo elementi per valutare questa variabile).
## 
## #Inoltre l'efficacia degli annunci può essere influenzata da fattori esterni il cui contributo è difficilmente eliminabile: 
## # la velocità di vendita e il prezzo sono influenzati da molti fattori oltre la qualità dell'annuncio stesso, come la domanda del mercato, la stagionalità, le condizioni economiche generali, ecc.
## 
##     
##     
##     
## 
dati$AdClosureRate =  (dati$listings / dati$months_inventory)
cat("
    
#AdClosureRate indica la velocità media con cui gli annunci vengono chiusi(venduti).
# da solo questo indice non riesce a misurare la qualità dell'annuncio, infatti una maggior velocità potrebbe essere dovuta totalmente o in parte ad un mercato più caldo, tuttavia la qualità media degli annunci potrebbe essere correlata o addirittura influenzare positivamente il rate medio di chiusura di quest'ultimi.
    
    
    ")
## 
##     
## #AdClosureRate indica la velocità media con cui gli annunci vengono chiusi(venduti).
## # da solo questo indice non riesce a misurare la qualità dell'annuncio, infatti una maggior velocità potrebbe essere dovuta totalmente o in parte ad un mercato più caldo, tuttavia la qualità media degli annunci potrebbe essere correlata o addirittura influenzare positivamente il rate medio di chiusura di quest'ultimi.
##     
##     
## 
ggplot(dati, aes(x = factor(month), y = AdClosureRate, color = city, group = city)) +
  geom_line(size = 1) +  
  geom_point(size = 3) +  
  facet_wrap(~ year, scales = "fixed", strip.position = "top") +
  labs(
    title = "Advertising Closure Rate per Città e Anno",
    x = "Mese",
    y = "Advertising Closure Rate"
  ) + 
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  
    strip.text = element_text(size = 12, face = "bold"),  
    panel.spacing = unit(1, "lines")  
  ) + 
  scale_color_brewer(palette = "Set3")  
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

cat("
    
#Considerazioni sul grafico:
# Anno 2010 a parte, la velocità di chiusura degli annunci risulta più marcata nel secondo semestre. 
# Tyler è la città con un AdClosureRate maggiore, mentre Wichita Falls possiede un rate sensibilmente più basso e soprattutto costante o addirittura decrescete.

    
    ")
## 
##     
## #Considerazioni sul grafico:
## # Anno 2010 a parte, la velocità di chiusura degli annunci risulta più marcata nel secondo semestre. 
## # Tyler è la città con un AdClosureRate maggiore, mentre Wichita Falls possiede un rate sensibilmente più basso e soprattutto costante o addirittura decrescete.
## 
##     
## 
# Creazione di una colonna che misuri ListingSuccessRate (efficacia degli annunci):

dati$ListingSuccessRate =  (dati$sales / dati$listings)
#Grafico dell'andamento di Listing Success rate per mese anno e città

ggplot(dati, aes(x = factor(month), y = ListingSuccessRate, color = city, group = city)) +
  geom_line(size = 1) +  # Linea che collega i punti
  geom_point(size = 3) +  # Aggiunge i punti per ogni valore
  facet_wrap(~ year, scales = "fixed", strip.position = "top") +  
  labs(
    title = "Listing Success Rate per Città e Anno",
    x = "Mese",
    y = "Listing Success Rate (%)"
  ) + 
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1), 
    strip.text = element_text(size = 12, face = "bold"),  
    panel.spacing = unit(1, "lines") 
  ) + 
  scale_color_brewer(palette = "Set3")+  
  scale_y_continuous(labels = scales::percent)

cat("
    
# Considerazioni:
# Bryan-College Station presenta il Listing Success rate migliore, con un trend molto positivo che raggiunge il 30% e il 40% rispettivamente nel 2013 2014.
# Possiamo notare come anche questo grafico sia figlio di sales e quindi possieda le medesime caratteristiche di stagionalità e il generale trend positivo negli anni
# Si evidenzia che Wichita Falls, nonostante abbia un minor nummero di vendite (dovuto probabilmente ad una domanda più depressa), comparato alle città di Tyler e Beaumont possieda comunque un Listing Success rate mediamente migliore. 
# Questa evidenza potrebbe suggerire una qualità degli annunci di Wichita Falls migliore nonostante il suo mercato sembri più depresso.

    
    ")
## 
##     
## # Considerazioni:
## # Bryan-College Station presenta il Listing Success rate migliore, con un trend molto positivo che raggiunge il 30% e il 40% rispettivamente nel 2013 2014.
## # Possiamo notare come anche questo grafico sia figlio di sales e quindi possieda le medesime caratteristiche di stagionalità e il generale trend positivo negli anni
## # Si evidenzia che Wichita Falls, nonostante abbia un minor nummero di vendite (dovuto probabilmente ad una domanda più depressa), comparato alle città di Tyler e Beaumont possieda comunque un Listing Success rate mediamente migliore. 
## # Questa evidenza potrebbe suggerire una qualità degli annunci di Wichita Falls migliore nonostante il suo mercato sembri più depresso.
## 
##     
## 
#Grafico che mostra la relazione fra ListingSuccessRate e average_price
ggplot(dati, aes(x = ListingSuccessRate, y = average_price, fill = city)) + 
  geom_point(shape = 21, color = "black", size = 4, stroke = 1) +  # Contorno nero
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed", color = "black") +  # Linea di tendenza nera
  labs(
    title = "Relazione fra prezzo medio delle vendite e rate di successo degli annunci",
    x = "Rate di successo della chiusura di annunci (%)",
    y = "Prezzo medio ($)"
  ) + 
  theme_minimal() + 
  scale_fill_brewer(palette = "Set3") + 
  scale_color_brewer(palette = "Set3") + 
  scale_x_continuous(labels = scales::percent)
## `geom_smooth()` using formula = 'y ~ x'

cat("
    
# Considerazioni sul grafico:

# Il grafico mirava ad indagare una relazione che potesse legare la qualità degli annunci al prezzo di vendita. L'idea era che le agenzie, spinte dalla ricerca di un maggior profitto, mettessero più effort nella preparazione di annunci a maggior qualità per vendere le proprietà più costose.
# Il grafico mostra una correlazione positiva tra prezzo medio e rate di successo degli annunci, che sembra molto simile per le città di  Wichita Falls, Beaumont, Bryan-College Station.
# Ciò significa che mediamente un tasso di successo più alto è accompagnato da un prezzo medio più elevato.
# Per Tyler la relazione positiva tra le variabili sembra essere più forte.

# Bryan-College Station: Mostra i prezzi medi più alti e un range più ampio nel tasso di successo.
# Le altre città mostrano una minor variabilità dei prezzi e un rate di successo degli annunci comparabile, in particolare come detto sopra, Wichita Falls nonostnte i prezzi più bassi possiede un rate di successo migliore di Beaumont e Tyler.

#È importante ricordare che il grafico mostra una correlazione, non necessariamente una causalità. 
# Pertanto non mi sento di affermare che un tasso di successo più alto sia causato da prezzi più alti, e soprattutto che sia determinato da una maggior qualità di annunci.

    
    ")
## 
##     
## # Considerazioni sul grafico:
## 
## # Il grafico mirava ad indagare una relazione che potesse legare la qualità degli annunci al prezzo di vendita. L'idea era che le agenzie, spinte dalla ricerca di un maggior profitto, mettessero più effort nella preparazione di annunci a maggior qualità per vendere le proprietà più costose.
## # Il grafico mostra una correlazione positiva tra prezzo medio e rate di successo degli annunci, che sembra molto simile per le città di  Wichita Falls, Beaumont, Bryan-College Station.
## # Ciò significa che mediamente un tasso di successo più alto è accompagnato da un prezzo medio più elevato.
## # Per Tyler la relazione positiva tra le variabili sembra essere più forte.
## 
## # Bryan-College Station: Mostra i prezzi medi più alti e un range più ampio nel tasso di successo.
## # Le altre città mostrano una minor variabilità dei prezzi e un rate di successo degli annunci comparabile, in particolare come detto sopra, Wichita Falls nonostnte i prezzi più bassi possiede un rate di successo migliore di Beaumont e Tyler.
## 
## #È importante ricordare che il grafico mostra una correlazione, non necessariamente una causalità. 
## # Pertanto non mi sento di affermare che un tasso di successo più alto sia causato da prezzi più alti, e soprattutto che sia determinato da una maggior qualità di annunci.
## 
##     
## 

7. Analisi condizionata

==================================================

# Raggruppa i dati per città e anno e calcola media e deviazione standard per 'median_price'
summary_stats_annual_median_price = dati %>%
  group_by(city, year) %>%
  summarise(
    mean_median_price = mean(median_price),
    sd_median_price = sd(median_price)
  )
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
# Visualizza il risultato
print(summary_stats_annual_median_price)
## # A tibble: 20 × 4
## # Groups:   city [4]
##    city                   year mean_median_price sd_median_price
##    <chr>                 <int>             <dbl>           <dbl>
##  1 Beaumont               2010           133117.          13354.
##  2 Beaumont               2011           125642.           9603.
##  3 Beaumont               2012           126533.           7973.
##  4 Beaumont               2013           132400            7785.
##  5 Beaumont               2014           132250            9835.
##  6 Bryan-College Station  2010           153533.           5474.
##  7 Bryan-College Station  2011           151417.           3709.
##  8 Bryan-College Station  2012           153567.           7096.
##  9 Bryan-College Station  2013           159392.           5429.
## 10 Bryan-College Station  2014           169533.           7776.
## 11 Tyler                  2010           135175            4782.
## 12 Tyler                  2011           136217.           8505.
## 13 Tyler                  2012           139250            7983.
## 14 Tyler                  2013           146100            6726.
## 15 Tyler                  2014           150467.           8543.
## 16 Wichita Falls          2010            98942.          10361.
## 17 Wichita Falls          2011            98142.          10632.
## 18 Wichita Falls          2012           100958.          12347.
## 19 Wichita Falls          2013           105000           10383.
## 20 Wichita Falls          2014           105675           12444.
# Andamento della deviazione standard di median_price
ggplot(summary_stats_annual_median_price, aes(x = factor(year), y = sd_median_price, color = city, group = city)) +
  geom_line(size = 1) +  
  geom_point(size = 3) +  
  labs(
    title = "Deviazione Standard del prezzo per Città e Anno",
    x = "Anno",
    y = "Deviazione Standard ($)"
  ) + 
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1), 
    strip.text = element_text(size = 12, face = "bold"),  
    panel.spacing = unit(1, "lines")
  ) + 
  scale_color_brewer(palette = "Set3") +
  scale_y_continuous(labels = scales::label_comma())

cat("
#Considerazioni:
# Wichita Falls risuta essere la città con la maggiore variabilità del prezzo mediano (negli anni possiede la deviazione standard maggiore).
# Bryan-College Station sembra possedere la variabilità più contenuta nel tempo.
# Beaumont nel 2010 possedeva la variabilità maggiore, che però è diminuita gradualmente fino al 2013, per poi attestarsi a valori vicini a quelli di Tyler e Bryan-College Station nel 2014.
")
## 
## #Considerazioni:
## # Wichita Falls risuta essere la città con la maggiore variabilità del prezzo mediano (negli anni possiede la deviazione standard maggiore).
## # Bryan-College Station sembra possedere la variabilità più contenuta nel tempo.
## # Beaumont nel 2010 possedeva la variabilità maggiore, che però è diminuita gradualmente fino al 2013, per poi attestarsi a valori vicini a quelli di Tyler e Bryan-College Station nel 2014.
# Grafico aggregato per Media e Deviazione Standard di median_price 
ggplot(summary_stats_annual_median_price, aes(x = factor(year), y = mean_median_price, color = city, group = city)) +
  geom_line(size = 1) +  
  geom_point(size = 3) + 
  geom_errorbar(aes(ymin = mean_median_price - sd_median_price,
                    ymax = mean_median_price + sd_median_price),
                width = 0.2, size = 0.8) + 
  labs(
    title = "Media e Deviazione Standard del Prezzo Mediano per Città e Anno",
    x = "Anno",
    y = "Prezzo Mediano Medio ($)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1), 
    legend.title = element_blank()  
  ) +
  scale_color_brewer(palette = "Set3")  

#Indiago la relazione fra median_price e monthly_inventory

# Raggruppa i dati per città, mese e anno e calcola media per 'median_price'
summary_stats_monthly_median_price = dati %>%
  group_by(city, month,  year) %>%
  summarise(
    mean_median_price = mean(median_price),
    sd_median_price = sd(median_price)
    
  )
## `summarise()` has grouped output by 'city', 'month'. You can override using the
## `.groups` argument.
# Visualizza il risultato
print(summary_stats_monthly_median_price)
## # A tibble: 240 × 5
## # Groups:   city, month [48]
##    city     month  year mean_median_price sd_median_price
##    <chr>    <int> <int>             <dbl>           <dbl>
##  1 Beaumont     1  2010            163800              NA
##  2 Beaumont     1  2011            130700              NA
##  3 Beaumont     1  2012            110000              NA
##  4 Beaumont     1  2013            126100              NA
##  5 Beaumont     1  2014            106700              NA
##  6 Beaumont     2  2010            138200              NA
##  7 Beaumont     2  2011            116700              NA
##  8 Beaumont     2  2012            117500              NA
##  9 Beaumont     2  2013            130000              NA
## 10 Beaumont     2  2014            132500              NA
## # ℹ 230 more rows
# Noto che la deviziano standard è NA, questo accade perchè per lo specifico mese, è presente solamente un unico valore di median_price con cui calcolare media e deviazione standard.
# Raggruppa i dati per città, mese e anno e calcola media per 'months_inventory'
summary_stats_monthly_inventory = dati %>%
  group_by(city, month, year) %>%
  summarise(
    mean_months_inventory = mean(months_inventory),
    sd_months_inventory = sd(months_inventory)
    
  )
## `summarise()` has grouped output by 'city', 'month'. You can override using the
## `.groups` argument.
print(summary_stats_monthly_inventory)
## # A tibble: 240 × 5
## # Groups:   city, month [48]
##    city     month  year mean_months_inventory sd_months_inventory
##    <chr>    <int> <int>                 <dbl>               <dbl>
##  1 Beaumont     1  2010                   9.5                  NA
##  2 Beaumont     1  2011                  10.6                  NA
##  3 Beaumont     1  2012                  11.4                  NA
##  4 Beaumont     1  2013                   9                    NA
##  5 Beaumont     1  2014                   7.9                  NA
##  6 Beaumont     2  2010                  10                    NA
##  7 Beaumont     2  2011                  10.7                  NA
##  8 Beaumont     2  2012                  11.4                  NA
##  9 Beaumont     2  2013                   9.2                  NA
## 10 Beaumont     2  2014                   8                    NA
## # ℹ 230 more rows
# Noto che la deviziano standard è NA, questo accade perchè per lo specifico mese, è presente solamente un unico valore di summary_stats_monthly_inventory con cui calcolare media e deviazione standard.
combined_data = inner_join(summary_stats_monthly_median_price, summary_stats_monthly_inventory, by = c("city", "month", "year")) # Unisco i due dataset relativi ai summary di median_price e monthly_inventory per creare un unico grafico risultatente.

# Crea il grafico con il dataset unito
ggplot(combined_data, aes(x = mean_median_price, y = mean_months_inventory, fill = city)) + 
  geom_point(shape = 21, color = "black", size = 4, stroke = 1) +  
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed", color = "black") +  # Linea di tendenza nera
  labs(
    title = "Media del Prezzo Mediano vs Media Turnover delle Offerte",
    x = "Media del Prezzo Mediano ($)",
    y = "Media di Months Inventory"
  ) + 
  theme_minimal() + 
  scale_fill_brewer(palette = "Set3") + 
  scale_color_brewer(palette = "Set3")
## `geom_smooth()` using formula = 'y ~ x'

cat("# Considerazioni:
# La media del prezzo mediano smussa ulteriormente le fluttuazioni, fornendo una misura più stabile e rappresentativa dell'andamento generale dei prezzi nel periodo considerato (2010-2014).
# La media del prezzo mediano viene confrontata con months inventory e si può notare una relazione negativa tra il prezzo medio e il tempo di esaurimento delle inserzioni correnti.
# Wichita Falss possiede una tendenza quasi piatta: Per le altre città invece si evidenzia una correlazione tra la velocità di chiusura delle inserzioni e l'aumentare del prezzo, sopratutto per Bryan-College Station.  
# Questo comportamente potrebbe evidenziare un mercato caldo, in cui la velocita e i prezzi sono sostenuti da una domanda crescente. 
")
## # Considerazioni:
## # La media del prezzo mediano smussa ulteriormente le fluttuazioni, fornendo una misura più stabile e rappresentativa dell'andamento generale dei prezzi nel periodo considerato (2010-2014).
## # La media del prezzo mediano viene confrontata con months inventory e si può notare una relazione negativa tra il prezzo medio e il tempo di esaurimento delle inserzioni correnti.
## # Wichita Falss possiede una tendenza quasi piatta: Per le altre città invece si evidenzia una correlazione tra la velocità di chiusura delle inserzioni e l'aumentare del prezzo, sopratutto per Bryan-College Station.  
## # Questo comportamente potrebbe evidenziare un mercato caldo, in cui la velocita e i prezzi sono sostenuti da una domanda crescente.
  1. Creazione di visualizzazioni con ggplot2 # ==================================================
# Boxplot: Distribuzione del prezzo mediano tra le città

ggplot(dati)+
  geom_boxplot(aes(x=city,
                   y=median_price,
                   fill = city))+
  labs(
    title = "Distribuzione del prezzo mediano tra le città",
    x = "Città",
    y = "Prezzo Mediano ($)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")

cat("
# Dal boxplot emerge che Wichita Falls ha tendenzialmente prezzi più bassi rispetto alle altre città. Mentre per Bryan-College Station i prezzi sono tendenzialmente più alti.
# Beaumont, Tyler e Wichita Falls sembrano possedere una assimmetria negativa, in particolare Beaumont è la città che presenta una assimetria più pronunciata. Bryan-College Station invece presenta una assimetria positiva.
# I punti neri nel grafico rappresentano gli outliers, che si sono presentati per valori più grandi del 3°quartile + una volta emmezzo il range interquartile.

    ")
## 
## # Dal boxplot emerge che Wichita Falls ha tendenzialmente prezzi più bassi rispetto alle altre città. Mentre per Bryan-College Station i prezzi sono tendenzialmente più alti.
## # Beaumont, Tyler e Wichita Falls sembrano possedere una assimmetria negativa, in particolare Beaumont è la città che presenta una assimetria più pronunciata. Bryan-College Station invece presenta una assimetria positiva.
## # I punti neri nel grafico rappresentano gli outliers, che si sono presentati per valori più grandi del 3°quartile + una volta emmezzo il range interquartile.
## 
## 
# Boxplot: Distribuzione del valore totale delle vendite tra le varie città ma anche tra i vari anni

ggplot(dati)+
  geom_boxplot(aes(x= factor(year),
                   y=sales,
                   fill = city))+
  labs(
    title = "Distribuzione del valore totale delle vendite tra le città",
    x = "Anno",
    y = "Vendite"
  )+
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")

cat("
    
# Considerazioni:
# Il trend delle vendite è complessivamente positivi e in crescita negli anni, l'unica eccezzione riguarda Wichita Falls che semba avere un andamento costante se non leggermente in calo.
# Tyler e Bryan-College Station possiedono il maggior numero di vendite. Le distribuzioni per queste due città sono più ampie, indicando una maggiore variabilità nelle vendite.
# Beaumont mostra una mediana inferiore rispetto a Tyler e Bryan-College Station, ma possiede una distribuzione con minor variabilità nelle vendite.

    
    ")
## 
##     
## # Considerazioni:
## # Il trend delle vendite è complessivamente positivi e in crescita negli anni, l'unica eccezzione riguarda Wichita Falls che semba avere un andamento costante se non leggermente in calo.
## # Tyler e Bryan-College Station possiedono il maggior numero di vendite. Le distribuzioni per queste due città sono più ampie, indicando una maggiore variabilità nelle vendite.
## # Beaumont mostra una mediana inferiore rispetto a Tyler e Bryan-College Station, ma possiede una distribuzione con minor variabilità nelle vendite.
## 
##     
## 
# Grafico a Barre: Totale delle Vendite per Mese e Città


ggplot(dati) +
  geom_bar(aes(x = factor(month),
               y = sales,
               fill = city),
           stat = "identity",
           position = "dodge") +
  labs(
    title = "Distribuzione del valore totale delle vendite tra le città",
    x = "Mese",
    y = "Totale Vendite"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")

#Grafico a Barre Normalizzato: Totale delle Vendite per Mese e Città
ggplot(dati) +
  geom_bar(aes(x = factor(month),
               y = sales,
               fill = city),
           stat = "identity",
           position = "fill") +
  labs(
    title = "Distribuzione del valore totale delle vendite tra le città",
    x = "Mese",
    y = "Totale Vendite"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")

#Grafico a Barre Normalizzato: Totale delle Vendite per mese e città per ogni anno.

ggplot(dati, aes(x = factor(month), fill = city)) +
  geom_bar(aes(y = sales), stat = "identity", position = "fill") +
  facet_wrap(~ year, nrow = 1) +  
  labs(
    title = "Distribuzione normalizzata delle vendite per città e mese",
    x = "Mese",
    y = "Vendite Normalizzate"
  ) +
  scale_y_continuous(labels = scales::percent) +  
  theme_minimal() +
  theme(
    
    strip.text = element_text(size = 12)  
  ) +
  scale_fill_brewer(palette = "Set3")

cat("
    
# Considerazioni grafici:
#Si evidenzia come Tyler contribuisca con il maggior numero di vendite, mentre Wichita Falls contribuisca con il minor numero.

#Bryan-College Station possiede un numero di vendite maggiore rispetto a Breaumont ma con anche una maggior variabilità fra i diversi mesi.

# Considerazioni Totale delle Vendite per Mese e Città:
# Dai grafici emerge una stagionalità che porta i mesi estivi (in particolare Maggio, Giugno, Luglio) ad avere un maggior numero di vendite, con il picco massimo nel mese di Giugno.

    
    ")
## 
##     
## # Considerazioni grafici:
## #Si evidenzia come Tyler contribuisca con il maggior numero di vendite, mentre Wichita Falls contribuisca con il minor numero.
## 
## #Bryan-College Station possiede un numero di vendite maggiore rispetto a Breaumont ma con anche una maggior variabilità fra i diversi mesi.
## 
## # Considerazioni Totale delle Vendite per Mese e Città:
## # Dai grafici emerge una stagionalità che porta i mesi estivi (in particolare Maggio, Giugno, Luglio) ad avere un maggior numero di vendite, con il picco massimo nel mese di Giugno.
## 
##     
## 
# Line Chart per Vendite in Periodi Storici Differenti:


dati$date = as.Date(paste(dati$year, dati$month, "01", sep = "-"), format = "%Y-%m-%d") # Creazione della variabile date


ggplot(dati) +
  geom_line(aes(x = date,
                y = sales, 
                color = city, 
                group = city), 
            size = 1) +
  labs(title = "Andamento delle vendite nel tempo per città",
       x = "Data (mese/anno)",
       y = "Totale delle vendite",
       color = "Città") +
  theme_minimal() +
  scale_x_date(date_labels = "%b %Y", date_breaks = "6 months") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  scale_fill_brewer(palette = "Set3") +
  scale_color_brewer(palette = "Set3")

cat("# Considerazioni: il grafico conferma quanto osservato nei grafici precedenti, ovvero un trend positivo per le vendite trainato prevalentemente da Tyler e Bryan-College.
")
## # Considerazioni: il grafico conferma quanto osservato nei grafici precedenti, ovvero un trend positivo per le vendite trainato prevalentemente da Tyler e Bryan-College.
# Line Chart che descrive il Turnover delle inserzioni

ggplot(dati) +
  geom_line(aes(x = date,
                y = months_inventory, 
                color = city, 
                group = city), 
            size = 1) +
  labs(title = "Turnover delle inserzioni",
       x = "Data (mese/anno)",
       y = "Mesi necessari a vendere tutte le inserzioni correnti",
       color = "Città") +
  theme_minimal() +
  scale_x_date(date_labels = "%b %Y", date_breaks = "6 months") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  scale_fill_brewer(palette = "Set3") +
  scale_color_brewer(palette = "Set3")

cat("
# Considerazioni grafico:
#In questo caso sembra esserci un trend negativo. Il grafico mostra che il tempo necessario a vendere tutte le inserzioni correnti diminuisce nel tempo. 
#Probabilmente esiste una relazione inversa tra months_inventory e sales. Possiamo vedere ad esempio che ad Aprile 2011 era stato registrato un picco per months_inventory che era stato preceduto da un picco negativo di sales.
#Al netto di Bryan-College Station che ha incrementa il suo divario, le restati città tendono ad avere un valore di turnover sempre più simile tra loro nel tempo.
")
## 
## # Considerazioni grafico:
## #In questo caso sembra esserci un trend negativo. Il grafico mostra che il tempo necessario a vendere tutte le inserzioni correnti diminuisce nel tempo. 
## #Probabilmente esiste una relazione inversa tra months_inventory e sales. Possiamo vedere ad esempio che ad Aprile 2011 era stato registrato un picco per months_inventory che era stato preceduto da un picco negativo di sales.
## #Al netto di Bryan-College Station che ha incrementa il suo divario, le restati città tendono ad avere un valore di turnover sempre più simile tra loro nel tempo.

9. Conclusioni

==================================================

cat("
    
# 1. Efficacia degli Annunci: 
#   Tyler ha l'AdClosureRate (velocità media di chiusura degli annunci) più alto.
#   Bryan-College Station possiede il ListingSuccessRate (rate di successo degli annunci) più alto, ma Wichita Falls, nonostante un mercato depresso, sembra possedere un tasso di successo degli annunci superiore a Beaumont e Tyler, suggerendo che gli annunci potrebbero essere di migliore qualità.      
#   Sebbene il tentativo di valutare la qualità degli annunci tramite il ListingSuccessRate e l'AdClosureRate abbia evidenziato alcune correlazioni, in particolare tra prezzo e tasso di successo,risulta però difficile distinguere l'influenza della qualità degli annunci da quella di fattori esterni.



# 3. Prezzo e Tasso di Successo: 
#   Esiste una correlazione positiva tra prezzi medi e rate di successo degli annunci, più marcata a Tyler, indicando che probabilmente il mercato premia abitazioni premium.

# 3. Variabilità e Prezzi: 
#   Bryan-College Station mostra prezzi medi più alti e stabili, mentre Wichita Falls ha prezzi più bassi con maggiore variabilità.

# 4. Trend delle Vendite: 
#   Le vendite sono generalmente in crescita, trainate da Tyler e Bryan-College Station, con una forte stagionalità che porta la presenza di picchi in estate.

# 5. Turnover: 
#   Months Inventory (il tempo di esaurimento delle inserzioni) è diminuito negli anni, evidenziando un mercato più dinamico, specialmente a Bryan-College Station.

    
    ")
## 
##     
## # 1. Efficacia degli Annunci: 
## #   Tyler ha l'AdClosureRate (velocità media di chiusura degli annunci) più alto.
## #   Bryan-College Station possiede il ListingSuccessRate (rate di successo degli annunci) più alto, ma Wichita Falls, nonostante un mercato depresso, sembra possedere un tasso di successo degli annunci superiore a Beaumont e Tyler, suggerendo che gli annunci potrebbero essere di migliore qualità.      
## #   Sebbene il tentativo di valutare la qualità degli annunci tramite il ListingSuccessRate e l'AdClosureRate abbia evidenziato alcune correlazioni, in particolare tra prezzo e tasso di successo,risulta però difficile distinguere l'influenza della qualità degli annunci da quella di fattori esterni.
## 
## 
## 
## # 3. Prezzo e Tasso di Successo: 
## #   Esiste una correlazione positiva tra prezzi medi e rate di successo degli annunci, più marcata a Tyler, indicando che probabilmente il mercato premia abitazioni premium.
## 
## # 3. Variabilità e Prezzi: 
## #   Bryan-College Station mostra prezzi medi più alti e stabili, mentre Wichita Falls ha prezzi più bassi con maggiore variabilità.
## 
## # 4. Trend delle Vendite: 
## #   Le vendite sono generalmente in crescita, trainate da Tyler e Bryan-College Station, con una forte stagionalità che porta la presenza di picchi in estate.
## 
## # 5. Turnover: 
## #   Months Inventory (il tempo di esaurimento delle inserzioni) è diminuito negli anni, evidenziando un mercato più dinamico, specialmente a Bryan-College Station.
## 
##     
##