Carico il dataset

tx <- read.csv(“/Users/filomena/Desktop/1 esercizio con r/Texax.csv”)

1. Analisi delle variabili

str(tx) # Controlla la struttura del dataset

names(tx) # Visualizza i nomi delle colonne

#city:categorica nominale.

#median_price :variabile quantitativa continua=> posso calcolare:#Media/ Mediana/Moda

#volume: variabile quantitativa continua => assumono valore infinito,ci aiutano a comprednere la distribuzione, la variabilità

month -year: variabile categorica ordinale.

#listings:variabile quantitativa discreta

#punto 2.1 indice di posizione

Funzione per calcolare media, mediana, e moda

calcola_indici <- function(x) { media <- mean(x, na.rm = TRUE) mediana <- median(x, na.rm = TRUE) moda <- as.numeric(names(sort(table(x), decreasing = TRUE)[1])) # Calcolo della moda return(list(media = media, mediana = mediana, moda = moda)) }

Variabili numeriche da analizzare

variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)

Inizializziamo una lista per salvare i risultati

risultati_indici <- list()

Calcoliamo gli indici per ogni variabile numerica

for (var in variabili_numeriche) { risultati_indici[[var]] <- calcola_indici(tx[[var]]) }

Stampa dei risultati per ogni variabile

print(risultati_indici)

Commento sulla scelta delle statistiche

cat(“Commento sulla scelta delle statistiche:”) cat(“1. Media: La media è utile per avere un’idea generale del valore centrale di un dataset. Tuttavia, può essere influenzata da valori estremi (outliers).”) cat(“2. Mediana: La mediana rappresenta il valore centrale che divide il dataset in due parti uguali, rendendola più robusta rispetto agli outliers. È particolarmente utile quando i dati non seguono una distribuzione normale.”) cat(“3. Moda: La moda indica il valore più frequente in un dataset. È importante in contesti dove è utile sapere quali valori sono più comuni, come nel caso di vendite o prezzi.”) cat(“Ho scelto di calcolare solo queste tre statistiche per ottenere una comprensione rapida e chiara della distribuzione dei dati, in particolare nei contesti delle vendite e dei prezzi, dove il valore centrale e la frequenza dei dati possono fornire informazioni preziose per l’analisi delle tendenze.”)

#punto 2.2 indice di variabiltà

Funzione per calcolare devianza standard e varianza

calcola_variabilita <- function(x) { dev_standard <- sd(x, na.rm = TRUE) # Calcolo della deviazione standard varianza <- var(x, na.rm = TRUE) # Calcolo della varianza return(list(dev_standard = dev_standard, varianza = varianza)) }

Variabili numeriche da analizzare

variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)

Inizializziamo una lista per salvare i risultati

risultati_variabilita <- list()

Calcoliamo gli indici di variabilità per ogni variabile

for (var in variabili_numeriche) { risultati_variabilita[[var]] <- calcola_variabilita(tx[[var]]) }

Stampa dei risultati per ogni variabile

print(risultati_variabilita)

Commento sulla scelta delle variabili

cat(“Commento sulla scelta delle variabili:”) cat(“Ho scelto di calcolare gli indici di variabilità per le seguenti variabili:”) cat(“1. Sales: Questo dato rappresenta il numero di vendite effettuate e ci aiuta a comprendere quanto le vendite possono variare nel tempo. Un’alta variabilità nelle vendite può indicare fluttuazioni stagionali o influenze di mercato.”) cat(“2. Volume: Rappresenta il volume totale delle vendite e la sua variabilità è importante per analizzare l’andamento del mercato. Un volume molto variabile può segnalare cambiamenti significativi nella domanda o nell’offerta.”) cat(“3. Median Price: Indica il prezzo mediano delle proprietà e la sua variabilità è cruciale per comprendere l’andamento del mercato immobiliare. Prezzi variabili possono riflettere cambiamenti nel valore delle proprietà in diverse aree.”) cat(“4. Listings: Rappresenta il numero di annunci di vendita e la sua variabilità è importante per capire la disponibilità delle proprietà. Una grande variabilità può indicare condizioni di mercato dinamiche, come un eccesso o una scarsità di offerta.”) cat(“Queste variabili sono state selezionate perché forniscono una panoramica delle dinamiche di vendita e del mercato immobiliare, e la loro variabilità offre informazioni preziose per prendere decisioni informate.”)

#puto 2.3 forma

Funzione per calcolare curtosi e asimmetria

calcola_forma <- function(x) { n <- sum(!is.na(x)) # Conta solo i valori non NA media <- mean(x, na.rm = TRUE) dev_standard <- sd(x, na.rm = TRUE)

# Calcolo della curtosi curtosi <- (n * (n + 1) / ((n - 1) * (n - 2) * (n - 3))) * sum(((x - media) / dev_standard)^4, na.rm = TRUE) - (3 * (n - 1)^2) / ((n - 2) * (n - 3))

# Calcolo dell’asimmetria asimmetria <- (n / ((n - 1) * (n - 2))) * sum(((x - media) / dev_standard)^3, na.rm = TRUE)

return(list(curtosi = curtosi, asimmetria = asimmetria)) }

Variabili numeriche da analizzare

variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)

Inizializziamo una lista per salvare i risultati

risultati_forma <- list()

Calcoliamo gli indici di forma per ogni variabile

for (var in variabili_numeriche) { risultati_forma[[var]] <- calcola_forma(tx[[var]]) }

Stampa dei risultati per ogni variabile

print(risultati_forma)

Commento sulla scelta delle variabili

cat(“Commento sulla scelta delle variabili:”) cat(“Ho scelto di calcolare curtosi e asimmetria per analizzare la forma della distribuzione delle seguenti variabili:”) cat(“1. Sales: Importante per identificare picchi e fluttuazioni nelle vendite.”) cat(“2. Volume: Rilevante per capire l’attività di mercato.”) cat(“3. Median Price: Essenziale per comprendere le dinamiche dei prezzi immobiliari.”) cat(“4. Listings: Utile per analizzare la disponibilità di proprietà nel mercato.”)

#punto 3.4 distribuzioni di frequenze

Funzione per calcolare la distribuzione di frequenza

calcola_frequenza <- function(x, breaks) { freq_table <- table(cut(x, breaks, include.lowest = TRUE)) # Tabella di frequenza return(freq_table) }

Numero di intervalli (breaks) da utilizzare per la distribuzione

breaks_sales <- seq(0, max(tx\(sales, na.rm = TRUE), by = 50) breaks_volume <- seq(0, max(tx\)volume, na.rm = TRUE), by = 5) breaks_median_price <- seq(0, max(tx\(median_price, na.rm = TRUE), by = 10000) breaks_listings <- seq(0, max(tx\)listings, na.rm = TRUE), by = 100)

Calcoliamo la distribuzione di frequenza per ogni variabile

frequenze <- list( Sales = calcola_frequenza(tx\(sales, breaks_sales), Volume = calcola_frequenza(tx\)volume, breaks_volume), Median_Price = calcola_frequenza(tx\(median_price, breaks_median_price), Listings = calcola_frequenza(tx\)listings, breaks_listings) )

Stampa dei risultati della distribuzione di frequenza

print(frequenze)

Identificazione della variabile con maggiore variabilità

variabilita <- sapply(variabili_numeriche, function(var) sd(tx[[var]], na.rm = TRUE))

variabile_magg_variabilita <- variabili_numeriche[which.max(variabilita)] variabile_magg_variabilita

#creare classi per una variabile quantitativa : prendiamo sales :)

Definiamo i breaks con un intervallo più ampio che copra l’intera gamma di ‘sales’

breaks_sales <- seq(0, max(tx$sales, na.rm = TRUE) + 50, by = 50) # Aggiungi un margine al massimo

Creiamo l’istogramma per ‘sales’ utilizzando i breaks corretti

hist(tx$sales, breaks = breaks_sales, main = “Distribuzione di Frequenza di Sales”, xlab = “Numero di Vendite”, ylab = “Frequenza”, col = “blue”, border = “yellow”)

#3. Rappresentazione Grafica della Distribuzione di “sales”

Creiamo l’istogramma per sales

hist(tx$sales, breaks = breaks_sales, main = “Distribuzione di Frequenza di Sales”, xlab = “Numero di Vendite”, ylab = “Frequenza”, col = “blue”, border = “yellow”)

#Calcolo dell’Indice di Gini per “sales”

Calcoliamo l’indice di Gini per sales

calcola_gini <- function(x) { # Rimuovi i valori NA x <- x[!is.na(x)]

# Ordina i valori x <- sort(x)

# Calcola la lunghezza di x n <- length(x)

# Se la lunghezza di x è minore di 2, l’indice di Gini non ha senso if (n < 2) return(NA)

# Calcola il numeratore e il denominatore dell’indice di Gini numeratore <- 2 * sum((1:n) * x) denominatore <- n * sum(x)

# Indice di Gini gini <- (numeratore / denominatore) - (n + 1) / n

return(gini) }

#ok

#calcolo della probabilità

#città “Beaumont

Numero totale di osservazioni

n_totale <- nrow(tx)

Numero di righe con “Beaumont”

n_beaumont <- sum(tx$city == “Beaumont”, na.rm = TRUE)

Probabilità di selezionare una riga con “Beaumont”

p_beaumont <- n_beaumont / n_totale

cat(“La probabilità che una riga a caso riporti la città Beaumont è:”, p_beaumont, “”)

#mese di luglio

Numero di righe con mese = luglio (7)

n_luglio <- sum(tx$month == 7, na.rm = TRUE)

Probabilità di selezionare una riga con luglio

p_luglio <- n_luglio / n_totale

cat(“La probabilità che una riga a caso riporti il mese di luglio è:”, p_luglio, “”)

#dicembre del 2012

Numero di righe con dicembre del 2012

n_dicembre_2012 <- sum(tx\(month == 12 & tx\)year == 2012, na.rm = TRUE)

Probabilità di selezionare una riga con luglio

p_dicembre_2012 <- n_dicembre_2012 / n_totale

p_dicembre_2012

#ok

#creazioni delle variabili # Evitiamo la divisione per zero tx\(prezzo_medio <- ifelse(tx\)sales > 0, tx\(volume / tx\)sales, NA)

Visualizziamo i primi risultati per verificare

head(tx[, c(“volume”, “sales”, “prezzo_medio”)])

misuriamo lefficacia degli annunci di vendite

Evitiamo la divisione per zero

tx\(efficacia_annunci <- ifelse(tx\)listings > 0, (tx\(sales / tx\)listings) * 100, NA)

Visualizziamo i primi risultati per verificare

head(tx[, c(“sales”, “listings”, “efficacia_annunci”)])

#Interpretazioneosservo che: il prezzo medio varia in base al volume e al numero di vendite.Se il prezzo medio è in calo mentre il volume delle vendite aumenta, potrebbe indicare una strategia di prezzo aggressiva per stimolare le vendite.

#Interpretazione:L’efficacia degli annunci fornisce un’indicazione di quanto ogni annuncio stia contribuendo alle vendite. Valori più alti indicano che ci sono più vendite per ogni annuncio, suggerendo una maggiore efficacia.

#in buona sostanza : L’analisi del prezzo medio degli immobili e dell’efficacia degli annunci offre importanti informazioni sul mercato immobiliare. Queste variabili aiutano a comprendere l’impatto delle strategie di vendita e dei prezzi, fornendo indicazioni utili per ottimizzare le decisioni strategiche e migliorare le performance di vendita.

#7 analisi condizionata install.packages(“dplyr”) library(dplyr)

Raggruppamento per città, anno e mese e calcolo della media e deviazione standard per sales e volume

summary_stats <- tx %>% group_by(city, year, month) %>% summarise( mean_sales = mean(sales, na.rm = TRUE), sd_sales = sd(sales, na.rm = TRUE), mean_volume = mean(volume, na.rm = TRUE), sd_volume = sd(volume, na.rm = TRUE) )

#visualizzo i grafici

install.packages(“ggplot2”) library(ggplot2)

Grafico della media delle vendite per città

ggplot(summary_stats, aes(x = city, y = mean_sales, fill = city)) + geom_bar(stat = “identity”) + labs(title = “Media delle Vendite per Città”, x = “Città”, y = “Media delle Vendite”) + theme_minimal()

Grafico della deviazione standard delle vendite per città

library(ggplot2)

Grafico a barre con barre di errore per la deviazione standard delle vendite

ggplot(summary_stats, aes(x = city, y = mean_sales, fill = city)) + geom_bar(stat = “identity”, position = “dodge”, width = 0.7) + geom_errorbar(aes(ymin = mean_sales - sd_sales, ymax = mean_sales + sd_sales), width = 0.2, position = position_dodge(0.7)) + labs(title = “Media delle Vendite con Deviazione Standard per Città”, x = “Città”, y = “Media delle Vendite”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

#ok

#punto 8-creazione boxplot

#1. Boxplot per la distribuzione del prezzo mediano tra le città:

library(ggplot2)

Boxplot per la distribuzione del prezzo mediano tra le città

ggplot(tx, aes(x = city, y = median_price, fill = city)) + geom_boxplot() + labs(title = “Distribuzione del Prezzo Mediano tra le Città”, x = “Città”, y = “Prezzo Mediano”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

#2. Grafico a barre per il totale delle vendite per mese e città:

Raggruppare i dati per città e mese e sommare le vendite

sales_by_city_month <- tx %>% group_by(city, month) %>% summarise(total_sales = sum(sales, na.rm = TRUE))

Grafico a barre per il totale delle vendite per mese e città

ggplot(sales_by_city_month, aes(x = factor(month), y = total_sales, fill = city)) + geom_bar(stat = “identity”, position = “dodge”) + labs(title = “Totale delle Vendite per Mese e Città”, x = “Mese”, y = “Totale Vendite”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

#Line chart per confrontare l’andamento delle vendite in periodi storici differenti:

Filtra i dati per i periodi storici che vuoi confrontare (es. 2010 e 2020)

sales_over_time <- tx %>% filter(year %in% c(2010, 2020)) %>% # Sostituisci con gli anni desiderati group_by(year, month) %>% summarise(total_sales = sum(sales, na.rm = TRUE))

Line chart per confrontare l’andamento delle vendite in anni differenti

ggplot(sales_over_time, aes(x = month, y = total_sales, color = factor(year), group = year)) + geom_line(size = 1.2) + geom_point(size = 3) + labs(title = “Andamento delle Vendite in Periodi Storici Differenti”, x = “Mese”, y = “Totale Vendite”, color = “Anno”) + theme_minimal()