Pegando o ônibus errado em Capivara’s City — Parte I
Objetivo desse singelo post é analisar alguns dos dados do transporte público da cidade de Curitiba disponíveis para a população.
Ah, as férias da faculdade…tempo para colocar as séries em dia, ler todos os livros que você queria e não teve tempo, dançar forró com o seu crush (antes da pandemia), se aventurar na cozinha ou no meu caso: estudar Python (cada um se diverte do seu jeito, não é mesmo? 🧐).
Caso você tenha lido algum post meu nesse site, já deve saber que há pouco tempo estou me aventurando/aprendendo nos mundos dos dados. No meu antigo estágio eu trabalhava com dois estatísticos que contribuíram muito para o meu aprendizado, e nós fazíamos a grande parte das nossas análises na linguagem R de programação. OU SEJA: Python sabia que existia mas não tinha muita familiaridade, ele lá no canto dele e eu aqui no meu + R. Por outro lado, no meu atual estágio o meu time faz quase tudo em Python = the jiripoca is gonna pewpew. Tive que começar a estudar mais a linguagem e pensei “por que não fazer uma análise do transporte público de Curitiba?”. — Pensamentos enquanto eu coloco a query para rodar risosrisos.
Se você, meu querido leitor, mora em Curitiba eu tenho toda certeza que alguma vez na sua vida você já pegou um ônibus errado — quase certeza que foi um Interbairros no sentido contrário ainda. Caso você more em outra cidade, vem descobrir comigo um pouco mais sobre o transporte dessa cidade nublada e cheia de capivaras.
Essa primeira parte será divida em duas etapas: o que os dados dizem e o passo-a-passo do código.
Meu primeiro desafio foi conseguir esses dados, não tinha nem IDEIA de como conseguir. Para obter as informações você tem três opções:
- Esperar os dados aparecerem na sua tela do nada;
- Abrir um protocolo através do site da prefeitura solicitando as informações pela Lei de Acesso à Informação;
- Usar os dados já prontos disponíveis nesse link;
Optei pelas duas últimas, até abri uma solicitação na prefeitura mas preferi usar o json do link. Olhei todos os dados disponíveis e escolhi as informações a respeito das linhas e dos pontos de ônibus da cidade.
Mapa com todos os pontos de ônibus de Curitiba
O que os dados dizem?
Data da extração desses dados: 12/11/2020
Linhas de ônibus
Depois que você abre o protocolo na prefeitura, você recebe um acesso para conectar na URBS Desenvolvimento -WEBSERVICES. Lá tem toda a documentação.
Essas informações são obtidas através do getLinhas().
Os dados tem essa carinha:
- Total de linhas na cidade de Curitiba: 307;
- Número de categoria de linhas: 10;
- Categorias das linhas: Convencional, Alimentador, Troncal, Linha Direta, Expresso, Interbairros, Circular Centro, Ligeirão, Madrugueiro e Jardineira;
- Quantidade por cada categoria de linha:
Por exemplo: temos 9 linhas de Interbairros e 144 linhas de Alimentadores.
- Em percentual, as categorias de linhas Alimentador e Convencional possuem mais de 50% do total;
- Do total apenas 38% das linhas trabalham somente com cartões.
Pontos de ônibus das linhas
Essas informações são obtidas através do getPontosLinha().
Os dados:
- Total de pontos de ônibus na cidade: 7.119;
- Número dos tipos de pontos de ônibus: 14;
- Pontos de ônibus: Novo mobiliário, Chapéu chinês, Domus, Estação tubo, Plataforma, Sem demarcação, Placa em cano, Placa em poste, Especial Madrugueiro, Linha Turismo, Concreto, Fora do padrão e Outros;
- Quantidade de tipos de pontos de ônibus:
- Quase 4% de todos os nossos pontos de ônibus são as famosas Estações Tubo;
- Quase 8,2% de todos os pontos de ônibus estão sem demarcação.
Código
Usei o Jupyter Notebook para o código. O código está todo comentado.
A seguir estão os pontos principais do código.
# Importando as bibliotecasimport pandas as pd
import numpy as np
import json as json
import requests as requests
import geopy
import re
import plotly_express as px#Lendo os arquivos que contém as informaçõesdfLinhas = pd.read_json (‘2020_11_12_linhas.json’)
dfPontos = pd.read_json (‘2020_11_12_pontosLinha.json’)# TIPOS DE PONTOS DE ÔNIBUS
# Criei um forzinho só para ficar melhor em ler os pontosfor i in dfPontosUnicos['TIPO'].unique():
print('Ponto de ônibus do tipo',i)# NÚMERO DE PONTOS de ÔNIBUS NA CIDADE DE CURITIBA
# Printa para mim a quantidade de tipos de pontos e a quantidade total de pontos de ônibusprint('Número de tipos de pontos de ônibus da cidade de Curitiba: ', dfPontosUnicos['TIPO'].nunique())
print('Número de pontos de ônibus da cidade de Curitiba: ', dfPontosUnicos['NOME'].nunique())
Esse mesmo raciocínio se aplica para aos dados de linhas da URBS. Como eu disse, o código está todo comentado no meu GitHub. Qualquer dúvida é só entrar em contato.
Caso você veja algum erro ou queira mostrar alguma melhoria no código pode falar 💕 estou aberta a sugestões e críticas.
É isso! Espero que tenha gostado. Até a próxima!