0% encontró este documento útil (0 votos)
22 vistas10 páginas

SQL Del Registro de Personas

Este documento describe el procesamiento de una base de datos de personas de una aplicación llamada Registr@. Incluye carga de datos, análisis, filtrado y normalización de los datos para preparar la base de datos para su uso en una prueba de concepto de vinculación de bases de datos.

Cargado por

Leonardo Vidal
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas10 páginas

SQL Del Registro de Personas

Este documento describe el procesamiento de una base de datos de personas de una aplicación llamada Registr@. Incluye carga de datos, análisis, filtrado y normalización de los datos para preparar la base de datos para su uso en una prueba de concepto de vinculación de bases de datos.

Cargado por

Leonardo Vidal
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

3.

2 Registro de personas en SQL


Base de datos de personas del programa de Gestión para el Registro y
seguimiento de documentos Registr@.

3.2.1 Carga
Se ha 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','-','.','*','--',',',',,'))

#source("registra.personas.r")
#registra_personas <- get_registra_personas()
load("registra_personas.rda")

3.2.2 Análisis
Número total de registros

nrow(registra_personas)

## [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_oficia
bdc_apellido_1
l

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


bdc_id_oficia
bdc_apellido_1
l

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.

registra_personas %>% filter(parece_persona_juridica(bdc_id_oficial)) %>% nrow()

## [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@.

nrow(registra_personas)

## [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)

registra_personas <- registra_personas %>% filter(!is.na(bdc_nombre))


nrow(registra_personas)

## [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.

save(nastat_personas, registra_personas, file ="bdc_poc_1.rda")

También podría gustarte