Foram medidas velocidades dos automóveis que circulam na Avenida Almirante Gago Coutinho, que liga Mem-Martins à Portela de Sintra, com recurso a um Raspberry Pi Zero W, uma webcam e um programa Python. As velocidades obtidas foram tratadas por métodos de análise exploratória de dados com recurso a programação em R.
No estudo realizado verificou-se que a velocidade média dos automóveis difere mediante a direcção em que circulam, sendo de 69 km/h no sentido Mem Martins -> Sintra e 87 km/h no sentido Sintra -> Mem Martins.
Em ambos os casos a velocidade é superior ao máximo permitido por lei em zona urbana - 50km/h. É ainda importante referir que esta zona possui duas escolas nas proximidades e um complexo desportivo, piscinas e ciclovia com elevada afluência de peões.
As medições foram feitas num pequeno troço da Avenida Almirante Gago Coutinho.
Uma sucinta descrição sobre o hardware utilizado e como instalar o programa carspeed.py
pode ser encontrada no repositório deste projecto: VascoRibeiroPereira/carspeed.py.
O programa utilizado foi adaptado de gregtinkers/carspeed.py, com pequenas alterações no que respeita às distâncias, obtenção de dados em Km/h e inibição da captura de imagens por motivos de eficiência no espaço limitado do hardware utilizado. As direcções foram também adicionadas à tabela de dados obtidos.
Se gostar do projecto, partilhe, diga olá, ou faça uma doação por PayPal. Pequenos gestos são motivadores para continuar a produzir conteúdos!
As bibliotecas necessárias para análise de dados em R:
library(ggplot2)
library(dplyr)
library(lubridate)
library(plotly)
my_wd <- getwd()
filesList <- list.files(paste(my_wd, "/RawData", sep = ""))
setwd(paste(my_wd, "/RawData", sep = ""))
carspeed <- tibble()
for (i in 1:length(filesList)) {
tmp<- read.csv(filesList[i])
carspeed <- rbind(tmp, carspeed)
}
Os dados de vários ficheiros foram importados e unidos numa única tabela: carspeed
.
A tabela carspeed
tem as seguintes características:
1. Inicio da obtenção de dados - 2020.08.01
2. Fim da obtenção de dados - 2020.09.01
3. Número de observações - 118831
4. Variáveis medidas - Date, Day, Time, Speed, Direction
O conjunto hardware/software utilizados possui algumas limitações no que respeita à detecção de dados, nomeadamente quando há muito trafego nos dois sentidos este pode fazer medições menos correctas. Estes erros traduzem-se em medições com pouco significado (bastante superior a 120 km/h por exemplo), pelo que se excluíram as medições de velocidade superior a 120 km/h e inferiores a 10 km/h.
carspeed$Direction <- as.factor(carspeed$Direction)
carspeed_Clean <- filter(carspeed, Speed < 120 & Speed > 10)
carspeed_Clean <- carspeed_Clean[,-2]
carspeed_Clean <- mutate(carspeed_Clean, valid = paste(Date, Time, sep = " "))
carspeed_Clean <- carspeed_Clean[,-c(1,2)]
carspeed_Clean$valid <- parse_date_time(carspeed_Clean$valid, "Ymd HM", tz="Europe/Lisbon")
carspeed_Clean$valid <- round_date(carspeed_Clean$valid, unit = "hour")
## As medições foram sistematizadas apenas a partir de dia 2020-08-03
carspeed_filter <- filter(carspeed_Clean, valid >= as.Date("2020-08-03"))
Para a realização da análise de dados estes foram agrupados por data e direcção. Desta forma podemos separar e compreender as diferenças entre as velocidades médias de ambas as direções.
groupedData <- carspeed_filter %>% group_by(valid, Direction)
speed_Analysis <- groupedData %>% summarise(meanSpeed = mean(Speed))
speed_Analysis$Direction <- as.integer(speed_Analysis$Direction)
for(i in 1:length(speed_Analysis$Direction)) {
if (speed_Analysis$Direction[i] == 1) speed_Analysis$Direction[i] <- "Sintra-MemMartins"
else speed_Analysis$Direction[i] <- "MemMartins-Sintra"
}
speed_Analysis$Direction <- as.factor(speed_Analysis$Direction)
Data <- speed_Analysis$valid
Direção <- speed_Analysis$Direction
Velocidade <- speed_Analysis$meanSpeed
df <- tibble(Data, Direção, Velocidade)
A tabela df
obtida após a limpeza dos dados acabou com as dimensões 1155, 3, correspondente ao número de observações - velocidade média por hora e por direcção e ao número de colunas (Data, Direção, Velocidade).
Data | Direção | Velocidade |
---|---|---|
2020-08-03 10:00:00 | Sintra-MemMartins | 88.11111 |
2020-08-03 10:00:00 | MemMartins-Sintra | 69.95789 |
2020-08-03 11:00:00 | Sintra-MemMartins | 88.10989 |
2020-08-03 11:00:00 | MemMartins-Sintra | 66.26623 |
2020-08-03 12:00:00 | Sintra-MemMartins | 84.43836 |
2020-08-03 12:00:00 | MemMartins-Sintra | 65.13158 |
2020-08-03 13:00:00 | Sintra-MemMartins | 90.56818 |
2020-08-03 13:00:00 | MemMartins-Sintra | 70.35200 |
2020-08-03 14:00:00 | Sintra-MemMartins | 85.71351 |
2020-08-03 14:00:00 | MemMartins-Sintra | 65.89172 |
A melhor forma de analisar dados é através da sua observação gráfica, assim, utilizou-se uma biblioteca dedicada a este propósito, em que se gerou um gráfico interativo com todos os dados que constam da tabela df
.
gp <- ggplot(data = df,
mapping = aes(x = Data, y = Velocidade, color = Direção)) +
geom_point(alpha = 1/2)
gg <- ggplotly(gp)
gg
A visualização do gráfico torna evidente vários aspectos da circulação automóvel na Avenida Almirante Gago Coutinho, nomeadamente o excesso de velocidade.
Em números absolutos, na tabela antes de agrupar os dados: carspeed_filter
, temos 107209 observações, das quais 101091 são superiores a 50 km/h.
Isto representa 94% de condutores em excesso de velocidade a cerca de 40 metros de distância de uma passagem de peões.
Análise da velocidade em ambas as direções:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 39.60 66.22 68.00 68.65 70.00 117.00
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 52.00 83.99 87.24 87.45 90.49 115.00
A velocidade dos carros que circulam na Avenida Almirante Gago Coutinho é excessiva dadas as características da envolvência: presença de escolas, habitações, peões e locais de desporto e lazer. Há alguns anos a passadeira foi pintada e evidenciada com refletores coloridos que poderão ter resultado numa descida da velocidade dos automóveis neste local, mas ainda assim são raros os que se mantêm dentro dos limites impostos pela lei.
A presença de lombas poderia ser uma solução para a prevenção de acidentes na área.