-
Notifications
You must be signed in to change notification settings - Fork 0
/
microdados_analise.R
147 lines (119 loc) · 5.71 KB
/
microdados_analise.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
library(dplyr)
library(magrittr)
library(ggplot2)
library(lubridate)
library(gridExtra)
library(beepr)
gc()
#######################
##### data #######
#######################
df <- read.csv("E:\\Dropbox\\transito\\microdados\\2022\\out_dez_2022.csv")
# Converter as colunas de datas para o formato Date
df$datetime_autuacao <- as.Date(df$datetime_autuacao, format = "%Y-%m-%d")
df$data_pagamento <- as.Date(df$data_pagamento, format = "%Y-%m-%d")
# Criar uma nova coluna 'paid' que indica se a multa foi paga
df$paid <- df$valor_pago > 0
# Calcular o número de dias para pagar, se pago
df$days_to_pay <- as.numeric(df$data_pagamento - df$datetime_autuacao)
# Calcular a média dos dias para pagamento condicionada a múltiplas características onde 'paid' é TRUE
media_dias_por_caracteristicas <- df %>%
filter(paid == TRUE, days_to_pay > 0) %>%
group_by(status_infracao, pontuacao, especie_veiculo) %>%
summarise(
mean_days_to_pay = mean(days_to_pay, na.rm = TRUE),
count = n() # Contagem do número de observações em cada grupo
)
# Exibir o resultado
print(media_dias_por_caracteristicas)
beep(sound = 1)
rm(list = setdiff(ls(), c("media_dias_por_caracteristicas")))
gc()
######################################################
### Ajeitando as datas de pgto de 2020 ###############
######################################################
nova_base <- read.csv("E:\\Dropbox\\transito\\microdados\\2020\\2020-01-01_2020-06-30.csv")
# Converter as colunas de datas para o formato Date
nova_base$datetime_autuacao <- as.Date(nova_base$datetime_autuacao, format = "%Y-%m-%d")
nova_base$data_pagamento <- as.Date(nova_base$data_pagamento, format = "%Y-%m-%d")
# Realizar o left join e calcular a data estimada de pagamento
nova_base %<>%
left_join(media_dias_por_caracteristicas, by = c("status_infracao", "pontuacao", "especie_veiculo")) %>%
mutate(
data_estimada_pagamento = datetime_autuacao + days(round(mean_days_to_pay)), # Arredondar os dias para valores inteiros
data_est_pag = if_else(
is.na(data_pagamento),
as.Date(NA), # Manter NA se datetime_pagamento for NA
if_else(data_estimada_pagamento < data_pagamento,
data_estimada_pagamento,
data_pagamento)
)
)
beep(sound = 1)
write.csv(nova_base, 'E:\\Dropbox\\transito\\microdados\\2020\\2020_1.csv')
# Remover todos os objetos, exceto 'media_dias_caracteristicas'
rm(list = setdiff(ls(), c("media_dias_por_caracteristicas")))
gc()
nova_base <- read.csv("E:\\Dropbox\\transito\\microdados\\2020\\2020-07-01_2020-12-31.csv")
# Converter as colunas de datas para o formato Date
nova_base$datetime_autuacao <- as.Date(nova_base$datetime_autuacao, format = "%Y-%m-%d")
nova_base$data_pagamento <- as.Date(nova_base$data_pagamento, format = "%Y-%m-%d")
# Realizar o left join para trazer a média de dias de pagamento para a nova base
nova_base %<>%
left_join(media_dias_por_caracteristicas, by = c("status_infracao", "pontuacao", "especie_veiculo")) %>%
mutate(
data_estimada_pagamento = datetime_autuacao + days(round(mean_days_to_pay)), # Arredondar os dias para valores inteiros
data_est_pag = if_else(
is.na(data_pagamento),
as.Date(NA), # Manter NA se datetime_pagamento for NA
if_else(data_estimada_pagamento < data_pagamento,
data_estimada_pagamento,
data_pagamento)
)
)
write.csv(nova_base, 'E:\\Dropbox\\transito\\microdados\\2020\\2020_2.csv')
beep(sound = 1)
# Remover todos os objetos, exceto 'nova_base' e 'media_dias_caracteristicas'
rm(list = setdiff(ls(), c("media_dias_por_caracteristicas")))
gc()
######################################################
### Ajeitando as datas de pgto de 2021 ###############
######################################################
# Caminho para a pasta onde estão os arquivos CSV
pasta <- "E:\\Dropbox\\transito\\microdados\\2021"
# Listar todos os arquivos na pasta que terminam com '.csv'
arquivos_csv <- list.files(pasta, pattern = "\\.csv$", full.names = TRUE)
# Função para processar cada arquivo
processar_arquivo <- function(arquivo) {
# Ler o arquivo CSV
nova_base <- read.csv(arquivo)
# Converter as colunas de datas para o formato Date
nova_base$datetime_autuacao <- as.Date(nova_base$datetime_autuacao, format = "%Y-%m-%d")
nova_base$data_pagamento <- as.Date(nova_base$data_pagamento, format = "%Y-%m-%d")
# Realizar o left join para trazer a média de dias de pagamento para a nova base
nova_base %<>%
left_join(media_dias_por_caracteristicas, by = c("status_infracao", "pontuacao", "especie_veiculo")) %>%
mutate(
data_estimada_pagamento = datetime_autuacao + days(round(mean_days_to_pay)), # Arredondar os dias para valores inteiros
data_est_pag = if_else(
is.na(data_pagamento),
as.Date(NA), # Manter NA se datetime_pagamento for NA
if_else(data_estimada_pagamento < data_pagamento,
data_estimada_pagamento,
data_pagamento)
)
)
# Gerar um nome para o novo arquivo baseado no nome original
nome_arquivo_saida <- file.path(dirname(arquivo), paste0(basename(arquivo), "_processed.csv"))
# Salvar o resultado no novo arquivo CSV
write.csv(nova_base, nome_arquivo_saida, row.names = FALSE)
# Mensagem de confirmação para o usuário
print(paste("Arquivo processado:", nome_arquivo_saida))
# Apagar o dataframe para liberar memória
rm(nova_base)
gc() # Realizar a coleta de lixo para liberar memória
}
# Aplicar a função de processamento a todos os arquivos da pasta
lapply(arquivos_csv, processar_arquivo)
# Emitir um som ao final
beep(sound = 1)