Ir para o conteúdo

CNEFE: mudanças entre as edições

(movendo pontos para as faces)
Linha 71: Linha 71:
LATITUDE real,
LATITUDE real,
LONGITUDE real,
LONGITUDE real,
NV_GEO_COORD text,
NV_GEO_COORD text, -- nivel de confiança na coordenada
COD_ESPECIE text,
COD_ESPECIE text,
DSC_ESTABELECIMENTO text,
DSC_ESTABELECIMENTO text,
Linha 84: Linha 84:
drop view if exists vw02_ibge_cnefe2022;
drop view if exists vw02_ibge_cnefe2022;
create view vw02_ibge_cnefe2022 as
create view vw02_ibge_cnefe2022 as
  select *, ST_GeoHash(geom,9) as ghs
  select *, ST_GeoHash(geom,9) as ghs9, ST_GeoHash(geom,10) as ghs10
  from (
  from (
   select *, regexp_replace( coalesce(nom_tipo_seglogr,'') ||' '|| coalesce(nom_titulo_seglogr,'') ||' '|| coalesce(nom_seglogr,''), '\s+',' ','g') as via_name,
   select *, regexp_replace( coalesce(nom_tipo_seglogr,'') ||' '|| coalesce(nom_titulo_seglogr,'') ||' '|| coalesce(nom_seglogr,''), '\s+',' ','g') as via_name,
Linha 91: Linha 91:
  ) t
  ) t
;
;
--select count(*) from ibge_cnefe2022; -- 762239
-- teste de hipotese de ponto e endereço únicos:
-- select count(*) from (select distinct ST_GeoHash(geom,9) as ghs, cod_setor, num_quadra, num_face, via_name, num_endereco from vw02_ibge_cnefe2022 -- same where geom is not null and via_name>'' and num_endereco>'' ) t; -- 379957
-- select count(*) from (select distinct ghs9, cod_setor, num_quadra, num_face, via_name, num_endereco from vw02_ibge_cnefe2022) t; -- 379957. -- same where geom is not null and via_name>'' and num_endereco>'' ) t;
-- select 379957.0/762239; -- 49,847% = 50%
-- select 379957.0/762239; -- 49,847% = 50%
</pre>
</pre>
Avaliação pelo qualificador do IBGE, nv_geo_coord:
<pre>
-- Por domicílio
with t as (select count(*) as nt from ibge_cnefe2022) select nv_geo_coord, count(*) n, round(100.0*count(*)/t.nt,2)::text||'%' as perc  from t,vw02_ibge_cnefe2022 group by 1,nt order by 1;
</pre>
Os dois primeiros são válidos, os demais podem ser descartados:
=== Contagens gerais ===
<pre>
select count(*) n_dist from (select distinct * from ibge_cnefe2022) t
; -- 762239
select count(*) n, count(distinct cod_unico_endereco) n_cod_uend, count(distinct ghs) n_ghs,
count(distinct latitude||','||longitude) n_latlon
from vw02_ibge_cnefe2022
; -- 762239 |    757512 | 350635 | 389028
select avg(n) avg,  stddev_pop(n) dev, count(*) tmultiplos, sum(n) as tot from (
select cod_unico_endereco, count(*) n from ibge_cnefe2022 group by 1 having count(*)>1
) t; --  2.0045 | 0.07 | 4706 | 9433.  Conclusão: 2.01±0.07 , maioria dos 9433 com 1 duplicidade.
select count(*) n_ghs9_nv from (select distinct nv_geo_coord, ghs9 from vw02_ibge_cnefe2022) t
; -- 358000
select count(*) n_ghs10_nv from (select distinct nv_geo_coord, ghs10 from vw02_ibge_cnefe2022) t
; -- 393565
select sqrt(avg(st_area(ST_GeomFromGeoHash(ghs9),true))) as ghs9_precisao,
      sqrt(avg(st_area(ST_GeomFromGeoHash(ghs10),true))) as ghs10_precisao
from vw02_ibge_cnefe2022
; -- 4.437 ~ 5 metros de precisão no Geohash de 9 dígitos. 0.7844 ~ 1 metro no de 10 dígitos.
-- select round(100.0*x/762239) perc_x_of_n;
select round(100.0*393565/762239) perc_x_of_n;
select compl1, count(*) n_casos FROM (
  select ghs, array_agg(distinct nom_comp_elem1) compl1 from vw02_ibge_cnefe2022 group by 1 having count(*)>1
) t group by 1 order by 2 desc, 1;
                      compl1                        | n_casos
------------------------------------------------------+---------
{NULL}                                              |  18184
{APARTAMENTO}                                        |  14736
{CASA}                                              |    8485
{FRENTE,FUNDOS}                                      |    5855
{CASA,NULL}                                          |    4651
{BLOCO}                                              |    3873
{FUNDOS,NULL}                                        |    2508
{FRENTE,NULL}                                        |    1331
{FUNDOS}                                            |    1111
{SOBRADO,TERREO}                                    |    1025
{APARTAMENTO,NULL}                                  |    951
{CASA,FUNDOS}                                        |    653
</pre>
{|class="wikitable"|
|-
!Rótulo !! select count(''criterio''?)<br/>from ibge_cnefe2022!! n_doms  !!  perc ''n''
|-
|''n''<br/>= n_dist|| <code>*</code>          || 762239 || 100%
|-
|''n_cod_uend''|| <code>distinct cod_unico_endereco</code>          || 757512 || 99.4%
|-
|''n_latlon''|| <code><nowiki>distinct latitude||','||longitude</nowiki></code>||389028 || 51%
|-
|''n_ghs10'' || <code>distinct ghs10</code>||386857 || 51%
|-
|''n_ghs9'' || <code>distinct ghs9</code>||350635 || 46%
|}
Conclusões sobre o perfil de algumas contagens:
* Identificadores únicos: era esperada a unicidade em 100% dos registros, ou seja,  que ''n''=''n_cod_uend''. Houve, todavia, uma diferença de 0,6% (100% - 99,4%), devido a casos de repetição. O valor de contagens superiores a 1 resultou em média de 2,01±0,07; portanto maioria dos 9433 identificadores problemáticos tem apenas mais 1 outro domicílio apresentando mesmo identificador.
*  A contagem de ''n_latlon'', com apenas 51% ao invés de 100%, mostra a intensão do IBGE em incluir nos registros os casos de endereço horizontais iguais porém com complemento diferenciando, o que se confirma pelas contagens no perfil de ''compl1''.  A rigor o IBGE registrou "endereços domicíliares", não apenas "endereços de rua". Neste relatório denominaremos o primeiro de domicílio ('''dom''') e o segundo de endereço de fato ('''end''') ou ponto.
*  A contagem de ''n_ghs9'' fez uso de Geohashes de 9 dígitos, garantindo a precisão da ordem de 5 metros, ou seja, superior ao erro de GPS da núvem de pontos. A contagem ''n_ghs9'' resultou em 46%, bem longe dos 51% de ''n_latlon'', gerando talvez duplicidade maior do que esperada. Como a precisão é variável (depende dos satélites GPS e do [https://www.youtube.com/watch?v=AVW40YB3v2s tempo de espera do agente]), sugere-se usar ''ghs10'' ou manter o ponto original e só depois do translado para a face de quadra (que aumenta a precisão) fazer a contagem de Geohashes ''ghs10''.
 
{|class="wikitable"|
|-
! nv_geo_coord !! n_doms  !!  perc 
|-
| 1 = Endereço - coordenada original do Censo 2022          || 630603 || 82.73%
|-
| 2 = Endereço - coordenada modificada (apartamentos em um mesmo número no logradouro). || 119942 || 15.74%
|-
| 3 = Endereço - coordenada estimada (endereços originalmente sem coordenadas ou coordenadas inválidas).  || 8900 || 1.17%
|-
| 4 = Face de quadra. || 2753 || 0.36%
|-
| 5 = Localidade ||      4 || 0.00%
|-
| 6 = Setor censitário ||  37 || 0.00%
|}
<pre>
-- por pontos únicos
with t as (select count(*) as nt, count(distinct ghs) ntpt  from vw02_ibge_cnefe2022) select nv_geo_coord, count(distinct ghs) n_pts, round(100.0*count(distinct ghs)/t.ntpt,2)::text||'%' as perc  from t,vw02_ibge_cnefe2022 group by 1,ntpt order by 1;
</pre>
{|class="wikitable"|
|-
! nv_geo_coord !! n_pts  !!  perc 
|-
| 1 = Endereço - coordenada original do Censo 2022          || 343098 || 97.85%
|-
| 2 = Endereço - coordenada modificada (apartamentos em um mesmo número no logradouro). ||  11224 || 3.20%
|-
| 3 = Endereço - coordenada estimada (endereços originalmente sem coordenadas ou coordenadas inválidas).  ||  2865 || 0.82%
|-
| 4 = Face de quadra. ||    798 || 0.23%
|-
| 5 = Localidade ||      3 || 0.00%
|-
| 6 = Setor censitário ||    12 || 0.00%
|}
Conclusão: como queremos filtrar até o nível de pontos únicos, há garantia de 99,9% dos endereços em condição adequada (tipos 1 ou 2).
As filtragens seguem o seguinte passo a passo:


* Unicidade de endereço: DISTINCT cod_setor, cep, via_name, num_endereco
* Unicidade de endereço: DISTINCT cod_setor, cep, via_name, num_endereco
2 402

edições