Capítulo 1. Análisis exploratorio de datos

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Este capítulo se centra en el primer paso de cualquier proyecto de ciencia de datos: explorar los datos.

La estadística clásica se centraba casi exclusivamente en la inferencia, un conjunto a veces complejo de procedimientos para extraer conclusiones sobre grandes poblaciones a partir de muestras pequeñas. En 1962, John W. Tukey(Figura 1-1) pidió una reforma de la estadística en su artículo seminal "El futuro del análisis de datos" [Tukey-1962]. Propuso una nueva disciplina científica llamada análisis de datos que incluía la inferencia estadística como uno solo de sus componentes. Tukey forjó vínculos con las comunidades de ingeniería e informática (acuñó los términos bit, abreviatura de dígito binario, y software), y sus principios originales son sorprendentemente duraderos y forman parte de los cimientos de la ciencia de datos.El campo del análisis exploratorio de datos se estableció con el libro de Tukey de 1977, ahora clásico, Análisis exploratorio de datos [Tukey-1977]. Tukey presentó gráficos sencillos (p. ej., gráficos de caja, gráficos de dispersión) que, junto con estadísticas de resumen (media, mediana, cuantiles, etc.), ayudan a dibujar una imagen de un conjunto de datos.

Con la fácil disponibilidad de potencia informática y programas expresivos de análisis de datos, el análisis exploratorio de datos ha evolucionado mucho más allá de su ámbito original. Los principales impulsores de esta disciplina han sido el rápido desarrollo de nuevas tecnologías, el acceso a más datos y de mayor tamaño, y el mayor uso del análisis cuantitativo en diversas disciplinas.David Donoho, profesor de estadística en la Universidad de Stanford y antiguo alumno de Tukey, escribió un excelente artículo basado en su presentación en el taller del Centenario de Tukey en Princeton, Nueva Jersey [Donoho-2015]. Donoho remonta la génesis de la ciencia de datos al trabajo pionero de Tukey en el análisis de datos.

John Tukey, the eminent statistician, whose ideas developed over fifty years ago form the foundation of data science.
Figura 1-1. John Tukey, el eminente estadístico cuyas ideas desarrolladas hace más de 50 años constituyen la base de la ciencia de datos

Elementos de los datos estructurados

Los datos proceden de muchas fuentes: mediciones de sensores, eventos, texto, imágenes y vídeos.El Internet de las Cosas (IoT) está arrojando flujos de información.Muchos de estos datos no están estructurados: las imágenes son una colección de píxeles, y cada píxel contiene información de color RGB (rojo, verde, azul). Los textos son secuencias de palabras y caracteres no verbales, a menudo organizados por secciones, subsecciones, etc. Los flujos de clics son secuencias de acciones de un usuario que interactúa con una aplicación o una página web. Los flujos de clics son secuencias de acciones de un usuario que interactúa con una aplicación o una página web. De hecho, uno de los principales retos de la ciencia de datos es aprovechar este torrente de datos en bruto para convertirlos en información procesable. Para aplicar los conceptos estadísticos que se tratan en este libro, los datos en bruto no estructurados deben procesarse y manipularse para convertirlos en una forma estructurada. Una de las formas más comunes de datos estructurados es una tabla con filas y columnas, como los datos que pueden surgir de una base de datos relacional o recogerse para un estudio.

Existen dos tipos básicos de datos estructurados: numéricos y categóricos. Los datos numéricos se presentan en dos formas : continuos, como la velocidad del viento o la duración del tiempo, y discretos, como el recuento de la ocurrencia de un suceso. Los datoscategóricos sólo toman un conjunto fijo de valores, como un tipo de pantalla de TV (plasma, LCD, LED, etc.) o el nombre de un estado (Alabama, Alaska, etc.).) o el nombre de un estado (Alabama, Alaska, etc.). Los datosbinarios son un caso especial importante de datos categóricos que sólo toman uno de dos valores, como 0/1, sí/no o verdadero/falso.Otro tipo útil de datos categóricos son los datos ordinales en los que las categorías están ordenadas; un ejemplo de ello es una clasificación numérica (1, 2, 3, 4 o 5).

¿Por qué nos molestamos con una taxonomía de tipos de datos?Resulta que, a efectos del análisis de datos y la modelización predictiva, el tipo de datos es importante para ayudar a determinar el tipo de visualización, análisis de datos o modelo estadístico. De hecho, el software de ciencia de datos, como R y Python, utiliza estos tipos de datos para mejorar el rendimiento computacional. Y lo que es más importante, el tipo de datos de una variable determina la forma en que el software gestionará los cálculos de esa variable.

Los ingenieros de software y los programadores de bases de datos pueden preguntarse por qué necesitamos la noción de datos categóricos y ordinales para el análisis.Al fin y al cabo, las categorías no son más que una colección de valores textuales (o numéricos), y la base de datos subyacente gestiona automáticamente la representación interna. Sin embargo, la identificación explícita de los datos como categóricos, a diferencia de los textuales, ofrece algunas ventajas:

  • Saber que los datos son categóricos puede actuar como una señal que indique al software cómo deben comportarse los procedimientos estadísticos, como elaborar un gráfico o ajustar un modelo. En concreto, los datos ordinales pueden representarse como ordered.factor en R, conservando un orden especificado por el usuario en gráficos, tablas y modelos. En Python, scikit-learn admite datos ordinales con la función sklearn.preprocessing.OrdinalEncoder.

  • El almacenamiento y la indexación pueden optimizarse (como en una base de datos relacional).

  • Los posibles valores que puede tomar una determinada variable categórica se imponen en el software (como un enum).

La tercera "ventaja" puede dar lugar a un comportamiento no deseado o inesperado: el comportamiento por defecto de las funciones de importación de datos en R (por ejemplo, read.csv) es convertir automáticamente una columna de texto en una factor.Las operaciones posteriores sobre esa columna supondrán que los únicos valores permitidos para esa columna son los importados originalmente, y la asignación de un nuevo valor de texto introducirá una advertencia y producirá un NA (valor omitido). El paquete pandas de Python no realizará dicha conversión automáticamente. Sin embargo, puedes especificar una columna como categórica explícitamente en la función read_csv.

Otras lecturas

  • La documentación depandas describe en los distintos tipos de datos y cómo se pueden manipular en Python.

  • Los tipos de datos pueden ser confusos, ya que los tipos pueden solaparse, y la taxonomía de un software puede diferir de la de otro. El sitio web R Tutorial cubre la taxonomía de R.

  • Las bases de datos son más detalladas en su clasificación de tipos de datos, incorporando consideraciones sobre niveles de precisión, campos de longitud fija o variable, etc.; consulta la guía de SQL de W3Schools.

Datos rectangulares

El marco de referencia típico para un análisis en ciencia de datos es un objeto de datos rectangular, como una hoja de cálculo o una tabla de base de datos.

Datos rectangulares es el término general para una matriz bidimensional con filas que indican registros (casos) y columnas que indican características (variables); marco de datos es el formato específico en R y Python.Los datos no siempre empiezan en esta forma: los datos no estructurados (por ejemplo, texto) deben procesarse y manipularse para que puedan representarse como un conjunto de características en los datos rectangulares (véase "Elementos de los datos estructurados"). Los datos de las bases de datos relacionales deben extraerse y colocarse en una única tabla para la mayoría de las tareas de análisis y modelado de datos.

Tabla 1-1. Un formato típico de trama de datos
Categoría moneda vendedorCalificación Duración finDía CerrarPrecio OpenPrice ¿Competitivo?

Música/Película/Juego

US

3249

5

Lun

0.01

0.01

0

Música/Película/Juego

US

3249

5

Lun

0.01

0.01

0

Automóvil

US

3115

7

Mar

0.01

0.01

0

Automóvil

US

3115

7

Mar

0.01

0.01

0

Automóvil

US

3115

7

Mar

0.01

0.01

0

Automóvil

US

3115

7

Mar

0.01

0.01

0

Automóvil

US

3115

7

Mar

0.01

0.01

1

Automóvil

US

3115

7

Mar

0.01

0.01

1

En la Tabla 1-1, hay una mezcla de datos medidos o contados (por ejemplo, duración y precio) y datos categóricos (por ejemplo, categoría y moneda).Como ya se ha mencionado, una forma especial de variable categórica es una variable binaria (sí/no o 0/1), que se ve en la columna de la derecha de la Tabla 1-1: unavariable indicadora que muestra si una subasta era competitiva (tenía varios licitadores) o no. Esta variable indicadora también resulta ser una variable de resultado, cuando el escenario es predecir si una subasta es competitiva o no.

Marcos de datos e índices

Las tablas de bases de datos tradicionales tienen una o más columnas designadas como índice, esencialmente un número de fila.Esto puede mejorar enormemente la eficacia de ciertas consultas a bases de datos. En Python, con la biblioteca pandas, la estructura básica de datos rectangulares es un objeto DataFrame. Por defecto, se crea un índice entero automático para un DataFrame basado en el orden de las filas. En pandas, también es posible establecer índices multinivel/jerárquicos para mejorar la eficacia de ciertas operaciones.

En R, la estructura de datos rectangular básica es un objeto data.frame. Un data.frame también tiene un índice entero implícito basado en el orden de las filas. El data.frame nativo de R no admite índices especificados por el usuario o multinivel, aunque puede crearse una clave personalizada mediante el atributo row.names. Para superar esta deficiencia, se están generalizando dos nuevos paquetes: data.table y dplyr. Ambos admiten índices multinivel y ofrecen importantes mejoras de velocidad al trabajar con un data.frame.

Diferencias terminológicas

La terminología de los datos rectangulares puede ser confusa. Los estadísticos y los científicos de datos utilizan términos diferentes para lo mismo. Para un estadístico, las variables predictoras se utilizan en un modelo para predecir una respuesta o variable dependiente. Para un científico de datos, las características se utilizan para predecir un objetivo.Un sinónimo es especialmente confuso: los informáticos utilizarán el término muestra para una única fila; una muestra para un estadístico significa una colección de filas.

Estructuras de datos no rectangulares

Hay otras estructuras de datos además de los datos rectangulares.

Los datos de series temporales registran mediciones sucesivas de una misma variable. Es la materia prima de los métodos estadísticos de previsión, y también es un componente clave de los datos producidos por los dispositivos: el Internet de las Cosas.

Las estructuras de datos espaciales, que se utilizan en cartografía y análisis de localización, son más complejas y variadas que las estructuras de datos rectangulares. En la representación de objetos, los datos se centran en un objeto (por ejemplo, una casa) y sus coordenadas espaciales. La representación de campo, por el contrario, se centra en pequeñas unidades de espacio y en el valor de una métrica relevante (el brillo de un píxel, por ejemplo).

Las estructuras de datos de grafos (o redes) se utilizan para representar relaciones físicas, sociales y abstractas.Por ejemplo, un grafo de una red social, como Facebook o LinkedIn, puede representar conexiones entre personas de la red. Los centros de distribución conectados por carreteras son un ejemplo de red física. Las estructuras de grafos son útiles para determinados tipos de problemas, como la optimización de redes y los sistemas de recomendación.

Cada uno de estos tipos de datos tiene su metodología especializada en la ciencia de datos. Este libro se centra en los datos rectangulares, el bloque de construcción fundamental del modelado predictivo.

Gráficos en Estadística

En informática y tecnología de la información, el término gráfico se refiere normalmente a una representación de las conexiones entre entidades, y a la estructura de datos subyacente.En estadística, gráfico se utiliza para referirse a una variedad de gráficos y visualizaciones, no sólo de conexiones entre entidades, y el término se aplica sólo a la visualización, no a la estructura de datos.

Estimaciones de localización

Las variables con datos medidos o de recuento pueden tener miles de valores distintos.Un paso básico para explorar tus datos es obtener un "valor típico" para cada característica (variable): una estimación de dónde se encuentra la mayor parte de los datos (es decir, su tendencia central).

A primera vista, resumir los datos puede parecer bastante trivial: basta con tomar la media de los datos.De hecho, aunque la media es fácil de calcular y conveniente de utilizar, no siempre es la mejor medida para un valor central. Por este motivo, los estadísticos han desarrollado y promovido varias estimaciones alternativas a la media.

Métricas y estimaciones

Los estadísticos suelen utilizar el término estimación para referirse a un valor calculado a partir de los datos disponibles, para establecer una distinción entre lo que vemos en los datos y el estado teórico verdadero o exacto de las cosas.Es más probable que los científicos de datos y los analistas empresariales se refieran a dicho valor como una métrica.La diferencia refleja el enfoque de la estadística frente al de la ciencia de datos: la contabilidad de la incertidumbre es el núcleo de la disciplina estadística, mientras que los objetivos empresariales u organizativos concretos son el centro de la ciencia de datos. Por lo tanto, los estadísticos estiman, y los científicos de datos miden.

Media

La estimación básica de localización más es la media, o valor medio.La media es la suma de todos los valores dividida por el número de valores. Considera el siguiente conjunto de números: {3 5 1 2}. La media es (3 + 5 + 1 + 2) / 4 = 11 / 4 = 2,75. Te encontrarás con el símbolo x ¯ (pronunciado "x-bar") para representar la media de una muestra de una población. La fórmula para calcular la media de un conjunto de n valores x 1 , x 2 , ... , x n es:

Media = x ¯ = i=1 n x i n
Nota

N (o n) se refiere al número total de registros u observaciones. En estadística se escribe con mayúscula si se refiere a una población, y con minúscula si se refiere a una muestra de una población. En ciencia de datos, esa distinción no es vital, por lo que puedes verla de ambas formas.

Una variación de la media es la media recortada, que se calcula eliminando un número fijo de valores ordenados en cada extremo y luego tomando la media de los valores restantes.Representación de los valores ordenados mediante x (1) , x (2) , ... , x (n) donde x (1) es el valor más pequeño y x (n) el mayor, la fórmula para calcular la media recortada con p los valores menor y mayor omitidos es

Recortado media = x ¯ = i=p+1 n-p x (i) n-2p

Una media recortada elimina la influencia de los valores extremos. Por ejemplo, en los concursos internacionales se eliminan la puntuación más alta y la más baja de cinco jueces, y la puntuación final es la media de las puntuaciones de los tres jueces restantes. Esto dificulta que un solo juez manipule la puntuación, quizás para favorecer al concursante de su país. Las medias recortadas se utilizan mucho, y en muchos casos son preferibles a utilizar la media ordinaria; para más información, consulta "Mediana y estimaciones robustas".

Otro tipo de media es la media ponderada, que se calcula multiplicando cada valor de los datos x i por un peso especificado por el usuario w i y dividiendo su suma por la suma de las ponderaciones. La fórmula de una media ponderada es:

Ponderado media = x ¯ w = i=1 n w i x i i=1 n w i

Hay dos motivaciones principales para utilizar una media ponderada:

  • Algunos valores son intrínsecamente más variables que otros, y a las observaciones muy variables se les da un peso menor. Por ejemplo, si tomamos la media de varios sensores y uno de ellos es menos preciso, podríamos ponderar menos los datos de ese sensor.

  • Los datos recogidos no representan por igual a los distintos grupos que nos interesa medir. Por ejemplo, debido a la forma en que se realizó un experimento online, puede que no dispongamos de un conjunto de datos que refleje con exactitud todos los grupos de la base de usuarios. Para corregirlo, podemos dar mayor peso a los valores de los grupos que estaban infrarrepresentados.

Mediana y Estimaciones Robustas

La mediana es el número medio de una lista ordenada de los datos.Si hay un número par de valores de datos, el valor medio es uno que en realidad no está en el conjunto de datos, sino la media de los dos valores que dividen los datos ordenados en mitades superior e inferior. En comparación con la media, que utiliza todas las observaciones, la mediana sólo depende de los valores del centro de los datos ordenados. Aunque esto pueda parecer una desventaja, ya que la media es mucho más sensible a los datos, hay muchos casos en los que la mediana es una métrica mejor para la localización. Supongamos que queremos analizar los ingresos familiares típicos de los barrios situados alrededor del lago Washington, en Seattle. Al comparar el barrio de Medina con el de Windermere, utilizar la media produciría resultados muy diferentes, porque Bill Gates vive en Medina. Si utilizamos la mediana, no importará lo rico que sea Bill Gates: la posición de la observación media seguirá siendo la misma.

Por las mismas razones que se utiliza una media ponderada, también es posible calcular una mediana ponderada. Al igual que con la mediana, primero ordenamos los datos, aunque cada valor de los datos tiene un peso asociado.En lugar del número medio, la mediana ponderada es un valor tal que la suma de los pesos es igual para las mitades inferior y superior de la lista ordenada. Al igual que la mediana, la mediana ponderada es robusta frente a los valores atípicos.

Valores atípicos

La mediana se conoce como una estimación robusta de la ubicación, ya que no está influida por valores atípicos (casos extremos) que podrían sesgar los resultados.Un valor atípico es cualquier valor que esté muy alejado de los demás valores de un conjunto de datos. La definición exacta de un valor atípico es algo subjetiva, aunque se utilizan ciertas convenciones en diversos resúmenes y gráficos de datos (véase "Percentiles y gráficos de caja"). Ser un valor atípico en sí mismo no hace que un valor de datos sea inválido o erróneo (como en el ejemplo anterior con Bill Gates). Aun así, los valores atípicos suelen ser el resultado de errores en los datos, como mezclar datos de diferentes unidades (kilómetros frente a metros) o malas lecturas de un sensor. Cuando los valores atípicos son el resultado de datos erróneos, la media dará como resultado una mala estimación de la ubicación, mientras que la mediana seguirá siendo válida. En cualquier caso, los valores atípicos deben identificarse y suelen merecer una investigación más profunda.

Detección de anomalías

A diferencia del análisis de datos típico, en el que los valores atípicos son a veces informativos y a veces una molestia, en la detección de anomalías los puntos de interés son los valores atípicos, y la mayor masa de datos sirve principalmente para definir la "normalidad" con respecto a la cual se miden las anomalías.

La mediana no es la única estimación robusta de la ubicación. De hecho, la media recortada se utiliza mucho para evitar la influencia de los valores atípicos. Por ejemplo, recortar el 10% inferior y superior (una opción habitual) de los datos proporcionará protección contra los valores atípicos en todos los conjuntos de datos, excepto en los más pequeños. La media recortada puede considerarse un compromiso entre la mediana y la media: es robusta frente a los valores extremos de los datos, pero utiliza más datos para calcular la estimación de la ubicación.

Otras métricas sólidas para la localización

Los estadísticos han desarrollado una plétora de otros estimadores de la localización, principalmente con el objetivo de desarrollar un estimador más robusto que la media y también más eficiente (es decir, más capaz de discernir pequeñas diferencias de localización entre conjuntos de datos). Aunque estos métodos son potencialmente útiles para conjuntos de datos pequeños, no es probable que aporten un beneficio añadido para conjuntos de datos grandes o incluso de tamaño moderado.

Ejemplo: Estimaciones de localización de las tasas de población y asesinatos

La Tabla 1-2 muestra las primeras filas del conjunto de datos que contienen la población y las tasas de homicidio (en unidades de homicidios por 100.000 habitantes al año) de cada estado de EEUU ( Censo de 2010).

Tabla 1-2. Algunas filas del estado data.frame de población y tasa de asesinatos por estado
Estado Población Tasa de asesinatos Abreviatura

1

Alabama

4,779,736

5.7

AL

2

Alaska

710,231

5.6

AK

3

Arizona

6,392,017

4.7

AZ

4

Arkansas

2,915,918

5.6

AR

5

California

37,253,956

4.4

CA

6

Colorado

5,029,196

2.8

CO

7

Connecticut

3,574,097

2.4

CT

8

Delaware

897,934

5.8

DE

Calcula la media, la media recortada y la mediana de la población utilizando R:

> state <- read.csv('state.csv')
> mean(state[['Population']])
[1] 6162876
> mean(state[['Population']], trim=0.1)
[1] 4783697
> median(state[['Population']])
[1] 4436370

Para calcular la media y la mediana en Python podemos utilizar los métodos pandas del marco de datos. La media recortada requiere la función trim_mean de scipy.stats:

state = pd.read_csv('state.csv')
state['Population'].mean()
trim_mean(state['Population'], 0.1)
state['Population'].median()

La media es mayor que la media recortada, que es mayor que la mediana.

Esto se debe a que la media recortada excluye a los cinco estados más grandes y a los cinco más pequeños (trim=0.1 elimina el 10% de cada extremo). Si queremos calcular la tasa media de asesinatos del país, tenemos que utilizar una media o mediana ponderada para tener en cuenta las diferentes poblaciones de los estados. Como la base R no tiene una función para la mediana ponderada, tenemos que instalar un paquete como matrixStats:

> weighted.mean(state[['Murder.Rate']], w=state[['Population']])
[1] 4.445834
> library('matrixStats')
> weightedMedian(state[['Murder.Rate']], w=state[['Population']])
[1] 4.4

La media ponderada está disponible con NumPy. Para la mediana ponderada, podemos utilizar el paquete especializado wquantiles:

np.average(state['Murder.Rate'], weights=state['Population'])
wquantiles.median(state['Murder.Rate'], weights=state['Population'])

En este caso, la media ponderada y la mediana ponderada son aproximadamente iguales.

Otras lecturas

  • El artículo de Wikipedia sobre tendencia centralcontiene un amplio debate sobre diversas medidas de localización.

  • El clásico de John Tukey de 1977 Análisis Exploratorio de Datos (Pearson) sigue siendo muy leído.

Estimaciones de la variabilidad

La ubicación es sólo una dimensión en el resumen de una característica.Una segunda dimensión, la variabilidad, también denominada dispersión, mide si los valores de los datos están muy agrupados o dispersos.En el corazón de la estadística se encuentra la variabilidad: medirla, reducirla, distinguir la variabilidad aleatoria de la real, identificar las distintas fuentes de variabilidad real y tomar decisiones en presencia de ella.

Igual que hay distintas formas de medir la localización (media, mediana, etc.), también hay distintas formas de medir la variabilidad.

Desviación típica y estimaciones relacionadas

Las estimaciones de la variación más utilizadas se basan en las diferencias, o desviaciones, entre la estimación de la localización y los datos observados.Para un conjunto de datos {1, 4, 4}, la media es 3 y la mediana es 4. Las desviaciones de la media son las diferencias: 1 - 3 = -2, 4 - 3 = 1, 4 - 3 = 1. Estas desviaciones nos indican lo dispersos que están los datos en torno al valor central.

Una forma de medir la variabilidad es estimar un valor típico para estas desviaciones. Hacer la media de las desviaciones en sí no nos diría mucho: las desviaciones negativas compensan a las positivas. De hecho, la suma de las desviaciones respecto a la media es precisamente cero. En su lugar, un enfoque sencillo consiste en tomar la media de los valores absolutos de las desviaciones respecto a la media. En el ejemplo anterior, el valor absoluto de las desviaciones es {2 1 1}, y su media es (2 + 1 + 1) / 3 = 1,33. Esto se conoce como desviación media absoluta y se calcula con la fórmula:

Media absoluto desviación = i=1 n x i -x ¯ n

donde x ¯ es la media muestral.

Las estimaciones más conocidas de la variabilidad son la varianza y la desviación típica, que se basan en las desviaciones al cuadrado.La varianza es una media de las desviaciones al cuadrado, y la desviación típica es la raíz cuadrada de la varianza:

Desviación = s 2 = i = 1 n ( x i - x ¯ ) 2 n - 1 Desviación típica = s = Desviación

La desviación típica es mucho más fácil de interpretar que la varianza, ya que está en la misma escala que los datos originales. Aun así, con su fórmula más complicada y menos intuitiva, puede parecer peculiar que en estadística se prefiera la desviación típica a la desviación media absoluta. Debe su preeminencia a la teoría estadística: matemáticamente, trabajar con valores al cuadrado es mucho más cómodo que con valores absolutos, sobre todo para los modelos estadísticos.

Ni la varianza, ni la desviación típica, ni la desviación media absoluta son robustas a los valores atípicos y extremos (véase "Mediana y estimaciones robustas" para un análisis de las estimaciones robustas para la localización). La varianza y la desviación típica son especialmente sensibles a los valores atípicos, ya que se basan en las desviaciones al cuadrado.

Una estimación robusta de la variabilidad es la desviación absoluta de la mediana o MAD:

Mediana absoluto desviación = Mediana x 1 - m , x 2 - m , ... , x N - m

donde m es la mediana. Al igual que la mediana, la DMA no se ve influida por los valores extremos. También es posible calcular una desviación típica recortada análoga a la media recortada (véase "Media").

Nota

La varianza, la desviación típica, la desviación absoluta media y la desviación absoluta mediana respecto a la mediana no son estimaciones equivalentes, ni siquiera en el caso de que los datos procedan de una distribución normal. De hecho, la desviación típica siempre es mayor que la desviación absoluta media, que a su vez es mayor que la desviación absoluta mediana. A veces, la desviación absoluta mediana se multiplica por un factor de escala constante para poner la DAM en la misma escala que la desviación típica en el caso de una distribución normal. El factor comúnmente utilizado de 1,4826 significa que el 50% de la distribución normal cae dentro del intervalo ± MAD (véase, por ejemplo, https://oreil.ly/SfDk2).

Estimaciones basadas en percentiles

Un enfoque diferente para estimar la dispersión se basa en observar la dispersión de los datos ordenados.Las estadísticas basadas en datos ordenados (clasificados) se denominan estadísticas de orden.La medida más básica es el rango: la diferencia entre los números mayor y menor. Es útil conocer los valores mínimo y máximo por sí mismos y son útiles para identificar valores atípicos, pero el rango es extremadamente sensible a los valores atípicos y no es muy útil como medida general de dispersión en los datos.

Para evitar la sensibilidad a los valores atípicos, podemos observar el rango de los datos después de descartar los valores de cada extremo. Formalmente, este tipo de estimaciones se basan en las diferencias entre percentiles.En un conjunto de datos, el P-ésimopercentil es un valor tal que al menos P por ciento de los valores tienen este valor o menos y al menos (100 - P) por ciento de los valores tienen este valor o más. Por ejemplo, para hallar el percentil 80, ordena los datos. Luego, empezando por el valor más pequeño, avanza el 80 por ciento del camino hasta el valor más grande. Observa que la mediana es lo mismo que el percentil 50. El percentil es esencialmente lo mismo que un cuantil, con los cuantiles indexados por fracciones (de modo que el cuantil 0,8 es lo mismo que el percentil 80).

Una medida habitual de la variabilidad es la diferencia entre el percentil 25 y el percentil 75, denominada rango intercuartílico (o RIQ). He aquí un ejemplo sencillo: {3,1,5,3,6,7,2,9}.Los ordenamos para obtener {1,2,3,3,5,6,7,9}. El percentil 25 está en 2,5, y el percentil 75 está en 6,5, por lo que el rango intercuartílico es 6,5 - 2,5 = 4. Los programas informáticos pueden tener enfoques ligeramente distintos que dan respuestas diferentes (ver el consejo siguiente); normalmente, estas diferencias son menores.

Para conjuntos de datos muy grandes, calcular los percentiles exactos puede ser muy costoso computacionalmente, ya que requiere ordenar todos los valores de los datos. El aprendizaje automático y el software estadístico utilizan algoritmos especiales, como [Zhang-Wang-2007], para obtener un percentil aproximado que puede calcularse muy rápidamente y tiene garantizada una cierta precisión.

Percentil: definición precisa

Si tenemos un número par de datos(n es par), entonces el percentil es ambiguo según la definición anterior. De hecho, podríamos tomar cualquier valor entre los estadísticos de orden x (j) y x (j+1) donde j cumple:

100 * j n P < 100 * j+1 n

Formalmente, el percentil es la media ponderada:

Percentil ( P ) = 1 - w x (j) + w x (j+1)

para algún peso w entre 0 y 1. El software estadístico tiene enfoques ligeramente diferentes para elegir w. De hecho, la función de R quantile ofrece nueve alternativas diferentes para calcular el cuantil.Excepto para conjuntos de datos pequeños, normalmente no necesitas preocuparte por la forma precisa en que se calcula un percentil. numpy.quantile de Pythonadmite cinco enfoques, siendo la interpolación lineal el predeterminado.

Ejemplo: Estimaciones de Variabilidad de la Población Estatal

La Tabla 1-3 (repetida de la Tabla 1-2 por comodidad) muestra las primeras filas del conjunto de datos que contienen la población y las tasas de homicidio de cada estado.

Tabla 1-3. Algunas filas del estado data.frame de población y tasa de asesinatos por estado
Estado Población Tasa de asesinatos Abreviatura

1

Alabama

4,779,736

5.7

AL

2

Alaska

710,231

5.6

AK

3

Arizona

6,392,017

4.7

AZ

4

Arkansas

2,915,918

5.6

AR

5

California

37,253,956

4.4

CA

6

Colorado

5,029,196

2.8

CO

7

Connecticut

3,574,097

2.4

CT

8

Delaware

897,934

5.8

DE

Utilizando las funciones incorporadas de Rpara la desviación típica, el rango intercuartílico (IQR) y la desviación absoluta de la mediana (MAD), podemos calcular estimaciones de la variabilidad de los datos de la población estatal:

> sd(state[['Population']])
[1] 6848235
> IQR(state[['Population']])
[1] 4847308
> mad(state[['Population']])
[1] 3849870

El marco de datos pandas proporciona métodos para calcular la desviación típica y los cuantiles. Utilizando los cuantiles, podemos determinar fácilmente el IQR. Para la MAD robusta, utilizamos la función robust.scale.mad del paquete statsmodels:

state['Population'].std()
state['Population'].quantile(0.75) - state['Population'].quantile(0.25)
robust.scale.mad(state['Population'])

La desviación típica es casi el doble de grande que la MAD (en R, por defecto, la escala de la MAD se ajusta para que esté en la misma escala que la media). Esto no es sorprendente, ya que la desviación típica es sensible a los valores atípicos.

Otras lecturas

Explorar la distribución de los datos

Cada una de las estimaciones que hemos tratado resume los datos en una sola cifra para describir la ubicación o variabilidad de los datos.También es útil explorar cómo se distribuyen los datos en general.

Percentiles y gráficos de caja

En "Estimaciones basadas en percentiles", exploramos cómo pueden utilizarse los percentiles para medir la dispersión de los datos. Los percentiles también son valiosos para resumir toda la distribución. Es habitual informar sobre los cuartiles (percentiles 25, 50 y 75) y los deciles (percentiles 10, 20, ..., 90). Los percentiles son especialmente valiosos para resumir las colas (el rango exterior) de la distribución.La cultura popular ha acuñado el término un-percentil para referirse a las personas que se encuentran en el percentil 99 de riqueza.

La Tabla 1-4 muestra algunos percentiles de la tasa de asesinatos por estado. En R, esto se produciría mediante la función quantile:

quantile(state[['Murder.Rate']], p=c(.05, .25, .5, .75, .95))
   5%   25%   50%   75%   95%
1.600 2.425 4.000 5.550 6.510

El método de marco de datos pandas quantile lo proporciona en Python:

state['Murder.Rate'].quantile([0.05, 0.25, 0.5, 0.75, 0.95])
Tabla 1-4. Percentiles de la tasa de asesinatos por estado
5% 25% 50% 75% 95%

1.60

2.42

4.00

5.55

6.51

La mediana es de 4 asesinatos por 100.000 habitantes, aunque hay bastante variabilidad: el percentil 5 es sólo 1,6 y el percentil 95 es 6,51.

Los boxplots, introducidos por Tukey [Tukey-1977], se basan en los percentiles y ofrecen una forma rápida de visualizar la distribución de los datos.La Figura 1-2 muestra un boxplot de la población por estado producido por R:

boxplot(state[['Population']]/1000000, ylab='Population (millions)')

pandas proporciona una serie de gráficos exploratorios básicos para el marco de datos; uno de ellos son los gráficos de caja:

ax = (state['Population']/1_000_000).plot.box()
ax.set_ylabel('Population (millions)')
Boxplot of state populations
Figura 1-2. Gráfico de caja de las poblaciones estatales

En este diagrama de caja podemos ver inmediatamente que la mediana de la población estatal es de unos 5 millones, la mitad de los estados se sitúan entre unos 2 millones y unos 7 millones, y hay algunos valores atípicos de población elevada. La parte superior e inferior del recuadro son los percentiles 75 y 25, respectivamente. La mediana se muestra mediante la línea horizontal del recuadro. Las líneas discontinuas, denominadas bigotes, se extienden desde la parte superior e inferior del recuadro para indicar el intervalo de la mayor parte de los datos. Hay muchas variaciones de un diagrama de caja; consulta, por ejemplo, la documentación de la función de R boxplot [R-base-2015]. Por defecto, la función de R extiende los bigotes hasta el punto más alejado de la caja, con la salvedad de que no irá más allá de 1,5 veces el IQR. Matplotlib utiliza la misma implementación; otros programas pueden utilizar una regla diferente.

Los datos que quedan fuera de los bigotes se representan como puntos aislados o círculos (a menudo se consideran valores atípicos).

Tablas de frecuencias e histogramas

Una tabla de frecuencias de una variable divide el rango de la variable en segmentos igualmente espaciados y nos dice cuántos valores caen dentro de cada segmento.La Tabla 1-5 muestra una tabla de frecuencias de la población por estado calculada en R:

breaks <- seq(from=min(state[['Population']]),
                to=max(state[['Population']]), length=11)
pop_freq <- cut(state[['Population']], breaks=breaks,
                right=TRUE, include.lowest=TRUE)
table(pop_freq)

La función pandas.cut crea una serie que mapea los valores en los segmentos. Utilizando el método value_counts, obtenemos la tabla de frecuencias:

binnedPopulation = pd.cut(state['Population'], 10)
binnedPopulation.value_counts()
Tabla 1-5. Tabla de frecuencias de población por estado
BinNumber BinRange Cuenta Estados

1

563,626-4,232,658

24

WY,VT,ND,AK,SD,DE,MT,RI,NH,ME,HI,ID,NE,WV,NM,NV,UT,KS,AR,MS,IA,CT,OK,OR

2

4,232,659-7,901,691

14

KY,LA,SC,AL,CO,MN,WI,MD,MO,TN,AZ,IN,MA,WA

3

7,901,692-11,570,724

6

VA,NJ,NC,GA,MI,OH

4

11,570,725–15,239,757

2

PA,IL

5

15,239,758–18,908,790

1

FL

6

18,908,791–22,577,823

1

NY

7

22,577,824–26,246,856

1

TX

8

26,246,857–29,915,889

0

9

29,915,890–33,584,922

0

10

33,584,923–37,253,956

1

CA

El estado menos poblado es Wyoming, con 563.626 habitantes, y el más poblado es California, con 37.253.956 habitantes.Esto nos da un rango de 37.253.956 - 563.626 = 36.690.330, que debemos dividir en intervalos de igual tamaño, digamos 10 intervalos. Con 10 contenedores de igual tamaño, cada contenedor tendrá una anchura de 3.669.033, por lo que el primer contenedor abarcará de 563.626 a 4.232.658. En cambio, el contenedor superior, de 33.584.923 a 37.253.956, sólo tiene un estado: California: California. Las dos casillas inmediatamente inferiores a California están vacías, hasta llegar a Texas. Es importante incluir las casillas vacías; el hecho de que no haya valores en esas casillas es una información útil. También puede ser útil experimentar con distintos tamaños de casillas. Si son demasiado grandes, pueden quedar ocultas características importantes de la distribución. Si son demasiado pequeños, el resultado es demasiado granular, y se pierde la capacidad de ver el panorama general.

Nota

Tanto las tablas de frecuencias como los percentiles resumen los datos creando intervalos. En general, los cuartiles y deciles tendrán el mismo recuento en cada intervalo (intervalos de igual recuento), pero los tamaños de los intervalos serán diferentes. La tabla de frecuencias, por el contrario, tendrá recuentos diferentes en los intervalos (intervalos de igual tamaño), y los tamaños de los intervalos serán iguales.

Un histograma es una forma de visualizar una tabla de frecuencias, con intervalos en el eje x y el recuento de datos en el eje y.En la Figura 1-3, por ejemplo, el intervalo centrado en 10 millones (1e+07) va desde aproximadamente 8 millones a 12 millones, y hay seis estados en ese intervalo. Para crear un histograma correspondiente a la Tabla 1-5 en R, utiliza la función hist con el argumento breaks:

hist(state[['Population']], breaks=breaks)

pandas admite histogramas para marcos de datos con el método DataFrame.plot.hist. Utiliza el argumento de palabra clave bins para definir el número de intervalos. Los distintos métodos de trazado devuelven un objeto eje que permite afinar aún más la visualización utilizando Matplotlib:

ax = (state['Population'] / 1_000_000).plot.hist(figsize=(4, 4))
ax.set_xlabel('Population (millions)')

El histograma se muestra en la Figura 1-3. En general, los histogramas se trazan de forma que:

  • Las casillas vacías se incluyen en el gráfico.

  • Los contenedores tienen la misma anchura.

  • El número de contenedores (o, lo que es lo mismo, el tamaño del contenedor) depende del usuario.

  • Las barras son contiguas: no aparece ningún espacio vacío entre barras, a menos que haya un contenedor vacío.

Histogram of state populations
Figura 1-3. Histograma de las poblaciones estatales

Momentos estadísticos

En teoría estadística, la localización y la variabilidad se denominan primer y segundo momentos de una distribución.El tercer y cuarto momentos se denominan asimetría y curtosis.La asimetría se refiere a si los datos están sesgados hacia valores mayores o menores, y la curtosis indica la propensión de los datos a tener valores extremos. Generalmente, no se utilizan métricas para medir la asimetría y la curtosis; en su lugar, éstas se descubren mediante representaciones visuales como las Figuras 1-2 y 1-3.

Parcelas de densidad y estimaciones

Relacionado con el histograma está el diagrama de densidad, que muestra la distribución de los valores de los datos como una línea continua.Un diagrama de densidad puede considerarse como un histograma suavizado, aunque normalmente se calcula directamente a partir de los datos mediante una estimación de densidad de núcleo (véase [Duong-2001] para un breve tutorial).La Figura 1-4 muestra una estimación de densidad superpuesta a un histograma. En R, puedes calcular una estimación de densidad utilizando la función density función

hist(state[['Murder.Rate']], freq=FALSE)
lines(density(state[['Murder.Rate']]), lwd=3, col='blue')

pandas proporciona el método density para crear un gráfico de densidad. Utiliza el argumento bw_method para controlar la suavidad de la curva de densidad:

ax = state['Murder.Rate'].plot.hist(density=True, xlim=[0,12], bins=range(1,12))
state['Murder.Rate'].plot.density(ax=ax) 1
ax.set_xlabel('Murder Rate (per 100,000)')
1

Las funciones de trazado suelen tomar un argumento opcional de eje (ax), que hará que el trazado se añada al mismo gráfico.

Una distinción clave respecto al histograma trazado en la Figura 1-3 es la escala del eje y: un trazado de densidad corresponde a trazar el histograma como proporción en lugar de como recuentos (esto se especifica en R mediante el argumento freq=FALSE). Observa que el área total bajo la curva de densidad = 1, y en lugar de los recuentos en intervalos, calculas las áreas bajo la curva entre dos puntos cualesquiera del eje x, que corresponden a la proporción de la distribución que se encuentra entre esos dos puntos.

Density of state murder rates
Figura 1-4. Densidad de las tasas de homicidio estatales

Estimación de la densidad

La estimación de la densidad es un tema rico con una larga historia en la literatura estadística. De hecho, se han publicado más de 20 paquetes de R que ofrecen funciones para la estimación de la densidad.[Deng-Wickham-2011] ofrece una revisión exhaustiva de los paquetes de R, con una recomendación particular para ASH o KernSmooth. Los métodos de estimación de la densidad en pandas y scikit-learn también ofrecen buenas implementaciones. Para muchos problemas de ciencia de datos, no es necesario preocuparse por los distintos tipos de estimaciones de la densidad; basta con utilizar las funciones base.

Otras lecturas

Explorar datos binarios y categóricos

Para los datos categóricos, las proporciones simples o los porcentajes cuentan la historia de los datos.

Obtener un resumen de una variable binaria o de una variable categórica con unas pocas categorías es una cuestión bastante fácil: simplemente calculamos la proporción de 1s, o las proporciones de las categorías importantes. Por ejemplo, la Tabla 1-6 muestra el porcentaje de vuelos retrasados según la causa del retraso en el aeropuerto de Dallas/Fort Worth en 2010. Los retrasos se clasifican como debidos a factores bajo el control de la compañía aérea, retrasos del sistema de control del tráfico aéreo (ATC), meteorología, seguridad o un avión que llega tarde.

Tabla 1-6. Porcentaje de retrasos por causa en el aeropuerto de Dallas/Fort Worth
Transportista ATC El tiempo Seguridad Entrada

23.02

30.40

4.03

0.12

42.43

Los diagramas de barras, que se ven a menudo en la prensa popular, son una herramienta visual habitual para mostrar una única variable categórica. Las categorías se enumeran en el eje x, y las frecuencias o proporciones en el eje y.La Figura 1-5 muestra los retrasos aeroportuarios anuales por causa en Dallas/Fort Worth (DFW), y se produce con la función de R barplot:

barplot(as.matrix(dfw) / 6, cex.axis=0.8, cex.names=0.7,
        xlab='Cause of delay', ylab='Count')

pandas también admite gráficos de barras para marcos de datos:

ax = dfw.transpose().plot.bar(figsize=(4, 4), legend=False)
ax.set_xlabel('Cause of delay')
ax.set_ylabel('Count')
Bar chart of airline delays at DFW by cause.
Figura 1-5. Gráfico de barras de los retrasos de las aerolíneas en DFW por causas

Observa que un diagrama de barras se parece a un histograma; en un diagrama de barras el eje x representa diferentes categorías de una variable factorial, mientras que en un histograma el eje x representa valores de una única variable en una escala numérica. En un histograma, las barras suelen mostrarse tocándose entre sí, con huecos que indican valores que no se dieron en los datos. En un diagrama de barras, las barras se muestran separadas entre sí.

Los gráficos circulares son una alternativa a los gráficos de barras, aunque los estadísticos y los expertos en visualización de datos suelen rechazar los gráficos circulares por ser menos informativos visualmente (véase [Few-2007]).

Datos numéricos como datos categóricos

En "Tablas de frecuencias e histogramas", vimos las tablas de frecuencias basadas en el agrupamiento de los datos. Esto convierte implícitamente los datos numéricos en un factor ordenado.En este sentido, los histogramas y los diagramas de barras son similares, excepto en que las categorías del eje x en el diagrama de barras no están ordenadas. Convertir los datos numéricos en datos categóricos es un paso importante y muy utilizado en el análisis de datos, ya que reduce la complejidad (y el tamaño) de los datos. Esto ayuda a descubrir relaciones entre características, sobre todo en las fases iniciales de un análisis.

Modo

La moda es el valor -o valores en caso de empate- que aparece con más frecuencia en los datos.Por ejemplo, la moda de la causa del retraso en el aeropuerto de Dallas/Fort Worth es "Entrada". Como otro ejemplo, en la mayor parte de Estados Unidos, la moda de la preferencia religiosa sería Cristiana. La moda es una simple estadística de resumen para datos categóricos, y generalmente no se utiliza para datos numéricos.

Valor esperado

Un tipo especial de datos categóricos son aquellos en los que las categorías representan o pueden asignarse a valores discretos en la misma escala.Un vendedor de una nueva tecnología en la nube, por ejemplo, ofrece dos niveles de servicio, uno con un precio de 300 $/mes y otro de 50 $/mes. El vendedor ofrece seminarios web gratuitos para generar clientes potenciales, y la empresa calcula que el 5% de los asistentes contratará el servicio de 300 $, el 15% contratará el servicio de 50 $ y el 80% no contratará nada. Estos datos pueden resumirse, a efectos financieros, en un único "valor esperado", que es una forma de media ponderada, en la que las ponderaciones son probabilidades.

El valor esperado se calcula del siguiente modo:

  1. Multiplica cada resultado por su probabilidad de ocurrencia.

  2. Suma estos valores.

En el ejemplo del servicio en la nube, el valor esperado de un asistente a un seminario web es, por tanto, de 22,50 $ al mes, calculado del siguiente modo:

E V = ( 0 . 05 ) ( 300 ) + ( 0 . 15 ) ( 50 ) + ( 0 . 80 ) ( 0 ) = 22 . 5

El valor esperado es en realidad una forma de media ponderada: añade las ideas de expectativas futuras y ponderaciones de probabilidad, a menudo basadas en juicios subjetivos. El valor esperado es un concepto fundamental en la valoración de empresas y la presupuestación de capital; por ejemplo, el valor esperado de cinco años de beneficios de una nueva adquisición, o el ahorro de costes esperado de un nuevo software de gestión de pacientes en una clínica.

Probabilidad

Antes nos hemos referido a la probabilidad de que se produzca un valor. La mayoría de la gente tiene una comprensión intuitiva de la probabilidad, ya que encuentra el concepto con frecuencia en las previsiones meteorológicas (la posibilidad de que llueva) o en los análisis deportivos (la probabilidad de ganar). Los deportes y los juegos se expresan más a menudo como probabilidades, que son fácilmente convertibles en probabilidades (si las probabilidades de que un equipo gane son de 2 a 1, su probabilidad de ganar es 2/(2+1) = 2/3). Sorprendentemente, sin embargo, el concepto de probabilidad puede ser fuente de profundas discusiones filosóficas cuando se trata de definirlo. Afortunadamente, aquí no necesitamos una definición matemática o filosófica formal. A nuestros efectos, la probabilidad de que ocurra un acontecimiento es la proporción de veces que ocurrirá si la situación pudiera repetirse una y otra vez, innumerables veces. La mayoría de las veces se trata de una construcción imaginaria, pero es una comprensión operativa adecuada de la probabilidad.

Otras lecturas

Ningún curso de estadística está completo sin una lección sobre gráficos engañosos, que a menudo implica gráficos de barras y circulares.

Correlación

El análisis exploratorio de datos en muchos proyectos de modelización (ya sea en ciencia de datos o en investigación) implica examinar la correlación entre predictores, y entre predictores y una variable objetivo.Se dice que las variables X e Y (cada una con datos medidos) están correlacionadas positivamente si valores altos de X van con valores altos de Y, y valores bajos de X van con valores bajos de Y. Si valores altos de X van con valores bajos de Y, y viceversa, las variables están correlacionadas negativamente.

Considera estas dos variables, perfectamente correlacionadas en el sentido de que cada una va de bajo a alto:

  • v1: {1, 2, 3}
  • v2: {4, 5, 6}

La suma vectorial de productos es 1 - 4 + 2 - 5 + 3 - 6 = 32 Ahora prueba a barajar uno de ellos y vuelve a calcular: la suma vectorial de productos nunca será superior a 32. Así que esta suma de productos podría utilizarse como métrica; es decir, la suma observada de 32 podría compararse con montones de barajados aleatorios (de hecho, esta idea está relacionada con una estimación basada en el remuestreo; véase "Prueba de permutación"). Sin embargo, los valores producidos por esta métrica no son tan significativos, salvo por referencia a la distribución del remuestreo.

Más útil es una variante estandarizada: el coeficiente de correlación, que da una estimación de la correlación entre dos variables que siempre se sitúa en la misma escala.Para calcular el coeficiente de correlación de Pearson, multiplicamos las desviaciones de la media de la variable 1 por las de la variable 2, y dividimos por el producto de las desviaciones típicas:

r = i=1 n (x i -x ¯)(y i -y ¯) (n-1)s x s y

Ten en cuenta que dividimos por n - 1 en lugar de n; consulta "Grados de libertad, ¿y n o n - 1?" para más detalles. El coeficiente de correlación siempre está entre +1( correlación positiva perfecta) y -1 (correlación negativa perfecta); 0 indica que no hay correlación.

Las variables pueden tener una asociación que no sea lineal, en cuyo caso el coeficiente de correlación puede no ser una métrica útil. La relación entre los tipos impositivos y los ingresos recaudados es un ejemplo: a medida que los tipos impositivos aumentan a partir de cero, los ingresos recaudados también aumentan. Sin embargo, una vez que los tipos impositivos alcanzan un nivel elevado y se acercan al 100%, aumenta la evasión fiscal y los ingresos fiscales en realidad disminuyen.

La tabla 1-7, denominada matriz de correlaciones, muestra la correlación entre los rendimientos diarios de las acciones de telecomunicaciones desde julio de 2012 hasta junio de 2015.En la tabla, puedes ver que Verizon (VZ) y ATT (T) tienen la correlación más alta. Level 3 (LVLT), que es una empresa de infraestructuras, tiene la correlación más baja con las demás. Observa la diagonal de 1s (la correlación de una acción consigo misma es 1) y la redundancia de la información por encima y por debajo de la diagonal.

Tabla 1-7. Correlación entre los rendimientos de las acciones de telecomunicaciones
T CTL FTR VZ LVLT

T

1.000

0.475

0.328

0.678

0.279

CTL

0.475

1.000

0.420

0.417

0.287

FTR

0.328

0.420

1.000

0.287

0.260

VZ

0.678

0.417

0.287

1.000

0.242

LVLT

0.279

0.287

0.260

0.242

1.000

Una tabla de correlaciones como la Tabla 1-7se suele representar gráficamente para mostrar visualmente la relación entre múltiples variables.La Figura 1-6 muestra la correlación entre los rendimientos diarios de los principales fondos cotizados (ETF). En R, podemos crearla fácilmente utilizando el paquete corrplot:

etfs <- sp500_px[row.names(sp500_px) > '2012-07-01',
                 sp500_sym[sp500_sym$sector == 'etf', 'symbol']]
library(corrplot)
corrplot(cor(etfs), method='ellipse')

Es posible crear el mismo gráfico en Python, pero no existe ninguna implementación en los paquetes comunes. Sin embargo, la mayoría admite la visualización de matrices de correlación mediante mapas de calor. El código siguiente lo demuestra utilizando el paquete seaborn.heatmap. En el repositorio de código fuente adjunto, incluimos código Python para generar la visualización más completa:

etfs = sp500_px.loc[sp500_px.index > '2012-07-01',
                    sp500_sym[sp500_sym['sector'] == 'etf']['symbol']]
sns.heatmap(etfs.corr(), vmin=-1, vmax=1,
            cmap=sns.diverging_palette(20, 220, as_cmap=True))

Los ETF del S&P 500 (SPY) y del índice Dow Jones (DIA) tienen una alta correlación. Del mismo modo, el QQQ y el XLK, compuestos en su mayoría por empresas tecnológicas, están correlacionados positivamente. Los ETF defensivos, como los que siguen los precios del oro (GLD), del petróleo (USO) o la volatilidad del mercado (VXX), tienden a estar débil o negativamente correlacionados con los demás ETF. La orientación de la elipse indica si dos variables están correlacionadas positivamente (la elipse apunta hacia arriba a la derecha) o negativamente (la elipse apunta hacia arriba a la izquierda). El sombreado y la anchura de la elipse indican la fuerza de la asociación: las elipses más finas y oscuras corresponden a relaciones más fuertes.

Correlation between ETF returns.
Figura 1-6. Correlación entre los rendimientos de los ETF

Al igual que la media y la desviación típica, el coeficiente de correlación es sensible a los valores atípicos de los datos.Los paquetes de software ofrecen alternativas sólidas al coeficiente de correlación clásico. Por ejemplo, el paquete R robust utiliza la función covRob para calcular una estimación robusta de la correlación. Los métodos del módulo scikit-learn sklearn.covariance aplican diversos enfoques.

Otras estimaciones de correlación

Los estadísticos propusieron hace tiempo otros tipos de coeficientes de correlación, como el rho de Spearman o el tau de Kendall. Se trata de coeficientes de correlación basados en el rango de los datos. Puesto que trabajan con rangos en lugar de valores, estas estimaciones son robustas frente a valores atípicos y pueden manejar ciertos tipos de no linealidades. Sin embargo, los científicos de datos pueden ceñirse generalmente al coeficiente de correlación de Pearson, y a sus alternativas robustas, para el análisis exploratorio. El atractivo de las estimaciones basadas en rangos es sobre todo para conjuntos de datos más pequeños y pruebas de hipótesis específicas.

Gráficos de dispersión

La forma estándar de visualizar la relación entre dos variables de datos medidos es con un gráfico de dispersión.El eje x representa una variable y el eje y otra, y cada punto del gráfico es un registro. Mira en la Figura 1-7 un gráfico de la correlación entre los rendimientos diarios de ATT y Verizon. Se produce en R con el comando:

plot(telecom$T, telecom$VZ, xlab='ATT (T)', ylab='Verizon (VZ)')

El mismo gráfico puede generarse en Python utilizando el método de dispersión pandas:

ax = telecom.plot.scatter(x='T', y='VZ', figsize=(4, 4), marker='$\u25EF$')
ax.set_xlabel('ATT (T)')
ax.set_ylabel('Verizon (VZ)')
ax.axhline(0, color='grey', lw=1)
ax.axvline(0, color='grey', lw=1)

Los rendimientos tienen una relación positiva: aunque se agrupan en torno a cero, la mayoría de los días, las acciones suben o bajan a la par (cuadrantes superior derecho e inferior izquierdo). Hay menos días en los que una acción baja significativamente mientras que la otra sube, o viceversa (cuadrantes inferior derecho y superior izquierdo).

Aunque el gráfico de la Figura 1-7 muestra sólo 754 puntos de datos, ya es obvio lo difícil que resulta identificar detalles en el centro del gráfico. Más adelante veremos cómo añadir transparencia a los puntos, o utilizar gráficos de densidad y agrupación hexagonal, puede ayudar a encontrar una estructura adicional en los datos.

Scatterplot between returns for ATT and Verizon.
Figura 1-7. Diagrama de dispersión de la correlación entre los rendimientos de ATT y Verizon

Otras lecturas

Statistics, 4.ª ed., de David Freedman, Robert Pisani y Roger Purves (W. W. Norton, 2007) contiene un excelente análisis de la correlación.

Explorar dos o más variables

Los estimadores conocidos, como la media y la varianza, examinan las variables de una en una(análisis univariante). El análisis de correlación (ver "Correlación") es un método importante que compara dos variables(análisis bivariante). En esta sección examinamos estimaciones y gráficos adicionales, y más de dos variables(análisis multivariante).

Al igual que el análisis univariante, el análisis bivariante implica tanto el cálculo de estadísticas de resumen como la elaboración de representaciones visuales. El tipo adecuado de análisis bivariante o multivariante depende de la naturaleza de los datos: numéricos o categóricos.

Binning hexagonal y contornos (trazado de datos numéricos frente a numéricos)

Los gráficos de dispersión están bien cuando hay un número relativamente pequeño de valores de datos. El gráfico de los rendimientos bursátiles de la Figura 1-7 sólo incluye unos 750 puntos. Para conjuntos de datos con cientos de miles o millones de registros, un gráfico de dispersión será demasiado denso, por lo que necesitaremos una forma diferente de visualizar la relación. Para ilustrarlo, consideremos el conjunto de datos kc_tax, que contiene los valores tasados fiscalmente de las propiedades residenciales del condado de King, Washington. Para centrarnos en la parte principal de los datos, eliminamos las residencias muy caras y las muy pequeñas o grandes utilizando la función subset:

kc_tax0 <- subset(kc_tax, TaxAssessedValue < 750000 &
                  SqFtTotLiving > 100 &
                  SqFtTotLiving < 3500)
nrow(kc_tax0)
432693

En pandas, filtramos el conjunto de datos del siguiente modo:

kc_tax0 = kc_tax.loc[(kc_tax.TaxAssessedValue < 750000) &
                     (kc_tax.SqFtTotLiving > 100) &
                     (kc_tax.SqFtTotLiving < 3500), :]
kc_tax0.shape
(432693, 3)

La figura 1-8 es un gráfico hexagonal de la relación entre los pies cuadrados terminados y el valor fiscal de las viviendas del condado de King. En lugar de trazar puntos, que aparecerían como una nube oscura monolítica, agrupamos los registros en intervalos hexagonales y trazamos los hexágonos con un color que indica el número de registros en ese intervalo. En este gráfico, la relación positiva entre los metros cuadrados y el valor de tasación fiscal es clara. Un rasgo interesante es la insinuación de bandas adicionales por encima de la banda principal (la más oscura) en la parte inferior, que indican las viviendas que tienen los mismos metros cuadrados que las de la banda principal, pero un valor de tasación fiscal más alto.

La figura 1-8 se generó con el potente paquete R ggplot2, desarrollado por Hadley Wickham [ggplot2].ggplot2 es una de las nuevas bibliotecas de software para el análisis visual exploratorio avanzado de datos; véase "Visualización de múltiples variables":

ggplot(kc_tax0, (aes(x=SqFtTotLiving, y=TaxAssessedValue))) +
  stat_binhex(color='white') +
  theme_bw() +
  scale_fill_gradient(low='white', high='black') +
  labs(x='Finished Square Feet', y='Tax-Assessed Value')

En Python, se puede acceder fácilmente a gráficos de binning hexagonal utilizando el método de marco de datos pandas hexbin :

ax = kc_tax0.plot.hexbin(x='SqFtTotLiving', y='TaxAssessedValue',
                         gridsize=30, sharex=False, figsize=(5, 4))
ax.set_xlabel('Finished Square Feet')
ax.set_ylabel('Tax-Assessed Value')
Hexagonal binning for tax-assessed value versus finished square feet.
Figura 1-8. Distribución hexagonal del valor fiscal en función de los pies cuadrados terminados

La Figura 1-9 utiliza contornos superpuestos a un gráfico de dispersión para visualizar la relación entre dos variables numéricas. Los contornos son esencialmente un mapa topográfico de dos variables; cada banda de contorno representa una densidad específica de puntos, que aumenta a medida que uno se acerca a un "pico". Este gráfico muestra una historia similar a la de la Figura 1-8: hay un pico secundario "al norte" del pico principal. Este gráfico también se creó utilizando ggplot2 con la función incorporada geom_density2d:

ggplot(kc_tax0, aes(SqFtTotLiving, TaxAssessedValue)) +
  theme_bw() +
  geom_point(alpha=0.1) +
  geom_density2d(color='white') +
  labs(x='Finished Square Feet', y='Tax-Assessed Value')

La función seaborn kdeplot de Python crea un gráfico de contorno:

ax = sns.kdeplot(kc_tax0.SqFtTotLiving, kc_tax0.TaxAssessedValue, ax=ax)
ax.set_xlabel('Finished Square Feet')
ax.set_ylabel('Tax-Assessed Value')
Contour plot of tax-assessed value versus finished square feet.
Figura 1-9. Gráfico de contorno del valor de tasación fiscal frente a los pies cuadrados terminados

Se utilizan otros tipos de gráficos para mostrar la relación entre dos variables numéricas, como los mapas de calor.Los mapas de calor, el binning hexagonal y los gráficos de contorno ofrecen una representación visual de una densidad bidimensional. De este modo, son análogos naturales de los histogramas y los gráficos de densidad.

Dos variables categóricas

Una forma útil de resumir dos variables categóricas es una tabla de contingencia: una tabla de recuentos por categoría.La Tabla 1-8 muestra la tabla de contingencia entre la calificación de un préstamo personal y el resultado de ese préstamo. Está tomada de los datos proporcionados por Lending Club, líder en el negocio de préstamos entre particulares. La calificación va de la A (alta) a la G (baja). El resultado puede ser totalmente pagado, al corriente de pago, retrasado o cancelado (no se espera cobrar el saldo del préstamo). Esta tabla muestra los porcentajes de recuento y de fila. Los préstamos de alta calificación tienen un porcentaje muy bajo de retrasos y cancelaciones en comparación con los préstamos de baja calificación.

Tabla 1-8. Tabla de contingencia del grado y estado del préstamo
Grado Cargado Actual Totalmente pagado Tarde Total

A

1562

50051

20408

469

72490

0.022

0.690

0.282

0.006

0.161

B

5302

93852

31160

2056

132370

0.040

0.709

0.235

0.016

0.294

C

6023

88928

23147

2777

120875

0.050

0.736

0.191

0.023

0.268

D

5007

53281

13681

2308

74277

0.067

0.717

0.184

0.031

0.165

E

2842

24639

5949

1374

34804

0.082

0.708

0.171

0.039

0.077

F

1526

8444

2328

606

12904

0.118

0.654

0.180

0.047

0.029

G

409

1990

643

199

3241

0.126

0.614

0.198

0.061

0.007

Total

22671

321185

97316

9789

450961

Las tablas de contingencia pueden fijarse sólo en los recuentos, o también pueden incluir porcentajes de columnas y totales. Las tablas dinámicas de Excel son quizá la herramienta más utilizada para crear tablas de contingencia.En R, la función CrossTable del paquete descr produce tablas de contingencia, y se utilizó el siguiente código para crear la Tabla 1-8:

library(descr)
x_tab <- CrossTable(lc_loans$grade, lc_loans$status,
                    prop.c=FALSE, prop.chisq=FALSE, prop.t=FALSE)

El método pivot_table crea la tabla dinámica en Python. El argumento aggfunc nos permite obtener los recuentos. Calcular los porcentajes es un poco más complicado:

crosstab = lc_loans.pivot_table(index='grade', columns='status',
                                aggfunc=lambda x: len(x), margins=True) 1

df = crosstab.loc['A':'G',:].copy() 2
df.loc[:,'Charged Off':'Late'] = df.loc[:,'Charged Off':'Late'].div(df['All'],
                                                                    axis=0) 3
df['All'] = df['All'] / sum(df['All']) 4
perc_crosstab = df
1

El argumento de la palabra clave margins sumará las sumas de columna y fila.

2

Creamos una copia de la tabla dinámica, ignorando las sumas de las columnas.

3

Dividimos las filas con la suma de filas.

4

Dividimos la columna 'All' por su suma.

Datos categóricos y numéricos

Los Boxplots (ver "Percentiles y Boxplots") son una forma sencilla de comparar visualmente las distribuciones de una variable numérica agrupada según una variable categórica. Por ejemplo, puede que queramos comparar cómo varía el porcentaje de retrasos de vuelos entre las distintas compañías aéreas.La Figura 1-10 muestra el porcentaje de vuelos de un mes que se retrasaron cuando el retraso estaba bajo el control de la compañía aérea:

boxplot(pct_carrier_delay ~ airline, data=airline_stats, ylim=c(0, 50))

El método pandas boxplot toma el argumento by que divide el conjunto de datos en grupos y crea los boxplots individuales:

ax = airline_stats.boxplot(by='airline', column='pct_carrier_delay')
ax.set_xlabel('')
ax.set_ylabel('Daily % of Delayed Flights')
plt.suptitle('')
Boxplot of percent of airline delays by carrier.
Figura 1-10. Gráfico de caja del porcentaje de retrasos de las aerolíneas por compañía aérea

Alaska destaca por tener el menor número de retrasos, mientras que American tiene el mayor número de retrasos: el cuartil inferior de American es superior al cuartil superior de Alaska.

El diagrama de violín, introducido por [Hintze-Nelson-1998], es una mejora del diagrama de caja y representa la densidad estimada con la densidad en el eje y.La densidad se refleja y se invierte, y la forma resultante se rellena, creando una imagen parecida a un violín. La ventaja de un diagrama de violín es que puede mostrar matices en la distribución que no son perceptibles en un diagrama de caja. Por otra parte, el diagrama de caja muestra más claramente los valores atípicos de los datos. En ggplot2, la función geom_violin puede utilizarse para crear un diagrama de violín de la siguiente manera:

ggplot(data=airline_stats, aes(airline, pct_carrier_delay)) +
  ylim(0, 50) +
  geom_violin() +
  labs(x='', y='Daily % of Delayed Flights')

Los gráficos de violín están disponibles con el método violinplot del paquete seaborn:

ax = sns.violinplot(airline_stats.airline, airline_stats.pct_carrier_delay,
                    inner='quartile', color='white')
ax.set_xlabel('')
ax.set_ylabel('Daily % of Delayed Flights')

El diagrama correspondiente se muestra en la Figura 1-11. El diagrama de violín muestra una concentración en la distribución cercana a cero para Alaska y, en menor medida, Delta. Este fenómeno no es tan evidente en el diagrama de caja. Puedes combinar un diagrama de violín con un diagrama de caja añadiendo geom_boxplot al diagrama (aunque esto funciona mejor cuando se utilizan colores).

Violin plot of percent of airline delays by carrier.
Figura 1-11. Gráfico de violín del porcentaje de retrasos de las aerolíneas por transportista

Visualizar múltiples variables

Los tipos de gráficos utilizados para comparar dos variables (diagramas de dispersión, agrupación hexagonal y diagramas de caja) se amplían fácilmente a más variables mediante la noción de condicionamiento. Por ejemplo, volvamos a la Figura 1-8, que mostraba la relación entre los pies cuadrados terminados de las viviendas y sus valores fiscales. Observamos que parece haber un grupo de viviendas con un valor fiscal por pie cuadrado más alto. Profundizando, la Figura 1-12 tiene en cuenta el efecto de la ubicación, trazando los datos para un conjunto de códigos postales. Ahora la imagen es mucho más clara: el valor fiscal es mucho más alto en algunos códigos postales (98105, 98126) que en otros (98108, 98188). Esta disparidad da lugar a los grupos observados en la Figura 1-8.

Creamos la Figura 1-12 utilizando ggplot2 y la idea de facetas, o una variable condicionante (en este caso, el código postal):

ggplot(subset(kc_tax0, ZipCode %in% c(98188, 98105, 98108, 98126)),
         aes(x=SqFtTotLiving, y=TaxAssessedValue)) +
  stat_binhex(color='white') +
  theme_bw() +
  scale_fill_gradient(low='white', high='blue') +
  labs(x='Finished Square Feet', y='Tax-Assessed Value') +
  facet_wrap('ZipCode') 1
1

Utiliza las funciones ggplot facet_wrap y facet_grid para especificar la variable condicionante.

Tax assess value versus finished square feet by zip code.
Figura 1-12. Valor fiscal frente a pies cuadrados terminados por código postal

La mayoría de los paquetes de Python basan sus visualizaciones en Matplotlib. Aunque en principio es posible crear gráficos facetados utilizando Matplotlib, el código puede complicarse. Afortunadamente, seaborn tiene una forma relativamente sencilla de crear estos gráficos:

zip_codes = [98188, 98105, 98108, 98126]
kc_tax_zip = kc_tax0.loc[kc_tax0.ZipCode.isin(zip_codes),:]
kc_tax_zip

def hexbin(x, y, color, **kwargs):
    cmap = sns.light_palette(color, as_cmap=True)
    plt.hexbin(x, y, gridsize=25, cmap=cmap, **kwargs)

g = sns.FacetGrid(kc_tax_zip, col='ZipCode', col_wrap=2) 1
g.map(hexbin, 'SqFtTotLiving', 'TaxAssessedValue',
      extent=[0, 3500, 0, 700000]) 2
g.set_axis_labels('Finished Square Feet', 'Tax-Assessed Value')
g.set_titles('Zip code {col_name:.0f}')
1

Utiliza los argumentos col y row para especificar las variables condicionantes. Para una única variable condicionante, utiliza col junto con col_wrap para envolver los gráficos facetados en varias filas.

2

El método map llama a la función hexbin con subconjuntos del conjunto de datos original para los distintos códigos postales. extent define los límites de los ejes x e y.

El concepto de condicionar variables en un sistema gráfico fue pionero con los gráficos Trellis, desarrollados por Rick Becker, Bill Cleveland y otros en los Laboratorios Bell [Trellis-Graphics]. Esta idea se ha propagado a varios sistemas gráficos modernos, como los paquetes lattice [lattice] y ggplot2 en R y los módulos seaborn [seaborn] y Bokeh [bokeh] en Python. Las variables condicionantes también forman parte integrante de plataformas de inteligencia empresarial como Tableau y Spotfire. Con la llegada de una enorme potencia informática, las plataformas de visualización modernas han ido mucho más allá de los humildes comienzos del análisis exploratorio de datos. Sin embargo, los conceptos y herramientas clave desarrollados hace medio siglo (por ejemplo simples gráficos de caja) siguen siendo la base de estos sistemas.

Otras lecturas

  • Modern Data Science with R de Benjamin Baumer, Daniel Kaplan y Nicholas Horton (Chapman & Hall/CRC Press, 2017) tiene una excelente presentación de "una gramática para gráficos" (la "gg" en ggplot).

  • ggplot2: Elegant Graphics for Data Analysis de Hadley Wickham (Springer, 2009) es un excelente recurso del creador de ggplot2.

  • Josef Fruehwald tiene un tutorial en Internet sobre ggplot2.

Resumen

El análisis exploratorio de datos (AED), cuyo pionero fue John Tukey, sentó las bases del campo de la ciencia de datos. La idea clave del AED es que el primer paso, y el más importante, en cualquier proyecto basado en datos es observar los datos. Resumiendo y visualizando los datos, puedes obtener una valiosa intuición y comprensión del proyecto.

En este capítulo se han revisado conceptos que van desde métricas sencillas, como estimaciones de localización y variabilidad, hasta ricas presentaciones visuales que exploran las relaciones entre múltiples variables, como en la Figura 1-12. El variado conjunto de herramientas y técnicas que está desarrollando la comunidad de código abierto, combinado con la expresividad de los lenguajes R y Python, ha creado una plétora de formas de explorar y analizar datos. El análisis exploratorio debería ser una piedra angular de cualquier proyecto de ciencia de datos.

Get Estadística Práctica para Científicos de Datos, 2ª Edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.