3.2 Registr@
Base de datos de personas del programa de Gestión para el Registro y seguimiento de documentos Registr@ proporcionada por el Servicio de Sistemas de Información Corporativos de la [DGITIP.
3.2.1 Carga
Lo hemos exportado de SQL Server a fichero de texto. Cada persona está en una línea del fichero. Los campos están separados por tabuladores.
registra_personas <-
read_tsv("./datos/registra/personas.txt",
locale= locale(encoding = "UTF-8"),
col_names=TRUE,
col_types = cols_only(id_persona = col_character(),
dni_nif_cif = col_character(),
apellido1 = col_character(),
apellido2 = col_character(),
nombre = col_character(),
telefono = col_character(),
fecha_nacimiento = col_datetime(),
id_domicilio_principal = col_integer(),
fecha_alta = col_datetime(),
fecha_baja = col_datetime(),
Correo_Electronico = col_character(),
nombre_pais = col_character(),
nombre_provincia = col_character(),
nombre_loc = col_character()
),
na=c('','NULL','-','.','*','--',',',',,'))
3.2.2 Análisis
Número total de registros
## [1] 753834
Esta es la distribución de los datos según la fecha de la observación. Hay unas algunas observaciones muy antiguas (no muchas, la escala es logarítmica).
registra_personas %>%
ggplot(aes(x=year(bdc_fecha_valor))) +
geom_histogram(color = "white", fill = "blue") +
scale_y_log10(name="count (logarithmic)")
En cuanto a los valores no conocidos, hay unos cuantos sin id oficial, y muchos sin nombre, municipio o segundo apellido. Más de un treinta por ciento no tienen fecha de nacimiento y ninguno tiene registrado el sexo.
registra_personas %>%
select(bdc_id_oficial, bdc_nombre, bdc_apellido_1, bdc_apellido_2,
bdc_fecha_nacimiento, bdc_sexo, bdc_municipio_domicilio) %>%
plot_missing()
La distribución de las personas sin identificador oficial en función de la fecha en la que se hizo la observación indica que a partir de 2006 se recogen casi siempre este dato ( la escala es logarítmica).
registra_personas %>%
filter(is.na(bdc_id_oficial)) %>%
ggplot(aes(x=year(bdc_fecha_valor))) +
geom_histogram(color = "white", fill = "blue") +
scale_y_log10(name="count (logarithmic)")
En cambio, la fecha de nacimiento falta sobre todo en las observaciones más recientes, a partir del año 2000.
registra_personas %>%
filter(is.na(bdc_fecha_nacimiento)) %>%
ggplot(aes(x=year(bdc_fecha_valor))) +
geom_histogram(color = "white", fill = "blue")
En cuanto al nombre, parece que casi todos los que no tienen nombre son personas jurídicas:
registra_personas %>% filter(is.na(bdc_nombre)) %>%
select(bdc_id_oficial, bdc_apellido_1) %>%
sample_n(10) %>% pulcro()
bdc_id_oficial | bdc_apellido_1 |
---|---|
E31723133 | CAYON OUTOMURO ANA Y GARDE FABRE GUILLERMO |
E31591068 | CARRERA CABALLERO JC Y DOMINGUEZ DE VIDAURRE TA ZUBIRI M |
B01236488 | ASESORIA COFISER 2000 SL |
B31220973 | AYERRA IRISARRI SL |
B01025709 | IMPRENTA SACAL S.L. |
A02055598 | PEDRO GALIANO SA |
NA | ILUMISA, S.L. |
Q3150011I | INSTITUTO DE LA SALUD PUBLICA |
B31949910 | PRODUCCIONES MUSICALES ETXE-ONDO SL |
B71208797 | GARABITO 111 SL |
Como hemos visto, la base de datos de Registr@ tiene personas físicas y jurídicas, y no tienen ninguna variable explícita que las distinga. Podemos filtrar por el identificador oficial.
## [1] 90661
3.2.3 Filtrado
Asumiendo que las bases de datos que proporcionarán datos a la BDC serán más completas que la de Registr@, para la POC filtraremos la base de datos de Registr@.
## [1] 753834
Prescindimos de los registros con identificador de persona jurídica
registra_personas <- registra_personas %>% filter(!parece_persona_juridica(bdc_id_oficial))
nrow(registra_personas)
## [1] 663173
Prescindimos de los registros sin nombre (asumiendo que también son de personas jurídicas)
## [1] 641051
3.2.4 Normalización
Los identificadores oficiles pueden tener signos de puntuación.
registra_personas %>% select(bdc_id_oficial) %>%
subset(grepl("[[:punct:]]",bdc_id_oficial)) %>%
unique() %>% sample_n(10) %>% pulcro()
bdc_id_oficial |
---|
.00000000 |
EXT981… |
X907838-M |
EXT090… |
0.750.787 |
X83510… |
EXT080… |
EXT050… |
0.818.544 |
EXT180… |
Preprocesado del id oficial. Después del procesado no queda ningún DNI con guiones o signos de puntuación:
registra_personas <- registra_personas %>% preproceso_id_oficial()
registra_personas %>% select(bdc_id_oficial) %>%
subset(grepl("-",bdc_id_oficial)) # %>% unique() %>% pulcro()
## # A tibble: 0 x 1
## # ... with 1 variables: bdc_id_oficial <chr>
Si miramos los id oficiales vemos que la mayoría no tienen la sintaxis de persona física:
registra_personas %>% select(bdc_id_oficial) %>%
filter(!parece_persona_fisica(bdc_id_oficial)) %>% nrow()
## [1] 592362
Si miramos la pinta de los id oficiales vemos que hay muchos sin el caracter de control y con un cero:
registra_personas %>% select(bdc_id_oficial) %>%
filter(!parece_persona_fisica(bdc_id_oficial)) %>%
sample_n(10) %>% pulcro()
bdc_id_oficial |
---|
072649517 |
034772005 |
018208364 |
072645485 |
015826757 |
010565560 |
073611561 |
03C323228 |
015753402 |
007889157 |
Asumiendo que son DNIs correctos, calculamos el dígito de control. Despues de procesarlo casi todos los registros tienen algo que parece un DNI/NIE. Si no fuera una POC habría que analizarlo mejor para asegurarse.
registra_personas <- registra_personas %>% preproceso_id_oficial_ceros()
registra_personas %>% select(bdc_id_oficial) %>%
subset(parece_persona_fisica(bdc_id_oficial)) %>%
sample_n(10) %>% pulcro()
bdc_id_oficial |
---|
44569854V |
72643841C |
15785121Z |
72809530V |
15626154T |
15640658Z |
70900930A |
51420469J |
33430850M |
15830327W |
Para poder enlazar los registros hay que normalizarlos. Por ejemplo, el nombre “MARIA NIEVES” puede aparecer de muchas formas diferentes.
registra_personas %>% select(bdc_nombre) %>%
subset(grepl("^(M\\.|M?|MARI|MARIA)+ NIEVES$",bdc_nombre)) %>%
unique() %>% pulcro()
bdc_nombre |
---|
MARIA NIEVES |
M NIEVES |
M. NIEVES |
Preprocesado del nombre y apellidos:
registra_personas <- registra_personas %>% preproceso_nombre_apellidos()
registra_personas %>% select(bdc_nombre) %>%
subset(grepl("^(M\\.|M?|MARI|MARIA)+ NIEVES$",bdc_nombre)) %>%
unique() %>% pulcro()
bdc_nombre |
---|
MARIA NIEVES |
Finalmente guardamos las dos bases de datos para el siguiente paso.