Aquest document presenta una anàlisi descriptiva del conjunt de dades
meteorològiques incloses al fitxer dades_meteo.RData.
L’objectiu és explorar les seves característiques, dimensions i
distribucions, així com també generar gràfics exploratoris.
El conjunt de dades dades_meteo és un recull de dades
meteorològiques d’una setmana de desembre de l’any 2024. Aquestes dades
s’han extret d’un conjunt superior que conté les mostres que agafa
l’estació meteorològica d’un familiar d’un membre del grup cada mitja
hora.
Més concretament, hem escollit la setmana del 09/12/2024 al 15/12/2024 perquè és una data pròxima als dies que farem l’anàlisi del conjunt, i casualment hi ha dades i valors molt diversos que ens podran donar molt de joc en les observacions.
L’objectiu del projecte és aprendre a interactuar amb un conjunt de dades per resoldre diferents situacions estadístiques.
Per començar a treballar amb el conjunt de dades, i així trencar una mica el gel, ens hem plantejat la següent qüestió:
Aquest conjunt és perfecte per respondre aquesta pregunta perquè conté els paràmetres meteorològics que necessitem, la temperatura, la humitat, el vent i la precipitació, i de les mesures que s’han anat registrant al llarg de la setmana.
Per importar el conjunt de dades col·loquem el fitxer dins del directori del projecte i el carreguem executant la següent ordre:
load("dades_meteo.RData")
L’objecte del conjunt amb el que ens referirem d’ara en endavant serà
dades_meteo.
ls()
## [1] "dades_meteo"
El format original del fitxer era XLSX (Excel), però l’hem canviat a .RData per poder treballar amb R.
head(dades_meteo) %>% kable(caption = "Primeres files del dataset")
| Dia | Data | Hora | Temp | Temp_max | Temp_min | Pressio | Humitat | Rosada | Vent | Vent_max | Vent_dir | Vent_direccio | Temp_sensacio | Pluja |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dilluns | 9/12/2024 | 00:30 | 4.4 | 4.6 | 4.3 | 1010.7 | 92 | 3.2 | 3.2 | 9.7 | 10 | SW | 4.3 | 0 |
| Dilluns | 9/12/2024 | 01:00 | 4.3 | 4.4 | 4.0 | 1010.4 | 92 | 3.1 | 1.6 | 6.4 | 6 | SE | 4.3 | 0 |
| Dilluns | 9/12/2024 | 01:30 | 3.9 | 4.2 | 3.6 | 1010.3 | 93 | 2.9 | 0.0 | 4.8 | 6 | SE | 3.9 | 0 |
| Dilluns | 9/12/2024 | 02:00 | 3.5 | 3.7 | 3.3 | 1010.4 | 94 | 2.6 | 3.2 | 6.4 | 9 | SSW | 3.3 | 0 |
| Dilluns | 9/12/2024 | 02:30 | 3.2 | 3.4 | 2.9 | 1010.3 | 95 | 2.5 | 1.6 | 8.0 | 9 | SSW | 3.2 | 0 |
| Dilluns | 9/12/2024 | 03:00 | 2.8 | 3.1 | 2.6 | 1010.3 | 96 | 2.2 | 1.6 | 6.4 | 9 | SSW | 2.8 | 0 |
Inicialment dades_meteo no disposava d’una columna amb
el nom dels dies de la setmana, i l’hem afegit per complir els
requeriments del projecte. Per contra, hem eliminat la columna del
període de mostra perquè es tractava del mateix interval (30 minuts) i
era una dada redundant.
El nostre conjunt de dades recull un total de 336 mostres de 15 paràmetres meteorològics.
# Vista ràpida del conjunt
glimpse(dades_meteo)
## Rows: 336
## Columns: 15
## $ Dia <chr> "Dilluns", "Dilluns", "Dilluns", "Dilluns", "Dilluns", "…
## $ Data <chr> "9/12/2024", "9/12/2024", "9/12/2024", "9/12/2024", "9/1…
## $ Hora <chr> "00:30", "01:00", "01:30", "02:00", "02:30", "03:00", "0…
## $ Temp <dbl> 4.4, 4.3, 3.9, 3.5, 3.2, 2.8, 2.6, 2.3, 2.0, 1.9, 2.0, 2…
## $ Temp_max <dbl> 4.6, 4.4, 4.2, 3.7, 3.4, 3.1, 2.8, 2.4, 2.2, 2.1, 2.2, 2…
## $ Temp_min <dbl> 4.3, 4.0, 3.6, 3.3, 2.9, 2.6, 2.3, 2.2, 1.8, 1.7, 1.8, 2…
## $ Pressio <dbl> 1010.7, 1010.4, 1010.3, 1010.4, 1010.3, 1010.3, 1010.2, …
## $ Humitat <dbl> 92, 92, 93, 94, 95, 96, 96, 97, 97, 97, 97, 97, 96, 96, …
## $ Rosada <dbl> 3.2, 3.1, 2.9, 2.6, 2.5, 2.2, 2.0, 1.9, 1.6, 1.5, 1.6, 1…
## $ Vent <dbl> 3.2, 1.6, 0.0, 3.2, 1.6, 1.6, 0.0, 1.6, 0.0, 1.6, 3.2, 1…
## $ Vent_max <dbl> 9.7, 6.4, 4.8, 6.4, 8.0, 6.4, 3.2, 6.4, 4.8, 9.7, 8.0, 8…
## $ Vent_dir <dbl> 10, 6, 6, 9, 9, 9, 9, 9, 14, 10, 10, 7, 10, 10, 9, 8, 8,…
## $ Vent_direccio <chr> "SW", "SE", "SE", "SSW", "SSW", "SSW", "SSW", "SSW", "NW…
## $ Temp_sensacio <dbl> 4.3, 4.3, 3.9, 3.3, 3.2, 2.8, 2.6, 2.3, 2.0, 1.9, 1.6, 2…
## $ Pluja <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
La unitat d’anàlisi del dataset és l’estació meteorològica.
| Variable | Tipus | Descripció | Valors possibles / rang |
|---|---|---|---|
| Dia | caràcter | Nom del dia de la setmana | Dilluns – Diumenge |
| Data | caràcter | Data en format dd/mm/aaaa | 09/12/2024 – 15/12/2024 |
| Hora | caràcter | Hora en format hh:mm | 00:00 – 23:30 |
| Temp | numèrica | Temperatura mitjana en ºC | 1.9 – 14.4 |
| Temp_max | numèrica | Temperatura màxima en ºC | 2.1 – 14.5 |
| Temp_min | numèrica | Temperatura mínima en ºC | 1.6 – 14.2 |
| Pressio | numèrica | Pressió atmosfèrica en hPa (o mbar) | 1010.0 – 1037.1 |
| Humitat | numèrica | Humitat relativa en % | 50 – 100 |
| Rosada | numèrica | Punt de rosada en ºC | 1.2 – 11.2 |
| Vent | numèrica | Velocitat mitjana del vent en km/h | 0 – 27,4 |
| Vent_max | numèrica | Velocitat màxima del vent en km/h | 1,6 – 59,5 |
| Vent_dir | numèrica | Direcció del vent codificada | 0 – 15 |
| Vent_direcció | caràcter | Direcció del vent cardinal | N – NNW |
| Temp_sensació | numèrica | Sensació de temperatura en ºC | 1,6 – 14,4 |
| Pluja | numèrica | Precipitació en mm (o l/m²) | 0 – 6,20 |
# Resum estadístic general
summary(dades_meteo)
## Dia Data Hora Temp
## Length:336 Length:336 Length:336 Min. : 1.900
## Class :character Class :character Class :character 1st Qu.: 6.100
## Mode :character Mode :character Mode :character Median : 8.100
## Mean : 7.776
## 3rd Qu.: 9.100
## Max. :14.400
## Temp_max Temp_min Pressio Humitat
## Min. : 2.100 Min. : 1.600 Min. :1010 Min. : 50.00
## 1st Qu.: 6.300 1st Qu.: 5.900 1st Qu.:1019 1st Qu.: 75.00
## Median : 8.300 Median : 7.900 Median :1022 Median : 96.00
## Mean : 8.011 Mean : 7.547 Mean :1022 Mean : 87.66
## 3rd Qu.: 9.300 3rd Qu.: 8.900 3rd Qu.:1025 3rd Qu.: 99.00
## Max. :14.500 Max. :14.200 Max. :1037 Max. :100.00
## Rosada Vent Vent_max Vent_dir
## Min. : 1.200 Min. : 0.000 Min. : 1.60 Min. : 0.000
## 1st Qu.: 3.100 1st Qu.: 1.600 1st Qu.: 6.40 1st Qu.: 0.000
## Median : 5.650 Median : 3.200 Median : 8.85 Median : 8.000
## Mean : 5.626 Mean : 5.099 Mean :12.87 Mean : 5.595
## 3rd Qu.: 8.100 3rd Qu.: 6.400 3rd Qu.:14.90 3rd Qu.: 9.000
## Max. :11.200 Max. :27.400 Max. :59.50 Max. :15.000
## Vent_direccio Temp_sensacio Pluja
## Length:336 Min. : 1.600 Min. :0.000
## Class :character 1st Qu.: 5.575 1st Qu.:0.000
## Mode :character Median : 7.050 Median :0.000
## Mean : 7.170 Mean :0.128
## 3rd Qu.: 8.700 3rd Qu.:0.000
## Max. :14.400 Max. :6.200
Els valors són tots complets, no hi ha cap valor NULL o perdut i tampoc hi ha valors estranys.
sum(is.na(dades_meteo))
## [1] 0
Per alguns càlculs amb la variable Hora, com per exemple, trobar la durada entre dues hores, l’haurem de transformar a una variable numèrica.
# Selecció de variables d'interès per a la pregunta
seleccio <- dades_meteo %>% select(Temp, Temp_sensacio, Humitat, Vent_direccio, Pluja)
# Taula resum amb format net
summary(seleccio) %>% kable(caption = "Resum estadístic de les variables meteorològiques seleccionades")
| Temp | Temp_sensacio | Humitat | Vent_direccio | Pluja | |
|---|---|---|---|---|---|
| Min. : 1.900 | Min. : 1.600 | Min. : 50.00 | Length:336 | Min. :0.000 | |
| 1st Qu.: 6.100 | 1st Qu.: 5.575 | 1st Qu.: 75.00 | Class :character | 1st Qu.:0.000 | |
| Median : 8.100 | Median : 7.050 | Median : 96.00 | Mode :character | Median :0.000 | |
| Mean : 7.776 | Mean : 7.170 | Mean : 87.66 | NA | Mean :0.128 | |
| 3rd Qu.: 9.100 | 3rd Qu.: 8.700 | 3rd Qu.: 99.00 | NA | 3rd Qu.:0.000 | |
| Max. :14.400 | Max. :14.400 | Max. :100.00 | NA | Max. :6.200 |
dades_meteo %>%
summarise(Mostres = n(),
Temp_mitjana = mean(Temp),
Sensacio_mitjana = mean(Temp_sensacio),
Humitat_mitjana = mean(Humitat),
Precipitacio_mitjana = mean(Pluja)) %>%
kable(digits = 2,
caption = "Resum inicial de temperatura, sensació, humitat i pluja.")
| Mostres | Temp_mitjana | Sensacio_mitjana | Humitat_mitjana | Precipitacio_mitjana |
|---|---|---|---|---|
| 336 | 7.78 | 7.17 | 87.66 | 0.13 |
En aquesta primera exploració es presenta una taula resum amb el nombre d’observacions i les mitjanes de temperatura real, sensació de temperatura, humitat i pluja, que permet tenir una visió global del conjunt de dades. Es complementa amb un núvol de punts de la temperatura real enfront de la sensació de temperatura, que actua com a gràfic inicial clau per a la pregunta d’estudi.
ggplot(dades_meteo, aes(x = Temp, y = Temp_sensacio)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE, colour = "red") +
labs(title = "Relació inicial entre temperatura real i sensació",
x = "Temperatura real (°C)",
y = "Sensació de temperatura (°C)")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(dades_meteo, aes(x = Temp, y = Temp_sensacio, color = Humitat)) +
geom_point(alpha = 0.7, size = 2) +
# Afegim una línia de referència (y = x) vermella discontínua que indica igualtat entre temperatura i sensació.
# Si el punt està sobre la línia, Sensació = Real.
# Si està per sota, fa més fred del que marca el termòmetre.
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red") +
scale_color_viridis_c(option = "C") +
labs(
title = "Temperatura Real vs. Sensació Tèrmica",
x = "Temperatura Real (ºC)",
y = "Sensació Tèrmica (ºC)",
color = "Humitat (%)"
) +
theme_minimal()
Tant a la taula com en els gràfics s’observa que la temperatura real es troba al voltant dels 8 ºC de mitjana, amb una variabilitat moderada al llarg dels dies considerats. La sensació de temperatura és lleugerament inferior, presenta valors molt propers a la temperatura real sense arribar a sobrepassar-la, cosa que ja suggereix una relació gairebé lineal entre ambdues variables. També podem apreciar que aquestes temperatures tendeixen a disminuir per igual quan la humitat augmenta. En canvi, si aquesta disminueix, la diferència entre temperatures es fa més notable, sent la sensació de temperatura més baixa que la real. La precipitació mitjana és baixa, indicant que la major part del període és sec.
El núvol de punts mostra un patró clarament creixent: a mesura que augmenta la temperatura real, també ho fa la sensació tèrmica, amb poca dispersió al voltant de la recta d’ajust. No es detecten valors clarament extrems en aquesta relació, tot i que es podria revisar més a fons si hi ha observacions amb sensacions inusualment diferents de la temperatura per comprovar possibles errors o condicions meteorològiques especials.
També podem veure que com menor és la humitat, major és la diferència entre la sensació tèrmica amb la temperatura real, essent la primera menor que la segona.
Ara bé, en funció de la base de dades amb la que treballem, la humitat no disminueix del 50%. Per tant, la fiabilitat dels resultats no té una precisió exacta.
Aquesta exploració inicial connecta directament amb la pregunta d’estudi, ja que confirma que la sensació de temperatura està fortament vinculada a la temperatura real, i planteja com variables com la humitat, el vent o la pluja poden modular aquesta relació.
# Creem una nova variable categòrica per Pluja
dades_meteo %>%
mutate(Estat = ifelse(Pluja > 0, "Pluja", "Sec")) %>%
group_by(Estat) %>%
summarise(
Observacions = n(),
Temperatura_mitjana = mean(Temp, na.rm = TRUE),
Sensacio_mitjana = mean(Temp_sensacio, na.rm = TRUE),
Direccio_mitjana = mean(Vent_dir, na.rm = TRUE),
Diferencia_mitjana = mean(Temp - Temp_sensacio, na.rm = TRUE),
Humitat_mitjana = mean(Humitat, na.rm = TRUE)
) %>%
kable(digits = 2, caption = "Comparativa: Dies de pluja vs. Dies secs")
| Estat | Observacions | Temperatura_mitjana | Sensacio_mitjana | Direccio_mitjana | Diferencia_mitjana | Humitat_mitjana |
|---|---|---|---|---|---|---|
| Pluja | 33 | 8.32 | 7.68 | 3.7 | 0.63 | 99.00 |
| Sec | 303 | 7.72 | 7.11 | 5.8 | 0.60 | 86.43 |
Per altra banda, a la taula, podem veure quines mitjanes obtenim per les variables del conjunt, separant-les per les mesures on no ha plogut, i les que sí que ha plogut.
Podem veure que quan plou, tant la temperatura real com la sensació tèrmica són lleugerament superiors, i que la humitat és notablement superior a què quan no ha plogut. La diferència entre temperatura real i sensació tèrmica mitjana és gairebé la mateixa plogui o no plogui, per tant, la podem negligir.
Aquesta exploració ens ajuda a verificar que per la nostra pregunta inicial, la humitat i la pluja influeixen en certa manera en les altres variables gràcies al gràfic i a la taula, respectivament.
# Matriu de correlacions
# Quantifiquem la relació lineal entre les variables numèriques
vars_num <- dades_meteo %>% select(Temp, Temp_sensacio, Humitat, Pluja)
cor_matrix <- cor(vars_num, use = "complete.obs")
ggcorrplot(cor_matrix,
lab = TRUE,
type = "lower",
title = "Matriu de correlacions",
colors = c("#6D9EC1", "white", "#E46726"))
vars_num <- dades_meteo %>% select(Temp, Temp_sensacio, Humitat, Pluja)
cor_mat <- cor(vars_num, use = "complete.obs")
kable(round(cor_mat, 3), caption = "Matriu de correlacions entre temperatura, sensació, humitat i pluja.")
| Temp | Temp_sensacio | Humitat | Pluja | |
|---|---|---|---|---|
| Temp | 1.000 | 0.922 | -0.424 | 0.078 |
| Temp_sensacio | 0.922 | 1.000 | -0.176 | 0.088 |
| Humitat | -0.424 | -0.176 | 1.000 | 0.182 |
| Pluja | 0.078 | 0.088 | 0.182 | 1.000 |
La matriu de correlacions mostra una correlació molt alta i positiva entre la temperatura real i la sensació de temperatura (al voltant de 0.92), fet que confirma quantitativament el que ja es veia en el núvol de punts. La correlació de la humitat amb la sensació de temperatura és més feble i lleugerament negativa, mentre que la relació amb la pluja és també feble i positiva.
# Influència de la direcció del vent en la temperatura real
# Ordenem les direccions per la mediana de temperatura per facilitar la lectura
dades_meteo %>%
mutate(Vent_direccio = fct_reorder(Vent_direccio, Temp, .fun = median)) %>%
ggplot(aes(x = Vent_direccio, y = Temp, fill = Vent_direccio)) +
geom_boxplot(alpha = 0.6, outlier.colour = "red") +
labs(title = "Distribució de la temperatura real segons la direcció del vent",
x = "Direcció del vent",
y = "Temperatura real (ºC)") +
theme_minimal() +
theme(legend.position = "none", axis.text.x = element_text(angle = 45, hjust = 1))
# Influència de la direcció del vent en la sensació tèrmica
# Ordenem les direccions per la mediana de sensació per facilitar la lectura
dades_meteo %>%
mutate(Vent_direccio = fct_reorder(Vent_direccio, Temp_sensacio, .fun = median)) %>%
ggplot(aes(x = Vent_direccio, y = Temp_sensacio, fill = Vent_direccio)) +
geom_boxplot(alpha = 0.6, outlier.colour = "red") +
labs(title = "Distribució de la sensació tèrmica segons la direcció del vent",
x = "Direcció del vent",
y = "Sensació tèrmica (ºC)") +
theme_minimal() +
theme(legend.position = "none", axis.text.x = element_text(angle = 45, hjust = 1))
Aquests dos gràfics, representen, per cadascun de les direccions del vent, la temperatura real i la sensació tèrmica respectivament. De forma individual l’únic que podem veure que pels vents SE (Sud-est) i ESE (Est-sud-est), tant la temperatura real com la sensació tèrmica té un valor mitjà notablement superior a la resta de direccions.
Mirant totes dues taules juntes, es pot observar que la diferència entre la temperatura real i la sensació tèrmica és gairebé nul·la, excepte pels vents del N (nord) i NNE (nord-nord-est) on es pot notar que la sensació és molt lleugerament inferior a la temperatura.
ggplot(dades_meteo, aes(x = Humitat, y = Temp_sensacio)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "lm", se = FALSE, colour = "red") +
labs(title = "Sensació de temperatura en funció de la humitat",
x = "Humitat relativa (%)",
y = "Sensació de temperatura (°C)")
## `geom_smooth()` using formula = 'y ~ x'
En el diagrama de punts anterior observem la sensació de temperatura depenent del percentatge d’humitat relatiu on podem veure, gràcies a la línia de mitjana, que a mesura que la humitat creix, la sensació de temperatura disminueix lleument.
# Relació Pluja i Humitat
# Com es comporta la humitat quan plou vs quan no plou?
# Assegurem que pluja es tracti com a factor per al gràfic
dades_meteo %>%
mutate(Pluja_factor = ifelse(Pluja > 0, "Amb Pluja", "Sense Pluja")) %>%
ggplot(aes(x = Humitat, fill = Pluja_factor)) +
geom_density(alpha = 0.5) +
labs(title = "Densitat de la Humitat segons presència de Pluja",
x = "Humitat (%)",
y = "Freqüència",
fill = "Condició") +
theme_minimal()
Aquest últim diagrama ens indica que a major precipitació major percentatge d’humitat relativa, aquesta era una informació esperable, però amb aquest gràfic la podem confirmar.
ggplot(dades_meteo, aes(x = Temp)) +
geom_histogram(aes(y = after_stat(density)), bins = 30, alpha = 0.6, colour = "white") +
geom_density(color = "red", linewidth = 1) +
labs(title = "Distribució de la temperatura real",
x = "Temperatura (°C)",
y = "Freqüència")
ggplot(dades_meteo, aes(x = Humitat)) +
geom_histogram(aes(y = after_stat(density)), bins = 30, alpha = 0.6, colour = "white") +
geom_density(color = "blue", linewidth = 1) +
labs(title = "Distribució de la humitat relativa",
x = "Humitat (%)",
y = "Freqüència")
dades_meteo %>%
mutate(Estat_Temp = ifelse(Temp > (Temp_sensacio + 0.5),
"Temp > Sensació + 0.5",
"Temp ≤ Sensació + 0.5")) %>%
group_by(Estat_Temp) %>%
summarise(N_observacions = n(),
Mitjana_Temp = mean(Temp, na.rm = TRUE),
Mitjana_Sensacio = mean(Temp_sensacio, na.rm = TRUE),
Dif_Mitjana = mean(Temp - Temp_sensacio, na.rm = TRUE),
Humitat_Mitjana = mean(Humitat, na.rm = TRUE)) %>%
kable(digits = 2,
caption = "Comparativa: Quan la temperatura és superior a (sensació + 0.5)")
| Estat_Temp | N_observacions | Mitjana_Temp | Mitjana_Sensacio | Dif_Mitjana | Humitat_Mitjana |
|---|---|---|---|---|---|
| Temp > Sensació + 0.5 | 107 | 8.72 | 6.87 | 1.84 | 75.75 |
| Temp ≤ Sensació + 0.5 | 229 | 7.34 | 7.31 | 0.03 | 93.23 |
Amb aquesta taula podem plantejar la següent hipòtesi: És la humitat el que provoca aquesta petita diferència entre la temperatura real i la sensació tèrmica?
Amb totes aquestes dades i variables en fem més que suficient per poder analitzar el conjunt de dades i respondre la pregunta inicial. Sempre que l’interval de temps sobre el qual volem obtenir una resposta no superi la totalitat del nostre conjunt, és a dir, una setmana (09/12/2024 – 15/12/2024).
En el cas que hàgim de fer un estudi per una duració superior a una setmana, podríem obtenir més mesures a partir de la base de dades superior d’on s’ha extret aquest fragment.
Amb la nostra base de dades, en podem extreure les següents conclusions:
La direcció del vent afecta molt lleugerament les temperatures mesurades, tant de sensació com la real.
Com més baixa és la humitat, major és la diferència entre la sensació tèrmica i la temperatura real.
Quan plou, la sensació tèrmica i la temperatura real augmenten lleugerament.
La nostra base de dades ens podria generar alguna limitació pel fet que no conté cap variable continua sobre la qual mirar els canvis que pateixen les variables. El que hauríem de fer a continuació per solucionar això és el següent: Crear una variable continua a partir de l’hora i dia en què s’ha realitzat una mesura.