Data Quality Package (In Progess)

V.1

Fase Beta


Data Quality - Introducción

Evaluando los conceptos claves a la hora de evaluar la calidad de los datos utilizados en un reporte, pueden formarse algunas guias para automatizar el analisis como etapa fundamental del gobierno de datos. Llamaremos a estas guias Principios de Calidad, definidos como:

  • Validez: El formato de los datos es el correcto
  • Completitud: No hay datos faltantes
  • Duplicidad: No hay datos duplicados
  • Integridad: Los datos relacionados entre sí siguen la lógica planeada
  • Precisión: Los datos no varían más que un umbral definido a lo largo del tiempo.

A partir de estos 5 principios, podemos generar Reglas de Calidad, aplicables a lo largo del perimetro de nuestras bases de datos. Las lineas de trabajo pueden verse de la siguiente manera:

Importando dataset

Codigo:
df <- readxl::read_xlsx("Lyrics.xlsx")
dim(df)
## [1] 28372    30
colnames(df)
##  [1] "artist_name"              "track_name"              
##  [3] "release_date"             "genre"                   
##  [5] "lyrics"                   "len"                     
##  [7] "dating"                   "violence"                
##  [9] "world/life"               "night/time"              
## [11] "shake the audience"       "family/gospel"           
## [13] "romantic"                 "communication"           
## [15] "obscene"                  "music"                   
## [17] "movement/places"          "light/visual perceptions"
## [19] "family/spiritual"         "like/girls"              
## [21] "sadness"                  "feelings"                
## [23] "danceability"             "loudness"                
## [25] "acousticness"             "instrumentalness"        
## [27] "valence"                  "energy"                  
## [29] "topic"                    "age"

Introducción a nomenclatura


Este paquete contiene funciones creadas para evaluar distintos aspectos de los datos.


A continuacion se muestra los principios que incluye este paquete:

Principios Abbr
Validez V
Completitud C
Duplicidad D
Integridad I
Precision P


1) Reglas de Validez

Principio SubPrincipio Funcion Descripcion
V 1 V.1 Conteo de valores faltantes
V 2 V.2 Control de valores no permitidos

V.1 (Formato: Chequeo de longitud de valores)

Esta función realiza un chequeo de la longitud de cada uno de los valores distintos de una variable, el usuario debe colocar cual es la longitud que desea chequear con el argumento digits.

V1 <- function(data,columna,KO = TRUE, digits = 4){

  if (KO == TRUE){
  print("Los casos que no cumplen con la condición son:")  
  } else {print("Casos que cumplen con la condición:")}  

  data %>%
    select(columna) %>%
    distinct() %>%
    mutate(n = nchar(.[[1]])) %>%
    filter(if(KO == T){n != digits}else{n == digits})
}

Ejemplos:

V1(data = df,columna = "genre",digits = 4,KO = F)
## [1] "Casos que cumplen con la condición:"
## # A tibble: 2 × 2
##   genre     n
##   <chr> <int>
## 1 jazz      4
## 2 rock      4


2) Reglas de Completitud

Principio SubPrincipio Funcion Descripcion
C 1 C.1 Conteo de valores faltantes

C.1 (Conteo de valores nulos)

C1 <- function(data,detail = F){
  if (detail == F){
  sum(is.na(data))
    }
  else {
    for (i in 1:ncol(data)){
  print(
    paste(colnames(data[,i]),":",sum(is.na(i)))
  )
    }
  }
}

Ejemplos:

Con argumento detail = F

 C1(df,detail = F)
## [1] 0

Con argumento detail = T

C1(df,detail = T)
## [1] "artist_name : 0"
## [1] "track_name : 0"
## [1] "release_date : 0"
## [1] "genre : 0"
## [1] "lyrics : 0"
## [1] "len : 0"
## [1] "dating : 0"
## [1] "violence : 0"
## [1] "world/life : 0"
## [1] "night/time : 0"
## [1] "shake the audience : 0"
## [1] "family/gospel : 0"
## [1] "romantic : 0"
## [1] "communication : 0"
## [1] "obscene : 0"
## [1] "music : 0"
## [1] "movement/places : 0"
## [1] "light/visual perceptions : 0"
## [1] "family/spiritual : 0"
## [1] "like/girls : 0"
## [1] "sadness : 0"
## [1] "feelings : 0"
## [1] "danceability : 0"
## [1] "loudness : 0"
## [1] "acousticness : 0"
## [1] "instrumentalness : 0"
## [1] "valence : 0"
## [1] "energy : 0"
## [1] "topic : 0"
## [1] "age : 0"


3) Reglas de Duplicidad

Principio SubPrincipio Funcion Descripcion
D 1 D.1 Control de valores duplicados

D.1 (Conteo de valores nulos)

Esta funcion es util para detectar IDs duplicados

D1 <- function(data,columnas,detail = F){
  if (detail == F){
  sum(duplicated(data))
    }
  else {
  data %>%
      filter(duplicated(columnas) == T)
  }
}

Ejemplos:

D1(data = df,columnas = df$track_name,detail = T) 
## # A tibble: 4,683 × 30
##    artist_name track…¹ relea…² genre lyrics   len dating viole…³ world…⁴ night…⁵
##    <chr>       <chr>     <dbl> <chr> <chr>  <dbl> <chr>  <chr>   <chr>   <chr>  
##  1 ricky nels… unchai…    1958 pop   darli…    26 0.002… 0.0022… 0.0022… 0.5056…
##  2 neil sedaka as lon…    1959 pop   long …    31 0.040… 0.0017… 0.3299… 0.2132…
##  3 the brothe… angeli…    1959 pop   angel…    93 0.001… 0.0553… 0.4638… 0.0010…
##  4 connie fra… non di…    1959 pop   dimen…    48 0.002… 0.0020… 0.1918… 0.0414…
##  5 fats domino i'm wa…    1959 pop   walki…    44 0.267… 0.0015… 0.0015… 0.0015…
##  6 connie fra… winter…    1959 pop   sleig…    44 0.001… 0.0018… 0.0018… 0.0713…
##  7 dion & the… that's…    1959 pop   spend…    32 0.002… 0.0020… 0.0020… 0.1349…
##  8 esquivel!   all of…    1959 pop   come …    47 0.001… 0.4419… 0.0015… 0.0216…
##  9 connie fra… summer…    1960 pop   dream…    65 0.002… 0.0026… 0.0026… 0.0026…
## 10 the flamin… when i…    1960 pop   women…   149 0.018… 0.0005… 0.0005… 0.0005…
## # … with 4,673 more rows, 20 more variables: `shake the audience` <chr>,
## #   `family/gospel` <chr>, romantic <chr>, communication <chr>, obscene <chr>,
## #   music <chr>, `movement/places` <chr>, `light/visual perceptions` <chr>,
## #   `family/spiritual` <chr>, `like/girls` <chr>, sadness <chr>,
## #   feelings <chr>, danceability <chr>, loudness <chr>, acousticness <chr>,
## #   instrumentalness <chr>, valence <chr>, energy <chr>, topic <chr>,
## #   age <chr>, and abbreviated variable names ¹​track_name, ²​release_date, …
## # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names


4) Reglas de Integridad

Principio SubPrincipio Funcion Descripcion
I 1 I.1 Control de consistencia entre distintas campos de un mismo objeto

I.1 (Variación entre periodos)

Ejemplos:

df$age <- as.numeric(df$age)

paste("La correlación entre la variable age y el año de lanzamiento es de :",cor(x = df$release_date,y = df$age,method = "pearson"))
## [1] "La correlación entre la variable age y el año de lanzamiento es de : -1"

Esto significa que existe una relación lineal negativa entre ambas variables. Cuando aumenta una baja la otra y viceversa. Entonces podemos expresar la siguiente relación:

range(df$release_date)
## [1] 1950 2019
range(df$age)
## [1] 0.01428571 1.00000000

\[Min (AGE) = Max (release_{date}) \]

age release_date
1 1950
\[Max (AGE) = Min (release_{date}) \]
age release_date
0.0142857 2019
I1 <- function(data,x,y){
  
}


5) Reglas de Precision

Principio SubPrincipio Funcion Descripcion
P 1 P.1 Control de que la variación de una métrica entre dos periodos no supere un determinado umbral
P 2 P.2 Control de que los valores de una métrica no superen determinado umbral

P.1 (Variación entre periodos)

Ejemplos:

P.2 (Control de que los valores no superen determinado parámetro)

Ejemplos:

P2 <- function(dataframe,columnas,umbral ,detail = F){
  if (detail == F){
  dataframe %>% filter(columnas > umbral) %>% nrow()}
  else {
    dataframe %>% filter(columnas > umbral)
  }
}

Con argumento detail = F

P2(dataframe = df,columnas = df$release_date,umbral = 2014,detail = F)
## [1] 2997

Con argumento detail = T

head(P2(dataframe = df,columnas = df$release_date,umbral = 2014,detail = T))
## # A tibble: 6 × 30
##   artist_name  track…¹ relea…² genre lyrics   len dating viole…³ world…⁴ night…⁵
##   <chr>        <chr>     <dbl> <chr> <chr>  <dbl> <chr>  <chr>   <chr>   <chr>  
## 1 halsey       hurric…    2015 pop   place…    84 0.091… 0.0008… 0.0008… 0.0008…
## 2 meek mill    lord k…    2015 pop   futur…    65 0.002… 0.3856… 0.0021… 0.1661…
## 3 action bron… baby b…    2015 pop   heart…   189 0.057… 0.0004… 0.0674… 0.0004…
## 4 langhorne s… changes    2015 pop   thing…    47 0.001… 0.0013… 0.4137… 0.0013…
## 5 drake        diamon…    2015 pop   stage…   181 0.011… 0.0004… 0.1354… 0.0004…
## 6 fetty wap    rgf is…    2015 pop   yeah …    89 0.040… 0.0010… 0.0010… 0.0010…
## # … with 20 more variables: `shake the audience` <chr>, `family/gospel` <chr>,
## #   romantic <chr>, communication <chr>, obscene <chr>, music <chr>,
## #   `movement/places` <chr>, `light/visual perceptions` <chr>,
## #   `family/spiritual` <chr>, `like/girls` <chr>, sadness <chr>,
## #   feelings <chr>, danceability <chr>, loudness <chr>, acousticness <chr>,
## #   instrumentalness <chr>, valence <chr>, energy <chr>, topic <chr>,
## #   age <dbl>, and abbreviated variable names ¹​track_name, ²​release_date, …
## # ℹ Use `colnames()` to see all variable names


Autor


Marcelo G Gonzalez

LinkTree