exploraciondedatos

57
Análisis Exploratorio de Datos Carlos Ignacio Patiño ([email protected]) Agosto 21, 2015 Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Upload: cesar-leon-quillas

Post on 12-Apr-2016

9 views

Category:

Documents


2 download

DESCRIPTION

Exploracion de Datos Analytics para Negocios

TRANSCRIPT

Page 1: ExploracionDeDatos

Análisis Exploratorio de Datos

Carlos Ignacio Patiño ([email protected])

Agosto 21, 2015

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 2: ExploracionDeDatos

Agenda

Limpieza de datosMétodos para la descripción de datosDetección de outliersLlenando missing valuesPCALibrería dplyr

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 3: ExploracionDeDatos

Limpieza de datos

Reglas para la obtención de un conjunto de datos “limpio”

Datos brutos: Datos no procesados, usualmente obtenidos de unafuente primaria (en algunos casos secundaria)

Datos procesados:

Cada variable medida debe estar en una columnaCada observación debe estar en una filaDebe existir una tabla para cada tipo de variableSi existen múltiples tablas, éstas deben estar ligadas por unacolumna común

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 4: ExploracionDeDatos

Métodos para la descripción de datos

Existen dos formas de describir conjuntos de datos: el métodográfico y el método numérico.

Todo conjunto de datos contiene tendencias (como por ejemplodónde se concentra la mayor cantidad de puntos), variabilidad,máximos, mínimos y también datos que pueden parecer atípicos.

El objetivo de esta sesión es mostrar las diferentes formas queexisten para describir datos empleando ya sea gráficos o medidasnuméricas.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 5: ExploracionDeDatos

Datos cualitativos (un ejemplo)

Accidentes de tránsito en Hato Corozal, Casanare (2013). 50observaciones (aqui se reportan las 6 primeras)

fecha_accidente tipo_accidente lesiones

03/01/2013 Caida Si

05/01/2013 Volcamiento No

21/01/2013 Atropello Si

03/02/2013 Caida Si

08/02/2013 Caida Si

09/02/2013 Choque Si

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 6: ExploracionDeDatos

Tipo de accidente

En este ejemplo, la variable que nos interesa es el tipo deaccidenteEn este caso, dicha columna cuenta con 10 categorias o Clases(atropello, caída, choque, etc)Podemos resumir (describir) dicha columna de maneranumérica en dos formasFrecuencia de clase: número de observaciones que presentacada claseFrecuencia relativa de clase: frecuencia de clase dividida por eltotal de observaciones en el conjunto de datos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 7: ExploracionDeDatos

Frecuencia de clase (tipo de accidente)

tipo_accidente Freq.Clase

Atropello 4

Caida 19

Choque 8

Choque Mortal 1

Cierre Vehiculo 5

Falla Humana 5

Falla Mecanica 2

Perdida deControl

4

Salida Via 1

Volcamiento 1

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 8: ExploracionDeDatos

Frecuencia relativa de clase (tipo de accidente)

tipo_accidente Freq.Clase Freq.Rel

Atropello 4 0.08

Caida 19 0.38

Choque 8 0.16

Choque Mortal 1 0.02

Cierre Vehiculo 5 0.1

Falla Humana 5 0.1

Falla Mecanica 2 0.04

Perdida deControl

4 0.08

Salida Via 1 0.02

Volcamiento 1 0.02

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 9: ExploracionDeDatos

Porcentaje de clase (tipo de accidente)

tipo_accidente Freq.Clase Freq.Rel Porcentaje

Atropello 4 0.08 8

Caida 19 0.38 38

Choque 8 0.16 16

Choque Mortal 1 0.02 2

Cierre Vehiculo 5 0.1 10

Falla Humana 5 0.1 10

Falla Mecanica 2 0.04 4

Perdida deControl

4 0.08 8

Salida Via 1 0.02 2

Volcamiento 1 0.02 2

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 10: ExploracionDeDatos

Datos cuantitativos: métodos gráficos

Los métodos gráficos son muy útiles para describir la forma quepresenta un conjunto de datosEl histograma es la herramienta más empleada en el análisisexploratorio de datosCualquier paquete estadístico u hoja de cálculo permite generareste tipo de gráficos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 11: ExploracionDeDatos

Histograma

0

10

20

30

10 20 30 40MPG

Cou

nt

Histograma MPG. Datos Vehículos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 12: ExploracionDeDatos

Histograma comparando diferentes clases

El siguiente gráfico reporta las frecuencias de consumo según lavariable cualitativa que mide la tracción del vehículo:

0

10

20

30

10 20 30 40MPG

Cou

nt

drv

4

f

r

Histograma MPG. Datos Vehículos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 13: ExploracionDeDatos

Medidas numéricas de tendencia central

Tendencia Central es la tendencia de los datos a aglomerarse, ocentrarse alrededor de ciertos valores numéricos

Variabilidad es la dispersión de los datos

0

250

500

750

1000

0 5 10 15 20x

coun

t

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 14: ExploracionDeDatos

Media muestral

La media de un conjunto de datos es la suma de sus valores divididapor el número de valores que contiene el conjunto de datos.

La media muestral está definida por la fórmula:

x̄ =

∑ni=1 xin

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 15: ExploracionDeDatos

Mediana

La mediana de un conjunto de datos es el valor ubicado en la mitad(de los datos ordenados de menor a mayor, o mayor a menor).

Para calcular la mediana muestral se deben seguir los siguientespasos:

1 Ordene los datos de menor a mayor2 Si el número de datos es impar, la mediana es el número de la

mitad3 Si el número de datos es par, la mediana es la media de los dos

valores de la mitad

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 16: ExploracionDeDatos

Moda

La moda es el valor o medición que ocurre en un conjunto de datoscon mayor frecuencia

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 17: ExploracionDeDatos

Sesgo

Decimos que un conjunto de datos está sesgado si una de las colasde la distribución contiene más observaciones extremas que la otracola.

Si mediana < media, los datos están sesgados hacia la derecha.

Si mediana > media, los datos están sesgados hacia la izquierda.

Si mediana = media, se dice que la distribución es simétrica.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 18: ExploracionDeDatos

Ejemplo de medidas de tendencia central

Si tenemos el siguiente conjunto de datos:

[10, 10, 25, 35, 125, 125]

La media muestral es igual a: 10+10+25+35+125+1256 , o 55.

Y la mediana resulta de ordenar los datos de menor a mayor, yubicar el valor de la mitad. En este caso, el número deobservaciones es par, por lo que la mediana es la media de los dospuntos intermedios, o 30.

Note que el conjunto anterior presenta dos modas (bimodal): 10 y125.

La mediana es menor que la media, por lo que se observa un sesgo ala derecha.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 19: ExploracionDeDatos

Graficamente

0.0

0.5

1.0

1.5

2.0

0 50 100x

coun

t

Median : 30.00 and Mean : 55.00

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 20: ExploracionDeDatos

Otro ejemplo

Usando nuevamente los datos ejemplo de vehículos, revisamos lasmedidas de tendencia central para el consumo de combustible,comparando vehículos con tracción trasera y delantera.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 21: ExploracionDeDatos

ResultadosHistograma Consumo

Tracción delantera

MPG

Fre

quen

cy

15 20 25 30 35 40 45

020

4060

Histograma ConsumoTracción trasera

MPG

Fre

quen

cy

14 16 18 20 22 24 26

02

46

Min. 1st Qu. Median Mean 3rd Qu. Max.

17 26 28 28.16 29 44

Min. 1st Qu. Median Mean 3rd Qu. Max.

15 17 21 21 24 26Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 22: ExploracionDeDatos

Medidas numéricas de variabilidad

El rango es igual a la resta entre el máximo valor y el mínimo valor.

Para nuestro ejemplo inicial, el rango es igual a 125-10, o 115.

Esta es la medida más simple de variabilidad. Rangos elevadosseñalan una amplia dispersión de los datos presentes en el conjuntoanalizado.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 23: ExploracionDeDatos

El rango es poco sensible

Histograma Escenario 1

Utilidad

Fre

quen

cy

−10 0 10 20 30

05

1015

2025

30

Histograma Escenario 2

Utilidad

Fre

quen

cy

−10 0 10 20 30

010

2030

4050

60Tanto el rango como la media y la mediana en ambos casos es igual.Sin embargo, la primera distribución presenta una mayor dispersión.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 24: ExploracionDeDatos

Una medida de variabilidad más sensible

La varianza muestral de un conjunto de n medidas es igual a lasuma de las desviaciones al cuadrado, dividida por (n − 1).

Esta medida captura la desviación de cada punto frente a la mediade todo el conjunto de datos.

s2 =

∑ni=1(xi − x̄)2

n − 1

Y la desviación estándar se define como la raiz cuadrada de lavarianza muestral: s =

√s2.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 25: ExploracionDeDatos

Verifiquemos la sensibilidad de s con nuestro ejemploanterior

Para el escenario 1, observamos una desviación estándar igual a12.7128345, mientras que para el escenario 2 se tiene una desviaciónestándar de 8.4087497.

El escenario 1 presenta una mayor variabilidad (o riesgo), mientrasque el escenario 2, presenta utilidades más concentradas alrededorde la tendencia central.

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 26: ExploracionDeDatos

Visualización: ejemplo aplicado en R

# Usamos datos mpg incluídos en el paquete ggplot2summary(mpg[,1:3]) # sólo primeras 3 cols

manufacturer model displdodge :37 caravan 2wd : 11 Min. :1.600toyota :34 ram 1500 pickup 4wd: 10 1st Qu.:2.400volkswagen:27 civic : 9 Median :3.300ford :25 dakota pickup 4wd : 9 Mean :3.472chevrolet :19 jetta : 9 3rd Qu.:4.600audi :18 mustang : 9 Max. :7.000(Other) :74 (Other) :177

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 27: ExploracionDeDatos

Sistemas gráficos en R

Base: Sistema base en R, donde los elementos se agregan conlíneas de códigoLattice: Sistema posterior al Base, con mayor funcionalidad(paneles)ggplot: Sistema básado en gramática de gráficos, mucho másfuncional

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 28: ExploracionDeDatos

Histogramas (Base)

# Sistema Basehist(mpg$hwy, prob=T, col="lightblue")

Histogram of mpg$hwy

mpg$hwy

Den

sity

10 15 20 25 30 35 40 45

0.00

0.02

0.04

0.06

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 29: ExploracionDeDatos

Revisando normalidad (Base)

# Sistema Baselibrary(car)par(mfrow=c(1,2))hist(mpg$hwy, prob=T, xlab="",

main="Histograma de MPG en Carretera")lines(density(mpg$hwy, na.rm=T))rug(jitter(mpg$hwy))qqPlot(mpg$hwy, main="QQ Plot de MPG")par(mfrow=c(1,2))

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 30: ExploracionDeDatos

Revisando normalidad (Base)

Histograma de MPG en CarreteraD

ensi

ty

10 15 20 25 30 35 40 45

0.00

0.01

0.02

0.03

0.04

0.05

0.06

0.07

−3 −2 −1 0 1 2 3

1520

2530

3540

45

QQ Plot de MPG

norm quantiles

mpg

$hw

y

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 31: ExploracionDeDatos

Outliers: detección via Box-plots (Base)

# Sistema Baseboxplot(mpg$hwy, ylab="MPG - Carretera")rug(jitter(mpg$hwy), side=2)abline(h = mean(mpg$hwy, na.rm=T), lty=2)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 32: ExploracionDeDatos

Outliers: detección via Box-plots (Base)

1520

2530

3540

45

MP

G −

Car

rete

ra

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 33: ExploracionDeDatos

Inspección de outliers

# Graficamenteplot(mpg$hwy, xlab="")abline(h = mean(mpg$hwy, na.rm=T), lty=1)abline(h = mean(mpg$hwy, na.rm=T) + sd(mpg$hwy, na.rm=T),

lty=2)abline(h = median(mpg$hwy, na.rm=T), lty=3)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 34: ExploracionDeDatos

Inspección de outliers

0 50 100 150 200

1520

2530

3540

45

mpg

$hw

y

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 35: ExploracionDeDatos

Box-plots condicionados (Lattice)

# Box-plots condicionados en sistema latticelibrary(lattice)bwplot(drv~hwy, data=mpg,

ylab="Tracción", xlab="MPG en Carretera")

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 36: ExploracionDeDatos

Box-plots condicionados (Lattice)

MPG en Carretera

Trac

ción

4

f

r

20 30 40

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 37: ExploracionDeDatos

Box-plots con ggplot

# Sistema ggplotg <- ggplot(mpg, aes(drv, hwy))g <- g + geom_boxplot()g <- g + labs(title="Box-Plots Consumo. Datos Vehículos")g <- g + labs(y="MPG", x="Tracción")g

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 38: ExploracionDeDatos

Box-plots con ggplot

20

30

40

4 f rTracción

MP

G

Box−Plots Consumo. Datos Vehículos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 39: ExploracionDeDatos

Paneles con ggplot

# Sistema ggplotg <- ggplot(mpg, aes(drv, hwy))g <- g + geom_boxplot(aes(fill=drv))g <- g + facet_grid(.~year)g <- g + labs(title="Box-Plots Consumo. Datos Vehículos")g <- g + labs(y="MPG", x="Tracción")g

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 40: ExploracionDeDatos

Paneles con ggplot

1999 2008

20

30

40

4 f r 4 f rTracción

MP

G

drv

4

f

r

Box−Plots Consumo. Datos Vehículos

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 41: ExploracionDeDatos

Missing Values

OrigenTratamientoImputación (valor más frecuente)Imputación (correlaciones)Imputación (casos similares, intro a KNN)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 42: ExploracionDeDatos

Remoción de NAs

# Función complete.cases()library(DMwR); data(algae)nrow(algae[!complete.cases(algae),])

## [1] 16

16 de los 200 registros en el dataset algae contienen al menos unNA

algae2 <- na.omit(algae)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 43: ExploracionDeDatos

Remoción de NAs

De manera alternativa, se puede emplear la funciónmanyNAs(), incluída en el paquete DMwREsta función recibe dos argumentos, el primero correspondienteal dataframeEl segundo, correspondiente al porcentaje de columnas con NA

algae3 <- algae[-manyNAs(algae,0.2),]

El comando anterior remueve filas donde en más del 20% delas columnas existen valores NA

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 44: ExploracionDeDatos

Imputación

CerosMedias, medianas, o clase más frecuenteA partir de modelos lineales (correlaciones)Casos similares

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 45: ExploracionDeDatos

Imputación con valores más frecuentes

El registro 48 en el dataframe algae contiene un NA para lacolumna mxPH. Dada la normalidad de esta variable, es posibleemplear la media como medida de imputación

algae[48, "mxPH"] <- mean(algae$mxPH, na.rm=T)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 46: ExploracionDeDatos

Explotando correlaciones entre columnas

symnum(cor(algae[,4:18],use="complete.obs"))

## mP mO Cl NO NH o P Ch a1 a2 a3 a4 a5 a6 a7## mxPH 1## mnO2 1## Cl 1## NO3 1## NH4 , 1## oPO4 . . 1## PO4 . . * 1## Chla . 1## a1 . . . 1## a2 . . 1## a3 1## a4 . . . 1## a5 1## a6 . . . 1## a7 1## attr(,"legend")## [1] 0 ' ' 0.3 '.' 0.6 ',' 0.8 '+' 0.9 '*' 0.95 'B' 1

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 47: ExploracionDeDatos

Se puede imputar con modelos lineales

algae <- algae[-manyNAs(algae), ]fit <- lm(PO4~oPO4, data=algae)fit$coef

## (Intercept) oPO4## 42.897046 1.293061

Podemos entonces imputar NAs en PO4 usando la formulaPO4 = 42.89 + 1.29 ∗ oPO4

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 48: ExploracionDeDatos

Imputación a partir de KNN

KNN: K-Nearest Neighbors (vecinos más cercanos)El paquete DMwR contiene la función knnImputation(), lacual emplea una distancia Euclideana para encontrar los kvecinos más cercanos

algae4 <- knnImputation(algae, k=10)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 49: ExploracionDeDatos

Principal Component Analysis (para reducción de ladimensionalidad)

Gran conjunto de datos con columnas altamentecorrelacionadasComponentes principales permite “resumir” (summarize) esteconjunto con un número menor de columnas representativasque explican la mayoría de la variabilidad del set originalPCA, procedimiento no supervisadoAplicación en visualización¿Cuántos graficos necesitaremos para revisar relaciones entre ppredictores?p(p − 1)/2 (ejemplo, si p = 10 necesitamos 45 plots!)Objetivo: buscar una representación de baja dimensionalidad

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 50: ExploracionDeDatos

De manera formal

Primer componente

Zi = Φ11X1 + Φ21X2 + ... + Φp1Xp

Combinación lineal (normalizada) de los predictores, con la varianzamás alta

Segundo componente

Z2 = Φ12X1 + Φ22X2 + ... + Φp2Xp

Combinación lineal (normalizada) de los predictores, con la varianzamás alta, entre todas las combinaciones lineales que están nocorrelacionadas con el primer componente

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 51: ExploracionDeDatos

Librería dplyr

Provee funciones simples que permiten manipular data framesde manera sencilla

Los verbos

filterarrangeselectdistinctmutategroup_bysummarize

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 52: ExploracionDeDatos

filter()

Equivalente a la función base subset()

data(mpg); library(dplyr)mpg.filter <- filter(mpg, cyl==4, drv=="f")head(mpg.filter, n=3)

## manufacturer model displ year cyl trans drv cty hwy fl class## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact## 3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 53: ExploracionDeDatos

arrange()

Reordena según columna seleccionada

mpg.filter <- arrange(mpg.filter, desc(displ, year))head(mpg.filter, n=3)

## manufacturer model displ year cyl trans drv cty hwy fl class## 1 nissan altima 2.5 2008 4 auto(av) f 23 31 r midsize## 2 nissan altima 2.5 2008 4 manual(m6) f 23 32 r midsize## 3 chevrolet malibu 2.4 1999 4 auto(l4) f 19 27 r midsize

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 54: ExploracionDeDatos

select()

Seleccion columna(s) de interés

mpg.filter <- select(mpg.filter, displ, cty, hwy)head(mpg.filter, n=3)

## displ cty hwy## 1 2.5 23 31## 2 2.5 23 32## 3 2.4 19 27

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 55: ExploracionDeDatos

distinct()

Posibles valores de una columna (en combinación con select())

distinct(select(mpg, trans))

## trans## 1 auto(l5)## 2 manual(m5)## 3 manual(m6)## 4 auto(av)## 5 auto(s6)## 6 auto(l4)## 7 auto(l3)## 8 auto(l6)## 9 auto(s5)## 10 auto(s4)

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 56: ExploracionDeDatos

mutate()

Crea nuevas columnas

mpg.new <- mutate(mpg, disp2 = displ*1000, mpg.prom = (cty+hwy)/2)head(mpg.new, n=2)

## manufacturer model displ year cyl trans drv cty hwy fl class## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact## disp2 mpg.prom## 1 1800 23.5## 2 1800 25.0

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos

Page 57: ExploracionDeDatos

group_by() y summarize()

Agrupar y resumir datos

mpg.grouped <- group_by(mpg, cyl)mpg.summ <- summarize(mpg.grouped, hwy.avg = mean(hwy),

cty.avg = mean(cty))mpg.summ

## Source: local data frame [4 x 3]#### cyl hwy.avg cty.avg## 1 4 28.80247 21.01235## 2 5 28.75000 20.50000## 3 6 22.82278 16.21519## 4 8 17.62857 12.57143

Carlos Ignacio Patiño ([email protected]) Análisis Exploratorio de Datos