
Olá pessoal.. Uma API que me ajudou bastante quando é necessário certo grau de precisão e muitas consultas é o serviço dessa equipe : https://www.geocode.farm/ Uma das modalidades de consulta é paga mas nada exorbitante. Grande abraço. Pedro Em 05/05/2015 10:00, "Éder Comunello" <comunello.eder@gmail.com> escreveu:
Elias, bom dia!
Fiz mais um exercício pra tentar medir o impacto da "simplificação" dos ceps...
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...
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().
Zerando os dois últimos dígitos, 97% dos dados variam até 2 km, mas economiza 90% das consultas.
E essa variação não é necessariamente erro, porque não temos as coordenadas "reais" pra avaliar...
No código eu não reconsultei os valores, mas tentei aproveitar sua base. Daí a presença dos NA's...
### <code r> url0 <- "http://leg.ufpr.br/~elias/tmp/cep_curitiba_cwb_georef_longlat.txt " df0 <- read.table(url0, head=T) head(df0) length(unique(df0$cep)) # 9183 ceps length(unique(paste(df0$long, df0$lat))) # 6414 pares de coordenadas distintas
### Truncando "xxxxx-xxx" para "xxxxx-xx0" ### Desconsiderando o último dígito do cep df1 <- df0 df1$cep2=trunc(df0$cep/10)*10 head(df1) length(unique(df1$cep2)) # 7135 ceps (-2048 ou -22%)
### Pra não gastar minhas 2500 consultas :D, vou usar os dados já consultados! df2 <- merge(df1, df0, all.x=T, sort=F, by.x="cep2", by.y="cep") head(df2) sum(complete.cases(df2)) # 9071! Com a consulta de geocode, provavelmente todos retornariam valor
### Valor aproximado de 1 grau dessa área (em km) require(sp) spDistsN1(matrix(c(-49,-50, -25,-26),2,2), matrix(c(-50,-25),1,2), longlat=TRUE)
df2$dist <- sqrt((df2[,3]-df2[,5])^2+(df2[,4]-df2[,6])^2)*105 ### distância aproximada em km! hist(df2$dist) range(df2$dist, na.rm=T) table(cut(df2$dist, breaks=c(-1:5,20))) # (-1,0] (0,1] (1,2] (2,3] (3,4] (4,5] (5,20] # 7528 1132 362 24 2 0 23
sum(table(cut(df2$dist, breaks=c(-1:5,20)))[1:3]) ### 99% dos dados (9022/9071) diferem até 2 km em relação a consulta original
sum(df2$dist>5, na.rm=T) ### 23 valores bem imprecisos df2[which(df2$dist>5),]
### Onde estão ocorrendo problemas? require(ggmap) adr <- paste0("Curitiba, PR, Brazil, ", df2[which(df2$dist>5),2]) res <- geocode(adr, output="more") res[c(1:4,10)]
cbind(df2[which(df2$dist>5),1:4],res[1:6]) ### boa parte dos problemas referem-se aos ceps da cidade industrial ### você pode filtrar esses ceps e tratá-los diferenciados
### Truncando "xxxxx-xxx" para "xxxxx-x00" df10 <- df0 df10$cep2=trunc(df0$cep/100)*100 head(df10) length(unique(df10$cep2)) # 941 ceps (-8242 ou -90%)
df20 <- merge(df10, df0, all.x=T, sort=F, by.x="cep2", by.y="cep") head(df20) sum(complete.cases(df20)) # 8312! Com a consulta de geocode, provavelmente todos retornariam valor
df20$dist <- sqrt((df20[,3]-df20[,5])^2+(df20[,4]-df20[,6])^2)*105 ### distância aproximada em km! hist(df20$dist) range(df20$dist, na.rm=T) table(cut(df20$dist, breaks=c(-1:5,20))) # (-1,0] (0,1] (1,2] (2,3] (3,4] (4,5] (5,20] # 1647 5403 1050 131 17 6 58
sum(table(cut(df20$dist, breaks=c(-1:5,20)))[1:3]) ### 97% dos dados (8100/8312) diferem até 2 km em relação a consulta completa
sum(df20$dist>5, na.rm=T) ### 23 valores bem imprecisos df20[which(df20$dist>5),]
### Onde estão ocorrendo problemas? require(ggmap) adr1 <- paste0("Curitiba, PR, Brazil, ", df20[which(df20$dist>5),2]) res1 <- geocode(adr1, output="more") res1[c(1:4,10)]
cbind(df20[which(df20$dist>5),1:4],res1[1:6]) ### aumentam as localidades com problema, mas acho que ainda assim dá pra contornar ### </code>
Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.