ipeaGIT / enderecopadrao

Pacote de R para padronizar endereços brasileiros
https://ipeagit.github.io/enderecopadrao/
Other
0 stars 0 forks source link

separar tipoLogradouro #4

Open lucasmation opened 4 months ago

lucasmation commented 4 months ago

no cadastro do CPF "logradouro" e "tipoLogradouro" sao em variáveis separadas. Acho que é boa prática ter esta separação. O CNEFE tb separa, etc. Listo as possibilidades abaixo (item 1). No padrao Receita (so olhei na base do CPF, seria bom olhar na base do CNPJ tb, to supondo que seja o mesmo padrão). Seria bom fazer uma tabela comparando com os tipos de logradouro de outras bases (RAIS, CadUnico, TSEE), para ter uma nocao. Mas seguir o padrao da receita pode ser o ideial.

Além de separar, existem alguns erros de preenchimento entre tipoLogradouro e logradouro que podemos corrigir:

  1. Declarante nao encontra o tipoLogradouro na lista (mas tinha). Aí ele coloca tipoLogradouro =="OUTRO" e incluem o tipoLogradouro como 1a palavra do Nome Logradouro. Este caso corresponde a 790k casos (de 24m de combinaçoes de tipoLogradouro-logradouro).
  2. Inclusao do tipoLogradouro no nome do logradouro. Ex: tipoLogradouro =="RUA" e logradouro == "RUA CARLOS VIANA", este caso corresponde a 800k casos (de 24m de combinaçoes).
  3. Exite todo o tipo de combinações e coisas estranhas. Ex: tipoLogradouro =="RUA" mas logradouro == "AVENIDA CARLOS VIANA".

Incluo abaixo codigos para resolver 1 e 2 num fluxo de processamento de dados normal. Precisaria pensar em como transformar isso em funçoes adequadas.

Sobre 3, começam a ter casos demais, precisamos pensar quando para de tentar resolver os problemas.

1) Tipos de Logradouro

tiposLogr <- c("RUA", "OUTROS", "SITIO", "ALAMEDA", "AVENIDA", "RESIDENCIAL",  "QUADRA", "FAZENDA",    
    "RODOVIA","CHACARA", "VILA" , "DISTRITO", "TRAVESSA", "COLONIA", "ESTRADA", "CAMPO",  
    "TREVO", "PASSARELA", "LAGOA", "VIA", "PRACA", "SUPERQUADRA", "CONJUNTO", "CONDOMINIO", 
    "SETOR", "LOTEAMENTO",  "JARDIM", "VEREDA", "FEIRA", "NUCLEO", "PARQUE", "FAVELA",     
    "PATIO", "MORRO", "VIELA", "PRAIA", "LARGO", "LAGO", "AREA", "VALE",       
    "ESPLANADA", "TRECHO", "MARGEM", "LADEIRA", "RECANTO", "VIADUTO", "AEROPORTO",  "ESTACAO")

tipologr_logr2[,.(N=sum(N)),tipoLogradouro][order(-N)]
    tipoLogradouro         N
            <char>     <int>
 1:         OUTROS 249699723
 2:            RUA 247270133
 3:        AVENIDA 161216853
 4:       TRAVESSA 132650889
 5:           VILA 103376166
 6:          SITIO 103325129
 7:    RESIDENCIAL 102540406
 8:          TREVO 102484504
 9:        ESTRADA 100856288
10:        FAZENDA  99168343
11:        RODOVIA  98668030
12:          SETOR  95306055
13:        ALAMEDA  95049992
14:        RECANTO  93153723
15:          PRACA  90830288
16:       DISTRITO  83581841
17:        CHACARA  80871486
18:     LOTEAMENTO  80209665
19:       CONJUNTO  78497442
20:     CONDOMINIO  77778622
21:          CAMPO  75025813
22:           AREA  73375127
23:      AEROPORTO  72189526
24:          VIELA  71902812
25:         JARDIM  69383053
26:        COLONIA  66271037
27:            VIA  61582926
28:         QUADRA  60484074
29:         PARQUE  57448505
30:         FAVELA  55469272
31:      PASSARELA  52104209
32:           VALE  46679194
33:          PRAIA  45558684
34:        LADEIRA  43017756
35:      ESPLANADA  40514490
36:          MORRO  40327677
37:          LARGO  39453564
38:         NUCLEO  35171711
39:           LAGO  30990339
40:         TRECHO  30302779
41:         VEREDA  29998184
42:          LAGOA  29303007
43:          PATIO  23789575
44:        ESTACAO  22187872
45:          FEIRA  20492188
46:    SUPERQUADRA  15942265
47:         MARGEM  15741859
48:        VIADUTO  11420784
    tipoLogradouro         N

2) Corrigindo tipoLogradouro e/ou removendo tipo do nome do logradouro

#collapse to tipoLogradouro, - logradouro level
tipologr_logr2 <- cpf[,.N,.(tipoLogradouro,logradouro)]
tipologr_logr2[, logradouro_padrao := padronizar_logradouros(logradouro)]
tipologr_logr2[, logradouro_padrao_1a_palavra := str_extract(logradouro_padrao, "\\b\\w+\\b")]

#2)Fixing:
  #2.1) If tipologr_logr=='OUTROS' but 1st word onther tipoLogradouro: 
  #     Replace tipoLogradouro by that other word and remove this 1st word from logradouro
  tipologr_logr2[tipoLogradouro == 'OUTROS' & 
                   logradouro_padrao_1a_palavra %in% tiposLogr[tiposLogr != "OUTROS"], 
                 ':='(tipoLogradouro = logradouro_padrao_1a_palavra,
                      logradouro_padrao = sub("\\b\\w+\\b\\s*", "", logradouro_padrao))]
  tipologr_logr2[, logradouro_padrao_1a_palavra := str_extract(logradouro_padrao, "\\b\\w+\\b")]
  #2.2) Remove the first word of logradouro if it isthe same tipoLogradouro
  tipologr_logr2[, logradouro_padrao := ifelse(logradouro_padrao_1a_palavra == tipoLogradouro, 
                                             sub("\\b\\w+\\b\\s*", "", logradouro_padrao), 
                                             logradouro_padrao)]  
  tipologr_logr2[, logradouro_padrao_1a_palavra := str_extract(logradouro_padrao, "\\b\\w+\\b")]

Impacto destas correcoes

Combinações únicas de tipoLogradouro-logradouro

dhersz commented 4 months ago

Legal. Ainda não tinha visto uma base com o logradouro e o tipo separados, mas já faço alguma dessas correções na padronizar_logradouros(). Na RAIS, por exemplo, é cheio de logradouro "RUA RUA ALMIRANTE TAMANDARÉ....", ou "RUA AVENIDA JK", "RUA RODOVIA BR-040", "RODOVIA RODOVIA BR-040", e por aí vai. É um misto dos casos 2 e 3, que você comentou.

Sobre o caso 3, a grande maioria dos casos que eu vejo envolve "RUA" e "RODOVIA". Por exemplo, "RUA AVENIDA FOO", "RODOVIA AVENIDA BAR", "RUA TRAVESSA DO OUVIDOR", "RODOVIA ESTRADA FOOBAR", etc. Esse poderia ser um primeiro recorte.

dhersz commented 2 months ago

Mation, onde você achou a lista de possibilidades de tipos de logradouro? Dei uma procurada aqui e não to achando.

lucasmation commented 2 months ago

Acho que foi no cadasrtodo CPF. E há uns anos atrás no CNEFE. Num mundo ideal teríamos uma tabela de compatibilização entre os tipos de logradouro das principais bases (CPF, CadUnico, TSEE, CNEFE, etc...)

Em qua., 15 de mai. de 2024 às 11:09, Daniel Herszenhut < @.***> escreveu:

Mation, onde você achou a lista de possibilidades de tipos de logradouro? Dei uma procurada aqui e não to achando.

— Reply to this email directly, view it on GitHub https://github.com/ipeaGIT/enderecopadrao/issues/4#issuecomment-2112656696, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAK4HCHOU4RHQJVAXQXKVBDZCNUCVAVCNFSM6AAAAABE5NQAI2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMJSGY2TMNRZGY . You are receiving this because you authored the thread.Message ID: @.***>

dhersz commented 2 months ago

encontrei esse link aqui que lista vários outros: https://www.ruacep.com.br/tipos-de-logradouros/

quase todos esses aparecem na base do cadunico, inclusive os menos ortodoxos (zigue-zague, acampamento, avenida contorno, etc). vale ter em mente