comptagevelo2017.csv como un
dataframe# Leer el archivo CSV y eliminar la segunda columna
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2) # Eliminamos la columna sin nombre (timestamp)
head(datos_bicicletas_2017)# Eliminar la segunda columna del dataframe (timestamp o cualquier columna innecesaria)
datos_bicicletas_2017 <- datos_bicicletas_2017 %>%
select(-2)
# Verificar el resultado mostrando las primeras filas del dataframe
head(datos_bicicletas_2017)## Ejercicio 3: Identificar las variables y transformar el dataframe
# Cargar el archivo CSV y eliminar la columna 2 directamente
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2)
# Transformar el dataframe al formato "largo" y guardarlo en Datos_Unico
Datos_Unico <- datos_bicicletas_2017 %>%
pivot_longer(
cols = -Date, # Excluir la columna "Date"
names_to = "Distrito", # Nueva columna para los nombres de los distritos
values_to = "Num_Ciclistas" # Nueva columna para los valores de conteo de ciclistas
)
# Verificar el resultado
head(Datos_Unico)library(lubridate)
# Convertir la columna Date a tipo Date
Datos_Unico <- Datos_Unico %>%
mutate(Date = dmy(Date))
# Verificar el cambio de tipo de la columna Date
str(Datos_Unico)## tibble [6,935 × 6] (S3: tbl_df/tbl/data.frame)
## $ Date : Date[1:6935], format: "2017-01-01" "2017-01-01" ...
## $ Distrito : chr [1:6935] "Berri1" "Boyer" "Boyer 2" "Brébeuf" ...
## $ Num_Ciclistas: num [1:6935] 38 35 NA 20 NA 60 58 38 12 10 ...
## $ Año : num [1:6935] 2017 2017 2017 2017 2017 ...
## $ Mes : num [1:6935] 1 1 1 1 1 1 1 1 1 1 ...
## $ Día : int [1:6935] 1 1 1 1 1 1 1 1 1 1 ...
# Eliminar los espacios alrededor de "/" en la columna Distrito
Datos_Unico <- Datos_Unico %>%
mutate(Distrito = str_replace_all(Distrito, " / ", "/"))
# Verificar el resultado mostrando los nombres únicos de la columna Distrito
unique(Datos_Unico$Distrito)## [1] "Berri1" "Boyer"
## [3] "Boyer 2" "Brébeuf"
## [5] "Christophe-Colomb" "CSC (Côte Sainte-Catherine)"
## [7] "Eco-Totem - Métro Laurier" "Maisonneuve_2"
## [9] "Maisonneuve_3" "Notre-Dame"
## [11] "Parc" "PierDup"
## [13] "Pont Jacques-Cartier" "Rachel/Hôtel de Ville"
## [15] "Rachel/Papineau" "René-Lévesque"
## [17] "Saint-Antoine" "Saint-Laurent/Bellechasse"
## [19] "Saint-Urbain"
# Calcular el porcentaje de días con datos faltantes para cada distrito
porcentaje_faltantes <- Datos_Unico %>%
group_by(Distrito) %>%
summarize(Porcentaje_Faltantes = mean(is.na(Num_Ciclistas)) * 100)
# Verificar el resultado
porcentaje_faltantes# Calcular el total de ciclistas por distrito a lo largo del año
total_ciclistas <- Datos_Unico %>%
group_by(Distrito) %>%
summarize(Total_Ciclistas = sum(Num_Ciclistas, na.rm = TRUE))
# Verificar el resultado
total_ciclistas# Ordenar los distritos por Total_Ciclistas en orden descendente y seleccionar los cinco primeros
top_5_distritos <- total_ciclistas %>%
arrange(desc(Total_Ciclistas)) %>%
slice_head(n = 5)
# Mostrar el resultado
top_5_distritoslibrary(ggplot2)
# Crear el gráfico de barras horizontales
ggplot(total_ciclistas, aes(x = Total_Ciclistas, y = reorder(Distrito, Total_Ciclistas))) +
geom_bar(stat = "identity") +
labs(
title = "Total de Ciclistas por Distrito en 2017",
x = "Total de Ciclistas",
y = "Distrito"
) +
theme_minimal()# Calcular el total de ciclistas por mes y distrito
ciclistas_mensual <- Datos_Unico %>%
group_by(Distrito, Mes) %>%
summarize(Total_Mensual = sum(Num_Ciclistas, na.rm = TRUE))
# Crear el gráfico de líneas para cada distrito
ggplot(ciclistas_mensual, aes(x = Mes, y = Total_Mensual, color = Distrito, group = Distrito)) +
geom_line() +
labs(
title = "Evolución Mensual de Ciclistas por Distrito en 2017",
x = "Mes",
y = "Total de Ciclistas"
) +
scale_x_continuous(breaks = 1:12, labels = month.abb) + # Etiquetas de meses abreviadas
theme_minimal() +
theme(legend.position = "right")library(ggplot2)
# Crear el gráfico de barras horizontales
ggplot(total_ciclistas, aes(x = Total_Ciclistas, y = reorder(Distrito, Total_Ciclistas))) +
geom_bar(stat = "identity") +
labs(
title = "Total de Ciclistas por Distrito en 2017",
x = "Total de Ciclistas",
y = "Distrito"
) +
theme_minimal()# Calcular la media mensual de ciclistas
media_mensual <- ciclistas_mensual %>%
group_by(Mes) %>%
summarize(Media_Ciclistas = mean(Total_Mensual, na.rm = TRUE))
# Crear gráfico de líneas con la evolución mensual de ciclistas y la línea de media mensual
ggplot() +
geom_line(data = ciclistas_mensual, aes(x = Mes, y = Total_Mensual, color = Distrito, group = Distrito)) +
geom_line(data = media_mensual, aes(x = Mes, y = Media_Ciclistas), color = "blue", size = 1.2) + # Línea de media mensual
labs(
title = "Evolución Mensual de Ciclistas por Distrito en 2017",
x = "Mes",
y = "Total de Ciclistas"
) +
scale_x_continuous(breaks = 1:12, labels = month.abb) +
theme_minimal() +
theme(legend.position = "right")# Leer el archivo CSV y eliminar la columna de timestamp
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2)
# Transformar el dataframe a formato largo
Datos_Unico <- datos_bicicletas_2017 %>%
pivot_longer(
cols = -Date,
names_to = "Distrito",
values_to = "Num_Ciclistas"
)
# Crear variables de Año, Mes, Día y Día_de_Semana en el dataframe
Datos_Unico <- Datos_Unico %>%
mutate(
Año = year(dmy(Date)),
Mes = month(dmy(Date)),
Día = day(dmy(Date)),
Día_de_Semana = wday(dmy(Date), label = TRUE, abbr = TRUE), # Abreviado para día de la semana
Date = dmy(Date),
Distrito = str_replace_all(Distrito, " / ", "/")
)
# Calcular el total de ciclistas por distrito y seleccionar los cinco distritos con más ciclistas
top_5_distritos <- Datos_Unico %>%
group_by(Distrito) %>%
summarize(Total_Ciclistas = sum(Num_Ciclistas, na.rm = TRUE)) %>%
arrange(desc(Total_Ciclistas)) %>%
slice_head(n = 5) %>%
pull(Distrito)
# Filtrar los datos para los cinco distritos con más ciclistas
Datos_Top5 <- Datos_Unico %>%
filter(Distrito %in% top_5_distritos)
# Crear gráfico de barras del número de ciclistas por día de la semana para cada distrito usando facetas
ggplot(Datos_Top5, aes(x = Día_de_Semana, y = Num_Ciclistas, fill = Día_de_Semana)) +
geom_bar(stat = "identity") +
labs(
title = "Número de Ciclistas por Día de la Semana en los Cinco Distritos con Más Ciclistas",
x = "Día de la Semana",
y = "Número de Ciclistas"
) +
facet_wrap(~ Distrito, scales = "free_y") + # Facetas por distrito con escalas adaptativas en Y
theme_minimal() +
theme(legend.position = "none") # Eliminar la leyenda redundante# Leer el archivo CSV y eliminar la columna de timestamp
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2)
# Transformar el dataframe a formato largo para que cada columna represente una única variable
Datos_Unico <- datos_bicicletas_2017 %>%
pivot_longer(
cols = -Date,
names_to = "Distrito",
values_to = "Num_Ciclistas"
)
# Crear columnas Año, Mes, y Día en el dataframe Datos_Unico
Datos_Unico <- Datos_Unico %>%
mutate(
Año = year(dmy(Date)),
Mes = month(dmy(Date)),
Día = day(dmy(Date)),
Date = dmy(Date),
Distrito = str_replace_all(Distrito, " / ", "/")
)
# Calcular la media de ciclistas por cada Distrito y Mes
medias_por_distrito_mes <- Datos_Unico %>%
group_by(Distrito, Mes) %>%
summarize(Media_Ciclistas = mean(Num_Ciclistas, na.rm = TRUE), .groups = "drop")
# Unir la media al dataframe original y rellenar los valores faltantes
Datos_Completos <- Datos_Unico %>%
left_join(medias_por_distrito_mes, by = c("Distrito", "Mes")) %>%
mutate(
Num_Ciclistas = ifelse(is.na(Num_Ciclistas), Media_Ciclistas, Num_Ciclistas)
) %>%
select(-Media_Ciclistas) # Eliminar la columna auxiliar de medias
# Verificar el resultado
head(Datos_Completos)# Cargar las librerías necesarias
library(tidyverse)
# Leer el archivo con la codificación ISO-8859-1
localizacion_datos <- read_csv("localisationcompteursvelo2015.csv", locale = locale(encoding = "ISO-8859-1"))
# Verificar la estructura del archivo
glimpse(localizacion_datos)## Rows: 21
## Columns: 8
## $ id <dbl> 1, 2, 4, 5, 6, 7, 8, 10, 12, 14, 15, 17, 19, 22, 23, 29…
## $ nom <chr> "St-Urbain_1", "Brebeuf_1", "Maisonneuve_1", "Maisonneu…
## $ nom_comptage <chr> "Saint-Urbain", "Brébeuf", "Maisonneuve_1", "Maisonneuv…
## $ Etat <chr> "Existant", "Existant", "À réinstaller", "Existant", "E…
## $ Type <chr> "compteur", "compteur", "compteur", "compteur", "compte…
## $ Annee_implante <dbl> 2014, 2009, 2008, 2008, 2007, 2013, 2010, 2011, 2010, 2…
## $ coord_X <dbl> -73.58888, -73.57398, -73.56159, -73.57508, -73.56965, …
## $ coord_Y <dbl> 45.51955, 45.52741, 45.51479, 45.50054, 45.53036, 45.50…
# Leer el archivo con la codificación ISO-8859-1
localizacion_datos <- read_csv("localisationcompteursvelo2015.csv", locale = locale(encoding = "ISO-8859-1"))
names(localizacion_datos) ## [1] "id" "nom" "nom_comptage" "Etat"
## [5] "Type" "Annee_implante" "coord_X" "coord_Y"
# Crear gráfico de puntos
ggplot(localizacion_datos, aes(x = coord_X, y = coord_Y, color = Type, shape = Etat)) +
geom_point(size = 3) +
labs(
title = "Distribución de Coordenadas de Contadores de Bicicletas",
x = "Coordenada X",
y = "Coordenada Y",
color = "Tipo",
shape = "Estado"
) +
theme_minimal()# Cargar las librerías necesarias
library(tidyverse)
# Leer el archivo comptagevelo2017.csv
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2) %>%
pivot_longer(cols = -Date, names_to = "Distrito", values_to = "Num_Ciclistas")
# Crear las columnas Año, Mes, y Día en el dataframe de bicicletas
datos_bicicletas_2017 <- datos_bicicletas_2017 %>%
mutate(
Año = year(dmy(Date)),
Mes = month(dmy(Date)),
Día = day(dmy(Date)),
Date = dmy(Date),
Distrito = str_replace_all(Distrito, " / ", "/") # Ajustar formato de Distrito
)
# Leer el archivo localisationcompteursvelo2015.csv con codificación ISO-8859-1
localizacion_datos <- read_csv("localisationcompteursvelo2015.csv", locale = locale(encoding = "ISO-8859-1"))
# Verificar los nombres de las columnas en localizacion_datos
names(localizacion_datos)## [1] "id" "nom" "nom_comptage" "Etat"
## [5] "Type" "Annee_implante" "coord_X" "coord_Y"
# Renombrar la columna correspondiente para facilitar el join (asegúrate de usar el nombre correcto)
localizacion_datos <- localizacion_datos %>%
rename(Distrito = nom_comptage)
# Realizar el join de los dos dataframes usando la columna "Distrito" en ambos
datos_combinados <- datos_bicicletas_2017 %>%
left_join(localizacion_datos, by = "Distrito")
# Verificar el resultado
glimpse(datos_combinados)## Rows: 6,935
## Columns: 13
## $ Date <date> 2017-01-01, 2017-01-01, 2017-01-01, 2017-01-01, 2017-0…
## $ Distrito <chr> "Berri1", "Boyer", "Boyer 2", "Brébeuf", "Christophe-Co…
## $ Num_Ciclistas <dbl> 38, 35, NA, 20, NA, 60, 58, 38, 12, 10, 13, 9, 0, 42, 7…
## $ Año <dbl> 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2…
## $ Mes <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Día <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ id <dbl> 3, 29, NA, 2, NA, NA, NA, 5, 17, 19, 22, 12, 10, 23, 6,…
## $ nom <chr> "Berri_1", "Boyer_1", NA, "Brebeuf_1", NA, NA, NA, "Mai…
## $ Etat <chr> "Existant", "Existant", NA, "Existant", NA, NA, NA, "Ex…
## $ Type <chr> "compteur", "compteur", NA, "compteur", NA, NA, NA, "co…
## $ Annee_implante <dbl> 2008, 2013, NA, 2009, NA, NA, NA, 2008, 2013, 2013, 201…
## $ coord_X <dbl> -73.56284, -73.60523, NA, -73.57398, NA, NA, NA, -73.57…
## $ coord_Y <dbl> 45.51613, 45.53840, NA, 45.52741, NA, NA, NA, 45.50054,…
# Leer el archivo comptagevelo2017.csv y transformar el dataframe
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2) %>%
pivot_longer(cols = -Date, names_to = "Distrito", values_to = "Num_Ciclistas") %>%
mutate(
Año = year(dmy(Date)),
Mes = month(dmy(Date)),
Día = day(dmy(Date)),
Date = dmy(Date),
Distrito = str_replace_all(Distrito, " / ", "/") # Ajustar formato de Distrito
)
# Leer el archivo localisationcompteursvelo2015.csv con codificación ISO-8859-1
localizacion_datos <- read_csv("localisationcompteursvelo2015.csv", locale = locale(encoding = "ISO-8859-1"))
# Renombrar la columna correspondiente para hacer el join
localizacion_datos <- localizacion_datos %>%
rename(Distrito = nom_comptage)
# Identificar los distritos en datos_bicicletas_2017 que no están en localizacion_datos
distritos_no_encontrados <- datos_bicicletas_2017 %>%
anti_join(localizacion_datos, by = "Distrito") %>%
distinct(Distrito) # Obtener distritos únicos sin correspondencia
# Verificar el resultado
head(distritos_no_encontrados)# Leer y transformar los datos del archivo comptagevelo2017.csv
datos_bicicletas_2017 <- read_csv("comptagevelo2017.csv", show_col_types = FALSE) %>%
select(-2) %>%
pivot_longer(cols = -Date, names_to = "Distrito", values_to = "Num_Ciclistas") %>%
mutate(
Año = year(dmy(Date)),
Mes = month(dmy(Date)),
Día = day(dmy(Date)),
Date = dmy(Date),
Distrito = str_replace_all(Distrito, " / ", "/") # Ajustar formato de Distrito
)
# Leer el archivo localisationcompteursvelo2015.csv con codificación ISO-8859-1
localizacion_datos <- read_csv("localisationcompteursvelo2015.csv", locale = locale(encoding = "ISO-8859-1"))
# Renombrar la columna "nom_comptage" para hacer el join
localizacion_datos <- localizacion_datos %>%
rename(Distrito = nom_comptage)
# Realizar el join de los dos dataframes usando la columna "Distrito" en ambos
datos_combinados <- datos_bicicletas_2017 %>%
left_join(localizacion_datos, by = "Distrito")
# Calcular el total de ciclistas por distrito
totales_distrito <- datos_combinados %>%
group_by(Distrito, coord_X, coord_Y) %>%
summarize(Total_Ciclistas = sum(Num_Ciclistas, na.rm = TRUE), .groups = "drop")
# Crear el gráfico de puntos
ggplot(totales_distrito, aes(x = coord_X, y = coord_Y, size = Total_Ciclistas)) +
geom_point(alpha = 0.7, color = "blue") +
labs(
title = "Total de Ciclistas por Distrito a lo Largo del Año",
x = "Coordenada X",
y = "Coordenada Y",
size = "Total Ciclistas"
) +
theme_minimal()