Ogni anno, quando ci avviciniamo a Pasqua sorge sempre la stessa domanda: “che tempo farà a Pasquetta?” E via giù di meme, che la risposta la sappiamo tutti: a pasquetta piove. Sempre. Il lunedì di Pasquetta è la giornata consacrata al maltempo, punto. Fa parte integrante della tradizione pasquale.
Ma qui su infigures siamo abituati ad affrontare le cose in maniera diversa. Cosa dicono davvero i dati? Quello di oggi è un post diverso dal solito. Più da nerd. Ho scritto un codice in R per verificare se davvero a Pasquetta piove sempre. Facciamo un po’ di web scraping sul sito ilmeteo.it. Per chi non lo sapesse, il web scraping è il processo di estrazione automatica di dati da pagine web. Bene, iniziamo.
Anzitutto le librerie necessarie per questo esercizio:
library(timeDate) # serve per il calcolo della Pasqua
library(lubridate) # per lavorare con le date
library(rvest) # per il web scraping
library(dplyr) # per la manipolazione dei dati
Mi creo un dataframe (lo chiamo per brevità df) con una colonna Anno contenente gli anni cui sono interessato (dal 2006 al 2023), una colonna Pasquetta contenente la data della pasqua +1. Easter è la funzione della libreria timeDate per il calcolo della pasqua a partire dall’anno.
df <- data.frame(Anno = 2006:2023)
df$Pasquetta <- Easter(df$Anno) + days(1)
df$Pasquetta <- as.Date(df$Pasquetta)
Creo poi una colonna Mese con il nome del mese della pasquetta (mi servirà per poi fare lo scraping su ilmeteo.it, il Giorno del mese e una colonna Meteo inizializzata a NA e che in seguito conterrà la condizione meteo di quel giorno.
mesi <- c("gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre")
df$Mese <- mesi[month(df$Pasquetta)]
df$Giorno <- day(df$Pasquetta)
df$Meteo <- NA
Viene ora la parte di web scraping. Di fatto un ciclo for e per ogni riga del dataframe
for (i in 1:nrow(df)) {
# Costruisco l'URL da interrogare
# in questo caso sono interessato al meteo di Roma
url <- paste0("https://www.ilmeteo.it/portale/archivio-meteo/Roma/",
df$Anno[i],
"/",
df$Mese[i],
"/",
df$Giorno[i],
sep = "")
# Eseguo il web scraping e aggiungo i dati nella colonna "Meteo"
# La condizione meteo si trova nell'ultima riga della tabella del sito
df$Meteo[i] <- read_html(url) %>%
html_node(xpath = "//table[position() = 2]//tr[last()]//td[2]") %>%
html_text()
# Stampo il progresso per vedere quanto mi manca alla fine dello scraping
cat("Progresso:", i, "/", nrow(df), "\n")
}
Ora che abbiamo il nostro bel df facciamo un minimo di pulizia sul testo (togliamo gli spazi in eccesso e mettiamo tutto in minuscolo).
df$Meteo <- tolower(trimws(df$Meteo))
Et voilà, questo è il risultato:
Anno | Meteo lunedì di Pasquetta- RM |
---|---|
2006 | pioggia debole |
2007 | poco nuvoloso |
2008 | temporale |
2009 | pioggia e schiarite |
2010 | nubi sparse |
2011 | coperto |
2012 | sereno |
2013 | coperto |
2014 | poco nuvoloso |
2015 | poco nuvoloso |
2016 | nubi sparse |
2017 | poco nuvoloso |
2018 | poco nuvoloso |
2019 | pioggia e schiarite |
2020 | nebbia al mattino |
2021 | poco nuvoloso |
2022 | sereno |
2023 | poco nuvoloso |
Oppure possiamo sintetizzare l’informazione con questa linea di codice:
df %>% count(Meteo) %>% arrange(desc(n))
Meteo | n |
---|---|
poco nuvoloso | 7 |
coperto | 2 |
nubi sparse | 2 |
pioggia e schiarite | 2 |
sereno | 2 |
nebbia al mattino | 1 |
pioggia debole | 1 |
temporale | 1 |
Ohibò, solo due giornate con tempo sereno…

Dubbi, perplessità? Fatemi sapere. Ma questo è solo l’inizio per delle persone curiose. Ad esempio si può modificare il codice per vedere il meteo di Milano o di Napoli. Si può controllare il meteo una settimana prima e una settimana dopo la pasquetta per verificare se ci siano differenze significative. Oppure ancora si potrebbero calcolare altri indicatori come ad esempio la temperatura media.
Provate voi stessi, ho messo a disposizione il codice qui su COLAB.