Uma análise de dados (EDA) atual da mobilidade urbana nas maiores capitais do Brasil

Marcus Paulo
10 min readApr 16, 2024

--

O presente estudo tem como objetivo realizar uma análise da mobilidade urbana nas 9 maiores regiões metropolitanas do Brasil.

Com o encarecimento do custo de vida nos centros das capitais, observa-se um fenômeno migratório: pessoas que antes viviam ou buscavam residência nas cidades-sede das regiões metropolitanas agora optam por morar em suas periferias e cidades-satélite.

Esse fenômeno é provocado pelo encarecimento do custo de vida nas regiões centrais das cidades, levando as pessoas a buscarem moradias com custos menores em locais mais distantes. Portanto, mesmo com a maior oferta de empregos ainda concentrada nos centros das cidades-sede, os trabalhadores precisam se deslocar por longas distâncias para chegar ao local de trabalho e retornar às suas casas.

Neste estudo, realizaremos uma análise exploratória de dados da situação do transporte público nas RMs (regiões metropolitanas) de São Paulo, Rio de Janeiro, Belo Horizonte, Brasília, Salvador, Fortaleza, Recife, Curitiba e Porto Alegre, com o objetivo de compreender a realidade urbana dos cidadãos das respectivas regiões metropolitanas.

1. Conjuntos de Dados

Os dados que utilizaremos foram divididos em dois conjuntos de dados. O primeiro contém informações anuais, de 2015 a 2023, com variáveis como preço de tarifas, taxa de motorização e outras. Já o segundo conjunto de dados contém informações atuais, como tempo de locomoção no transporte público, distância percorrida, entre outras. Também utilizaremos dados demográficos dos censos de 2000, 2010 e 2022.

Todos os dados foram obtidos de plataformas e órgãos governamentais como o Mobilidados, a NTU (Associação Nacional das Empresas de Transporte Urbano) e as respectivas Secretarias de Trânsito de cada cidade aqui analisada.

1.1. Carregando as bibliotecas e os conjuntos de dados

Para iniciarmos nossa análise carregaremos nossas bibliotecas no Python.

As bibliotecas que utilizaremos serão: Pandas, Numpy, Matplotlib.pyplot e Seaborn.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

Em seguida importaremos nossos conjuntos de dados.

1.1.1. Conjunto de Dados: Censos

censo = pd.read_csv("Censos.csv", encoding='latin-1')
censo.head(10)
Conjunto de dados: Censos

Nosso conjunto de dados reúne informações dos últimos três censos realizados no Brasil pelo IBGE (Instituto Brasileiro de Geografia e Estatística), suas variáveis são:

  • regiao_metropolitana: As nove maiores regiões metropolitanas do país.
  • ano: o ano do censo.
  • populacao: o tamanho da população brasileira em cada censo.
  • var: a variação de população em relação ao censo anterior.

1.1.2. Conjunto de dados: Tarifas

tarifas = pd.read_csv("Tarifas.csv", encoding='latin-1')
tarifas.head(10)
Conjunto de dados: Tarifas

Neste nosso conjunto de dados, reunimos informações como o preço da tarifa de ônibus e metrô no decorrer dos anos, também temos a taxa de motorização de cada cidade conforme o passar dos anos. Suas variáveis são:

  • cidades: as cidades-sede de cada região metropolitana aqui estudada.
  • ano: ano das informações seguintes (2015–2023).
  • tarifa_onibus: preço da tarifa de ônibus.
  • tarifa_metro: preço da tarifa de metrô.
  • motorizacao: quantidade de veículos por 1000 habitantes.

1.1.3. Conjunto de dados: Dados

dados = pd.read_csv("Dados 2022.csv", encoding='latin-1')
dados.head(10)
Conjunto de dados: Dados

Este conjunto de dados reúne informações atuais sobre o transporte público das regiões metropolitanas analisadas. As variáveis são:

  • regiao_metropolitana: região Metropolitana.
  • tempo_locomocao: tempo de locomoção médio dos habitantes no transporte público dado em minutos.
  • distancia_percorrida: distância média que os habitantes percorrem no transporte público dada em quilômetros.
  • tamanho_rede: tamanho da rede de transporte público somados metrô e brt dados em quilômetros.
  • ticket_medio: quantia média que a população gasta com transporte público mensalmente.
  • por_cento_salario: representa a porcentagem de quanto um cidadão gasta em média mensalmente com transporte público em relação ao salário minímo.

2. Análises

Primeiramente, vamos plotar dados do nosso conjunto censo para descobrir como se deu o crescimento da população desde o ano de 2000.

fig,ax= plt.subplots(figsize=(12,6))
ax = sns.barplot(data = censo, x="regiao_metropolitana", y= "populacao", hue = 'ano', palette = "tab20")
ax.set_title("População")
plt.show()
Gráfico: População

Podemos observar que a maioria das regiões metropolitanas registrou um grande crescimento durante os 22 anos que se passaram desde o ano 2000, com exceção de três cidades: Salvador, Rio de Janeiro e Recife. A população das RMs de Salvador e Rio de Janeiro diminuiu entre os anos de 2010 e 2022, e a população da RM de Recife não apresentou um crescimento expressivo.

Para melhor visualização, vamos analisar um gráfico que mostra a variação da população entre os censos.

fig,ax= plt.subplots(figsize=(12,8))
sns.set_style('darkgrid')
ax = sns.lineplot(data = censo, x="ano", y= "var", hue = 'regiao_metropolitana', marker = "o", palette = "tab20")
ax.set_title("Variação")
plt.show()
Gráfico: Variação Populacional

Dessa forma, podemos observar que as Regiões Metropolitanas (RMs) do Rio de Janeiro e Salvador registraram uma taxa de crescimento negativa, ou seja, houve uma redução da população entre 2010 e 2022. Também podemos observar o crescimento estagnado da RM de Recife, com sua taxa próxima a zero.

As RMs de Brasília e Curitiba foram as que apresentaram as maiores taxas de crescimento em 2022.

Com base nessas informações, vamos analisar se uma diminuição significativa da população influencia a taxa de motorização.

2.1. Evolução da taxa de motorização nas cidades

fig,ax= plt.subplots(figsize=(12,8))
sns.set_style('darkgrid')
ax = sns.lineplot(data = tarifas, x="ano", y= "motorizacao", hue = 'cidade', marker = "o", palette = "tab10")
ax.set_title("Motorização")
plt.show()
Gráfico: Motorização

No gráfico, podemos observar que independentemente do crescimento ou decréscimo da população nas cidades, todas apresentaram aumento na taxa de motorização. Belo Horizonte registrou o maior aumento da taxa de motorização no intervalo entre 2015 e 2022, enquanto Curitiba se destaca como a RM com a maior taxa do país.

Conforme observado, após 2021, há um salto significativo na taxa de motorização nas RMs. Para investigar as possíveis causas desse fenômeno, vamos analisar a correlação entre a taxa de motorização e a tarifa de ônibus praticada em cada cidade entre os anos de 2021 e 2022.

tarifas_sorted = tarifas.sort_values("ano", ascending = False)
print(tarifas_sorted)

intervalo = tarifas_sorted.iloc[9:27,]
intervalo = intervalo.sort_values("ano", ascending = True)
intervalo.head(20)

fig, axes = plt.subplots(1,2, sharex = True, figsize = (12,6))
fig.suptitle("Tarifa x Motorização")
axes[0].set_title("Tarifa")
axes[1].set_title("Motorização")

sns.lineplot(ax = axes[0],
data = intervalo,
x = "ano",
y ='tarifa_onibus',
hue = 'cidade',
palette = 'tab10',
marker = 'o')

sns.lineplot(ax = axes[1],
data = intervalo,
x = 'ano',
y = 'motorizacao',
hue = 'cidade',
palette = "tab10",
marker = 'o')

plt.show()
Gráfico: Tarifa X Motorização

Para a criação dos gráficos, primeiro criamos um novo conjunto de dados denominado “Intervalo”, utilizando como base o conjunto de dados ‘Tarifas’. A seguir, selecionamos os dados dos anos de 2021 e 2022, permitindo-nos analisar os dados exclusivamente para esse período.

Ao analisarmos os gráficos, observamos que apenas quatro RMs registraram aumento no preço das passagens, enquanto outras cinco mantiveram os preços inalterados. Entre as cidades que apresentaram crescimento na taxa de motorização, destacamos Belo Horizonte e Porto Alegre, que tiveram os maiores aumentos na taxa, mesmo com a tarifa mantida no mesmo valor em 2021 e 2022.

fig, axes = plt.subplots(1,2, sharex = True, figsize = (12,6))
fig.suptitle("Tarifa x Motorização")
axes[0].set_title("Tarifa Metrô")
axes[1].set_title("Motorização")

sns.lineplot(ax = axes[0],
data = intervalo,
x = "ano",
y ='tarifa_metro',
hue = 'cidade',
palette = 'tab10',
marker = 'o')

sns.lineplot(ax = axes[1],
data = intervalo,
x = 'ano',
y = 'motorizacao',
hue = 'cidade',
palette = "tab10",
marker = 'o')

plt.show()
Gráfico: Tarifa do Metrô X Motorização

Ao longo dos dois anos, apenas as cidades do Recife e Rio de Janeiro aumentaram o preço da passagem de metrô. Vale ressaltar que ambas as cidades registraram duas das menores taxas de motorização entre as analisadas.

correlacao = tarifas['tarifa_onibus'].corr(tarifas['motorizacao'])
print(correlacao)

0.35540197008432084

Assim, com base no índice de correlação de Pearson, podemos concluir que a flutuação da taxa de motorização apresenta uma fraca correlação com o preço das passagens de ônibus.

2.2. Análise da mobilidade urbana no último ano

Em nossas próximas análises, introduziremos o conjunto de dados “Dados 2023”, com o objetivo de obter um panorama atualizado da situação do transporte público nessas cidades.

Primeiramente, analisaremos as tarifas de ônibus e metrô nas cidades em 2023. Em seguida, daremos continuidade à análise do conjunto de dados “Dados 2023”.

tarifas_sorted = tarifas.sort_values("ano", ascending = False)
intervalo = tarifas_sorted.iloc[0:9,]
intervalo = intervalo.sort_values("tarifa_onibus", ascending = True)

media_onibus = intervalo["tarifa_onibus"].mean()
fig,ax= plt.subplots(figsize=(10,4))
sns.set_style('darkgrid')
ax = sns.barplot(data = intervalo, x = 'cidade', y = 'tarifa_onibus', palette= 'Set2' )
ax.axhline(y=media_onibus, color='black', linestyle='--', label='Média')
plt.title("Tarifas de ônibus em 2023")
plt.xlabel("Capitais")
plt.ylabel("Tarifa de ônibus")
plt.xticks(rotation = 45, ha="right")
plt.show()
Gráfico: Tarifas de Ônibus em 2023

Com a média das tarifas de ônibus em R$ 4,89, quatro das nove cidades analisadas apresentam tarifas acima da média. Curitiba detém a tarifa mais cara, custando R$ 6,00, enquanto Recife possui a tarifa mais baixa, a R$ 4,10.

intervalo = intervalo.sort_values("tarifa_metro", ascending = True)
intervalo = intervalo.dropna(subset = ["tarifa_metro"])
media_metro = intervalo["tarifa_metro"].mean()

fig,ax= plt.subplots(figsize=(10,4))
sns.set_style('darkgrid')
ax = sns.barplot(data = intervalo, x = 'cidade', y = 'tarifa_metro', palette= 'Set2', hue = "cidade")
ax.axhline(y=media_metro, color='black', linestyle='--', label='Média')
plt.title("Tarifas de metrô em 2023")
plt.xlabel("Capitais")
plt.ylabel("Tarifa de metrô")
plt.xticks(rotation = 45, ha="right")
plt.show()

Devido à ausência de sistema de metrô em Curitiba, apenas oito cidades foram analisadas neste gráfico. Com a média do preço das tarifas em R$ 4,89, três cidades finalizaram o ano de 2023 com valores acima da média. O Rio de Janeiro registra a passagem mais cara, a R$ 6,90, enquanto Fortaleza apresenta a menor tarifa, a R$ 3,60.

Em seguida, extrairemos algumas informações do nosso último conjunto de dados a ser analisado.

dados.describe()

Ao analisarmos a tabela, notamos as seguintes informações:

  • Os moradores dessas RMs gastam, em média, 28,86% de um salário mínimo com transporte mensalmente.
  • O tempo médio gasto dentro do transporte público é de 58,22 minutos (ou 58 minutos e 13 segundos).
  • O elevado desvio padrão do tamanho da rede de transportes indica alta dispersão dos dados no conjunto.

Para melhor visualização das informações, vamos plotar alguns gráficos.

dados_salario= dados.sort_values("por_cento_salario", ascending = True)
media_salario= dados["por_cento_salario"].mean()

fig, ax= plt.subplots(figsize= (12,8))
sns.set_style('darkgrid')
ax= sns.barplot(data= dados_salario, x= "por_cento_salario", y= 'regiao_metropolitana', hue= 'regiao_metropolitana', palette = 'Set2')
ax.axvline(x= media_salario, color='black', linestyle='--', label='Média')
plt.title("Porcentagem do Salário Mínimo")
plt.xlabel("Porcentagem do salário mínimo (%)")
plt.ylabel("Região Metropolitana")
plt.show()
Gráfico: Porcentagem do salário mínimo

No gráfico, podemos observar as regiões metropolitanas com as maiores e menores porcentagens de gastos mensais da população com transporte em relação ao salário mínimo. Curitiba possui o transporte mais caro entre as RMs analisadas, ultrapassando 25% do salário mínimo, seguida por Brasília e Belo Horizonte. Por outro lado, Recife registra o menor gasto, representando aproximadamente 17,5% do salário mínimo. A linha tracejada representa a média de porcentagem, com quatro cidades apresentando preços acima dessa média.

dados_tempo= dados.sort_values("tempo_locomocao", ascending = True)
media_tempo= dados["tempo_locomocao"].mean()

fig, ax= plt.subplots(figsize= (12,8))
sns.set_style('darkgrid')
ax= sns.barplot(data= dados_tempo, x= "tempo_locomocao", y= 'regiao_metropolitana', hue= 'regiao_metropolitana', palette = 'Set2')
ax.axvline(x= media_tempo, color='black', linestyle='--', label='Média')
plt.title("Tempo de locomoção")
plt.xlabel("Tempo de locomoção (min)")
plt.ylabel("Região Metropolitana")
plt.show()
Gráfico: Tempo médio de locomoção

Ao analisarmos o gráfico, podemos observar que quatro RMs registraram tempo médio de locomoção superior a uma hora. A região metropolitana do Rio de Janeiro lidera, com um tempo médio de uma hora e sete minutos, seguida por Recife. As três maiores RMs do país (São Paulo, Rio de Janeiro e Belo Horizonte, nessa ordem) registraram tempos acima de uma hora, também acima da média nacional de 58,22 minutos. São Paulo, conhecida por seus grandes engarrafamentos, aparece apenas em terceiro lugar.

dados_distancia = dados.sort_values("distancia_percorrida", ascending = True)
media_distancia = dados["distancia_percorrida"].mean()

fig, ax= plt.subplots(figsize= (12,8))
sns.set_style('darkgrid')
ax = sns.barplot(data = dados_distancia, x = 'distancia_percorrida', y = 'regiao_metropolitana', hue = 'regiao_metropolitana', palette = "Set2")
ax.axvline(x= media_distancia, color='black', linestyle='--', label='Média')
plt.title("Distância média")
plt.xlabel("Distãncia média (km)")
plt.ylabel("Região Metropolitana")
plt.show()

No entanto, ao analisarmos o gráfico de distância média, percebemos que São Paulo registra uma das menores distâncias médias percorridas por seus habitantes no transporte público. Brasília lidera, com uma distância média superior a 12 quilômetros, e, junto com o Rio de Janeiro, apresenta distância acima da média.

Para melhor compreensão do desvio padrão, plotaremos um histograma, visualizando a distribuição dos nossos dados.

sns.displot(dados["tamanho_rede"])
plt.title("Tamanho da rede (km)")
plt.show()

Agora, compreendemos o alto desvio padrão observado. Isso ocorre devido à má distribuição dos dados, com tendência à esquerda. Ou seja, enquanto há poucos valores muito elevados, a maioria se concentra em valores baixos. Portanto, podemos concluir que o tamanho da rede de transportes nas nove RMs apresenta distribuição dispersa, com poucas cidades detendo grande infraestrutura viária e muitas com pouca infraestrutura.

3. Conclusão

Baseado nas análises apresentadas, podemos concluir que:

  • A cada ano que se passa, a taxa de crescimento das grandes cidades vem diminuindo.
  • O aumento nas tarifas do transporte público não acarreta obrigatoriamente no aumento da taxa de motorização de uma cidade, outros fatores precisam serem levados em conta.
  • As duas maiores regiões metropolitanas do país concentram a maior parte da infraestrutura de transporte público, resultando em uma grande disparidade em relação às outras sete regiões metropolitanas analisadas neste estudo.

--

--

Marcus Paulo
0 Followers

👨‍💻 Cientista de Dados | Estatístico | Matemático