VARIABLE

Una variable es una característica, cualidad o propiedad observada que puede asumir diferentes valores y es susceptible de ser cuantificada o medida en una investigación.

Las observaciones registradas de una o más variables conforman un conjunto o set de datos.

En el formato largo, cada fila del dataset constituye un registro y cada columna contiene la información correspondiente a una variable.

VARIABLES CUANTITATIVAS Y CUALITATIVAS

Cualitativas o categóricas: son aquellas variables que no son medibles numéricamente.

Cuantitativas: son aquellas que toman valores numéricos para los cuales tiene sentido pensar en operaciones aritméticas. Pueden ser:

  • Continuas: pueden asumir teóricamente cualquier valor dentro de un intervalo.

  • Discretas: sólo pueden tomar valores aislados en dicho intervalo.

VARIABLES CUANTITATIVAS Y CUALITATIVAS

Supongamos que contamos con un dataset que contiene información acerca de las calorías quemadas por un conjunto de 685 adolescentes y hombres sanos de entre 14 y 34 años en función del tipo de actividad física realizada (correr, trotar o caminar), el tiempo dedicado a la actividad (en min) y la distancia recorrida durante la misma (en km), junto con la edad (en años) y el peso (en kg) de cada uno de los individuos.


ID Tiempo Distancia Actividad Calorías Peso Edad
1 10.18 4.2 correr 241.3 70.1 32
2 5.36 3.4 caminar 201.5 54.4 28
3 22.08 2.4 trotar 258.7 76.0 27

VARIABLES CUANTITATIVAS Y CUALITATIVAS


ID Tiempo Distancia Actividad Calorías Peso Edad
1 10.18 4.2 correr 241.3 70.1 32
2 5.36 3.4 caminar 201.5 54.4 28
3 22.08 2.4 trotar 258.7 76.0 27


¿Cómo clasificaríamos a cada una de las variables de este dataset?

MEDIDAS DE POSICIÓN

Las medidas de posición brindan información acerca de la localización del conjunto de observaciones de una variable

Las más comunes son:

  • Media aritmética

  • Fractilas o cuantilos

  • Modo

MEDIA ARITMÉTICA/PROMEDIO (\(\bar X\))

Es la suma de los valores observados de la variable \(X\) dividida por el número total de datos de dicha variable.

\[\bar X = \frac{1}{n}\sum_{i=1}^{n} X_i\] Para calcularla, contamos con el método mean() de Pandas, que ya empleamos anteriormente.

MEDIANA (Q2)

La mediana, segundo cuartil o percentil del 50% se define como el valor de la variable que se encuentra en la posición central del conjunto de datos ordenado de menor a mayor. La mitad de las observaciones son menores o iguales que él y la otra mitad son mayores.

¿Cómo se calcula?

MEDIA VS. MEDIANA

Como la media depende de todos los valores registrados de la variable, la presencia de alguna observación anormalmente grande o pequeña influye sensiblemente en ella.

En estas situaciones nos conviene buscar una medida de tendencia central que resulte más representativa del conjunto. La mediana es una buena alternativa.

MEDIA TRUNCADA (TRIMMED MEAN)

De manera general, es un promedio calculado sobre los datos una vez que se ha eliminado un cierto porcentaje de las observaciones más pequeñas y más grandes del conjunto
(α ⋅ 100%). Es una medida intermedia entre la media y la mediana.

MEDIA TRUNCADA (TRIMMED MEAN)

De manera general, es un promedio calculado sobre los datos una vez que se ha eliminado un cierto porcentaje de las observaciones más pequeñas y más grandes del conjunto
(α ⋅ 100%). Es una medida intermedia entre la media y la mediana.


Es el método oficial utilizado en la evaluación de pruebas olímpicas de patinaje sobre hielo y varias otras actividades deportivas y artísticas.

FRACTILAS O CUANTILOS

La mediana es un tipo particular de medida que pertenece a una clase mucho más general de estadísticas descriptivas de centralidad: las fractilas o cuantilos.


En términos generales, la fractila de orden r es aquel valor de la variable tal que el r% de las observaciones del conjunto ordenado de datos son menores o iguales a él.

CUARTILOS (Q1, Q2, Q3)

Los cuartilos son un tipo de fractila que divide al conjunto de datos ordenados de la variable en 4 partes con aproximadamente el mismo número de datos:

  • Cuartil 1 (Q1): es el valor tal que el 25% de los datos son menores o iguales a él.

  • Cuartil 2 (Q2): es el valor tal que el 50% de los datos son menores o iguales a él. Coincide con la mediana, definida anteriormente.

  • Cuartil 3 (Q3): es el valor tal que el 75% de los datos son menores o iguales a él.

CÁLCULO DE LOS CUARTILOS

Pandas cuenta con el método quantile(), que permite calcular cualquier fractila que se desee. La misma puede especificarse en el parámetro q, que por default es igual a 0.5.

Otro parámetro importante es interpolation, que permite definir el método a utilizar para estimar la fractila. Las distintas posibilidades pueden consultarse en la documentación de la función y difieren en la forma en que se calcula la posición y en cómo se interpola entre valores adyacentes cuando la posición no es un entero.

Por default, Pandas utiliza interpolation = 'linear', también conocido como Método R-7.

MÉTODO R-7

Según este método, la posición \(Pos\) de la fractila \(Q\) (0 \(\leq Q \leq\) 1) se calcula de la siguiente manera:

\[Pos = 1 + Q (n - 1)\] Luego, la fractila se calcula teniendo en cuenta la parte fraccional de \(Pos\) (\(f\)) y las observaciones que, en el conjunto ordenado, se encuentran en las posiciones enteras alrededor de \(Pos\) (\(x_i\) y \(x_j\), con \(x_i \leq x_j\)):

\[x_Q = x_i + f (x_j - x_i)\]

MÉTODO R-7 (versión “a mano”)

Por ejemplo, si contamos con los siguientes datos para la variable \(X\): [2, 2, 4, 5, 5, 6, 7, 8] y queremos calcular el primer cuartil (\(Q_1\)), primero obtenemos la posición:

\[Pos = 1 + 0.25(8-1) = 2.75\]

Luego, como es un valor que se encuentra entre las observaciones ubicadas en las posiciones 2 y 3 del conjunto, el valor de \(Q_1\) resulta:

\[Q_1 = 2 + 0.75(4-2) = 3.5\]

MÉTODO R-7 (versión pandas)

import pandas as pd

# Definimos una Serie con los valores de X
serie = pd.Series([2, 2, 4, 5, 5, 6, 7, 8])

# Calculamos el primer cuartil
q1 = serie.quantile(q = 0.25, interpolation = 'linear')

# Imprimimos el resultado
print('Primer cuartil:', q1)
Primer cuartil: 3.5

OTROS MÉTODOS

Otras opciones para interpolation son:

  • interpolation = 'lower': toma \(x_i\)

  • interpolation = 'higher': toma \(x_j\)

  • interpolation = 'nearest': toma el más cercano entre \(x_i\) y \(x_j\)

  • interpolation = 'midpoint': toma el punto medio entre \(x_i\) y \(x_j\)

CÁLCULO DE LOS CUARTILOS

Calculemos los cuartilos del conjunto de datos de peso_kg:

# Calculamos los tres cuartilos 
cuartiles = df['peso_kg'].quantile(q = [0.25, 0.5, 0.75])

# Imprimimos los resultados
print('Primer cuartil:','\t', cuartiles[0.25], 'kg')
print('Segundo cuartil:','\t', cuartiles[0.5], 'kg')
print('Tercer cuartil:', '\t', cuartiles[0.75], 'kg')
Primer cuartil:      62.8 kg
Segundo cuartil:     68.5 kg
Tercer cuartil:      74.1 kg

¿Cómo podríamos interpretar estos valores?

DECILOS Y PERCENTILOS

Otras fractilas que pueden definirse:

  • Decilos: son valores de la variable que dividen al conjunto de observaciones en diez partes con aproximadamente el mismo número de datos.

  • Percentilos: dividen al conjunto de observaciones de la variable en cien partes con aproximadamente el mismo número de datos.

CÁLCULO DE FRACTILAS (versión numpy)

numpy cuenta con diversas funciones para calcular fractilas. Un ejemplo es percentile(), en la que la fractila a calcular se debe indicar como un número entre 0 y 100 (el correspondiente %) en el parámetro q.

import numpy as np

# Calculamos la mediana del 'peso_kg'
np.percentile(df['peso_kg'], q = 50)
68.5

También permite seleccionar el método de estimación a utilizar en el parámetro method (por default se utiliza una interpolación lineal).

MODA

La moda es es el valor de la variable que se presenta mayor número de veces, es decir, el que tiene la mayor frecuencia.


Podemos calcular la moda de las observaciones de peso_kg utilizando el método mode() de Pandas:

df['peso_kg'].mode()
0    72.8
Name: peso_kg, dtype: float64

¿Cuál es el resultado?

MODA

Tenemos que tener presente que podemos tener conjuntos de observaciones que presenten más de una moda. En estos casos, la Serie de pandas que siempre devuelve el método mode() como output estará formada por tantos elementos como modas haya en el conjunto:

serie_ejemplo = pd.Series([2,3.5,8,3.5,4,6.5,8,6.5])

serie_ejemplo.mode()
0    3.5
1    6.5
2    8.0
dtype: float64

MODA

La moda es la única medida de posición que puede usarse para datos provenientes de una variable cualitativa.


Por ejemplo, podemos calcular la moda de las observaciones de actividad para ver cuál fue el tipo de actividad física que las personas de la muestra realizaron con mayor frecuencia:

df['actividad'].mode()
0    caminar
Name: actividad, dtype: object

MEDIDAS DE DISPERSIÓN

Las medidas de posición son útiles pero resumen sólo parte de la información contenida en el conjunto de datos. Dos conjuntos de observaciones pueden tener aprox. la misma media y mediana pero diferir en cuánto se “alejan” del valor central.

Surge la necesidad de definir medidas de dispersión que describan la variabilidad de los datos.


En esta Unidad trabajaremos con: desvío estándar/variancia, rango, rango intercuartil, coeficiente de variación y desviación mediana absoluta.

RANGO

El rango es la diferencia entre el mayor y el menor valor observado de la variable.

\[Rango = X_{max} - X_{min}\]

Para peso_kg, es igual a:

# Calculamos el rango
rango = round(df['peso_kg'].max() - df['peso_kg'].min(),1)

# Imprimimos el resultado
print('Rango:', rango, 'kg')
Rango: 49.5 kg

VARIANCIA (\(S^2\))

Es una medida de cuánto se desvían, en promedio, las observaciones de una variable respecto a la media aritmética.

\[S^2 = \frac{1}{n-1}\sum_{i=1}^{n} (X_i - \bar X)^2\]

A mayor variabilidad, mayor \(S^2\).

DESVIACIÓN ESTÁNDAR (\(S\))

Se define como la raíz cuadrada positiva de la variancia.

\[S = + \sqrt{\frac{1}{n-1}\sum_{i=1}^{n} (X_i - \bar X)^2}\] En comparación con la variancia, posee la ventaja de que está expresada en las unidades de la variable, por lo que su interpretación es más sencilla y directa.

Pdemos interpretarla como una “distancia promedio de las observaciones con respecto a la media”.

CÁLCULO DE VAR. Y DESVÍO ESTÁNDAR

Pandas cuenta con los métodos var() y std() que permiten calcular variancia y desvío estándar, respectivamente.

# Calculamos el desvío estándar del peso
desv_est = round(df['peso_kg'].std(),1)

# Calculamos la variancia del peso
variancia = round(df['peso_kg'].var(),1)

# Imprimimos los resultados
print('Desvío estándar:', desv_est, 'kg')
print('Variancia:', variancia, 'kg\u00B2')
Desvío estándar: 8.1 kg
Variancia: 64.9 kg²

COEFICIENTE DE VARIACIÓN (CV)

Es el desvío estándar dividido por la media aritmética.

\[CV = \frac{S}{|\bar X|}\] Es una medida adimensional que indica qué proporción representa el desvío estándar de la media aritmética.

Se suele utilizar cuando se desea comparar la variabilidad de dos o más conjuntos de datos que difieren en unidades de medida y/o magnitudes.

RANGO INTERCUARTIL (RI)

Es la diferencia entre el tercer y el primer cuartil y, como tal, mide la dispersión del 50% de los datos centrales.

\[RI = Q_3 - Q_1\] Es una medida de dispersión que no está influenciada por valores extremos. Por este motivo, cuando se usa la mediana como medida de centralidad, el RI es la medida de dispersión adecuada para acompañarla.

RANGO INTERCUARTIL (RI)

Calculamos el RI para las observaciones de la variable peso_kg:

# Calculamos los cuartiles para la variable peso
cuartiles = df['peso_kg'].quantile([0.25, 0.5, 0.75])

# Calculamos el rango intercuartil para peso
iqr = round(cuartiles[0.75] - cuartiles[0.25],1)

# Imprimimos el resultado
print('Rango intercuartil:', iqr, 'kg')
Rango intercuartil: 11.3 kg

¿Cómo podemos interpretar el valor obtenido?

DESVIACIÓN MEDIANA ABSOLUTA (MAD)

Es una versión robusta del desvío estándar basada en la mediana, que se define como la mediana de los valores absolutos de las diferencias entre cada observación y la mediana.

DESVIACIÓN MEDIANA ABSOLUTA (MAD)



DESVIACIÓN MEDIANA ABSOLUTA (MAD)

Es una versión robusta del desvío estándar basada en la mediana, que se define como la mediana de los valores absolutos de las diferencias entre cada observación y la mediana.

\[MAD = Mediana(|X_i - Q_2|)\]

DESVIACIÓN MEDIANA ABSOLUTA (MAD)

Podemos obtenerla de la siguiente manera:

# Calculamos las diferencias absolutas entre cada observación y la mediana
df['peso_dif_abs'] = abs(df['peso_kg'] - cuartiles[0.5])

# La MAD es la mediana de las observaciones de 'peso_dif_abs'
mad = round(df['peso_dif_abs'].quantile(0.5),2)

# Imprimimos el resultado
print('Desviación mediana absoluta:',mad,'kg')
Desviación mediana absoluta: 5.6 kg

EL MÉTODO describe()

Una forma fácil y rápida de obtener gran parte de las métricas vistas hasta acá es utilizar el método describe() sobre la columna del DataFrame de interés.

df['peso_kg'].describe()
count    685.000000
mean      67.849197
std        8.057056
min       31.400000
25%       62.800000
50%       68.500000
75%       74.100000
max       80.900000
Name: peso_kg, dtype: float64

EL MÉTODO describe()

¿Qué información obtenemos al aplicarlo sobre una columna que contiene datos de una variable cualitativa?

df['actividad'].describe()
count         685
unique          3
top       caminar
freq          288
Name: actividad, dtype: object

EL BOXPLOT

Los cuartilos y los valores mínimo y máximo conforman un conjunto de cinco números que brindan un buen resumen de nuestros datos y con los cuales podemos construir un gráfico llamado boxplot.


EL BOXPLOT MODIFICADO

Una versión modificada del boxplot permite detectar potenciales outliers, es decir, observaciones que no son típicas del conjunto.

  • Se consideran potenciales outliers aquellas observaciones que caigan por fuera de \((Q_1 − 1.5 RI)\) y \((Q_3 + 1.5 RI)\).

  • La modificación del gráfico consiste en extender los whiskers hasta las observaciones mínima y máxima que no sean puntos atípicos. Los outliers se marcan en el gráfico como puntos separados de los whiskers.

EL BOXPLOT MODIFICADO

import matplotlib.pyplot as plt
import seaborn as sns

sns.boxplot(x = 'peso_kg', data = df)
plt.show()

EL BOXPLOT MODIFICADO

¿Hay potenciales outliers entre las observaciones de la variable peso_kg?

EL BOXPLOT MODIFICADO

Registros que contienen potenciales outliers para peso_kg:

# Calculamos los "límites"
lim_inf = cuartiles[0.25] - 1.5*iqr
lim_sup = cuartiles[0.75] + 1.5*iqr

# Registros que contienen un valor de `peso_kg` por fuera de los límites
df.loc[(df['peso_kg'] < lim_inf) | (df['peso_kg'] > lim_sup)]
id duracion_min distancia_km actividad calorias_quemadas peso_kg edad_anios peso_dif_abs
270 271 5.04 7.0 caminar 269.0 44.7 29 23.8
392 393 17.51 4.7 caminar 276.7 31.4 28 37.1
612 613 1.02 6.2 trotar 266.9 43.8 21 24.7
615 616 7.64 4.4 caminar 241.6 44.0 32 24.5
659 660 4.26 3.6 trotar 237.5 44.2 33 24.3

EL BOXPLOT MODIFICADO

¿Qué puede decirse acerca de la simetría de la distribución de peso_kg?

EL BOXPLOT MODIFICADO

En base a las respuestas a las preguntas anteriores, ¿qué medidas de centralidad y de dispersión serían las más adecuadas para describir a estos datos?

BOXPLOT SIN OUTLIERS

Si seteamos el parámetro showfliers = False, los potenciales outliers ya no se muestran en el gráfico resultante (¡pero es como si esos datos no existieran!):

sns.boxplot(x = 'peso_kg', data = df, showfliers = False)
plt.show()

BOXPLOT SIN OUTLIERS

Una forma de construir el boxplot clásico (el que no muestra potenciales outliers) sin borrar datos, es modificar el parámetro whis, extendiendo los whiskers hasta el menor y el mayor valor observado:

sns.boxplot(x = 'peso_kg', data = df, whis = [0,100])
plt.show()

TABLA DE FRECUENCIAS

Una tabla de frecuencias constituye una forma sencilla y efectiva para resumir la información de las observaciones de una variable de un dataset.

En el caso de que la variable en cuestión sea cualitativa, la tabla contiene las diferentes categorías de la misma junto con el número de veces que se presentó cada una de ellas (frecuencia absoluta) en el dataset.

También suele utilizarse la frecuencia relativa, que se define como el cociente entre la correspondiente frecuencia absoluta y el número total de datos.

TABLA DE FRECUENCIAS

Puede construirse fácilmente utilizando el método value_counts() de Pandas.

La versión “más simple” de una tabla de frecuencias para la variable actividad se vería así:

df['actividad'].value_counts()
actividad
caminar    288
trotar     253
correr     144
Name: count, dtype: int64

TABLA DE FRECUENCIAS

Podemos emprolijarla un poco y darle más forma:

tabla_actividad = df['actividad'].value_counts().reset_index()
tabla_actividad.rename(columns = {'actividad':'Actividad', 'count':'Frec_absoluta'}, inplace = True)
tabla_actividad = tabla_actividad.set_index('Actividad')

tabla_actividad
Frec_absoluta
Actividad
caminar 288
trotar 253
correr 144

TABLA DE FRECUENCIAS

A la tabla anterior, podemos agregarle una columna que contenga la frecuencia relativa de cada una de las actividades físicas:

# La frecuencia relativa siempre es un número entre 0 y 1
tabla_actividad['Frec_relativa'] = round(tabla_actividad['Frec_absoluta']/sum(tabla_actividad['Frec_absoluta']),2)

tabla_actividad
Frec_absoluta Frec_relativa
Actividad
caminar 288 0.42
trotar 253 0.37
correr 144 0.21

TABLA DE FRECUENCIAS

Otra alternativa hubiera sido expresar las frecuencias anteriores como porcentajes sobre el total de registros:

tabla_actividad['Porcentaje'] = round(tabla_actividad['Frec_absoluta']*100/sum(tabla_actividad['Frec_absoluta']),1)

tabla_actividad
Frec_absoluta Porcentaje
Actividad
caminar 288 42.0
trotar 253 36.9
correr 144 21.0

UN ADELANTO DE LA UNIDAD 4

Podríamos utilizar el objeto DataFrame que generamos para representar gráficamente la información extraída.

¿Qué gráfico podríamos construir?

UN ADELANTO DE LA UNIDAD 4

# Construimos un gráfico de barras horizontales
sns.barplot(x = 'Porcentaje', y = 'Actividad', data = tabla_actividad)
plt.xlabel('Porcentaje (%)', fontsize = 20, fontweight = 'bold')
plt.ylabel('Actividad', fontsize = 20, fontweight = 'bold')
plt.show()

TABLA DE FRECUENCIAS

En el caso de que variables cuantitativas discretas, cuando el número de observaciones es grande pero hay pocos valores diferentes, podemos construir una tabla de características similares para resumir la información correspondiente.

Por ejemplo, en nuestro dataset tenemos la variable edad_anios.

TABLA DE FRECUENCIAS

# Tabla de frecuencias para la variable Edad
tabla_edad = df['edad_anios'].value_counts().sort_index().to_frame()
tabla_edad.index.name = 'Edad'
tabla_edad.rename(columns = {'count':'Frec_absoluta'}, inplace = True)

tabla_edad.head()
Frec_absoluta
Edad
14 1
15 2
17 4
18 4
19 4

TABLA DE FRECUENCIAS

Podemos usar el DataFrame anterior para representar gráficamente esta información (Gráfico de bastones):

sns.barplot(x = 'Edad', y = 'Frec_absoluta', data = tabla_edad, width = 0.15)
plt.show()

TABLA DE FRECUENCIAS

Cuando trabajamos con variables que toman muchos valores diferentes, lo que ocurre generalmente en el caso de variables cuantitativas continuas, en lugar de construir la tabla considerando los valores individuales que las mismas pueden asumir, se hace un agrupamiento previo en subintervalos (segmentación).

TABLA DE FRECUENCIAS

Por ejemplo, para la distancia recorrida (distancia_km), cuyas estadísticas descriptivas son:

df['distancia_km'].describe()
count    685.000000
mean       5.220000
std        2.141649
min        0.300000
25%        3.600000
50%        5.400000
75%        6.900000
max        9.800000
Name: distancia_km, dtype: float64

TABLA DE FRECUENCIAS

…podríamos realizar un agrupamiento de los valores observados en los siguientes subintervalos:

  • De 0 a 2 km: [0,2)

  • De 2 a 4 km: [2,4)

  • De 4 a 6 km: [4,6)

  • De 6 a 8 km [6,8)

  • De 8 a 10 km: [8,10)

TABLA DE FRECUENCIAS

Para eso, podemos utilizar el método pd.cut():

# Generamos los subintervalos con pd.cut()
df['distancia_seg'] = pd.cut(df['distancia_km'], bins = [0,2,4,6,8,10], right = False)

# ¿Cómo luce esta serie?
df['distancia_seg'].head()
0    [4, 6)
1    [2, 4)
2    [2, 4)
3    [6, 8)
4    [4, 6)
Name: distancia_seg, dtype: category
Categories (5, interval[int64, left]): [[0, 2) < [2, 4) < [4, 6) < [6, 8) < [8, 10)]

TABLA DE FRECUENCIAS

# Utilizamos value_counts() para generar la tabla de frecuencias
tabla_distancia = df['distancia_seg'].value_counts().sort_index()

tabla_distancia
distancia_seg
[0, 2)      58
[2, 4)     135
[4, 6)     214
[6, 8)     204
[8, 10)     74
Name: count, dtype: int64

TABLA DE FRECUENCIAS

# Formateamos nuestra tabla
tabla_distancia = tabla_distancia.reset_index()
tabla_distancia.rename(columns = {'distancia_seg':'Distancia', 'count':'Frec_absoluta'}, inplace = True)
tabla_distancia = tabla_distancia.set_index('Distancia')

tabla_distancia
Frec_absoluta
Distancia
[0, 2) 58
[2, 4) 135
[4, 6) 214
[6, 8) 204
[8, 10) 74

TABLA DE FRECUENCIAS

Podemos agregar una columna que contenga la frecuencia relativa correspondiente a cada subintervalo de la distancia:

tabla_distancia['Frec_relativa'] = round(tabla_distancia['Frec_absoluta']/sum(tabla_distancia['Frec_absoluta']),2)

tabla_distancia
Frec_absoluta Frec_relativa
Distancia
[0, 2) 58 0.08
[2, 4) 135 0.20
[4, 6) 214 0.31
[6, 8) 204 0.30
[8, 10) 74 0.11

TABLA DE FRECUENCIAS

A la tabla anterior podemos agregarle las frecuencias absoluta y relativa acumuladas correspondiente a cada subintervalo de distancias, utilizando el método cumsum().

La frecuencia absoluta acumulada es el número de observaciones de la variable menores al límite superior del subintervalo correspondiente.

La frecuencia relativa acumulada es el cociente entre la correspondiente frecuencia absoluta acumulada y el número total de datos.

TABLA DE FRECUENCIAS

# Agregamos ambas frecuencias acumuladas
tabla_distancia['Frec_absoluta_cum'] = tabla_distancia['Frec_absoluta'].cumsum()
tabla_distancia['Frec_relativa_cum'] = tabla_distancia['Frec_relativa'].cumsum()

tabla_distancia
Frec_absoluta Frec_relativa Frec_absoluta_cum Frec_relativa_cum
Distancia
[0, 2) 58 0.08 58 0.08
[2, 4) 135 0.20 193 0.28
[4, 6) 214 0.31 407 0.59
[6, 8) 204 0.30 611 0.89
[8, 10) 74 0.11 685 1.00

TABLA DE FRECUENCIAS


Frec_absoluta Frec_relativa Frec_absoluta_cum Frec_relativa_cum
Distancia
[0, 2) 58 0.08 58 0.08
[2, 4) 135 0.20 193 0.28
[4, 6) 214 0.31 407 0.59
[6, 8) 204 0.30 611 0.89
[8, 10) 74 0.11 685 1.00


¿Cómo podemos interpretar el valor 0.59 de la frecuencia relativa acumulada, en la tercera fila?

HISTOGRAMA DE FRECUENCIAS

La información anterior es la base para la construcción de un gráfico muy utilizado para representar datos de una variable continua (especialmente cuando el número de observaciones es grande): el histograma de frecuencias.

En el eje de las abscisas se representan los intervalos en que se agruparon los valores de la variable y en el eje de las ordenadas la frecuencia absoluta o relativa. Luego, sobre cada uno de los subintervalos se grafica un rectángulo cuya área representa la frecuencia (absoluta o relativa) del mismo.

HISTOGRAMA DE FRECUENCIAS

Así luciría el histograma de frecuencias de los datos de distancia_km con la subdivisión que realizamos en subintervalos:

HISTOGRAMA DE FRECUENCIAS

Quizás, para el número de datos con el que contamos (n = 685), sería más óptimo realizar una subdivisión en un mayor número de intervalos, o bins (acá los elige Seaborn):

sns.histplot(x = 'distancia_km', data = df, binrange = [0, df['distancia_km'].max()])
plt.show()

HISTOGRAMA DE FRECUENCIAS