Luego de una ardua investigacion mostraremos a lo largo de este trabajo le presentaremos las principales funciones de Lubridate, además de la aplicación de algunas funciones de otros paquetes que hemos visto en clase con la finalidad de dar conocimiento de un nuevo paquete de los cientos que existen en cran
Tiene funciones para trabajar con fechas-horas y períodos de tiempo: análisis rápido y fácil de usar de datos de fecha-hora, extracción y actualización de componentes de una fecha-hora (años, meses, días, horas, minutos y segundos), manipulación algebraica en objetos de fecha-hora y de intervalo de tiempo. El paquete ‘lubridate’ tiene una sintaxis consistente y memorable que hace que trabajar con fechas sea fácil y divertido.
Los paquetes que utlizaremos en este trabajo son los siguientes:
library(lubridate)
library(readr)
library(tidyverse)
library(dplyr)
library(ggplot2)
La base de datos que utilizaremos para ejecutar las diferentes funciones de Lubridate consta de un registro de relampagos en Argentina
relampagos <- read_csv("https://raw.githubusercontent.com/paocorrales/r4ds-notas/master/examen/eventos_severos_RELAMPAGO.csv")
View(relampagos)
| fecha | lat | lon | evento |
|---|---|---|---|
| 10/29/2018 22:05:00 | -33.11956 | -64.32797 | Ráfagas y/o vientos intensos |
| 10/30/2018 13:00:00 | -32.95214 | -60.76837 | Rayos y/o truenos |
| 10/30/2018 10:00:00 | -32.85000 | -61.25000 | Granizo |
| 10/29/2018 19:00:00 | -33.27861 | -65.61417 | Granizo |
Cabe destacar que el paquete Lubridate tiene demasidas funciones, pero aqui le explicaremos y mostraremos las principales, como herremienta que en algún momento serán de gran ayuda a la hora de manejo de datos.
Como podemos apreciar en el DF el vector donde están las fechas de los registros, este no esta con el formato que le corresponde que para las fechas seria DATA que es solo para fechas o POSIX que es para fechas y horas, entonces para esto utilizaremos la funcion mdy_hms.
Lo que significa que el vector fechas sera ordenado por m(meses), d(dias), y(años), h(horas), m(minutos) y s(segundos), estos pueden ir variando su orden, dependiendo de como le acomoda a uno como por ejemplo ymd_hms,mdy_hms, entre otros.
Lo que hicimos fue utilizar la funcion mutate de dplyr para agregar una nueva columna a nuestro DF, donde creamos el nuevo vector que refleja el formato correspondiente a las fechas al cual denominamos fecha_convertida
relampagos <- relampagos %>%
mutate(fecha_convertida = mdy_hms(fecha))
Aqui extraemos o llamamos el primer elemento de nuestro DF para corroborar y ver como quedaron las fechas luego de aplicar la funcion de lubridate que fue dmy_hms.
relampagos %>%
pull(fecha_convertida) %>%
.[1] # Extraemos el primer elemento
## [1] "2018-10-29 22:05:00 UTC"
Y asi es como quedo nuestra Data:
| fecha | lat | lon | evento | fecha_convertida |
|---|---|---|---|---|
| 10/29/2018 22:05:00 | -33.11956 | -64.32797 | Ráfagas y/o vientos intensos | 2018-10-29 22:05:00 |
| 10/30/2018 13:00:00 | -32.95214 | -60.76837 | Rayos y/o truenos | 2018-10-30 13:00:00 |
| 10/30/2018 10:00:00 | -32.85000 | -61.25000 | Granizo | 2018-10-30 10:00:00 |
| 10/29/2018 19:00:00 | -33.27861 | -65.61417 | Granizo | 2018-10-29 19:00:00 |
| 10/30/2018 12:50:00 | -31.39905 | -64.33477 | Granizo | 2018-10-30 12:50:00 |
Aqui mostraremos funciones que tienen que ver precisamente con los elementos de las fechas, es decir, dias, meses y años
today() #Esta función nos muestra la fecha actual en la que se ejecute la función
## [1] "2022-12-15"
year(relampagos$fecha_convertida) #Aqui nos muestra los años que aparecen dentro del DF
month(relampagos$fecha_convertida) #Nos muestra los meses que estan en el DF
day(relampagos$fecha_convertida) #Aparacen los dias que estan en el DF
La funcion wday nos ayuda a identificar que dia de la semana corresponde cada fecha de nuestro vector fecha, es decir que dia de la semana fue caya relampago que hubo.
wday(relampagos$fecha_convertida,label = TRUE)
#Está funcion nos ayuda a identicar que dia de la semana de modo abreviado ocurrieron los relampagos
wday(relampagos$fecha_convertida,label = TRUE,abbr=FALSE)
#Está funcion cumple el mismo proposito que en la funcion anterior solo que al poner abbr=FALSE no menciona los dias de la semana sin abreviacion
## [1] lun\\. mar\\. mar\\. lun\\. mar\\. sáb\\.
## Levels: dom\\. < lun\\. < mar\\. < mié\\. < jue\\. < vie\\. < sáb\\.
## [1] lunes martes martes lunes martes sábado
## 7 Levels: domingo < lunes < martes < miércoles < jueves < ... < sábado
Para saber que años fueron años bisiesto o no esta la funcion leap_year
leap_year(relampagos$fecha_convertida) #Esta funcion nos muestra si los años de la base de datos eran año bisiesto
## [1] FALSE FALSE FALSE FALSE FALSE FALSE
En este caso segun nuestra base de datos es FALSE lo cual significa que los años donde fueron los eventos registrados no eran años biestos
En esta parte se presentan aquellas funciones que tienen que ver con los componentes de la hora, lo que significa que tiene relacion con las horas, minutos y segundos
now() #Esta función nos muestra la fecha y hora actual en la que se ejecute la función
## [1] "2022-12-15 14:47:33 -03"
hour(relampagos$fecha_convertida) #Nos muestra solo la hora en la que ocurrieron los relampagos
minute(relampagos$fecha_convertida) #Nos refleja solo los minutos en el que ocurrio el evento
second(relampagos$fecha_convertida) #Nos muestra solo los segundos
Aqui gracias a las funciones am y pm podemos ver que horas de nuestrO DF son en horario de mañana o de tarde
am(relampagos$fecha_convertida) #Nos dice que datos sus horas son am, es decir en la mañana, es decir = TRUE
## [1] FALSE FALSE TRUE FALSE FALSE TRUE
pm(relampagos$fecha_convertida) #Nos dice que datos sus horas son pm, es decir en la tarde, es decir = TRUE
## [1] TRUE TRUE FALSE TRUE TRUE FALSE
En este caso la funcion dst nos ayuda de saber si los años de nuestro DF estan con horario de verano o no
dst(relampagos$fecha_convertida) #Esta funcion nos ayuda a saber si las fechas y hora fueron en horario de verano
head(dst(relampagos$fecha_convertida))
En este caso en nuestro DF salen todas FALSE lo que significa que ninguno de los datos tomados fueron tomados en horario de verano, pero si aplicamos nuestra zona horaria esto cambiaria ya que nosotros actualmente estamos con horario de veranos que lo veremos más adelante
La zona horaria nos ayuda para evitar los horario de verano de las diversas localidades
OlsonNames() #Lista de las más de 600 zona horarias disponibles
## [1] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa"
## [4] "Africa/Algiers" "Africa/Asmara" "Africa/Asmera"
Sys.timezone() #Muestra la zona horaria de mi computador
## [1] "America/Santiago"
Entonces nuestra base de datos tiene por efecto la zona horaria de Argentina, lo cual ahora nosotros actulizaremos las fechas a nuestra zona horaria.
Agregamos una nueva columna con la ayuda de la funcion mutate, donde utilizamos la funcion with_tz de Lubridate que consigue la misma date-time en una nueva zona horaria,es decir, los datos fueron recolectados en Argentina, con la zona horaria de alla, entonces con esta función convertimos las horas a nuestra zona horaria que en este caso es “America/Santiago”
relampagos<- relampagos %>%
mutate(fecha_convertida_ZH = with_tz(relampagos$fecha_convertida,tz="America/Santiago"))
Llamamos el primer elemento para observar como quedo al alplicar la funcion.
relampagos %>%
pull(fecha_convertida_ZH) %>%
.[1]
## [1] "2018-10-29 19:05:00 -03"
Asi fue como quedo nuestra data:
| fecha | lat | lon | evento | fecha_convertida | fecha_convertida_ZH |
|---|---|---|---|---|---|
| 10/29/2018 22:05:00 | -33.11956 | -64.32797 | Ráfagas y/o vientos intensos | 2018-10-29 22:05:00 | 2018-10-29 19:05:00 |
| 10/30/2018 13:00:00 | -32.95214 | -60.76837 | Rayos y/o truenos | 2018-10-30 13:00:00 | 2018-10-30 10:00:00 |
| 10/30/2018 10:00:00 | -32.85000 | -61.25000 | Granizo | 2018-10-30 10:00:00 | 2018-10-30 07:00:00 |
| 10/29/2018 19:00:00 | -33.27861 | -65.61417 | Granizo | 2018-10-29 19:00:00 | 2018-10-29 16:00:00 |
| 10/30/2018 12:50:00 | -31.39905 | -64.33477 | Granizo | 2018-10-30 12:50:00 | 2018-10-30 09:50:00 |
| 11/3/2018 10:35:00 | -31.75987 | -65.00167 | Rayos y/o truenos | 2018-11-03 10:35:00 | 2018-11-03 07:35:00 |
La función dst() nos ayuda a identificar si las horas de nuestro DF estan en horario de verano o no
dst(relampagos$fecha_convertida_ZH)
#Aqui nos arroja que todas son TRUE segun nuestra zona horaria, porque nosotros
#estamos con horario de verano
## [1] TRUE TRUE TRUE TRUE TRUE TRUE
Aqui nos arroja que todas son TRUE segun nuestra zona horaria, porque nosotros estamos con horario de verano.
Graficaremos para concluir como nos puede ayudar el paquete Lubridate con la aplicacion de una o dos de sus funciones.
Para graficar utiliozaremos el paquete Ggplot2 utilizando la funcion wday de Lubridate
library(ggplot2)
relampagos %>%
mutate(dia_semana = wday(relampagos$fecha_convertida,label = TRUE, abb=FALSE)) %>%
ggplot(aes(x = dia_semana)) +
geom_bar()
Aqui graficamos con la ayuda del paquetes ggplot2 los dias de la semana en los que ocurrieron los relampagos y como se puede ver la mayoria de los relampagos registrados, fueron un dia domingo y el dia que menos hubieron fue en el dia sabado
https://cran.r-project.org/web/packages/lubridate/index.html https://cran.r-project.org/web/packages/lubridate/lubridate.pdf https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html https://rstudio-pubs-static.s3.amazonaws.com/283116_76ed429fd0e848bba32e913c78b9c3f0.html https://eliocamp.github.io/r-clima/08-lubridate.html#