<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    wow! Achei muito legal o que voce descobriu! Isso com certeza sera'
    util em caso de haver base maior de CEPs. Como sabiamos, CEP e'
    menos preciso que logradouro+numero. Mas agora temos tambem
    conhecimento do nivel de precisao de raiz do CEP. <br>
    <br>
    Elias<br>
    <br>
    <div class="moz-cite-prefix">On 05/05/15 15:00, Éder Comunello
      wrote:<br>
    </div>
    <blockquote
cite="mid:CABmC8g=6D8vaMfp5mC8bVHBtNE96nhiU5-b--Ai9T074ecV+Sw@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>Elias, bom dia!</div>
        <div><br>
        </div>
        <div>Fiz mais um exercício pra tentar medir o impacto da
          "simplificação" dos ceps...</div>
        <div><br>
        </div>
        <div>O primeiro fato que percebo é que a consulta por cep, mesmo
          completo, é pouco precisa/acurada. A busca por logradouro é
          possível, mas talvez complicada pra implementar nessas
          bases...</div>
        <div><br>
        </div>
        <div>Se você tiver paciência de seguir o código abaixo, o que eu
          queria mostrar é que quando você trunca o cep, zerando o
          último dígito, 99% dos valores retornados vão diferir até 2 km
          da consulta original, mas economizam 22% de consultas ao
          geocode().</div>
        <div><br>
        </div>
        <div>Zerando os dois últimos dígitos, 97% dos dados variam até 2
          km, mas economiza 90% das consultas.</div>
        <div><br>
        </div>
        <div>E essa variação não é necessariamente erro, porque não
          temos as coordenadas "reais" pra avaliar...</div>
        <div><br>
        </div>
        <div>No código eu não reconsultei os valores, mas tentei
          aproveitar sua base. Daí a presença dos NA's...</div>
        <div><br>
        </div>
        <div><font face="monospace, monospace">### <code r></font></div>
        <div><font face="monospace, monospace">url0 <- "<a
              moz-do-not-send="true"
href="http://leg.ufpr.br/%7Eelias/tmp/cep_curitiba_cwb_georef_longlat.txt">http://leg.ufpr.br/~elias/tmp/cep_curitiba_cwb_georef_longlat.txt</a>"</font></div>
        <div><font face="monospace, monospace">df0  <-
            read.table(url0, head=T)</font></div>
        <div><font face="monospace, monospace">head(df0)</font></div>
        <div><font face="monospace, monospace">length(unique(df0$cep)) #
            9183 ceps</font></div>
        <div><font face="monospace, monospace">length(unique(paste(df0$long,
            df0$lat))) # 6414 pares de coordenadas distintas</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Truncando "xxxxx-xxx"
            para "xxxxx-xx0"</font></div>
        <div><font face="monospace, monospace">### Desconsiderando o
            último dígito do cep</font></div>
        <div><font face="monospace, monospace">df1 <- df0</font></div>
        <div><font face="monospace, monospace">df1$cep2=trunc(df0$cep/10)*10</font></div>
        <div><font face="monospace, monospace">head(df1)</font></div>
        <div><font face="monospace, monospace">length(unique(df1$cep2))
            # 7135 ceps (-2048 ou -22%)</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Pra não gastar minhas
            2500 consultas :D, vou usar os dados já consultados!</font></div>
        <div><font face="monospace, monospace">df2 <- merge(df1, df0,
            all.x=T, sort=F, by.x="cep2", by.y="cep")</font></div>
        <div><font face="monospace, monospace">head(df2)</font></div>
        <div><font face="monospace, monospace">sum(complete.cases(df2))
            # 9071! Com a consulta de geocode, provavelmente todos
            retornariam valor</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Valor aproximado de 1
            grau dessa área (em km)</font></div>
        <div><font face="monospace, monospace">require(sp)</font></div>
        <div><font face="monospace, monospace">spDistsN1(matrix(c(-49,-50,
            -25,-26),2,2), matrix(c(-50,-25),1,2), longlat=TRUE)</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">df2$dist <-
            sqrt((df2[,3]-df2[,5])^2+(df2[,4]-df2[,6])^2)*105 ###
            distância aproximada em km!</font></div>
        <div><font face="monospace, monospace">hist(df2$dist)</font></div>
        <div><font face="monospace, monospace">range(df2$dist, na.rm=T)</font></div>
        <div><font face="monospace, monospace">table(cut(df2$dist,
            breaks=c(-1:5,20)))</font></div>
        <div><font face="monospace, monospace"># (-1,0]  (0,1]  (1,2]
             (2,3]  (3,4]  (4,5] (5,20] </font></div>
        <div><font face="monospace, monospace">#   7528   1132    362  
              24      2      0     23</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">sum(table(cut(df2$dist,
            breaks=c(-1:5,20)))[1:3])</font></div>
        <div><font face="monospace, monospace">### 99% dos dados
            (9022/9071) diferem até 2 km em relação a consulta original</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">sum(df2$dist>5,
            na.rm=T) ### 23 valores bem imprecisos</font></div>
        <div><font face="monospace, monospace">df2[which(df2$dist>5),]</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Onde estão ocorrendo
            problemas?</font></div>
        <div><font face="monospace, monospace">require(ggmap)</font></div>
        <div><font face="monospace, monospace">adr <-
            paste0("Curitiba, PR, Brazil, ",
            df2[which(df2$dist>5),2])</font></div>
        <div><font face="monospace, monospace">res <- geocode(adr,
            output="more")</font></div>
        <div><font face="monospace, monospace">res[c(1:4,10)]</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">cbind(df2[which(df2$dist>5),1:4],res[1:6])</font></div>
        <div><font face="monospace, monospace">### boa parte dos
            problemas referem-se aos ceps da cidade industrial</font></div>
        <div><font face="monospace, monospace">### você pode filtrar
            esses ceps e tratá-los diferenciados</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Truncando "xxxxx-xxx"
            para "xxxxx-x00"</font></div>
        <div><font face="monospace, monospace">df10 <- df0</font></div>
        <div><font face="monospace, monospace">df10$cep2=trunc(df0$cep/100)*100</font></div>
        <div><font face="monospace, monospace">head(df10)</font></div>
        <div><font face="monospace, monospace">length(unique(df10$cep2))
            # 941 ceps (-8242 ou -90%)</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">df20 <- merge(df10,
            df0, all.x=T, sort=F, by.x="cep2", by.y="cep")</font></div>
        <div><font face="monospace, monospace">head(df20)</font></div>
        <div><font face="monospace, monospace">sum(complete.cases(df20))
            # 8312! Com a consulta de geocode, provavelmente todos
            retornariam valor</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">df20$dist <-
            sqrt((df20[,3]-df20[,5])^2+(df20[,4]-df20[,6])^2)*105 ###
            distância aproximada em km!</font></div>
        <div><font face="monospace, monospace">hist(df20$dist)</font></div>
        <div><font face="monospace, monospace">range(df20$dist, na.rm=T)</font></div>
        <div><font face="monospace, monospace">table(cut(df20$dist,
            breaks=c(-1:5,20)))</font></div>
        <div><font face="monospace, monospace"># (-1,0]  (0,1]  (1,2]
             (2,3]  (3,4]  (4,5] (5,20] </font></div>
        <div><font face="monospace, monospace">#   1647   5403   1050  
             131     17      6     58 </font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">sum(table(cut(df20$dist,
            breaks=c(-1:5,20)))[1:3])</font></div>
        <div><font face="monospace, monospace">### 97% dos dados
            (8100/8312) diferem até 2 km em relação a consulta completa</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">sum(df20$dist>5,
            na.rm=T) ### 23 valores bem imprecisos</font></div>
        <div><font face="monospace, monospace">df20[which(df20$dist>5),]</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">### Onde estão ocorrendo
            problemas?</font></div>
        <div><font face="monospace, monospace">require(ggmap)</font></div>
        <div><font face="monospace, monospace">adr1 <-
            paste0("Curitiba, PR, Brazil, ",
            df20[which(df20$dist>5),2])</font></div>
        <div><font face="monospace, monospace">res1 <- geocode(adr1,
            output="more")</font></div>
        <div><font face="monospace, monospace">res1[c(1:4,10)]</font></div>
        <div><font face="monospace, monospace"><br>
          </font></div>
        <div><font face="monospace, monospace">cbind(df20[which(df20$dist>5),1:4],res1[1:6])</font></div>
        <div><font face="monospace, monospace">### aumentam as
            localidades com problema, mas acho que ainda assim dá pra
            contornar</font></div>
        <div><font face="monospace, monospace">### </code></font></div>
        <div><br>
        </div>
        <div class="gmail_extra"><br clear="all">
          <div>
            <div class="gmail_signature">
              <div dir="ltr">Éder Comunello <<a
                  moz-do-not-send="true"
                  href="mailto:comunello.eder@gmail.com" target="_blank">c</a><a
                  moz-do-not-send="true"
                  href="mailto:omunello.eder@gmail.com" target="_blank">omunello.eder@gmail.com</a>>
                <br>
                Dourados, MS - [22 16.5'S, 54 49'W]<br>
              </div>
            </div>
          </div>
          <br>
          <div class="gmail_quote"><br>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
R-br mailing list
<a class="moz-txt-link-abbreviated" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a>
<a class="moz-txt-link-freetext" href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a>
Leia o guia de postagem (<a class="moz-txt-link-freetext" href="http://www.leg.ufpr.br/r-br-guia">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
In God we trust, all others bring data.
 – William Edwards Deming (1900-1993)</pre>
  </body>
</html>