Nota: Acesse meu portfólio completo clicando neste link .

Introdução

O estudo de caso “Como um sistema de compartilhamento de bicicletas alcança o sucesso rapidamente?” Foi o projeto final escolhido para a obtenção da certificação no curso Google Data Analytics, oferecido pela Coursera.

A análise consiste na exploração de dados referentes ao período de janeiro a dezembro de 2025, com o objetivo de compreender o perfil dos usuários do serviço. A partir dessa análise, busca-se identificar padrões de comportamento, diferenças entre usuários casuais e assinantes anuais e oportunidades estratégicas.

Com base nos insights obtidos, são propostas campanhas de marketing direcionadas para converter usuários casuais em assinantes anuais, auxiliando a empresa na tomada de decisões orientadas por dados.

As etapas exigidas para a conclusão da análise são:

  1. Uma descrição clara da tarefa de negócio.
  2. Descrição de todas as fontes de dados utilizadas.
  3. Documentação de qualquer limpeza ou manipulação de dados.
  4. Resumo da sua análise.
  5. Visualizações de apoio e principais conclusões.
  6. Suas três principais recomendações com base na sua análise.

Contextualização

Cyclistic é uma empresa que possui um serviço de compartilhamento de bicicletas. O programa conta com uma frota de 5.824 bicicletas georreferenciadas e conectadas a uma rede de 692 estações em Chicago.

Objetivo

O objetivo principal da análise é desenvolver estratégias de marketing voltadas para a conversão de ciclistas ocasionais em membros anuais.

Perguntas do marketing

  1. De que maneiras os membros anuais e os ciclistas ocasionais usam as bicicletas Cyclistic?
  2. Por que ciclistas ocasionais comprariam assinaturas anuais da Cyclistic?
  3. Como a Cyclistic pode usar as mídias digitais para influenciar ciclistas ocasionais a se tornarem membros?

Descrição do banco de dados

Os dados utilizados neste estudo foram disponibilizados pelo sistema de compartilhamento de bicicletas Divvy, (sob esta licença), e obtidos a partir de um repositório público neste link, operado na cidade de Chicago.

Embora os dados sejam reais, a empresa chamada Cyclistic é fictícia. Os dados foram utilizados para fins didáticos, com o objetivo de obter o certificado do curso Google Data Analytics Professional Certificate, oferecido pela Coursera.

Seguindo as etapas: Ask, Prepare, Process, Analyze, Share e Act. Com o objetivo de colocar em prática as competências técnicas e analíticas aprendidas durante o curso.

Os dados são referentes ao período de janeiro a dezembro de 2025, disponibilizados em arquivos mensais no formato CSV. As variáveis do banco de dados são:

  • id da viagem (ride_id);
  • Tipo de bicicleta (rideable_type);
  • Datas e horários de início e término das viagens (started_at, ended_at);
  • Estações de origem e id da estações de origem (start_station_name, start_station_id);
  • Estações de destino e id da estações de destino (end_station_name, end_station_id);
  • Latitude e longitude do fim da viagem (end_lat end_lng);
  • Latitude e longitude do início da viagem (start_lat start_lng);
  • Categoria de usuário (casual ou membro anual).

A partir dessa análise, torna-se possível compreender como os diferentes tipos de clientes utilizam o serviço. Esses insights, auxiliam a empresa na tomada de decisões estratégicas orientadas por dados.

Nota: A versão final da base de dados, após as etapas de limpeza, tratamento e tradução, está disponível no link .


Materiais e métodos

Nesta seção, será apresentada uma descrição detalhada de todo o processo de análise realizado no software R, contemplando desde a obtenção e importação dos dados até as etapas de análise e visualizações.

Caso prefira, é possível avançar diretamente para a seção de Resultados e Discussões.
A ferramenta escolhida para realizar a análise foi o software R, devido à sua capacidade de processamento de grandes volumes de dados e pela robustez de suas bibliotecas, que permitem realizar desde a preparação dos dados até análise, visualização e geração de relatórios em um único ambiente.

Inicialmente, foi criado um projeto no R, garantindo que todos os arquivos e scripts permanecessem organizados em um único ambiente de trabalho. Todos os arquivos utilizados nesta análise estão disponíveis na pasta do Drive .

Além disso, um relatório detalhado contendo esta análise foi elaborado e está disponível aqui .

Carregando os dados e bibliotecas

Com o link do site de download dos dados, é possível realizar todo o processo de extração diretamente no ambiente do R. Para isso, foi criada a função baixar(), que recebe um vetor de datas, baixa os dados a partir da URL correspondente a cada mês e os armazena em uma pasta denominada Dados.

library(curl)
library(tidyverse)

baixar <- function(data) {
  ano_mes <- format(data, "%Y%m")
  
  url <- paste0(
    "https://divvy-tripdata.s3.amazonaws.com/",
    ano_mes,
    "-divvy-tripdata.zip"
  )
  
  arquivo <- paste0("Dados/", ano_mes, "-divvy-tripdata.zip")
  
  curl::curl_download(url, arquivo)
  
  print(paste("baixado:", ano_mes))
}

datas <- seq(
  as.Date("2025-01-01"),
  as.Date("2025-12-01"),
  by = "month"
)

map(datas, baixar, .progress = TRUE)

Em seguida, os dados foram importados e unificados em uma única base denominada dados-capstone-bicicletas-2025-01-12.csv. Além disso, foram criadas duas novas variáveis: Ano e Mês.

library(tidyverse)

arquivos <- list.files("Dados/", full.names = TRUE)

df_final <- arquivos |> 
  map_dfr(~ {
    ano_mes <- stringr::str_extract(.x, "\\d{6}")
    mes <- substr(ano_mes, 5, 6)
    
    read_csv(.x ) %>%
      mutate(mes = mes, ano = 2025)
  }, .progress = TRUE)
df_final

write.csv(df_final, "Dados/dados-capstone-bicicletas-2025-01-12.csv", row.names = FALSE)

Manipulação de dados

As bibliotecas utilizadas na análise foram: tidyverse, empregada para preparação, manipulação, análise e visualização de dados; lubridate, utilizada para manipulação de variáveis relacionadas a datas e horários; psych, que possui funções relacionadas a estatísticas descritivas; scales, utilizada para ajustar a formatação de escalas e rótulos numéricos nos gráficos; geosphere, responsável pelo cálculo de distâncias entre dois pontos geográficos a partir da latitude e longitude; e por fim, xtable, que converte tabelas geradas no R em formato LaTeX, facilitando sua inserção no relatório.

Os dados tabulados foram carregados através da função read_csv().

library(tidyverse)
library(lubridate)
library(psych)
library(scales)
library(xtable)
library(geosphere)

df <- read_csv("Dados/dados-capstone-bicicletas-2025-01-12.csv")

Criação de variáveis

Foram criadas duas colunas, a diferença, em minutos, entre o início e fim da viagem (journey_duration_min) e o dia da semana em que a viagem foi iniciada (day_start).

df <- df |>
  mutate(
    journey_duration_min = as.numeric(
      difftime(ended_at, started_at, units = "mins")
    ),
    day_start = wday(started_at, label = TRUE, abbr = FALSE),
    distance_journey_km = distHaversine(
      cbind(start_lng, start_lat),
      cbind(end_lng, end_lat)
    ) / 1000
  )

Análise de dados faltantes

Foi verificados se existiam id da viagem duplicados, o que não foi observado.

sum(duplicated(df$ride_id))

Ao analisar a quantidade de dados faltantes por coluna, foi observado 1184673 valores ausentes na variável estação de origem e 1243305 na estação de destino.

df |> is.na() |> colSums()

As variáveis categóricas estavam carregadas como strings, sendo então transformadas em fatores:

df <- df |> mutate(across(c(rideable_type, member_casual, day_start), as.factor))

As bicicletas elétricas podem ser deixadas em qualquer local, sem a necessidade de uma estação fixa. Nesse contexto, quando as estações de origem ou destino apresentaram valores ausentes (NA) e o tipo de bicicleta é elétrico, esses campos foram substituídos por Electric - On-Street, indicando que o trajeto começou ou terminou fora de uma estação formal.

df <- df  |> 
  mutate(
    start_station_name = if_else(is.na(start_station_name) &
    rideable_type == "electric_bike", 
    "Electric - On-Street", start_station_name),
    end_station_name = if_else(is.na(end_station_name) &
    rideable_type == "electric_bike",
    "Electric - On-Street", end_station_name)
  ) 

Filtros

As viagens com duração inferior a 1 minuto e superior a 24 horas (1440 minutos), são consideradas inconsistências nos dado. Por esse motivo, esses registros são removidos da base de dados. Além disso, são mantidas apenas as observações em que as estações de origem e destino estão devidamente preenchidas.

Assim, aplica-se o seguinte filtro aos dados:

df <- df |>
  filter(journey_duration_min > 1 & journey_duration_min < 1440) |> 
  filter(!is.na(start_station_name) & !is.na(end_station_name)) 

O branco de dados final possui 5399843 linhas e 18 colunas.

Como esta análise foi realizada em português, optou-se por traduzir as variáveis do banco de dados utilizando a função mutate(). Além disso, por meio do argumento levels, foi possível ordenar a variável mes de acordo com a sequência cronológica dos meses.

df <- df |>
  mutate(
    rideable_type = case_when(
      rideable_type == "classic_bike"  ~ "Clássica",
      rideable_type == "electric_bike" ~ "Elétrica",
      TRUE ~ rideable_type
    ),
    
    member_casual = case_when(
      member_casual == "casual" ~ "Casual",
      member_casual == "member" ~ "Membro Anual",
      TRUE ~ member_casual
    ),
    
    mes = case_when(
      mes == "01" ~ "Janeiro",
      mes == "02" ~ "Fevereiro",
      mes == "03" ~ "Março",
      mes == "04" ~ "Abril",
      mes == "05" ~ "Maio",
      mes == "06" ~ "Junho",
      mes == "07" ~ "Julho",
      mes == "08" ~ "Agosto",
      mes == "09" ~ "Setembro",
      mes == "10" ~ "Outubro",
      mes == "11" ~ "Novembro",
      mes == "12" ~ "Dezembro",
      TRUE ~ mes
    ),
    mes = factor(
      mes,
      levels = c(
        "Janeiro",
        "Fevereiro",
        "Março",
        "Abril",
        "Maio",
        "Junho",
        "Julho",
        "Agosto",
        "Setembro",
        "Outubro",
        "Novembro",
        "Dezembro"
      )
    )
  )

A versão final da base de dados, após as etapas de limpeza, tratamento e tradução, está disponível em: Cyclistic Bike Share - Jan to Dec 2025 .

Os nomes originais das variáveis foram mantidos, sendo alterados apenas no momento da visualização.

Visualização de dados

A primeira visualização criada foi uma tabela com a frequência observada e a frequência relativa da distribuição dos tipos de assinatura dos clientes. Para isso, os dados foram agrupados com base na variável de interesse, realizando-se a contagem das observações e criando-se uma nova coluna contendo a proporção de cada categoria.

Com base nessa tabela, foi construído um gráfico de barras utilizando a frequência relativa. Em seguida, a proporção foi adicionada como rótulo em cada categoria. O eixo y foi ajustado para variar de 0 a 100, evitando interpretações equivocadas dos resultados. Além disso, foi aplicado um tema à visualização, as legendas foram ampliadas para facilitar a leitura e foram adicionados títulos ao gráfico e aos eixos x e y. Por fim, os resultados foram salvos em uma pasta utilizando a função ggsave().

t1 <- df |>
  select(member_casual) |>
  group_by(member_casual) |>
  summarise(N = n(), .groups = "drop") |>
  mutate(perc = round(N / sum(N) * 100, 2)) ; t1

xtable(t1)

g1 <- ggplot(t1, aes(x = member_casual, y = perc)) +
  geom_col(fill = paleta_pessoal(tipo = "categorica", 1)) +
  geom_text(
    aes(label = paste0(perc, "%")),
    position = position_dodge(width = 0.9),
    vjust = -0.3,
    size = 6
  ) +
  ylim(c(0, 100)) + theme_bw() +
  theme(
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 14),
    axis.title = element_text(size = 18),
    plot.title = element_text(size = 22, hjust = 0.5)
  ) +
  labs(title = "Proporção dos tipos de assinaturas", x = "Tipos de assinaturas", 
       y = "Percentual (%)") ; g1

ggsave("Resultados/plot1.png", g1, width = 8, height = 6 ,dpi = 600)

Nesta etapa foi criada uma nova visualização comparando o tipo de assinatura dos clientes com o tipo de bicicleta utilizada. Para isso, os dados foram agrupados considerando simultaneamente as duas variáveis, permitindo calcular a frequência observada e a frequência relativa dentro de cada tipo de assinatura.

No gráfico, as barras foram diferenciadas por meio do argumento fill = rideable_type, que altera as cores de acordo com o tipo de bicicleta. Além disso, o parâmetro position = "dodge" em geom_col() foi utilizado para posicionar as barras lado a lado, possibilitando uma comparação direta entre os tipos de bicicleta dentro de cada categoria de assinatura.

t2 <- df |>
  select(member_casual, rideable_type) |>
  group_by(member_casual, rideable_type) |>
  summarise(N = n(), .groups = "drop_last") |>
  mutate(perc = round(N / sum(N) * 100, 2)) ; t2

xtable(t2)

g2 <- ggplot(t2, aes(x = member_casual, y = perc, fill = rideable_type)) +
  geom_col(position = "dodge") +
  geom_text(
    aes(label = paste0(perc, "%")),
    position = position_dodge(width = 0.9),
    vjust = -0.3,
    size = 6
  ) +
  ylim(c(0, 100)) +
  scale_fill_manual(values = paleta_pessoal("comparacao"), name = "Tipos de Bicicleta") + theme_bw() +
  theme(
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 14),
    axis.title = element_text(size = 18),
    legend.title = element_text(size = 16),
    legend.text = element_text(size = 14),
    plot.title = element_text(size = 22, hjust = 0.5)
  ) +
  labs(title = "Proporção dos tipos de bicicletas por tipos de assinaturas", 
       x = "Tipos de assinaturas", y = "Percentual (%)") ; g2

ggsave("Resultados/plot2.png", g2, width = 12, height = 8 ,dpi = 600)

Em seguida foi analisada a variável contínua duração da jornada em minutos para cada tipo de assinatura. Inicialmente, foi construída uma tabela com algumas medidas descritivas da distribuição, como média, mediana, desvio padrão, valores mínimo e máximo e quartis. Embora a função summarise() permita obter diversas medidas descritivas, foram selecionadas apenas aquelas consideradas mais relevantes para a análise.

Para a visualização da distribuição dos dados, foram construídos histogramas da duração das viagens. Utilizou-se a função facet_wrap(~ member_casual), que separa as visualizações de acordo com o tipo de assinatura, permitindo comparar os padrões de distribuição entre as categorias. Além disso, a escala do eixo y **foi ajustada por meio da função scale_y_continuous(), com o objetivo de melhorar a legibilidade dos valores apresentados no gráfico.

t5 <- df |>
  group_by(member_casual) |>
  summarise(
    Média = mean(journey_duration_min, na.rm = TRUE),
    Mediana = median(journey_duration_min, na.rm = TRUE),
    DP = sd(journey_duration_min, na.rm = TRUE),
    Mín = min(journey_duration_min, na.rm = TRUE),
    Máx = max(journey_duration_min, na.rm = TRUE),
    Q1 = quantile(journey_duration_min, 0.25, na.rm = TRUE),
    Q3 = quantile(journey_duration_min, 0.75, na.rm = TRUE),
    Amplitude = Máx - Mín,
    .groups = "drop"
  ) ; t5

xtable(t5)

g5 <- ggplot(df, aes(x = journey_duration_min, fill = member_casual)) +
  geom_histogram(bins = 10, color = "black") +
  scale_fill_manual(values = paleta_pessoal("comparacao"), name = "Tipos de assinaturas") +
  scale_y_continuous(
    limits = c(0, 4000000),
    breaks = c(0, 1000000, 2000000, 3000000, 4000000),
    labels = label_number(scale_cut = cut_short_scale())
  ) +
  facet_wrap( ~ member_casual) +
  theme_bw() +
  theme(
    strip.background = element_rect(fill = "white", color = "black"),
    strip.text = element_text(color = "black", size = 16),
    axis.text.x = element_text(size = 14),
    axis.text.y = element_text(size = 14),
    axis.title = element_text(size = 18),
    legend.title = element_text(size = 16),
    legend.text = element_text(size = 14),
    plot.title = element_text(size = 22, hjust = 0.5)
  ) +
  labs(title = "Histograma da duração das viagens por tipos de assinaturas", 
       x = "Duração da viagem (minutos)", y = "Quantidade de viagens") ; g5

ggsave("Resultados/plot5.png", g5, width = 14, height = 6 ,dpi = 600)

Para analisar a variável duração média da jornada em minutos para cada tipo de assinatura, também foram construídas tabelas com as medidas descritivas, agrupando os dados por tipo de bicicleta, dias da semana e mês.

Para a visualização da duração média da jornada (em minutos) para cada tipo de assinatura, considerando os dados agrupados por tipo de bicicleta, foi utilizado um gráfico de barras que permite uma comparação clara entre as categorias. No gráfico, os valores médios foram adicionados diretamente sobre as barras com a função geom_text() e as barras de erro adicionando a camada geom_errorbar() . O uso do parâmetro position = "dodge" em geom_col() possibilitou o posicionamento das barras lado a lado, permitindo uma comparação mais direta entre os diferentes tipos de bicicleta dentro de cada categoria de assinatura.

t6 <- df |>
  group_by(rideable_type, member_casual) |>
  summarise(
    Média = mean(journey_duration_min, na.rm = TRUE),
    Mediana = median(journey_duration_min, na.rm = TRUE),
    DP = sd(journey_duration_min, na.rm = TRUE),
    Mín = min(journey_duration_min, na.rm = TRUE),
    Máx = max(journey_duration_min, na.rm = TRUE),
    Q1 = quantile(journey_duration_min, 0.25, na.rm = TRUE),
    Q3 = quantile(journey_duration_min, 0.75, na.rm = TRUE),
    Amplitude = Máx - Mín,
    .groups = "drop"
  ) ; t6

xtable(t6)

g6 <- ggplot(t6, aes(x = rideable_type, y = Média, fill = member_casual)) +
  geom_col(position = position_dodge(width = 0.9)) +
  geom_errorbar(
    aes(ymin = Média - DP, ymax = Média + DP),
    position = position_dodge(width = 0.9),
    width = 0.2
  ) +
  geom_text(
    aes(label = round(Média, 1)),
    position = position_dodge(width = 0.9),
    vjust = -0.3,
    size = 6
  ) +
  scale_fill_manual(values = paleta_pessoal("comparacao"), name = "Tipos de assinaturas") +
  theme_bw() +
  theme(
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 14),
    axis.title = element_text(size = 20),
    legend.title = element_text(size = 18),
    legend.text = element_text(size = 16),
    plot.title = element_text(size = 22, hjust = 0.5)
  ) +
  labs(
    title = "Duração média das viagens por tipo de bicicleta",
    x = "Tipo de bicicleta",
    y = "Duração média (minutos)"
  ) ; g6

ggsave("Resultados/plot6.png", g6, width = 12, height = 8 ,dpi = 600)

Para a visualização da duração média da jornada (em minutos) por tipo de assinatura, considerando os dados agrupados por dia da semana e mês, foi utilizado um gráfico de linhas geom_line(), que permite observar a duração média da jornada ao longo do tempo, os valores médios foram adicionados diretamente sobre as linhas por meio da função geom_text(). Além disso a escala dos valores do eixo y, foram alterados para uma escala de 0 a 30 minutos, contribuindo para uma representação mais adequada e evitando distorções visuais na análise dos resultados.

g7 <- ggplot(t7, aes(x = day_start, y = Média, color = member_casual, group = member_casual)) +
  geom_line(size = 1.2) +
  geom_point(size = 3) +
  geom_text(
    aes(label = round(Média, 1)),
    vjust = -0.5,
    size = 7.5
  ) +
  scale_y_continuous(
    limits = c(0, 30),
    breaks = seq(0, 30, 5)
  ) +
  scale_color_manual(values = paleta_pessoal("comparacao"), name = "Tipos de assinaturas") +
  theme_bw() +
  theme(
    axis.text.x = element_text(size = 18),
    axis.text.y = element_text(size = 16),
    axis.title = element_text(size = 18),
    legend.title = element_text(size = 18),
    legend.text = element_text(size = 16),
    plot.title = element_text(size = 22, hjust = 0.5)
  ) +
  labs(
    title = "Duração média das viagens por dia da semana",
    x = "Dia da semana",
    y = "Duração média (minutos)"
  ) ; g7

ggsave("Resultados/plot7.png", g7, width = 15, height = 8 ,dpi = 800)

As demais visualizações foram elaboradas utilizando as mesmas técnicas apresentadas anteriormente. Na seção de Resultados e discussão, são exibidos todos os gráficos produzidos ao longo da análise.


Resultados e discussão

Tabela e gráfico 1

A Tabela 1 e o Gráfico 1 apresentam a distribuição dos tipos de assinaturas, aproximadamente 64% dos clientes são assinantes anuais.

Tabela

Tabela 1: Distribuição da proporção dos tipos de assinaturas.

\[ \begin{array}{ccc} \hline \hline \text{Tipos de assinaturas} & \text{N} & \text{%} \\ \hline \hline \text{Casual} & 1915681 & 35.48 \\ \text{Membro Anual} & 3484162 & 64.52 \\ \hline \hline \end{array} \]

Gráfico

Gráfico 1:

Tabela e gráfico 2

Na Tabela 2 e no Gráfico 2, observa-se a distribuição dos tipos de assinaturas, por tipos de bicicletas alugadas. Tanto clientes casuais quanto anuais optam majoritariamente por utilizar bicicletas elétricas, representando aproximadamente 65% e 63%, respectivamente.

Tabela

Tabela 2: Distribuição da proporção dos tipos de assinaturas por tipo de bicicletas alugadas.

\[ \begin{array}{ccccc} \hline \hline \text{Tipos de Assinaturas} & \text{Tipo de Bicicleta} & \text{N} & \text{%} \\ \hline\hline \text{Casual} & \text{Clássica} & 667868 & 34.86 \\ & \text{Elétrica} & 1247813 & 65.14 \\\hline \text{Membro Anual} & \text{Clássica} & 1274412 & 36.58 \\ & \text{Elétrica} & 2209750 & 63.42 \\ \hline\hline \end{array} \]

Gráfico

Gráfico 2:

Tabela e gráfico 3

A distribuição dos tipos de assinatura ao longo dos dias da semana indica que, de forma geral, as bicicletas são predominantemente utilizadas por membros anuais. Observa-se ainda que, entre segunda-feira a quarta-feira, há um aumento na participação de usuários anuais e diminuição na utilização do serviço por membros casuais. Em contrapartida, nos finais de semana ocorre o movimento inverso, uma diminuição relativa na utilização do serviço por membros anuais e um aumento na utilização por usuários casuais. Os resultados estão apresentados na Tabela 3 e no Gráfico 3.

Tabela

Tabela 3: Distribuição dos tipos de assinaturas por dia da semana.

\[ \begin{array}{cccc} \hline \hline \text{Dias da Semana} & \text{Tipos de assinaturas} & \text{N} & \text{%} \\ \hline\hline \text{domingo} & \text{Casual} & 316929 & 45.83 \\ & \text{Membro Anual} & 374532 & 54.17 \\ \hline \text{segunda-feira} & \text{Casual} & 219224 & 30.77 \\ & \text{Membro Anual} & 493317 & 69.23 \\ \hline \text{terça-feira} & \text{Casual} & 216920 & 28.19 \\ & \text{Membro Anual} & 552527 & 71.81 \\ \hline \text{quarta-feira} & \text{Casual} & 212729 & 28.25 \\ & \text{Membro Anual} & 540206 & 71.75 \\ \hline \text{quinta-feira} & \text{Casual} & 247875 & 30.49 \\ & \text{Membro Anual} & 565172 & 69.51 \\ \hline \text{sexta-feira} & \text{Casual} & 306453 & 37.15 \\ & \text{Membro Anual} & 518540 & 62.85 \\ \hline \text{sábado} & \text{Casual} & 395551 & 47.35 \\ & \text{Membro Anual} & 439868 & 52.65 \\ \hline\hline \end{array} \]

Gráfico

Gráfico 3:

Tabela e gráfico 4

A Tabela 4 e o Gráfico 4 apresentam a distribuição dos tipos de assinaturas ao longo dos meses de utilização do serviço. De maneira geral, observa-se que o uso das bicicletas é predominantemente realizado por membros anuais durante todo o ano. No entanto, entre os meses de Maio a Agosto verifica-se um aumento na participação de usuários casuais e a diminuição de usuários anuais, nos demais meses ocorre o aumento do uso por usuários anuais e diminuição de usuários casuais período em que essa categoria atinge suas maiores proporções de utilização do serviço.

Tabela

Tabela 4: Distribuição dos tipos de assinaturas por mês

\[ \begin{array}{cccc} \hline \hline \text{Mês} & \text{Tipos de assinaturas} & \text{N} & \text{%} \\ \hline \hline \text{Janeiro} & \text{Casual} & 23434 & 17.26 \\ & \text{Membro Anual} & 112340 & 82.74 \\ \hline \text{Fevereiro} & \text{Casual} & 27004 & 18.11 \\ & \text{Membro Anual} & 122084 & 81.89 \\ \hline \text{Março} & \text{Casual} & 82862 & 28.44 \\ & \text{Membro Anual} & 208470 & 71.56 \\ \hline \text{Abril} & \text{Casual} & 105241 & 28.98 \\ & \text{Membro Anual} & 257908 & 71.02 \\ \hline \text{Maio} & \text{Casual} & 175551 & 35.86 \\ & \text{Membro Anual} & 313971 & 64.14 \\ \hline \text{Junho} & \text{Casual} & 278733 & 42.34 \\ & \text{Membro Anual} & 379531 & 57.66 \\ \hline \text{Julho} & \text{Casual} & 308422 & 41.75 \\ & \text{Membro Anual} & 430381 & 58.25 \\ \hline \text{Agosto} & \text{Casual} & 323398 & 42.19 \\ & \text{Membro Anual} & 443124 & 57.81 \\ \hline \text{Setembro} & \text{Casual} & 254875 & 36.63 \\ & \text{Membro Anual} & 440957 & 63.37 \\ \hline \text{Outubro} & \text{Casual} & 214349 & 34.11 \\ & \text{Membro Anual} & 414062 & 65.89 \\ \hline \text{Novembro} & \text{Casual} & 94736 & 27.33 \\ & \text{Membro Anual} & 251964 & 72.67 \\ \hline \text{Dezembro} & \text{Casual} & 27076 & 19.84 \\ & \text{Membro Anual} & 109370 & 80.16 \\ \hline \hline \end{array} \]

Gráfico

Gráfico 4:

Tabela e gráfico 5

As medidas descritivas acerca da duração da viagem (em minutos) por tipos de assinatura estão descritos na Tabela 5 e no Gráfico 5. Em geral, observa-se que os usuários casuais realizam viagens mais longas, em média 19,87 minutos e mediana 11,89 minutos, enquanto que os membros anuais apresentam média de 12,18 minutos e mediana de 8,74 minutos. Além disso, ambos os tipos de usuários apresentam desvio padrão elevado, demonstrando uma alta variabilidade na duração das viagens. Destaca-se também valores máximos e mínimos extremos, além de uma distribuição assimétrica à direita evidenciada pelo gráfico de histograma.

Tabela

Tabela 5: Medidas descritivas da duração das viagens por tipos de assinaturas.

\[ \begin{array}{c c c c c c c c c}\hline\hline \text{Tipos de Assinaturas} & \text{Média} & \text{Mediana} & \text{DP} & \text{Mín} & \text{Máx} & \text{Q1} & \text{Q3} & \text{Amplitude} \\ \hline\hline \text{Casual} & 19.87 & 11.89 & 39.02 & 1.00 & 1439.98 & 6.82 & 21.68 & 1438.98 \\ \text{Membro Anual} & 12.18 & 8.74 & 20.38 & 1.00 & 1439.83 & 5.21 & 14.67 & 1438.83 \\ \hline \end{array} \]

Gráfico

Gráfico 5:

Tabela e gráfico 6

A Tabela 6 e o Gráfico 6 apresentam as medidas descritivas da duração das viagens (em minutos) segundo o tipo de bicicleta e o tipo de assinatura. De modo geral, observa-se que as bicicletas clássicas possui uma duração média de viagem maior independentemente do tipo de usuário. Entre os usuários casuais, a média de duração das viagens com bicicletas clássicas 29,15 minutos, que é superior à observada para bicicletas elétricas 14,90 minutos. Esse mesmo padrão se repete entre os membros anuais, com médias de 13,61 minutos para bicicletas clássicas e 11,35 minutos para elétricas. Além disso, as bicicletas clássicas apresentam maior variabilidade na duração das viagens, especialmente entre os usuários casuais com desvio padrão 61,37. Em contraste a esse resultado, as bicicletas elétricas apresentam menor dispersão.

Tabela

Tabela 6:

\[ \begin{array}{cccccccccc} \hline \hline \text{Tipo de bicicleta} & \text{Tipos de assinaturas} & \text{Média} & \text{Mediana} & \text{DP} & \text{Mín} & \text{Máx} & \text{Q1} & \text{Q3} & \text{Amplitude} \\ \hline\hline \text{Clássica} & \text{Casual} & 29.15 & 16.28 & 61.37 & 1.00 & 1439.98 & 9.04 & 30.82 & 1438.97 \\ & \text{Membro Anual} & 13.61 & 9.21 & 28.98 & 1.00 & 1439.83 & 5.37 & 16.29 & 1438.83 \\ \hline \text{Elétrica} & \text{Casual} & 14.90 & 10.24 & 15.84 & 1.00 & 479.97 & 6.09 & 17.76 & 478.97 \\ & \text{Membro Anual} & 11.35 & 8.50 & 12.99 & 1.00 & 481.45 & 5.13 & 13.91 & 480.45 \\ \hline \end{array} \]

Gráfico

Gráfico 6:

Tabela e gráfico 7

Na Tabela 7 e no Gráfico 7 estão descritos as medidas descritivas da duração média das viagens (em minutos) ao longo dos dias da semana. De maneira geral, observa-se que a média de duração das viagens para membros anuais é menor e mais constante. Por outro lado, os usuários casuais apresentam maior variação no tempo médio de uso, com redução da duração das viagens entre segunda-feira e quinta-feira, seguida de aumento ao longo do final de semana, período em que se observam os maiores tempos médios de utilização do serviço.

Tabela

Tabela 7:

\[ \begin{array}{c c c c c c c c c c} \hline \hline \text{Dia da semana} & \text{Tipos de assinaturas} & \text{Média} & \text{Mediana} & \text{DP} & \text{Mín} & \text{Máx} & \text{Q1} & \text{Q3} & \text{Amplitude} \\ \hline\hline \text{Domingo} & \text{Casual} & 23.06 & 13.86 & 43.02 & 1.00 & 1439.98 & 7.75 & 25.56 & 1438.98 \\ & \text{Membro Anual} & 13.44 & 9.25 & 24.04 & 1.00 & 1419.62 & 5.36 & 16.10 & 1418.62 \\ \hline \text{Segunda-feira} & \text{Casual} & 19.68 & 11.42 & 37.52 & 1.00 & 1435.85 & 6.49 & 21.42 & 1434.85 \\ & \text{Membro Anual} & 11.76 & 8.40 & 19.00 & 1.00 & 1427.13 & 5.04 & 14.08 & 1426.13 \\ \hline \text{Terça-feira} & \text{Casual} & 17.60 & 10.52 & 36.84 & 1.00 & 1436.85 & 6.24 & 18.58 & 1435.84 \\ & \text{Membro Anual} & 11.84 & 8.63 & 20.67 & 1.00 & 1418.24 & 5.19 & 14.29 & 1417.24 \\ \hline \text{Quarta-feira} & \text{Casual} & 16.32 & 10.18 & 32.12 & 1.00 & 1433.30 & 6.08 & 17.73 & 1432.30 \\ & \text{Membro Anual} & 11.62 & 8.56 & 18.69 & 1.00 & 1438.66 & 5.14 & 14.16 & 1437.66 \\ \hline \text{Quinta-feira} & \text{Casual} & 17.42 & 10.58 & 35.84 & 1.00 & 1439.27 & 6.28 & 18.65 & 1438.27 \\ & \text{Membro Anual} & 11.72 & 8.62 & 17.84 & 1.00 & 1428.91 & 5.19 & 14.30 & 1427.91 \\ \hline \text{Sexta-feira} & \text{Casual} & 19.59 & 11.82 & 39.22 & 1.00 & 1439.76 & 6.80 & 21.58 & 1438.76 \\ & \text{Membro Anual} & 12.14 & 8.65 & 21.48 & 1.00 & 1439.83 & 5.17 & 14.50 & 1438.83 \\ \hline \text{Sábado} & \text{Casual} & 22.31 & 13.77 & 42.27 & 1.00 & 1434.94 & 7.80 & 24.86 & 1433.94 \\ & \text{Membro Anual} & 13.29 & 9.43 & 21.71 & 1.00 & 1429.20 & 5.51 & 16.12 & 1428.20 \\ \hline\hline \end{array} \]

Gráfico

Gráfico 7:

Tabela e gráfico 8

A Tabela 8 e o Gráfico 8 apresentam as medidas descritivas da duração média das viagens (em minutos) ao longo dos meses. De modo geral, observa-se que, para os membros anuais, o tempo médio de uso permanece relativamente estável, variando entre aproximadamente 10 e 11 minutos ao longo de todo o ano. Enquanto que, para os usuários casuais apresentam maior variação na duração média das viagens, com valores entre cerca de 12 e 21 minutos. Nota-se um crescimento progressivo de março a agosto, seguido por uma redução gradual de setembro a fevereiro. Esse comportamento indica uma sazonalidade mais acentuada entre os usuários casuais, com maior tempo de utilização nos meses intermediários do ano.

Tabela

Tabela 8:

\[ \begin{array}{c c c c c c c c c} \hline \hline \text{Mês} & \text{Tipos de assinaturas} & \text{Média} & \text{Mediana} & \text{DP} & \text{Mín} & \text{Máx} & \text{Q1} & \text{Q3} \\ \hline\hline \text{Janeiro} & \text{Casual} & 12.08 & 7.15 & 34.92 & 1.00 & 1409.99 & 4.59 & 11.80 \\ & \text{Membro Anual} & 9.98 & 6.88 & 18.91 & 1.00 & 1394.47 & 4.31 & 11.34 \\ \hline \text{Fevereiro} & \text{Casual} & 12.34 & 7.38 & 34.12 & 1.00 & 1433.74 & 4.71 & 12.30 \\ & \text{Membro Anual} & 9.96 & 7.00 & 16.52 & 1.00 & 1277.12 & 4.35 & 11.62 \\ \hline \text{Março} & \text{Casual} & 17.86 & 10.57 & 40.89 & 1.00 & 1435.21 & 6.09 & 19.64 \\ & \text{Membro Anual} & 11.13 & 7.89 & 16.80 & 1.00 & 1414.13 & 4.74 & 13.27 \\ \hline \text{Abril} & \text{Casual} & 18.58 & 10.71 & 38.89 & 1.00 & 1434.94 & 6.14 & 20.12 \\ & \text{Membro Anual} & 11.27 & 8.08 & 16.82 & 1.00 & 1324.19 & 4.81 & 13.69 \\ \hline \text{Maio} & \text{Casual} & 20.73 & 12.26 & 40.40 & 1.00 & 1421.17 & 6.94 & 22.69 \\ & \text{Membro Anual} & 11.89 & 8.72 & 16.23 & 1.00 & 1399.50 & 5.13 & 14.66 \\ \hline \text{Junho} & \text{Casual} & 21.90 & 13.38 & 42.75 & 1.00 & 1428.44 & 7.78 & 23.83 \\ & \text{Membro Anual} & 12.84 & 9.58 & 17.24 & 1.00 & 1383.42 & 5.73 & 15.80 \\ \hline \text{Julho} & \text{Casual} & 21.41 & 12.98 & 40.23 & 1.00 & 1439.76 & 7.51 & 23.41 \\ & \text{Membro Anual} & 13.15 & 9.56 & 22.19 & 1.00 & 1429.20 & 5.71 & 15.87 \\ \hline \text{Agosto} & \text{Casual} & 21.68 & 13.44 & 37.43 & 1.00 & 1435.85 & 7.72 & 24.18 \\ & \text{Membro Anual} & 13.08 & 9.66 & 16.39 & 1.00 & 1384.97 & 5.76 & 16.18 \\ \hline \text{Setembro} & \text{Casual} & 19.56 & 11.96 & 35.78 & 1.00 & 1433.30 & 6.97 & 21.50 \\ & \text{Membro Anual} & 12.60 & 9.29 & 16.98 & 1.00 & 1438.66 & 5.56 & 15.55 \\ \hline \text{Outubro} & \text{Casual} & 18.10 & 10.71 & 37.92 & 1.00 & 1439.98 & 6.24 & 19.48 \\ & \text{Membro Anual} & 12.11 & 8.57 & 23.59 & 1.00 & 1393.97 & 5.13 & 14.39 \\ \hline \text{Novembro} & \text{Casual} & 15.16 & 8.95 & 37.32 & 1.00 & 1439.27 & 5.40 & 15.96 \\ & \text{Membro Anual} & 11.70 & 7.92 & 29.90 & 1.00 & 1439.83 & 4.82 & 13.25 \\ \hline \text{Dezembro} & \text{Casual} & 12.82 & 7.67 & 35.22 & 1.00 & 1431.30 & 4.81 & 13.08 \\ & \text{Membro Anual} & 11.68 & 7.49 & 34.49 & 1.00 & 1418.24 & 4.66 & 12.36 \\ \hline\hline \end{array} \]


Gráfico

Gráfico 8:


Conclusão

Com base na análise estatística realizada, conclui-se que existem diferenças no comportamento de uso entre usuários casuais e membros anuais do serviço. De modo geral, usuários casuais realizam viagens mais longas, com maior variabilidade e forte influência de fatores sazonais, como meses mais quentes, meses de férias e finais de semana. Em contraste, membros anuais apresentam um padrão de uso mais estável, com viagens mais curtas, geralmente associadas a trabalho e distribuídas de forma mais homogênea ao longo do tempo.

Esses resultados indicam que usuários casuais tendem a utilizar o serviço de forma mais recreativa, enquanto membros anuais fazem uso mais frequente e cotidiano. Além disso, observou-se que as bicicletas elétricas são as preferidas entre os usuários e estão associadas a viagens mais curtas e consistentes, o que pode indicar um perfil de uso mais utilitário.

Diante disso, recomenda-se a adoção de estratégias voltadas à marketing e a conversão de usuários casuais em membros anuais, destacam-se as principais estratégias: (i) criação de pacotes promocionais de assinatura anual direcionados a períodos de maior uso dos usuários casuais, como férias e finais de semana; (ii) oferta de incentivos específicos para usuários de bicicletas elétricas, que já apresentam comportamento mais similar ao padrão dos membros anuais; e (iii) a divulgação de promoções de planos anuais nas estações mais utilizadas para aluguel das bicicletas e períodos de maior demanda, aproveitando os locais com maior circulação de usuários casuais para estimular a adesão.

Com isso, conclui-se que as evidências indicam que ações de marketing orientadas pelo perfil e pelo comportamento de uso dos clientes podem representar um importante diferencial para aumentar a taxa de conversão de usuários casuais em membros anuais, contribuindo para maior previsibilidade de receita e fortalecimento da fidelização dos usuários.


Referências

[1] BUSSAB, Wilton de Oliveira; MORETTIN, Pedro Alberto. Estatística básica. 10. ed. rev. e ampl. São Paulo: Saraiva, 2017.

[2] WICKHAM, Hadley; ÇETINKAYA-RUNDEL, Mine; GROLEMUND, Garrett. R para Ciência de dados (2ª edição). Disponível em: Acessar livro online. Acesso em: 10 jan. 2026.

[3] MORETTIN, Pedro Alberto; SINGER, Júlio da Motta. Estatística e ciência de dados. 2. ed. Rio de Janeiro: LTC, 2025.


Todos os arquivos estão disponíveis na pasta do drive .

Caso tenha sugestões ou correções, entre em contato pelo e-mail .

Nota: Conheça meu site clicando neste link .