EncontrarSurrogateFuzzyMemo: EncontrarSurrogateFuzzyMemo

Description Usage Arguments Details Value Combinar con NormalizarTexto Examples

View source: R/14-Surrogate-Key-Pipeline.R

Description

Encuentra el surrogate key aplicando fuzzy matching y memoization.

Usage

1
2
3
4
5
6
7
8
EncontrarSurrogateFuzzyMemo(
  tablaDim,
  tablaFuente,
  nombreDimJoin,
  nombreDimClave,
  nombreFuenteJoin,
  maxChars
)

Arguments

tablaDim

una versión recortada de la tabla dimensional, con el campo de join y el surrogate key. Si el campo de join es texto, entonces lo mejor es normalizarlo.

tablaFuente

una versión recortada de la tabla fuente, con el campo de join. Si el campo de join es texto, entonces lo mejor es normalizarlo.

nombreDimJoin

el nombre de la columna en la tabla dimensional usada para combinar las tablas.

nombreDimClave

el nombre de la columna en la tabla dimensional que contiene el surrogate key.

nombreFuenteJoin

el nombre de la columna en la fuente de datos usada para combinar las tablas

maxChars

el máximo número de caracteres permitido, en que un texto de la fuente difiere del texto limpio en la tabla de dimensión. Por ejemplo, "Frodo" difiere de "frodo" en 1 caracter. Si maxChars = 3, entonces el match se toma como bueno. Este parámetro proviene del método de distancia de Levenshtein.

Details

Primero se realiza un Left Join de la columna join de la fuente de datos, con la columna join de la dimensión. Idealmente, ambas columnas debería pasar por una normalización de texto, para mejorar la probabilidad de encontrar un match correcto.

Si hay match exactos, se reservan en una tabla que contiene el valor original y el surrogate key correspondiente (exact matches). Luego, se realiza un anti-join entre las mismas tablas. Si existen valores sin un match, se inicia el proceso de memoization.

Para cada valor sin match exacto:

1

¿Dato en memo?

1.a

SI: Agregar surrogate key a exact matches

1.b

NO: Pasar a 2.

2

Calcular stringdist sobre los valores de la columna join en la dimensión.

3

Escoger mejor match.

4

Agregar surrogate key de mejor match exact matches.

5

Alimentar memo con el nuevo match.

Value

un vector de surrogate keys. Si un dato en el origen no encuentra un match apropiado (strigrdist > maxChars), devuelve NA.

Combinar con NormalizarTexto

Normalizar la columna de combinación de la tabla dimensional, junto con la columna de combinación de la tabla fuente, y luego aplicar el fuzzy matching con memoization para mejores resultados.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
library(dplyr)

# Suponer que se extrae de un archivo fuente
columnaSucia <- c("lUnes ","MARTES.","Miércoles","Hueves","viernes","sabado","Domingo", "Lunes", "martes","Miércoles", "Hueves ","Fiernes,","Sábado","Domingo")

dimTable <-
  data.frame(dias = c("Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo")) %>%
  dplyr::mutate(Key = dplyr::row_number())

# Normalizar texto
columnaSucia <- NormalizarTexto(columnaSucia)
dimTable <- dimTable %>%
  dplyr::mutate(diasClean = NormalizarTexto(dias)$Limpio)

# Fuzzy matching
SK <-
  EncontrarSurrogateFuzzyMemo(
  tablaFuente = data.frame(dias = columnaSucia$Limpio)
  ,tablaDim = dimTable
  ,nombreDimJoin = "diasClean"
  ,nombreDimClave = "Key"
  ,nombreFuenteJoin = "dias"
  ,maxChars = 3)

# Agregar surrogate key al source table
data <-
  data.frame(diasSrcNorm = columnaSucia$Limpio,
             diasSrcOrig = columnaSucia$Sucio,
             ID = SK) %>%
  left_join(dimTable, by = c("ID" = "Key"))

data

dawidh15/eccb documentation built on Dec. 19, 2021, 9:10 p.m.