knitr::opts_chunk$set(echo = TRUE)
library(dplyr)
library(ggplot2)
library(tidyverse)
library(arules)
library(dplyr)
library(grid)
library(knitr)
library(lubridate)
load("df_agrupado.Rda")
El dataset que acabamos de cargar es un conjunto del dataset original de Valenbisi importado de los CSVs del profesor de la UPV César Ferri, junto a los datos recolectados de la base de la AEMET de Viveros, en Valencia. Así pues, hemos agrupado las variables que nos interesaban para crear este dataset.
Se ha de tener en cuenta, que los análisis a continuación contienen una gran cantidad de datos (ya que se trabaja a nivel horario), por ello hemos de recalcar que el número de frecuencias (al utilizar medias) serán muy próximos, pero esas pequeñas diferencias ya serán muy notorias.
Podemos denotar que el dataset que utilizaremos para los análisis (df_merge) contiene 545376 filas y 35 variables, lo que es exagerado a la hora de trabajar, y por ello aplicaremos tanto transformación como supresión de variables.
df_merge2 <- subset(df_merge, select = -c(gid,name, address,open, dir, horatmin, horatmax, festivo, vacaciones, fin_de_semana, día_semana, codbarrio, coddistrit, interés, metro, ticket, racha, tmin, tmax, coddistbar, nombre_barrio, geometry_punto, geometry_barrio, nombre_distrito, geometry_distrito, horaracha))
Así pues, hemos creado otro dataset a partir del anterior en el que se han eliminado todas aquellas variables que no nos sirvan para este objetivo, dejando únicamente las variables relacionadas con los bornes libres y las bicicletas disponibles, así como aquellas variables que hagan referencia al tiempo meteorológico o la situación climática que vayamos a utilizar.
df_merge2$prec <- sub(",", ".", df_merge2$prec)
df_merge2$prec <- as.numeric(df_merge2$prec)
df_merge2$tmed <- sub(",", ".", df_merge2$tmed)
df_merge2$tmed <- as.numeric(df_merge2$tmed)
df_merge2$velmedia <- sub(",", ".", df_merge2$velmedia)
df_merge2$velmedia <- as.numeric(df_merge2$velmedia)
Además de suprimir las variables que no ibamos a emplear, también hemos transformado las variables meteorológicas a numéricas, sustituyendo los valores numéricos que tengan comas por puntos para que R los pueda leer de forma adecuada.
De esta forma, comenzaremos realizando los análisis con la variables “prec”, que trata las precipitaciones que se han dado en Valencia (todos los datos han sido tomados de la base de la AEMET en Viveros).
x <- 1
result <- filter(df_merge2, df_merge2$prec > x)
resultexc <- filter(df_merge2, df_merge2$prec == 0)
Hemos impuesto un filtro para que todas aquellas filas del dataset que tengan en el valor en “prec” mayor a 1 (lo que se puede considerar ya unas precipitaciones moderadas) se vayan al dataset denominado “result”, y otro para que todas aquellas que tengan en dicha variable (“prec”) el valor 0 se vayan al dataset “result_exc”.
#Bornes libres
mediaprec <- mean(result$avg_free/result$avg_total)
mediaprec
## [1] 0.5851133
Sabiendo que la división de la variable “avg_free” entre “avg_total” es la frecuencia de bornes libres, hemos realizado la media de los datos de estas variables para el dataset “resul2” obteniendo la media de bornes libres cuando llueve.
#Bornes libres
mediaprec_exc <- mean(resultexc$avg_free/resultexc$avg_total)
mediaprec_exc
## [1] 0.5892091
En este caso, es la misma operación, pero para cuando no llueve. Ya podemos observar como hay una mayor frecuencia de bornes libres cuando no llueve, respecto a cuando llueve (es decir que se utilizan más bicis cuando no hay precipitaciones)
#Bicicletas disponibles
mediaprec2 <- mean(result$avg_av/result$avg_total)
mediaprec2
## [1] 0.3986329
#Bicicletas disponibles
mediaprec_exc2 <- mean(resultexc$avg_av/resultexc$avg_total)
mediaprec_exc2
## [1] 0.3969539
Aquí hemos vuelto a hacer las misma operaciones pero en este caso para obtener la frecuencia de bicicletas disponibles (división de la variable “avg_av” entre “avg_total”).
Sabiendo que las frencuencias de bicicletas disponibles son complementarias a las de los bornes libres, se puede intuir que la frecuencia del dataset “result” en este caso será mayor que el del dataset “result_exc”.
resultvel <- filter(df_merge2, df_merge2$velmedia > 4)
resultvel_exc <- filter(df_merge2, df_merge2$velmedia == 0)
Vamos a realizar los mismos comandos, pero esta vez para la variables “velmedia”, que hace referencia a la velocidad media del viento. Hemos impuesto esta vez que el valor x para el primer dataset “resultvel” sea 4 (la media de los valores) y que el dataset “resultvel_exc” tenga los registros que tienen valor 0 en la variable “velmedia”.
#Bornes libres
mediavel <- mean(resultvel$avg_free/resultvel$avg_total)
mediavel
## [1] 0.6044911
#Bornes libres
mediavel_exc <- mean(resultvel_exc$avg_free/resultvel_exc$avg_total)
mediavel_exc
## [1] 0.5847167
Ya en este caso, podemos ver como esta variable difiere de la de precipitaciones, puesto que la frecuencia de bornes libres es mayor cuando se utiliza el dataset de “resultvel” (la velocidad media del viento es mayor a 4) que con el dataset de “resultvel_exc”.
#Bicicletas disponibles
mediavel2 <- mean(resultvel$avg_av/resultvel$avg_total)
mediavel2
## [1] 0.3837375
#Bicicletas disponibles
mediavel_exc2 <- mean(resultvel_exc$avg_av/resultvel_exc$avg_total)
mediavel_exc2
## [1] 0.401025
Lo mismo para estas variables, podemos ver que la frecuencia de bicis disponibles es mayor en el dataset de “resultvel_exc” que el otro dataset, lo que nos lleva a la conclusión de que se utilizan un mayor número de bicicletas cuando los valores en “velmedia” superan el valor 4 (es decir cuando el viento sopla significativamente) que cuando no hay viento (valor en “velmedia” es 0).
resultmed <- filter(df_merge2, df_merge2$tmed > 14.0)
resultmed_exc <- filter(df_merge2, df_merge2$tmed <= 14.0)
Por último, utilizaremos la variable “tmed”, donde hemos dividido los datos en dos datasets, el dataset “resulttmed” para las filas que tengan valores mayores a 14 (la media de los valores) en la variable “tmed”, y el dataset “resultmed_exc” para las filas que tengan valores menores o iguales a 14 en lo mismo. Es decir, creamos los dos datasets a partir del valor 14 como punto de inflexión.
#Bornes libres
mediatmed <- mean(resultmed$avg_free/resultmed$avg_total)
mediatmed
## [1] 0.5955746
mediatmed_exc <- mean(resultmed_exc$avg_free/resultmed_exc$avg_total)
mediatmed_exc
## [1] 0.5856007
Observando esta vez las frecuencias, se puede denotar como hay una mayor frecuencia de bornes libres cuando los valores en “tmed” son mayores a 14, que cuando no lo son.
#Bicis disponibles
mediatmed2 <- mean(resultmed$avg_av/resultmed$avg_total)
mediatmed2
## [1] 0.3905497
mediatmed_exc2 <- mean(resultmed_exc$avg_av/resultmed_exc$avg_total)
mediatmed_exc2
## [1] 0.3999425
A su vez, y de forma complementaria, se da una mayor frecuencia de bicis disponibles cuando los valores son menores o iguales a 14 que cuando son mayores. Es decir, que se utilizan un mayor número de bicicletas cuando el valor en “tmed” es mayor a 14 que cuando no lo es.
Como resumen de las variables creadas anteriormente, podemos ver la siguiente tabla:
media_prec <- c(mediaprec, mediaprec_exc, mediaprec2, mediaprec_exc2)
media_vel <- c(mediavel, mediavel_exc, mediavel2, mediavel_exc2)
media_tmed <- c(mediatmed, mediatmed_exc, mediatmed2, mediatmed_exc2)
# Crear la tabla utilizando data.frame()
tabla <- data.frame(Media_prec = media_prec, Media_vel = media_vel, Media_tmed = media_tmed)
tabla
## Media_prec Media_vel Media_tmed
## 1 0.5851133 0.6044911 0.5955746
## 2 0.5892091 0.5847167 0.5856007
## 3 0.3986329 0.3837375 0.3905497
## 4 0.3969539 0.4010250 0.3999425
Esta vez, vamos a obtener la variación de las estaciones a nivel horario para poder observar si los análisis anteriores obtienen una mayor diferencia entre datasets para aquellas estaciones con mayor movimiento (un nivel alto de variación).
df_merge = df_merge[order(df_merge$number_,df_merge$fecha,df_merge$hora_hora),]
Ordenamos el dataset original según las variables “number_”, “fecha” y “hora_hora”.
grupo=df_merge[,c(1,8)]
x=grupo
variacion=c()
recuento=c()
for( i in 2:length(grupo$number_)){
id=i
previo=i-1
if(grupo$number_[id]==grupo$number_[previo]){
recuento=c(recuento, abs(grupo$avg_av[i]-grupo$avg_av[previo]))
} else {
variacion=c(variacion, var(recuento))
recuento=c()
}
if(i==length(grupo$number_)){
variacion=c(variacion, mean(recuento))
}
}
x=data.frame(variacion)
x$number_=c(1:276)
df_variacion=merge(df_merge,x,by="number_")
El for anterior recorre los elementos de la variable “number_” y realiza ciertos cálculos en base a las condiciones establecidas, almacenando los resultados en los vectores “variacion” y “recuento”.Con esto, mediante la función anterior obtenemos la variación de cada estación por horas (véase en la columna “variacion”.
mediavar <- mean(df_variacion$variacion)
mediavar
## [1] 3.531106
resultvar <- filter(df_variacion, df_variacion$variacion > 5)
Creamos un nuevo dataset, filtrando por aquellas filas donde el valor en la columna “variacion” sea mayor a 5, para coger así aquellas estaciones con un mayor nivel de movimiento.
Realizamos los mismos análisis para las variables anteriores pero esta vez, tomando como dataset el conseguido previamente, para aplicarlos solo a aquellas estaciones con un mayor nivel de variación. Comenzando, esta vez, con la variables “velmedia”.
resultvar$velmedia <- sub(",", ".", resultvar$velmedia)
resultvar$velmedia <- as.numeric(resultvar$velmedia)
resultvelmov <- filter(resultvar, resultvar$velmedia > 4)
#Bornes libres
mediavelmov <- mean(resultvelmov$avg_free/resultvelmov$avg_total)
mediavelmov
## [1] 0.5684721
resultvelmov_exc <- filter(resultvar, resultvar$velmedia == 0)
#Bornes libres
mediavelmov_exc <- mean(resultvelmov_exc$avg_free/resultvelmov_exc$avg_total)
mediavelmov_exc
## [1] 0.5858315
Obtenemos de esta manera, que difiriendo de los análisis anteriores, las estaciones con un mayor nivel de variación tienen una mayor frecuencia en los bornes libres con “velmedia” igual a 0, respecto a cuando los valores son mayores a 4. Es decir, que se utilizan más bicicletas cuando no hay viento que cuando sí lo hay.
#Bicis disponibles
mediavelmov2 <- mean(resultvelmov$avg_av/resultvelmov$avg_total)
mediavelmov2
## [1] 0.4201789
#Bicis disponibles
mediavelmov_exc2 <- mean(resultvelmov_exc$avg_av/resultvelmov_exc$avg_total)
mediavelmov_exc2
## [1] 0.3985609
Estas dos frecuencias complementarias corroboran lo concluido anteriormente.
Volvemos a realizar los análisis pero para la variable “prec” con las estaciones con más movimiento.
resultvar$prec <- sub(",", ".", resultvar$prec)
resultvar$prec <- as.numeric(resultvar$prec)
resultprecmov <- filter(resultvar, resultvar$prec > 1)
#Bornes libres
mediaprecmov <- mean(resultprecmov$avg_free/resultprecmov$avg_total)
mediaprecmov
## [1] 0.5504299
resultprecmov_exc <- filter(resultvar, resultvar$prec == 0.0)
#Bornes libres
mediaprecmov_exc <- mean(resultprecmov_exc$avg_free/resultprecmov_exc$avg_total)
mediaprecmov_exc
## [1] 0.5795999
Mayor proporción de bornes libres en el dataset con “prec” igual a 0, respecto a cuando los valores son mayores a 1. Esta vez, los análisis no difieren de los anteriores aún para las estaciones más utilizadas.
#Bicis disponibles
mediaprecmov2 <- mean(resultprecmov$avg_av/resultprecmov$avg_total)
mediaprecmov2
## [1] 0.4293568
#Bicis disponibles
mediaprecmov_exc2 <- mean(resultprecmov_exc$avg_av/resultprecmov_exc$avg_total)
mediaprecmov_exc2
## [1] 0.4036326
Como bien se dice anteriormente, se da una mayor frecuencia de bicicletas disponibles cuando llueve, respecto a cuando no.
Para concluir con las variables meteorológicas vamos a volver a realizar los análisis en “tmed” pero esta vez para las estaciones que tienen mayor movimiento.
resultvar$tmed <- sub(",", ".", resultvar$tmed)
resultvar$tmed <- as.numeric(resultvar$tmed)
resulttmedmov <- filter(resultvar, resultvar$tmed > 14.0)
#Bornes libres
mediatmedmov <- mean(resulttmedmov$avg_free/resulttmedmov$avg_total)
mediatmedmov
## [1] 0.5654061
resulttmedmov_exc <- filter(resultvar, resultvar$tmed <= 14.0)
#Bornes libres
mediatmedmov_exc <- mean(resulttmedmov_exc$avg_free/resulttmedmov_exc$avg_total)
mediatmedmov_exc
## [1] 0.5825677
Observamops que se da una mayor frecuencia de bornes libres en el dataset donde “tmed” es menor o igual a 14 respecto a cuando los valores son mayores a 14.
#Bicis disponibles
mediatmedmov2 <- mean(resulttmedmov$avg_av/resulttmedmov$avg_total)
mediatmedmov2
## [1] 0.4133801
#Bicis disponibles
mediatmedmov_exc2 <- mean(resulttmedmov_exc$avg_av/resulttmedmov_exc$avg_total)
mediatmedmov_exc2
## [1] 0.4018804
Se da una mayor frecuencia de bicicletas disponibles cuando “tmed” es mayor a 14 respecto a cuando no lo es. Por ello podemos suponer que, al igual que con la variable “velmedia”, en la variable “tmed” tambIén se difiere de los análisis originales cuando hablamos de aquellas estaciones que tienen un nivel de variación alto.
Como análisis complementarios, vamos a observar la correlación entre las variables empleadas en los análisis previos que han tenido una mayor relevancia. Así pues, primeros hemos realizado una matriz de correlaciones para observar las relaciones establecidas entre las variables.
resultvar2 <- subset(df_variacion, select = -c(number_, fecha, hora_hora,gid,name, address,open, dir,horatmin,horatmax,festivo,vacaciones,fin_de_semana,día_semana,coddistbar,nombre_barrio,codbarrio,coddistrit,geometry_punto,geometry_barrio,nombre_distrito,geometry_distrito,interés,metro,horaracha, ticket, racha,tmin, tmax))
resultvar2$tmed <- sub(",", ".", resultvar2$tmed)
resultvar2$tmed <- as.numeric(resultvar2$tmed)
resultvar2$prec <- sub(",", ".", resultvar2$prec)
resultvar2$prec <- as.numeric(resultvar2$prec)
resultvar2$velmedia <- sub(",", ".", resultvar2$velmedia)
resultvar2$velmedia <- as.numeric(resultvar2$velmedia)
resultvar3 <- na.omit(resultvar2)
matriz_cor <- cor(resultvar3)
matriz_cor
## avg_av avg_free avg_total tmed prec
## avg_av 1.000000000 -0.685434228 2.041180e-01 -1.028787e-02 5.928548e-03
## avg_free -0.685434228 1.000000000 5.450999e-01 7.022736e-03 -5.825222e-03
## avg_total 0.204118019 0.545099896 1.000000e+00 -1.345906e-07 2.641542e-07
## tmed -0.010287868 0.007022736 -1.345906e-07 1.000000e+00 -1.303113e-01
## prec 0.005928548 -0.005825222 2.641542e-07 -1.303113e-01 1.000000e+00
## velmedia -0.013057763 0.012128012 2.510712e-07 3.638482e-01 2.513832e-02
## variacion 0.304034033 0.296658123 7.831160e-01 1.596267e-20 8.689215e-20
## velmedia variacion
## avg_av -1.305776e-02 3.040340e-01
## avg_free 1.212801e-02 2.966581e-01
## avg_total 2.510712e-07 7.831160e-01
## tmed 3.638482e-01 1.596267e-20
## prec 2.513832e-02 8.689215e-20
## velmedia 1.000000e+00 1.817126e-20
## variacion 1.817126e-20 1.000000e+00
Para realizar esto, nos hemos centrado en la libreria “corrplot”, que nos permite aplicar la matriz de correlaciones para aquellas variables númericas empleadas. Ya con la matriz previa, podemos observar las correlaciones entre variables, aunque es cierto que se puede hacer todavía más grafico.
corrplot(matriz_cor, method = "circle")
Con esta función podemos observar como están correlacionadas las variables de forma más gráfica que con la matriz anterior. Cabe destacar de este apartado, que las variables correlacionadas más negativamente son “avg_free” y “avg_av”, lo que es razonable puesto que estas son totalmente complementarias la una de la otra.
Vamos a realizar a su vez un mapa de calor que nos muestre también las relaciones existentes entre una variable con las otras empleadas a lo largo de este Rmarkdown. Para ello, nos apoyaremos en las librerias de R “gplots” y “RColorBrewer”.
heatmap.2(matriz_cor,
col = colorRampPalette(brewer.pal(n = 10, name = "Blues"))(100),
scale = "none",
trace = "none",
dendrogram = "none")
## Warning in brewer.pal(n = 10, name = "Blues"): n too large, allowed maximum for palette Blues is 9
## Returning the palette you asked for with that many colors
Para ilustrar de forma mucho más gráfica los análisis de frecuencias previos, aplicaremos gráficos de barras horizontales sobre las variables de frecuencias de medias obtenidas. Cabe recalcar, que para que se vea de forma mucho más clara la diferencia entre los valores al ser tan pequeños, hemos restado 0.3 a todas las variables (de frecuencias) para que se adapte mejor el gráfico a la pantalla.
Para definir las variables, introduciremos que “prec” es la frecuencia de mediaprec (valores mayor a 1), “precx” es la frecuencia de mediaprec_exc (valores iguales a 0), “precmo” es la frecuencia de mediaprecmov (valores mayores a 1 en MOV) y “precmox” es la frecuencia de mediaprecmov_exc (valores iguales a 0 en MOV). Todo ello, aplicado para bornes libres.
categorias <- c("prec", "precx", "precmo", "precmox")
valores <- c(mediaprec-0.3, mediaprec_exc-0.3, mediaprecmov-0.3, mediaprecmov_exc-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bornes Libres PREC", # Título del gráfico
col = "aquamarine", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.3) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
Mismo caso, pero para bicicletas disponibles.
categorias <- c("prec", "precx", "precmo", "precmox")
valores <- c(mediaprec2-0.3, mediaprec_exc2-0.3, mediaprecmov2-0.3, mediaprecmov_exc2-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bicicletas Disponibles PREC", # Título del gráfico
col = "aquamarine", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.15) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
Para definir estas variables, diremos que “vel” es la frecuencia de mediavel (valores mayor a 4), “velx” es la frecuencia de mediavel_exc (valores iguales a 0), “velmo” es la frecuencia de mediavelmov (valores mayores a 4 en MOV) y “velmox” es la frecuencia de mediavelmov_exc (valores iguales a 0 en MOV). Todo ello, aplicado para bornes libres.
categorias <- c("vel", "velx", "velmo", "velmox")
valores <- c(mediavel-0.3, mediavel_exc-0.3, mediavelmov-0.3, mediavelmov_exc-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bornes Libres VELMEDIA", # Título del gráfico
col = "yellow", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.3) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
A continuación, tenemos lo mismo pero para bicicletas disponibles.
categorias <- c("vel", "velx", "velmo", "velmox")
valores <- c(mediavel2-0.3, mediavel_exc2-0.3, mediavelmov2-0.3, mediavelmov_exc2-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bicicletas Disponibles PREC", # Título del gráfico
col = "yellow", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.15) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
Para concluir, definiremos estas variables sabiendoq que “tme” es la frecuencia de mediatmed (valores mayores a 14), “tmex” es la frecuencia de mediatmed_exc (valores menores o iguales a 14), “tmemo” es la frecuencia de mediatmedmov (valores mayores a 14 en MOV) y “tmemox” es la frecuencia de mediatmedmov_exc (valores menores o iguales a 14 en MOV). Todo ello, aplicado para bornes libres.
categorias <- c("tme", "tmex", "tmemo", "tmemox")
valores <- c(mediatmed-0.3, mediatmed_exc-0.3, mediatmedmov-0.3, mediatmedmov_exc-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bornes Libres TMED", # Título del gráfico
col = "red", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.3) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
Y aquí, tendríamos las mismas variables pero para bicicletas disponibles.
categorias <- c("tme", "tmex", "tmemo", "tmemox")
valores <- c(mediatmed2-0.3, mediatmed_exc2-0.3, mediatmedmov2-0.3, mediatmedmov_exc2-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bicis Disponibles TMED", # Título del gráfico
col = "red", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.15) # Rango del eje y
)
text(valores, 1:length(valores), labels = valores, pos = 2, cex = 0.8, col = "black")
Hemos querido realizar para separarlos en dos gráficos diferentes a su vez, los gráficos aplicados a las variables sin centrarnos solo en aquellas estaciones con más variación. Así pues, hemos realizado dos gráficos con todas las variables meteorológicas empleadas sin centrarnos en el movimiento. Primero en aquellas relacionadas en bornes libres.
categorias <- c("tme", "tmex","pre","prex", "vel", "velx")
valores <- c(mediatmed-0.3, mediatmed_exc-0.3, mediaprec-0.3, mediaprec_exc-0.3,mediavel-0.3, mediavel_exc-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bornes Libres SIN", # Título del gráfico
col = "grey", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.3) # Rango del eje y
)
Y ahora centradas en las bicicletas disponibles.
categorias <- c("tme", "tmex","pre","prex", "vel", "velx")
valores <- c(mediatmed2-0.3, mediatmed_exc2-0.3, mediaprec2-0.3, mediaprec_exc2-0.3,mediavel2-0.3, mediavel_exc2-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bicicletas Libres SIN", # Título del gráfico
col = "grey", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.15) # Rango del eje y
)
En este último apartado, vamos a centrarnos únicamente en aquellas variables empleadas que se basaban en la variación de las estaciones, y que filtraban por las que tuvieran un mayor movimiento. Así pues, utilizaremos todas esas variables meteorológicas centradas primero en los bornes libres.
categorias <- c("tme", "tmex","pre","prex", "vel", "velx")
valores <- c(mediatmedmov-0.3, mediatmedmov_exc-0.3, mediaprecmov-0.3, mediaprecmov_exc-0.3,mediavelmov-0.3, mediavelmov_exc-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bornes Libres MOV", # Título del gráfico
col = "purple", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.3)# Rango del eje y
)
Y para finalizar, centraremos dichas variables en las bicicletas disponibles.
categorias <- c("tme", "tmex","pre","prex", "vel", "velx")
valores <- c(mediatmedmov2-0.3, mediatmedmov_exc2-0.3, mediaprecmov2-0.3, mediaprecmov_exc2-0.3,mediavelmov2-0.3, mediavelmov_exc2-0.3)
# Crear el gráfico de barras con personalización
barplot(valores,
names.arg = categorias, horiz = TRUE, # Etiquetas en el eje x
xlab = "Categorías", # Etiqueta del eje x
ylab = "Valores", # Etiqueta del eje y
main = "Bicicletas Disponibles MOV", # Título del gráfico
col = "purple", # Color de las barras
border = "black", # Color del borde de las barras
xlim = c(0, 0.15) # Rango del eje y
)