```{r #Carico tutte le librerie che userò library(dplyr) library(ggplot2) library(plotly) library(shiny) library(lubridate) library(tidyr) library(bslib) library(scales) library(magrittr) library(DescTools) library(tidyverse) library(moments)

#Restituisce la classe dell’oggetto. class(realestate_texas) #Indica il tipo di dato all’interno dell’oggetto e mi crea un dataframe che indica il tipo di dato per ogni #colonna del dataset di partenza. tipo_di_variabile <- realestate_texas %>% summarize(across(everything(), class)) print(tipo_di_variabile) #Year e month anche se sono esperesse in numeri rappresentano delle variabili di tipo qualitativo. #Per questo motivo si è scelto di considerarle come character. #Voglio unire la colonna mese e la colonna anno in modo da avere una colonna data da usare in seguito. #Sovrascrivo il dataframe originale aggiungendo la colonna ‘data’. realestate_texas <- realestate_texas %>% mutate(data = as.Date(paste(year, month, “01”, sep = “-”)) %>% format(“%d/%m/%Y”)) #formato data italiano #Statistiche di base per ogni variabile summary(realestate_texas)

#Analizzo i trend storici delle vendite immobiliari in Texa (1 PUNTO) #Preparazione dei dati iniziali. sales_by_city_year <- realestate_texas %>% group_by(city, year, month) %>% #Raggruppo i dati per città, anno e mese. summarise(vendite_totali = sum(sales)) %>% #Calcolo il totale delle vendite per gruppo. mutate(data = make_date(year, month, 1)) #Creo una colonna data combinando anno e mese. #Definizione dell’interfaccia utente (UI) dell’applicazione Shiny. ui <- fluidPage( titlePanel(“Trend Vendite Immobiliari Texas”), #Titolo dell’applicazione. #Layout con barra laterale. sidebarLayout( #Pannello laterale con controlli. sidebarPanel( selectInput(“citta”, #Menu a tendina per selezionare la città. “Seleziona città:”, choices = unique(sales_by_city_year\(city)) ), #Pannello principale con grafici e statistiche. mainPanel( plotlyOutput("plot_vendite"), #Area per il grafico interattivo. verbatimTextOutput("statistiche") #Area per le statistiche testuali. ) ) ) #Definisco la logica del server. server <- function(input, output) { #Creazione del grafico interattivo. output\)plot_vendite <- renderPlotly({ #Filtro per i dati per la città selezionata. dati_citta <- sales_by_city_year %>% filter(city == input\(citta) #Creazione del grafico con ggplot2. p <- ggplot(dati_citta, aes(x = data, y = vendite_totali)) + #Aggiunta linea delle vendite mensili con legenda. geom_line(aes(color = "Vendite Mensili")) + #Aggiunta linea di tendenza con intervallo di confidenza. geom_smooth(method = "loess", se = TRUE, aes(color = "Linea di Tendenza", fill = "Intervallo di Confidenza")) + #Definizione delle etichette del grafico. labs( title = paste("Trend Vendite Immobiliari -", input\)citta), x = “Data”, y = “Numero Vendite Totali”, color = “Legenda”,
fill = “Legenda”
) + #Definizione dei colori per le linee. scale_color_manual(values = c(“Vendite Mensili” = “blue”, “Linea di Tendenza” = “red”)) + #Definizione del colore per l’intervallo di confidenza. scale_fill_manual(values = c(“Intervallo di Confidenza” = “grey80”)) + #Applicazione del tema minimale. theme_minimal() + #Personalizzazione dell’asse X delle date. scale_x_date(date_breaks = “3 months”, #Mostra etichette ogni 3 mesi. date_labels = “%b %Y”, #Formato data italiano. date_minor_breaks = “1 month”) + #Aggiunge tacche minori mensili. #Rotazione delle etichette sull’asse X per migliorare la leggibilità. theme(axis.text.x = element_text(angle = 45,
hjust = 1))

#Conversione del grafico ggplot in grafico interattivo plotly.
ggplotly(p)

})

#Creazione del riquadro statistiche. output\(statistiche <- renderPrint({ #Filtra i dati per la città selezionata. dati_citta <- sales_by_city_year %>% filter(city == input\)citta)

#Calcolo e visualizzazione delle statistiche principali.
cat("Statistiche per", input$citta, "\n",
    "Vendite massime:", max(dati_citta$vendite_totali), "\n",
    "Vendite minime:", min(dati_citta$vendite_totali), "\n",
    "Media vendite:", round(mean(dati_citta$vendite_totali), 2))

}) } #Avvio dell’applicazione Shiny. shinyApp(ui = ui, server = server) #Questi quattro grafici ci offrono una prima panoramica sull’andamento del settore immobiliare.
#A Beaumont possiamo vedere un trend crescente nel numero di vendite di case, #con una stagionalità piuttosto marcata: il picco di vendite si registra quasi sempre tra luglio e ottobre, #mentre il minimo si verifica generalmente a gennaio.
#A Bryan-College Station possiamo vedere un trend di crescita simile a Beaumont, ma ancora più accentuato. #Questa forte oscillazione annuale potrebbe essere influenzata dalla natura universitaria della città,
#dove il ciclo accademico potrebbe accentuare la differenza tra il mercato estivo e quello invernale.
#Anche a Tyler possiamo osservare un trend di crescita, inoltre il numero medio di vendite è più elevato. #A Wichita Falls, invece, non vediamo nessun trend definito.

#Grafico per confrontare le vendite nelle 4 città. ui <- fluidPage( titlePanel(“Confronto Vendite Immobiliari tra Città”), mainPanel( plotlyOutput(“plot_confronto”, height = “600px”), verbatimTextOutput(“statistiche_comparative”) ) ) server <- function(input, output) { output\(plot_confronto <- renderPlotly({ p <- ggplot(sales_by_city_year, aes(x = data, y = vendite_totali, color = city)) + geom_line() + labs( title = "Confronto Vendite Immobiliari tra Città", x = "Data", y = "Numero Vendite Totali", color = "Città" ) + scale_color_manual(values = c( "Beaumont" = "#1f77b4", "Bryan-College Station" = "#2ca02c", "Tyler" = "#ff7f0e", "Wichita Falls" = "#d62728" )) + theme_minimal() + scale_x_date(date_breaks = "3 months", date_labels = "%b %Y", date_minor_breaks = "1 month") + theme( axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "right", plot.title = element_text(hjust = 0.5) ) ggplotly(p) }) output\)statistiche_comparative <- renderPrint({ stats_by_city <- sales_by_city_year %>% group_by(city) %>% summarise( Media_Vendite = round(mean(vendite_totali), 0), Max_Vendite = max(vendite_totali), Min_Vendite = min(vendite_totali) ) cat(“Statistiche Comparative per Città:”) print(stats_by_city) }) } #Lancia l’app shinyApp(ui = ui, server = server) #Wichita Falls sembra essere la città più piccola, con una minore movimentazione del mercato immobiliare.
# yler e Bryan-College Station, invece, sono le città più grandi, caratterizzate da un mercato più dinamico.

#Valuto l’efficacia delle strategie di marketing delle inserzioni immobiliari (2 PUNTO) #Per fare ciò ho usato il tasso di conversione = (numero di vendite / numero di inserzioni) × 100 #e i mesi di inventario, dato che è già presente nel dataset. #Aggiungiamo il tasso di conversione al dataframe esistente. #Lettura del file CSV e preparazione del dataset. realestate_texas <- read.csv(“realestate_texas.csv”) %>% mutate( #Calcolo del tasso di conversione (vendite/inserzioni in percentuale). conversion_rate = (sales / listings) * 100, #Creazione di una colonna data combinando anno e mese. data = as.Date(paste(year, month, “01”, sep = “-”)) ) #Definiamo l’interfaccia utente. ui <- fluidPage( #Impostazione del tema. theme = bslib::bs_theme(version = 4), #Titolo dell’applicazione titlePanel(“Analisi Efficacia Marketing Immobiliare”), #Layout con barra laterale. sidebarLayout( #Panel laterale con i controlli. sidebarPanel( #Menu a tendina per la selezione della metrica. selectInput(“metric”, “Seleziona Metrica:”, choices = c(“Tasso di Conversione” = “conversion_rate”, “Mesi di Inventario” = “months_inventory”)), #Menu a tendina per la selezione della città. selectInput(“citta”, “Seleziona città:”, choices = unique(realestate_texas\(city)) ), #Panel principale con i grafici e le statistiche. mainPanel( #Grafico principale dei trend. plotlyOutput("plot_marketing", height = "400px"), br(), #Spazio verticale. #Output testuale delle statistiche. verbatimTextOutput("stats_marketing"), br(), #Spazio verticale. #Grafico dell'analisi stagionale. plotlyOutput("plot_seasonal", height = "300px") ) ) ) server <- function(input, output) { #Reactive expression per filtrare i dati in base alla città selezionata. #Questo calcolo viene memorizzato nella cache e aggiornato solo quando necessario. filtered_data <- reactive({ realestate_texas %>% filter(city == input\)citta) }) output\(plot_marketing <- renderPlotly({ #Otteniamo dei dati filtrati. df <- filtered_data() #Scelta della colonna y e dell'etichetta in base alla metrica scelta. y_col <- if(input\)metric == “conversion_rate”) “conversion_rate” else “months_inventory” y_label <- if(input\(metric == "conversion_rate") "Tasso di Conversione (%)" else "Mesi di Inventario" #Creazione del grafico base con ggplot2. p <- ggplot(df, aes_string(x = "data", y = y_col)) + #Linea del trend. geom_line(aes(color = "Dati reali")) + #Area di confidenza senza bordi. geom_smooth(method = "loess", se = TRUE, aes(fill = "Intervallo di confidenza"), color = NA, size = 0) + #Linea di smoothing rossa. geom_smooth(method = "loess", se = FALSE, aes(color = "Linea di tendenza"), size = 1) + #Etichette del grafico. labs( title = paste("Trend", y_label, "-", input\)citta), x = “Data”, y = y_label ) + #Imposta i colori manualmente. scale_color_manual(values = c(“Dati reali” = “#1f77b4”, “Linea di tendenza” = “red”)) + scale_fill_manual(values = c(“Intervallo di confidenza” = “grey70”)) + #Tema e altre personalizzazioni. theme_minimal() + theme( legend.position = “bottom”, legend.title = element_blank(), axis.text.x = element_text(angle = 45, hjust = 1), panel.grid.major = element_line(color = “gray90”), panel.grid.minor = element_line(color = “gray95”) ) + #Formattazione dell’asse x per le date. scale_x_date( date_breaks = “3 months”, date_labels = “%m/%Y”, date_minor_breaks = “1 month” ) #Converti in plotly e modifica il layout. fig <- ggplotly(p, tooltip = “y”) #Modifica il layout. fig %>% layout( margin = list(b = 150), showlegend = TRUE, legend = list( orientation = “h”, xanchor = “center”, x = 0.5, y = -0.3, yanchor = “top” ) ) }) output\(stats_marketing <- renderText({ #Otteniamo dei dati filtrati. df <- filtered_data() #Calcolo delle statistiche principali. stats <- df %>% summarise( Media_Conversione = mean(conversion_rate, na.rm = TRUE), Max_Conversione = max(conversion_rate, na.rm = TRUE), Min_Conversione = min(conversion_rate, na.rm = TRUE), Media_Inventario = mean(months_inventory, na.rm = TRUE), Efficienza_Media = mean(sales/listings * 100, na.rm = TRUE) ) #Formattazione del testo output. paste0( "\nStatistiche di Marketing per ", input\)citta, “”, “—————————————-”, “Media Tasso di Conversione:”, round(stats\(Media_Conversione, 2), "%\n", "Max Tasso di Conversione: ", round(stats\)Max_Conversione, 2), “%”, “Min Tasso di Conversione:”, round(stats\(Min_Conversione, 2), "%\n", "Media Mesi di Inventario: ", round(stats\)Media_Inventario, 2), ” mesi“,”Efficienza Media: “, round(stats\(Efficienza_Media, 2), "%\n" ) }) output\)plot_seasonal <- renderPlotly({ #Otteniamo dei dati filtrati. df <- filtered_data() #Calcolo delle medie mensili. seasonal_data <- df %>% group_by(month) %>% summarise( avg_conversion = mean(conversion_rate, na.rm = TRUE), avg_inventory = mean(months_inventory, na.rm = TRUE) ) #Selezione della colonna y e dell’etichetta in base alla metrica scelta. y_col <- if(input\(metric == "conversion_rate") "avg_conversion" else "avg_inventory" y_label <- if(input\)metric ==”conversion_rate”) “Tasso di Conversione Medio (%)” else “Media Mesi di Inventario” #Creazione del grafico a barre. p <- ggplot(seasonal_data, aes_string(x = “month”, y = y_col)) + geom_bar(stat = “identity”, fill = “#2ca02c”) + labs( title = paste(“Pattern Stagionale -”, y_label), x = “Mese”, y = y_label ) + theme_minimal() + #Configurazione dell’asse x per mostrare le abbreviazioni dei mesi. scale_x_continuous( breaks = 1:12, labels = month.abb ) + theme( panel.grid.major = element_line(color = “gray90”), panel.grid.minor = element_line(color = “gray95”) ) #Conversione in grafico interattivo plotly. ggplotly(p) }) } #Creazione e avvio dell’applicazione Shiny. shinyApp(ui = ui, server = server) ## Nelle città di Beaumont, Bryan-College Station e Tyler si osserva una crescita del tasso di conversione nel tempo,
#con una certa stagionalità che evidenzia mesi più favorevoli. #Questo andamento è particolarmente evidente nel grafico ‘Pattern Stagionale - Tasso di Conversione Medio’,
#dove i mesi estivi (maggio-agosto) mostrano i tassi di conversione più alti, mentre quelli invernali registrano performance più basse.
#A Wichita Falls, invece, non si rileva un trend chiaro di crescita, sebbene il tasso medio di conversione
#non sia il più basso tra le quattro città analizzate. # Per quanto riguarda i mesi di inventario, nelle città di Beaumont, Bryan-College Station e Tyler,
#si è osservato un iniziale aumento fino al picco del 2011, seguito da un trend decrescente. #L’inventario segue un pattern stagionale inverso: è più alto in primavera/inizio estate e più basso in inverno,
#suggerendo che un maggior numero di proprietà viene messo sul mercato durante la stagione di punta.
#A Wichita Falls, dopo una diminuzione dei mesi di inventario nel biennio 2012-2013, si è registrato un aumento nel 2014.
#In sintesi, le implicazioni per il marketing potrebbero includere la concentrazione delle risorse nei mesi primaverili
#per preparare la stagione di punta estiva, in particolare nelle città con un mercato più attivo come Bryan-College Station.
#Al contrario, per Wichita Falls potrebbe essere opportuno rivedere la strategia di marketing per adattarsi
# alle dinamiche locali del mercato.

#Analisi della distribuzione dei prezzi (3 PUNTO) #UI con due grafici. ui <- fluidPage( titlePanel(“Analisi Mercato Immobiliare Texas”), sidebarLayout( sidebarPanel( selectInput(“citta”, “Seleziona città:”, choices = unique(realestate_texas\(city)) ), mainPanel( plotlyOutput("plot_combinato", height = "600px"), plotlyOutput("plot_yearly", height = "600px") ) ) ) #Server logic. server <- function(input, output) { #Grafico combinato: Vendite e Prezzi. output\)plot_combinato <- renderPlotly({ data_city <- realestate_texas %>% filter(city == input\(citta) fig <- plot_ly() %>% add_bars(data = data_city, x = ~data, y = ~sales, name = "Vendite", marker = list(color = "rgba(177, 156, 217, 0.4)")) %>% add_lines(data = data_city, x = ~data, y = ~median_price, name = "Prezzo Medio", yaxis = "y2", line = list(color = "#90EE90", width = 2)) %>% layout( margin = list(r = 100), title = paste("Trend Immobiliari -", input\)citta), xaxis = list(title = ““), yaxis = list( title =”Numero di Vendite”, range = c(0, 300), gridcolor = “rgba(0,0,0,0.1)”, showgrid = TRUE ), yaxis2 = list( title = list(text = “Prezzo Medio (\()", standoff = 40), overlaying = "y", side = "right", range = c(0, max(data_city\)median_price) * 1.2), showgrid = FALSE, tickformat =”$,.0f”, zeroline = FALSE ), showlegend = TRUE, legend = list(orientation = ‘h’, y = -0.2) )

fig

}) #Grafico trend annuale. output\(plot_yearly <- renderPlotly({ yearly_data <- realestate_texas %>% filter(city == input\)citta) %>% group_by(year) %>% summarize( avg_price = mean(median_price), total_sales = sum(sales), avg_listings = mean(listings) ) %>% mutate(across(c(avg_price, total_sales, avg_listings), ~(.-min(.))/(max(.)-min(.)) - 0.5))
plot_ly() %>% add_trace(data = yearly_data, x = ~year, y = ~avg_price, name = “Prezzo Medio”, type = ‘scatter’, mode = ‘lines’, line = list(color = ‘#82ca9d’, shape = ‘spline’)) %>% add_trace(data = yearly_data, x = ~year, y = ~total_sales, name = “Vendite Totali”, type = ‘scatter’, mode = ‘lines’, line = list(color = ‘#8884d8’, shape = ‘spline’)) %>% add_trace(data = yearly_data, x = ~year, y = ~avg_listings, name = “Media Inserzioni”, type = ‘scatter’, mode = ‘lines’, line = list(color = ‘#ffc658’, shape = ‘spline’)) %>% layout( title = paste(“Trend Annuale (Valori Normalizzati) -”, input$citta), xaxis = list(title = “Anno”, tickmode = “linear”, dtick = 1), yaxis = list(title = “Valore Normalizzato”, gridcolor = “rgba(0,0,0,0.1)”, range = c(-1, 1), #Imposta il range da -1 a 1. tickmode = “array”, #Imposta tick personalizzati. tickvals = seq(-1, 1, 0.5), #Definisce i valori dei tick. zeroline = TRUE, #Mostra la linea dello zero. zerolinecolor = “black”, #Colore della linea dello zero. zerolinewidth = 1), #Spessore della linea dello zero. showlegend = TRUE, legend = list(orientation = ‘h’, y = -0.2) ) }) } #Avvio app. shinyApp(ui = ui, server = server) #Per ogni città, il primo grafico mostra il numero di vendite mensili e il prezzo medio di vendita.
#Il secondo grafico,invece, rappresenta il trend annuale normalizzato del numero di vendite, del prezzo medio
#e della media delle inserzioni disponibili.
#Si è scelto di utilizzare dati normalizzati poiché le tre variabili hanno unità di misura diverse
#e,inoltre, questa scelta riduce l’influenza dell’inflazione sui dati nel tempo.
#A Beaumont si osserva un aumento delle vendite totali e una diminuzione delle inserzioni disponibili.
#Tuttavia, l’aumento delle vendite non è stato seguito in modo proporzionale da un aumento del prezzo medio di vendita,
#anche se una crescita è comunque presente.
#Anche a Bryan-College Station si registra un notevole aumento del numero di vendite totali, accompagnato
#da un incremento del prezzo medio e da un calo delle inserzioni disponibili.
#Questo conferma che il mercato immobiliare della città è molto attivo e in forte crescita.
#A Tyler si osserva un incremento progressivo delle vendite nel tempo.
#A differenza delle città precedenti, però, il prezzo medio di vendita è aumentato in modo più evidente,
#suggerendo che, dal 2012 in poi, le case vendute non solo sono state più numerose,
#ma anche di valore uguale o superiore alla media degli anni precedenti.
#Questo rappresenta un vantaggio per l’agenzia immobiliare, poiché le provvigioni risultano più alte
#grazie alla vendita di immobili a prezzi medi.

#—————————————————————————————————————– #Calcolo delle probabilità. #Lettura del dataset. dati <- read.csv(“realestate_texas.csv”) #Numero totale di righe. n_totale <- nrow(dati) #Conteggio per Beaumont. n_beaumont <- sum(dati\(city == "Beaumont") prob_beaumont <- n_beaumont / n_totale #Conteggio per Luglio. n_luglio <- sum(dati\)month == 7) prob_luglio <- n_luglio / n_totale #Conteggio per Dicembre 2012. n_dic2012 <- sum(dati\(month == 12 & dati\)year == 2012) prob_dic2012 <- n_dic2012 / n_totale #Creazione di una funzione per formattare le percentuali. format_percentage <- function(x) { sprintf(“%.2f%%”, x * 100) } #Stampa i risultati. cat(“dell’analisi delle probabilità:”) cat(“================================================”) cat(sprintf(“Dimensione totale del dataset: %d righe”, n_totale)) cat(“1. Probabilità di selezionare una riga con città ‘Beaumont’:”) cat(sprintf(” - Probabilità: %s“, format_percentage(prob_beaumont))) cat(”2. Probabilità di selezionare una riga con mese ‘Luglio’:“) cat(sprintf(” - Probabilità: %s“, format_percentage(prob_luglio))) cat(”3. Probabilità di selezionare una riga di Dicembre 2012:“) cat(sprintf(” - Probabilità: %s“, format_percentage(prob_dic2012)))

#Creazione della colonna prezzo medio #Leggo il dataset. realestate_texas <- read.csv(“realestate_texas.csv”) #Aggiungi la colonna del prezzo medio con 3 decimali. realestate_texas <- realestate_texas %>% mutate( average_price = round((volume * 1000000) / sales, 3) ) #Visualizza le prime righe per controllare che funzioni. head(realestate_texas)

#Analisi condizionata. #Lettura del file CSV. realestate_texas <- read.csv(“realestate_texas.csv”) #Creazione della colonna prezzo medio. #Il volume è in milioni, quindi moltiplichiamo per 1000000 e #dividiamo per il numero di vendite per ottenere il prezzo medio. realestate_texas <- realestate_texas %>% mutate( average_price = round((volume * 1000000) / sales, 3) ) #Analisi per città. #Calcola statistiche raggruppate per città. statistiche_citta <- realestate_texas %>% group_by(city) %>% summarise( prezzo_medio = mean(average_price), #Media dei prezzi. sd_prezzo = sd(average_price), #Deviazione standard dei prezzi. vendite_medie = mean(sales), #Media delle vendite. sd_vendite = sd(sales), #Deviazione standard delle vendite. inventario_medio = mean(months_inventory), #Media dell’inventario. sd_inventario = sd(months_inventory) #Deviazione standard dell’inventario. ) #Analisi per anno. #Calcola le statistiche raggruppate per anno. statistiche_anno <- realestate_texas %>% group_by(year) %>% summarise( prezzo_medio = mean(average_price), #Media dei prezzi per anno vendite_totali = sum(sales), #Totale vendite per anno inventario_medio = mean(months_inventory) #Media inventario per anno ) #Grafico a barre dei prezzi medi per città. grafico_prezzi_citta <- ggplot(statistiche_citta, aes(x = reorder(city, prezzo_medio), y = prezzo_medio)) + #Crea le barre. geom_bar(stat = “identity”, fill = “steelblue”) + #Aggiungi barre di errore per la deviazione standard. geom_errorbar(aes(ymin = prezzo_medio - sd_prezzo, ymax = prezzo_medio + sd_prezzo), width = 0.2) + #Personalizzazione del tema e delle etichette. theme_minimal() + labs(title = “Prezzo medio per città”, x = “Città”, y = “Prezzo medio (\()") + #Ruota le etichette dell'asse x per maggiore leggibilità. theme(axis.text.x = element_text(angle = 45, hjust = 1)) + #Formatta i valori dell'asse y come valuta. scale_y_continuous(labels = scales::dollar_format()) #Grafico lineare dei trend dei prezzi medi annuali. grafico_prezzi_annuali <- ggplot(realestate_texas %>% group_by(year) %>% summarise(prezzo_medio = mean(average_price))) + #Aggiungo la linea del trend. geom_line(aes(x = year, y = prezzo_medio), color = "steelblue", linewidth = 1) + #Usa linewidth invece di size per le linee. #Aggiungo i punti per ogni anno. geom_point(aes(x = year, y = prezzo_medio), color = "steelblue", size = 3) + #Personalizzazione del tema e delle etichette. theme_minimal() + labs(title = "Trend dei prezzi medi annuali", x = "Anno", y = "Prezzo medio (\))”) + scale_y_continuous(labels = scales::dollar_format()) #Box plot per la distribuzione dei prezzi medi per città. grafico_boxplot_prezzi <- ggplot(realestate_texas, aes(x = city, y = average_price)) + #Crea i box plot. geom_boxplot(fill = “steelblue”, alpha = 0.5) + #Personalizzazione del tema e delle etichette. theme_minimal() + labs(title = “Distribuzione dei prezzi medi per città”, x = “Città”, y = “Prezzo medio ($)”) + #Ruota le etichette dell’asse x per maggiore leggibilità. theme(axis.text.x = element_text(angle = 45, hjust = 1)) + #Formatta i valori dell’asse y come valuta. scale_y_continuous(labels = scales::dollar_format()) #Stampa delle statistiche riassuntive. print(“Statistiche per città:”) print(statistiche_citta) print(“per anno:”) print(statistiche_anno) #Salvataggio dei grafici in file PNG. ggsave(“prezzi_medi_citta.png”, grafico_prezzi_citta, width = 10, height = 6) ggsave(“trend_prezzi_annuali.png”, grafico_prezzi_annuali, width = 10, height = 6) ggsave(“boxplot_prezzi_citta.png”, grafico_boxplot_prezzi, width = 10, height = 6) #Anche questa analisi statistica conferma un incremento dei prezzi.
#Inoltre, si osserva che Bryan-College Station è la città con il prezzo medio più alto,
#seguita da Tyler, Beaumont e Wichita Falls.

#Creazione di classi per una variabile quantitativa (Num di Vendite) #Calcolo del numero ottimale di classi usando la regola di Sturges. #Formula usata: k = 1 + 3.322 * log10(n), dove n è il numero di osservazioni. n_classi <- ceiling(1 + 3.322 * log10(nrow(dati))) #Creazione degli intervalli per le classi. #Distribuisce uniformemente le classi tra il valore minimo e massimo. breaks <- seq(min(dati\(sales), max(dati\)sales), length.out = n_classi + 1) #Assegnazione delle osservazioni alle classi. #include.lowest = TRUE include il valore minimo nella prima classe. #right = FALSE indica che gli intervalli sono chiusi a sinistra. dati\(sales_classe <- cut(dati\)sales, breaks = breaks, include.lowest = TRUE, right = FALSE) #Analisi delle frequenze. #Calcolo delle frequenze assolute. freq_dist <- table(dati\(sales_classe) #Calcolo delle frequenze relative in ppercentuali. freq_rel <- prop.table(freq_dist) #Creazione di un dataframe per il grafico. df_freq <- data.frame( classe = names(freq_dist), frequenza = as.numeric(freq_dist) ) #Visualizzazione grafica. #Creazione del grafico a barre delle frequenze. ggplot(df_freq, aes(x = classe, y = frequenza)) + geom_bar(stat = "identity", fill = "steelblue") + #Barre verticali. theme_minimal() + #Tema. theme(axis.text.x = element_text(angle = 45, hjust = 1)) + #Rotazione etichette asse x labs(title = "Distribuzione delle Vendite Immobiliari in Texas", x = "Classi di Vendite", y = "Frequenza") #Calcolo dell'indice di eterogeneità di Gini. #L'indice varia tra 0 (omogeneità perfetta) e 1 (massima eterogeneità). gini <- Gini(dati\)sales) #Stampa della distribuzione di frequenze. print(“Distribuzione di frequenze:”) print(freq_dist) #Stampa delle frequenze relative. print(“relative:”) print(freq_rel) #Stampa dell’indice di Gini. print(“di Gini:”) print(gini) #Calcolo e stampa delle principali statistiche descrittive. summary_stats <- summary(dati$sales) print(“descrittive delle vendite:”) print(summary_stats) #Creazione del box plot per analisi temporale. #Mostra la distribuzione delle vendite per anno e città. ggplot(dati, aes(x = as.factor(year), y = sales, fill = city)) + geom_boxplot() + #Tipo di grafico: box plot. theme_minimal() + #Tema grafico. labs(title = “Distribuzione delle Vendite per Anno e Città”, x = “Anno”, y = “Numero di Vendite”, fill = “Città”) #Analizzando il grafico ‘Distribuzione delle Vendite per Anno e Città’.
#Si osserva che il numero di vendite è sempre stato maggiore nella città di Tyler.
#Inoltre, si nota una crescita evidente per Bryan-College Station, sebbene con una maggiore variabilità nei dati.
#Beaumont e Wichita Falls, invece, mostrano una tendenza più stabile, con minori fluttuazioni nel numero di vendite nel tempo.

#Identificazione delle variabili con maggiore variabilità e asimmetria. # Caricamento librerie # Lettura dati dati <- read.csv(“realestate_texas.csv”) #Selezione variabili numeriche dati_numerici <- dati %>% select(sales, volume, median_price, listings, months_inventory) #Calcolo CV e asimmetria cv <- sapply(dati_numerici, function(x) sd(x)/mean(x)*100) asimmetria <- sapply(dati_numerici, skewness) #Visualizzazione risultati print(“Coefficienti di Variazione (%):”) print(sort(cv, decreasing = TRUE)) print(“di Asimmetria:”) print(sort(asimmetria, decreasing = TRUE)) #Visualizzazioni ggplot(gather(dati_numerici), aes(value)) + geom_histogram(bins = 30) + facet_wrap(~key, scales = “free”) + labs(title = “Distribuzione variabili numeriche”) ggplot(dati) + geom_boxplot(aes(x = city, y = median_price)) + theme(axis.text.x = element_text(angle = 45)) + labs(title = “Distribuzione prezzi per città”) #La variabile con la più alta variabilità è il volume, con un coefficiente di variazione (CV) del 53.70%. #Questo indica una grande dispersione dei valori rispetto alla media. #Il boxplot rivela anche che Bryan-College Station ha prezzi mediani significativamente più alti e minor variabilità rispetto alle altre città, #mentre Wichita Falls mostra i prezzi più bassi. #Le variabili volume, sales, listings e months inventory presentano asimmetrie positive, mentre #la variabile median price presenta asimmetria negativa lieve, quindi leggermente spostata verso valori più alti.

```