Autor: Roberto P. Muñoz
Cargo: Data Scientist en MetricArts
Github: https://github.com/rpmunoz
En este tutorial revisaremos los conceptos de tablas de frencuencias, medidas de localización y medidas de dispersión.
In [1]:
import numpy as np
import pandas as pd
np.set_printoptions(precision=2)
%precision 2
Out[1]:
Para este tutorial usaremos la base de datos de vuelos áreos publicada por el sitio web Openflights. En particular, usaremos la tabla de las rutas de vuelos comerciales (rutas.csv
).
Más información en https://github.com/jpatokal/openflights
In [2]:
rutas_file='data/rutas.csv'
rutas=pd.read_csv(rutas_file)
rutas=rutas.sample(frac=1)
rutas.head()
Out[2]:
In [3]:
print("Número de rutas aéreas: ", len(rutas))
print("Número de países: ", len(rutas['Pais_origen'].unique()))
Una de los primeros pasos del análisis descriptivo consiste en la organización de los datos mediante el uso de tablas o estructuras similares. La organización de los datos es fundamental para facilitar el entendimiento y posterior análisis de los datos.
Es común analizar conjuntos de datos con un gran número de registros y cuyo entendimiento se dificulta debido al volumen de los datos. En nuestro caso, la tabla de rutas aéreas contiene más de 66 mil registros.
La tabla de frecuencias o distribución de frecuencias es una manera de organizar los datos en forma de tabla, asignando a cada categoría o rango de valores su frecuencia correspondiente. Se pueden usar tanto variables cuantitativas como cualitativas.
La primera columna contiene el valor único o el rango de valores de la variable en estudio. En nuestro caso, usaremos la variable País de origen para construir la tabla de frencuencias.
La segunda columna contiene la frecuencia absoluta, la cual es el número de veces que aparece un determinado valor en un conjunto de datos. La suma de las frecuencias absolutas es igual al número total de registros.
La tercera columna contiene la frecuencia relativa, la cual es el cuociente entre la frecuencia absoluta de un determinado valor y el número total de datos. La suma de las frecuencias relativas es igual a 1.
In [4]:
rutas_pais=pd.value_counts(rutas['Pais_origen']).reset_index()
rutas_pais.columns=['País', 'Frecuencia absoluta']
rutas_pais['Frencuencia relativa']=rutas_pais['Frecuencia absoluta']/rutas_pais['Frecuencia absoluta'].sum()
rutas_pais
Out[4]:
Si bien la tabla de frecuencias ofrece toda la información disponible, el analista puede encontrar difícil la interpretación de toda esta información. Supongamos que queremos estudiar la columna Distancia_km de la tabla rutas, la cual contiene la distancia en kilómetros de cada vuelo aéreo que existe en el mundo. Sin duda la cantidad de datos es grande y difícil de interpretar.
En el análisis descriptivo es conveniente sinterizar la información en unas pocas medidas de resumen. Estas medidas son llamadas medidas de localización y medidas de dispersión.
Usaremos la columna Distancia_km para sintetizar la información asociada al largo de los vuelos.
Las medidas de localización más empleadas son el promedio, la mediana, los percentiles y los cuartiles.
Partamos calculando el valor promedio usando la función mean() de la librería numpy de Python.
In [5]:
np.mean(rutas['Distancia_km'])
Out[5]:
El valor promedio de la distancia reocrrida por los vuelos aéreos es 1.824,65 kilómetros.
Calculemos la mediana usando la función median()
In [6]:
np.median(rutas['Distancia_km'])
Out[6]:
Vemos que el valor de la mediana es 1.180,01 kilómetros, muy diferente al valor promedio. Esto suele ocurrir cuando el conjunto de datos contiene un número importante de valores atípicos o la distribución de datos tiene un alto grado de asimetría.
Calculemos los percentiles usando la función percentile(). Calculemos los percentiles 10, 50 y 90.
In [7]:
np.percentile(rutas['Distancia_km'],10)
Out[7]:
In [8]:
np.percentile(rutas['Distancia_km'],50)
Out[8]:
In [9]:
np.percentile(rutas['Distancia_km'],90)
Out[9]:
Una vez ordenados los datos de menor a mayor, el percentil 10 es el valor de la variable por debajo del cual se encuentra el 10% de los datos. Para el percentil 50 corresponde al valor que encierra al 50% de los datos, y cuyo valor coincide con la mediana.
Calculemos los cuartiles usando la función percentile() y los valores 25, 50 y 75 que corresponden a los tres cuartiles.
In [10]:
np.percentile(rutas['Distancia_km'],25)
Out[10]:
In [11]:
np.percentile(rutas['Distancia_km'],50)
Out[11]:
In [12]:
np.percentile(rutas['Distancia_km'],75)
Out[12]:
Las medidas de dispersón más empleadas son el rango estadísitico, la desviación, la varianza y la desviación típica.
Partamos calculando el rango estadístico usando la función ptp()
In [13]:
np.ptp(rutas['Distancia_km'])
Out[13]:
Vemos que la diferencia entre el vuelo más largo de la tabla y el vuelo más corto corresponde a 16.072.16 kms
Calculemos la desviación para los primeros 5 valores de la tabla. Usaremos el valor de cada registro y el promedio calculado usando la función mean()
In [14]:
rutas['Distancia_km'][0:5].values - np.mean(rutas['Distancia_km'])
Out[14]:
Vemos que el primer registro está por debajo del promedio y por ello su desviación es negativa.
Calulemos la varianza usando la función var()
In [15]:
np.var(rutas['Distancia_km'])
Out[15]:
Vemos que la varianza del conjunto de datos es bastante alta, pues su valor es 4.050.466,74 $km^2$. Es importante notar que las unidades de varianza son cuadráticas y por ello decimos $km^2$.
Calulemos la desviación típica o desviación estándar usando la función std()
In [16]:
np.std(rutas['Distancia_km'])
Out[16]:
Vemos que la desviación típica es 2.012,58 km. La desviación estándar tiene las mismas unidades físicas que el conjunto de datos.
In [ ]: