Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

separar tipoLogradouro #4

Open
lucasmation opened this issue Mar 19, 2024 · 4 comments
Open

separar tipoLogradouro #4

lucasmation opened this issue Mar 19, 2024 · 4 comments

Comments

@lucasmation
Copy link

lucasmation commented Mar 19, 2024

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

  • Original: 24.2m (24184709)
  • pós `padronizar_logradouros' : 23.0m (23033632)
  • (2.1) pós trocar OUTROS pelo tipo logr e excluir tipo da 1a palavra do logradouro: 22.7m (22684286)
  • (2.2) pós remover tiposLogr da 1a palavra do logradouro (2.2): 22.2m (22203661)
@dhersz
Copy link
Member

dhersz commented Mar 19, 2024

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
Copy link
Member

dhersz commented May 15, 2024

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

@lucasmation
Copy link
Author

lucasmation commented May 15, 2024 via email

@dhersz
Copy link
Member

dhersz commented May 15, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants