El documento se encuentra publicado aqui https://rpubs.com/psantizo/1189505

dataset[1:10,]
## # A tibble: 10 × 17
##    instant dteday     season    yr  mnth    hr holiday weekday workingday
##      <dbl> <date>      <dbl> <dbl> <dbl> <dbl>   <dbl>   <dbl>      <dbl>
##  1       1 2011-01-01      1     0     1     0       0       6          0
##  2       2 2011-01-01      1     0     1     1       0       6          0
##  3       3 2011-01-01      1     0     1     2       0       6          0
##  4       4 2011-01-01      1     0     1     3       0       6          0
##  5       5 2011-01-01      1     0     1     4       0       6          0
##  6       6 2011-01-01      1     0     1     5       0       6          0
##  7       7 2011-01-01      1     0     1     6       0       6          0
##  8       8 2011-01-01      1     0     1     7       0       6          0
##  9       9 2011-01-01      1     0     1     8       0       6          0
## 10      10 2011-01-01      1     0     1     9       0       6          0
## # ℹ 8 more variables: weathersit <dbl>, temp <dbl>, atemp <dbl>, hum <dbl>,
## #   windspeed <dbl>, casual <dbl>, registered <dbl>, cnt <dbl>

Preguntas

1. Cree un conjunto de columnas nuevas: día, mes, año, hora y minutos a partir de la comlumna datetime, para esto investigue como puede “desarmar” la variable datetime utilizando lubridate y mutate.

dataset <- dataset %>% mutate(dteday =as.Date(dteday,format="%Y-%m-%d"))%>%
                       mutate(day=day(dteday),month=month(dteday),year=year(dteday))

head(dataset%>%select(day,month,year))
## # A tibble: 6 × 3
##     day month  year
##   <int> <dbl> <dbl>
## 1     1     1  2011
## 2     1     1  2011
## 3     1     1  2011
## 4     1     1  2011
## 5     1     1  2011
## 6     1     1  2011

La columna dteday únicamente proporciona el día, el mes y el año, existe otra columna que indica la hora hr, pero esta no esta indicada en dteday ni tampoco los minutos.

2. ¿Qué mes es el que tiene la mayor demanda? Muestre una tabla y una gráfica

dataset_month <- dataset%>%group_by(mnth) %>% 
                           summarise(total_cnt=sum(cnt))%>%
                           arrange(-total_cnt)
dataset_month
## # A tibble: 12 × 2
##     mnth total_cnt
##    <dbl>     <dbl>
##  1     8    351194
##  2     6    346342
##  3     9    345991
##  4     7    344948
##  5     5    331686
##  6    10    322352
##  7     4    269094
##  8    11    254831
##  9     3    228920
## 10    12    211036
## 11     2    151352
## 12     1    134933
ggplot(dataset_month, aes(x = reorder(mnth, -total_cnt), y = total_cnt)) +
        geom_bar(stat = "identity", fill = "skyblue") + 
        geom_text(aes(label = total_cnt), vjust = -0.5) + 
        labs(title = "Total por Mes", x = "Mes", y = "Total") +
        theme_minimal() +  
        theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

El mes que tiene la mayor demanda es agosto, seguido por junio.

##. 3. ¿Qué rango de hora es la de mayor demanda? Muestre una tabla y una gráfica

dataset_rhr <- dataset %>%
                    mutate(hr_group = cut(hr, breaks = seq(0, 24, by = 4), 
                        labels = paste(seq(1, 21, by = 4), "-", seq(4, 24, by = 4)), 
                        include.lowest = TRUE))%>%
              group_by(hr_group) %>% 
              summarise(total_cnt=sum(cnt))%>%
              arrange(-total_cnt)
              

dataset_rhr
## # A tibble: 6 × 2
##   hr_group total_cnt
##   <fct>        <dbl>
## 1 17 - 20    1037971
## 2 13 - 16     771468
## 3 9 - 12      621429
## 4 5 - 8       484565
## 5 21 - 24     284998
## 6 1 - 4        92248
ggplot(dataset_rhr, aes(x = reorder(hr_group, -total_cnt), y = total_cnt)) +
        geom_bar(stat = "identity", fill = "skyblue") + 
        geom_text(aes(label = total_cnt), vjust = -0.5) + 
        labs(title = "Total por hora", x = "Rango de hora", y = "Total") +
        theme_minimal() +  
        theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

Se agrupo las horas en rango, y se observa que de las 17-20 hrs, se encuentra la mayor demanda.

4. ¿Qué temporada es la mas alta? Muestre una tabla.

dataset_sea <- dataset%>%group_by(season)%>%
                summarise(total_cnt=sum(cnt))%>%
                arrange(-total_cnt)

dataset_sea
## # A tibble: 4 × 2
##   season total_cnt
##    <dbl>     <dbl>
## 1      3   1061129
## 2      2    918589
## 3      4    841613
## 4      1    471348

La temporada más alta es la 3 que corresponde a otoño.

5. ¿A que temperatura disminuye la demanda? Muestre una gráfica para analizar y dar su respuesta.

# agrupación por fecha
dataset_tmp <- dataset%>%group_by(dteday)%>%
               summarise(temp=mean(temp), cnt=sum(cnt))

# Modelo para saber la ecuación de lineal
modelo <- lm(cnt ~ temp, data = dataset_tmp)
ecuacion <- paste("y = ", round(coef(modelo)[2], 2), "*x + ", round(coef(modelo)[1], 2), sep = "")

# gráfico de dispersión 
ggplot(dataset_tmp, aes(x = temp, y = cnt)) +
          geom_point(color = "blue") +  
          geom_smooth(method = "lm", se = FALSE, color = "red") + 
          annotate("text", x = min(dataset_tmp$temp), y = max(dataset_tmp$cnt), label = ecuacion, hjust = 0, vjust = 1) +  
          labs(title = "Relación entre Temperatura y demanda",
               x = "Temperatura",
               y = "Cuenta") + 
          theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'

Se observa que hay una relación positiva entre la temperatura y la demanda de bicicletas, mientras menor es la temperatura, menor es la demanda, en este caso al disminuir la temperatura una unidad la demanda disminuiye en 6,6640.7 por día.

Se observa que la menor demanda es en un rango de temperatura de 0 a 0.25 grados celsius.

6. ¿A que humedad disminuye la demanda? Muestre una gráfica paraanalizar y dar su respuesta

# agrupación por fecha
dataset_hum <- dataset%>%group_by(dteday)%>%
               summarise(hum=mean(hum), cnt=sum(cnt))

# Modelo para saber la ecuación de lineal
modelo <- lm(cnt ~ hum, data = dataset_hum)
ecuacion <- paste("y = ", round(coef(modelo)[2], 2), "*x + ", round(coef(modelo)[1], 2), sep = "")

# gráfico de dispersión 
ggplot(dataset_hum, aes(x = hum, y = cnt)) +
          geom_point(color = "blue") +  
          geom_smooth(method = "lm", se = FALSE, color = "red") + 
          annotate("text", x = min(dataset_hum$hum), y = max(dataset_hum$cnt), label = ecuacion, hjust = 0, vjust = 1) +  
          labs(title = "Relación entre Humedad y demanda",
               x = "Humedad",
               y = "Cuenta") + 
          theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'

Se observa una relación negativa entre la humedad y la demanda, se observa que en promedio al aumentar una unidad la humedad, la demanda disminuye 1369.1. La humedad con menor demanda esta entre 0.75 y 1.0.

7. ¿Que condiciones climáticas serian ideales para nuestra demanda? (considere una función de densidad bivariable para la temperatura y la humedad)

atemp “feels like”

# agrupación por fecha
dataset_atemp <- dataset%>%group_by(dteday)%>%
                 summarise(atemp=mean(atemp), cnt=sum(cnt))

# gráfico de dispersión 
ggplot(dataset_atemp, aes(x = atemp, y = cnt)) +
          geom_point(color = "blue") +  
          geom_smooth(method = "lm", se = FALSE, color = "red") +   
          labs(title = "Relación entre sensación de temperatura y demanda",
               x = "Feels like",
               y = "Cuenta") + 
          theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'

Mientras mayor sensación de temperatura existe mayor demanda.

windspeed

# agrupación por fecha
dataset_windspeed <- dataset%>%group_by(dteday)%>%
                 summarise(windspeed=mean(windspeed), cnt=sum(cnt))

# gráfico de dispersión 
ggplot(dataset_windspeed, aes(x = windspeed, y = cnt)) +
          geom_point(color = "blue") +  
          geom_smooth(method = "lm", se = FALSE, color = "red") +  
          labs(title = "Relación entre velocidad del aire y demanda",
               x = "Feels like",
               y = "Cuenta") + 
          theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'

Se observa que mientras menor velocidad del aire la demanda es mayor.

ggplot(dataset, aes(x = temp, y = hum, z = cnt)) +
  geom_point(aes(color = cnt), size = 3) +
  scale_color_viridis_c() +
  labs(title = "Temperatura, Humedad y Demanda", 
       x = "Temperatura", y = "Humedad", z = "Demanda") +
  theme_minimal() +
  theme(legend.position = "right") 

En este grafico que considera la humedad relativa y la temperatura, se observa que con una humedad entre 0 a 0.5 y una temperatura entre 0.5 a 1. se enceuntra la mayor demanda.

8. Mueste una gráfica de la densidad de rentas.

ggplot(dataset, aes(x = cnt)) +
          geom_density(fill = "skyblue", alpha = 0.5) +
          labs(title = "Densidad de Rentas (cnt)",
               x = "Rentas (cnt)",
               y = "Densidad") +  
          theme_minimal() 

9.¿En promedio de personas que rentan bicicletas y están registradas?

# Proporción de personas que rentan bicicletas y están registradas
dataset%>%summarise(pro_reg_cnt=sum(registered)/sum(cnt))
## # A tibble: 1 × 1
##   pro_reg_cnt
##         <dbl>
## 1       0.812

La proporción de personas que rentan bicicletas y estan registradas es de 81.1%.

dataset%>%group_by(dteday)%>%summarise(registered=sum(registered))%>%
  ungroup() %>% summarise(reg_mean=mean(registered))
## # A tibble: 1 × 1
##   reg_mean
##      <dbl>
## 1    3656.

Al agrupar las rentas por día, se observa que le media de la rentas es de 3656.2, d de las personas que rentan bicicletas y estan registradas.

10. Determine la mediana de personas que rentan bicicletas y no están registradas.

# Proporción de personas que rentan bicicletas y están registradas
dataset%>%summarise(pro_cas_cnt=sum(casual)/sum(cnt))
## # A tibble: 1 × 1
##   pro_cas_cnt
##         <dbl>
## 1       0.188

La proporción de personas que rentan bicicletas y no estan registradas es de 18.83%.

dataset%>%group_by(dteday)%>%summarise(casual=sum(casual))%>%
  ungroup() %>% summarise(reg_median=median(casual))
## # A tibble: 1 × 1
##   reg_median
##        <dbl>
## 1        713

Al agrupar las rentas por día, se oberva que la mediana de las persona que rentan biciletas y no estan registradas es de 713.

11. Deterimne la renta total, renta promedio por cada tipo de estación.

La renta total y la renta total se observa enla tabla siguiente:

dataset%>% group_by(season)%>%
           summarise(renta_total=sum(cnt), renta_promedio=mean(cnt))
## # A tibble: 4 × 3
##   season renta_total renta_promedio
##    <dbl>       <dbl>          <dbl>
## 1      1      471348           111.
## 2      2      918589           208.
## 3      3     1061129           236.
## 4      4      841613           199.

12. Determine y muestre una gráfica de barras la cantidad de rentas por tipo de temporada.

ggplot(dataset_sea, aes(x = reorder(season, -total_cnt), y = total_cnt)) +
        geom_bar(stat = "identity", fill = "skyblue") + 
        geom_text(aes(label = total_cnt), vjust = -0.5) + 
        labs(title = "Total por temporada", x = "Temporada", y = "Total") +
        theme_minimal() +  
        theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

13. Muestre una gráfica de la densidad por hora.

dataset_hr_cnt <- dataset%>%group_by(hr)%>%summarise(cnt_hr=sum(cnt))%>%uncount(cnt_hr)

ggplot(dataset_hr_cnt, aes(x = hr)) +
      geom_histogram(aes(y = ..density..), fill = "skyblue", alpha = 0.5, bins = 24, color = "black") + 
      geom_density(color = "red", size = 1, adjust = 3) +  
      labs(title = "Gráfica de densidad de Rentas por Hora ",
           x = "Rentas por hora",
           y = "Densidad") +  
      theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

remove(dataset_hr_cnt)

14. Muestre una gráfica de barras por día del mes como eje x y la cantidad total de alquileres como el eje Y.

ggplot(dataset%>% group_by(day)%>%summarise(total_cnt=sum(cnt)), aes(x = day, y = total_cnt)) +
        geom_bar(stat = "identity", fill = "skyblue")  + 
        labs(title = "Total por día del mes", x = "día del mes", y = "Total") +
        theme_minimal() +  
        theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

15. Muestre una serie temporal (gráfica) con el tiempo (mes-dia-año) como eje de tiempo y la cantidad de alquieleres como eje Y.

dataset_date <- dataset%>%group_by(dteday)%>%
                summarise(cnt=sum(cnt))

ggplot(dataset_date, aes(x = dteday, y = cnt)) +
      geom_line(color = "blue") +  # Línea del gráfico
      labs(title = "Series de Tiempo de Rentas Diarias",
           x = "Fecha",
           y = "Rentas (cnt)") +  
      theme_minimal() 

16. Muestre una gráfica de puntos que relaciones la temperatura como eje X y la humedad como eje Y.

# agrupación por fecha
dataset_hum_temp <- dataset%>%group_by(dteday)%>%
               summarise(hum=mean(hum), temp=sum(cnt))

# Modelo para saber la ecuación de lineal
modelo <- lm(hum ~ temp, data = dataset_hum_temp)
ecuacion <- paste("y = ", round(coef(modelo)[2], 2), "*x + ", round(coef(modelo)[1], 2), sep = "")
# gráfico de dispersión 
ggplot(dataset_hum_temp, aes(x = temp, y = hum)) +
          geom_point(color = "blue") +  
          geom_smooth(method = "lm", se = FALSE, color = "red") + 
          labs(title = "Relación entre Humedad y demanda",
               x = "Humedad",
               y = "Cuenta") + 
          theme_minimal() 
## `geom_smooth()` using formula = 'y ~ x'