Saltar al contenido
Análisis de Series de Tiempo con Python

Análisis y visualización exploratoria de datos

Introducción

El análisis de series de tiempo es una técnica que se utiliza para modelar y predecir el comportamiento de datos en función del tiempo. En el análisis de series de tiempo, los datos de interés se miden en intervalos de tiempo predefinidos, como horas, días, semanas o años.

Además, la visualización exploratoria de datos es una técnica que se emplea para entender mejor los datos mediante la creación de gráficos y representaciones visuales.

En este curso de Análisis de Series de Tiempo con Python, aprenderás a utilizar diversas librerías y herramientas de Python para el análisis y visualización de series de tiempo. Cubriremos temas como:

  • Lectura y manipulación de datos de series de tiempo.
  • Creación de gráficos y visualizaciones.
  • Selección de características.
  • Normalización de datos.
  • Construcción de modelos de predicción.

La habilidad para analizar y visualizar correctamente datos de series de tiempo es un recurso muy valioso en una amplia variedad de campos, incluyendo la economía, la ingeniería, el marketing y las ciencias sociales, entre otros.

En este curso, tendrás la oportunidad de aprender estas habilidades de una manera práctica y directa para poder aplicarlas en tu trabajo o en tus proyectos personales.

Resumen

El análisis y visualización exploratoria de datos es una técnica que se utiliza para examinar y comprender los datos de un conjunto de información. En su esencia, esta técnica es una forma de "ver" los datos en diferentes formas y verificar patrones, tendencias y relaciones que puedan existir entre ellos.

Hay varias herramientas disponibles para realizar un análisis y visualización exploratoria de datos en Python, desde las básicas como matplotlib, seaborn y pandas hasta bibliotecas más avanzadas como bokeh, d3.js y plotly.

En términos generales, el proceso de Análisis y visualización exploratoria de datos se divide en dos fases principales:

  1. Análisis de datos: Esto implica examinar los datos crudos para descubrir patrones ocultos, identificar tendencias y relaciones entre los datos, y también eliminar anomalías y valores atípicos. Las herramientas utilizadas en esta fase incluyen la estadística descriptiva, gráficos y visualizaciones, y técnicas como la transformación de datos y la normalización.

  2. Visualización de datos: una vez que los datos se han analizado y se han eliminado o corregido los problemas, la siguiente fase es exhibir los datos en diferentes formatos gráficos. La visualización de datos es una importante técnica de comunicación de información, lo que permite a los usuarios detectar patrones y tendencias en los datos de una manera más clara y concisa.

Es importante destacar que el análisis y visualización exploratoria de datos no es un proceso lineal y muchas veces es iterativo, lo que significa que se debe revisar los resultados obtenidos y explorar de nuevo si se sospecha la existencia de patrones y tendencias que no han sido detectados en un primer análisis.

Aplicación teórica

Cálculo de Estadísticas Descriptivas

El cálculo de estadísticas descriptivas es un proceso fundamental en el análisis de datos, ya que proporciona un resumen numérico de los datos y ayuda a identificar patrones, tendencias y posibles anomalías. Estas estadísticas incluyen medidas de tendencia central, dispersión, forma y otras propiedades importantes que describen la distribución de un conjunto de datos.

Medidas de Tendencia Central

Las medidas de tendencia central describen el valor típico de un conjunto de datos. Las más comunes son la media, la mediana y la moda.

1. Media: La media aritmética es la suma de todos los valores dividida por el número de observaciones. Matemáticamente, para un conjunto de datos \(X = \{x_1, x_2, \ldots, x_n\}\), la media \(\mu\) se calcula como:

\[
\mu = \frac{1}{n} \sum_{i=1}^n x_i
\]

2. Mediana: La mediana es el valor central de un conjunto de datos ordenado. Si el número de observaciones \(n\) es impar, la mediana es el valor en la posición \((n+1)/2\). Si \(n\) es par, es el promedio de los dos valores centrales.

3. Moda: La moda es el valor que ocurre con mayor frecuencia en un conjunto de datos. En distribuciones unimodales, existe una única moda, pero los conjuntos de datos también pueden ser bimodales o multimodales.

Medidas de Dispersión

Las medidas de dispersión indican cuán extendidos están los datos alrededor de la tendencia central. Las principales son el rango, la varianza y la desviación estándar.

1. Rango: El rango es la diferencia entre el valor máximo y mínimo en un conjunto de datos:

\[
\text{Rango} = x_{\text{max}} - x_{\text{min}}
\]

2. Varianza: La varianza mide la dispersión de los datos alrededor de la media. Para un conjunto de datos, la varianza \(\sigma^2\) se calcula como:

\[
\sigma^2 = \frac{1}{n} \sum_{i=1}^n (x_i - \mu)^2
\]

donde \(x_i\) son los datos y \(\mu\) es la media.

3. Desviación Estándar: La desviación estándar es la raíz cuadrada de la varianza, lo que la hace más interpretable ya que está en las mismas unidades que los datos originales:

\[
\sigma = \sqrt{\sigma^2} = \sqrt{\frac{1}{n} \sum_{i=1}^n (x_i - \mu)^2}
\]

Medidas de Forma

Las medidas de forma describen la asimetría (skewness) y la curtosis (kurtosis) de una distribución.

1. Asimetría (Skewness): La asimetría cuantifica cuán simétricamente están distribuidos los datos alrededor de la media. Matemáticamente, la asimetría \(\gamma_1\) se calcula como:

\[
\gamma_1 = \frac{\frac{1}{n} \sum_{i=1}^n (x_i - \mu)^3}{\sigma^3}
\]

Un valor positivo indica una distribución asimétrica hacia la derecha, mientras que un valor negativo indica una asimetría hacia la izquierda.

2. Curtosis: La curtosis mide la "agudeza" de la distribución de datos. La curtosis estandarizada (exceso de curtosis) \(\gamma_2\) se calcula como:

\[
\gamma_2 = \frac{\frac{1}{n} \sum_{i=1}^n (x_i - \mu)^4}{\sigma^4} - 3
\]

Una curtosis positiva indica una distribución con colas más pesadas que una distribución normal, mientras que una curtosis negativa indica colas más ligeras.

 Medidas de Posición Relativa

Estas medidas indican la posición de un valor dentro de un conjunto de datos. Las más comunes son los percentiles y los cuartiles.

1. Percentiles: Los percentiles dividen un conjunto de datos en 100 partes iguales. El percentil \(P_k\) es el valor por debajo del cual se encuentra el \(k\%\) de los datos.

2. Cuartiles: Los cuartiles son percentiles específicos que dividen un conjunto de datos en cuatro partes iguales. El primer cuartil (\(Q1\)) es el percentil 25, el segundo cuartil (\(Q2\)) es el percentil 50 o la mediana, y el tercer cuartil (\(Q3\)) es el percentil 75.

 Aplicación Matemática en el Cálculo de Estadísticas Descriptivas

Para calcular estas estadísticas de manera efectiva, se pueden usar herramientas computacionales o realizar cálculos manuales para conjuntos de datos pequeños. Por ejemplo, para un conjunto de datos \(X = \{4, 8, 6, 5, 3, 2, 8, 10, 12, 14\}\):

1. Media:

\[
\mu = \frac{4 + 8 + 6 + 5 + 3 + 2 + 8 + 10 + 12 + 14}{10} = \frac{72}{10} = 7.2
\]

2. Varianza:

Primero, calcular la suma de los cuadrados de las diferencias con la media:

\[
\sum (x_i - \mu)^2 = (4-7.2)^2 + (8-7.2)^2 + (6-7.2)^2 + \ldots + (14-7.2)^2 = 84.8
\]

Luego, calcular la varianza:

\[
\sigma^2 = \frac{84.8}{10} = 8.48
\]

3. **Desviación Estándar**:

\[
\sigma = \sqrt{8.48} \approx 2.91
\]

Estas fórmulas y cálculos proporcionan una base matemática sólida para comprender las estadísticas descriptivas y cómo se aplican en el análisis de datos.

Análisis de Correlaciones y Dependencias

El análisis de correlaciones y dependencias es una herramienta fundamental en estadística para examinar cómo dos o más variables se relacionan entre sí. Este análisis no solo identifica la dirección y la fuerza de la relación entre las variables, sino que también puede ayudar a inferir dependencias funcionales o probabilísticas, cruciales para la modelación y la predicción.

Correlación

La correlación mide la fuerza y la dirección de una relación lineal entre dos variables. Es una medida adimensional que toma valores entre \(-1\) y \(1\), donde:
- \(1\) indica una correlación positiva perfecta (a medida que una variable aumenta, la otra también lo hace en proporción exacta).
- \(-1\) indica una correlación negativa perfecta (a medida que una variable aumenta, la otra disminuye en proporción exacta).
- \(0\) indica que no hay una correlación lineal.

La fórmula para calcular el coeficiente de correlación de Pearson entre dos variables \(X\) e \(Y\) es:

\[
\rho_{X,Y} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y}
\]

donde:
- \(\text{Cov}(X, Y)\) es la covarianza entre \(X\) e \(Y\).
- \(\sigma_X\) y \(\sigma_Y\) son las desviaciones estándar de \(X\) e \(Y\), respectivamente.

Cálculo de la Covarianza

La covarianza mide la tendencia de dos variables a variar conjuntamente. La fórmula para la covarianza entre \(X\) e \(Y\) es:

\[
\text{Cov}(X, Y) = \frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})
\]

donde \(x_i\) y \(y_i\) son los valores individuales de \(X\) e \(Y\), y \(\bar{x}\) y \(\bar{y}\) son las medias de \(X\) e \(Y\), respectivamente.

Dependencia

Mientras que la correlación mide relaciones lineales, la dependencia entre variables es un concepto más general. Existen dependencias no lineales, donde la relación entre las variables no se describe adecuadamente mediante una línea recta. Por ejemplo, \(Y = X^2\) representa una dependencia cuadrática entre \(X\) y \(Y\).

Dependencia Funcional

Una dependencia funcional se refiere a una relación exacta entre variables. Por ejemplo, si \(Y = f(X)\) describe una relación determinista, entonces \(Y\) depende funcionalmente de \(X\). Matemáticamente, si existe una función \(f\) tal que para cada valor de \(X\), \(Y\) está completamente determinado, se dice que \(Y\) depende funcionalmente de \(X\).

Dependencia Estadística

En el análisis estadístico, la dependencia se refiere a cómo cambia la distribución conjunta de dos o más variables en comparación con las distribuciones marginales de las mismas. Dos variables \(X\) e \(Y\) son independientes si la ocurrencia de una no afecta la probabilidad de la otra, es decir, si \(P(X \cap Y) = P(X)P(Y)\). Si no se cumple esta condición, las variables se consideran dependientes.

Ejemplo de Cálculo de Correlación y Covarianza

Supongamos que tenemos dos variables \(X\) e \(Y\) con los siguientes valores: 

\(X = \{2, 4, 6, 8\}\) y \(Y = \{1, 3, 5, 7\}\).

1. Media de \(X\) e \(Y\):

\[
\bar{x} = \frac{2 + 4 + 6 + 8}{4} = 5, \quad \bar{y} = \frac{1 + 3 + 5 + 7}{4} = 4
\]

2. Covarianza de \(X\) e \(Y\):

\[
\text{Cov}(X, Y) = \frac{1}{4} \left[(2 - 5)(1 - 4) + (4 - 5)(3 - 4) + (6 - 5)(5 - 4) + (8 - 5)(7 - 4)\right] 
\]

\[
\text{Cov}(X, Y) = \frac{1}{4} \left[(-3)(-3) + (-1)(-1) + (1)(1) + (3)(3)\right]
\]

\[
\text{Cov}(X, Y) = \frac{1}{4} \left[9 + 1 + 1 + 9\right] = \frac{20}{4} = 5
\]

3. Desviaciones estándar de \(X\) e \(Y\):

\[
\sigma_X = \sqrt{\frac{1}{4} \sum_{i=1}^4 (x_i - \bar{x})^2} = \sqrt{\frac{1}{4} [(2-5)^2 + (4-5)^2 + (6-5)^2 + (8-5)^2]} = \sqrt{\frac{20}{4}} = \sqrt{5}
\]

\[
\sigma_Y = \sqrt{\frac{1}{4} \sum_{i=1}^4 (y_i - \bar{y})^2} = \sqrt{\frac{1}{4} [(1-4)^2 + (3-4)^2 + (5-4)^2 + (7-4)^2]} = \sqrt{\frac{20}{4}} = \sqrt{5}
\]

4. Coeficiente de correlación de Pearson:

\[
\rho_{X,Y} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y} = \frac{5}{\sqrt{5} \cdot \sqrt{5}} = \frac{5}{5} = 1
\]

El valor de \(\rho = 1\) indica una correlación positiva perfecta, lo cual confirma una relación lineal directa entre \(X\) e \(Y\).

Aplicaciones del Análisis de Correlación y Dependencia

El análisis de correlación es crucial en múltiples disciplinas como economía, ciencias sociales, biología, y física, donde se requiere comprender la relación entre variables. Por ejemplo, en finanzas, se utiliza para medir la relación entre diferentes activos y así gestionar el riesgo de un portafolio. En biología, se usa para estudiar cómo factores ambientales pueden influir en características específicas de las especies. En aprendizaje automático, entender las correlaciones puede ayudar a seleccionar características y a evitar el problema de multicolinealidad en los modelos predictivos.

En resumen, el análisis de correlaciones y dependencias no solo proporciona una medida cuantitativa de la relación entre variables, sino que también ayuda a identificar y modelar dependencias subyacentes, lo que es esencial para realizar inferencias y predicciones precisas.

Visualización de Distribuciones y Patrones

La visualización de distribuciones y patrones es una técnica clave en el análisis de datos que permite entender la forma, la dispersión y la estructura de un conjunto de datos. Este enfoque es fundamental para identificar comportamientos anómalos, relaciones y tendencias subyacentes, y para comunicar hallazgos de manera efectiva.

 Visualización de Distribuciones

La distribución de datos describe cómo se dispersan los valores en un conjunto de datos. Visualizar distribuciones permite evaluar propiedades como la simetría, la dispersión y la presencia de colas largas o asimetrías. Matemáticamente, estas propiedades se exploran a través de funciones de densidad de probabilidad (PDFs) para variables continuas o funciones de masa de probabilidad (PMFs) para variables discretas.

Histograma

El histograma es una herramienta básica para visualizar la distribución de datos continuos. Divide el rango de datos en intervalos llamados "bins" y muestra la frecuencia o densidad de los datos en cada intervalo. Matemáticamente, la altura de cada bin en un histograma que representa la densidad se calcula como:

\[
\text{Densidad} = \frac{\text{Número de observaciones en el bin}}{\text{Tamaño del bin} \times \text{Número total de observaciones}}
\]

El histograma permite visualizar la forma general de la distribución, identificar la moda (el pico más alto) y detectar la presencia de outliers (valores atípicos).

Kernel Density Estimation (KDE)

La estimación de densidad mediante kernels (KDE) es un método no paramétrico para estimar la función de densidad de probabilidad de una variable aleatoria. KDE suaviza la forma de la distribución representada en un histograma y proporciona una curva continua que refleja mejor la distribución subyacente. Matemáticamente, el KDE para un punto \(x\) se define como:

\[
\hat{f}(x) = \frac{1}{nh} \sum_{i=1}^n K\left(\frac{x - x_i}{h}\right)
\]

donde:
- \(n\) es el número de observaciones,
- \(h\) es el ancho de banda (parámetro de suavización),
- \(K\) es la función kernel, comúnmente una función gaussiana.

Visualización de Patrones

Los patrones en los datos pueden incluir tendencias, ciclos, estacionalidades y relaciones entre variables. Identificar estos patrones es esencial para el modelado predictivo y para entender la dinámica del sistema estudiado.

Gráficos de Dispersión

Los gráficos de dispersión son útiles para visualizar relaciones entre dos variables continuas. Cada punto en el gráfico representa una observación con coordenadas dadas por los valores de dos variables. Matemáticamente, un gráfico de dispersión puede mostrar relaciones lineales o no lineales, así como clusters (agrupaciones) de puntos.

Para visualizar patrones más complejos, como la correlación y la relación no lineal, se pueden aplicar técnicas de ajuste de curvas y suavizado, como las líneas de regresión y los modelos de suavizado LOESS (Local Regression).

Boxplots

Un boxplot (diagrama de caja y bigotes) resume la distribución de una variable continua, mostrando la mediana, los cuartiles y los posibles outliers. Matemáticamente, el rango intercuartílico (IQR) se utiliza para definir los bigotes del boxplot, y los puntos fuera de los bigotes se consideran outliers:

\[
IQR = Q_3 - Q_1
\]

donde \(Q_1\) y \(Q_3\) son el primer y tercer cuartil, respectivamente.

Matemáticas Detrás de la Identificación de Patrones

Momentos Estadísticos

Los momentos estadísticos son valores numéricos que describen características importantes de una distribución de probabilidad. Los momentos más comunes incluyen:

1. Media: \( \mu = \frac{1}{n} \sum_{i=1}^n x_i \)

2. Varianza: \( \sigma^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \mu)^2 \)

3. Asimetría (skewness): Describe la simetría de la distribución. Se calcula como:

\[
\text{Asimetría} = \frac{\frac{1}{n} \sum_{i=1}^n (x_i - \mu)^3}{\sigma^3}
\]

4. Curtosis (kurtosis): Mide la "tailedness" o cuántos valores extremos existen en una distribución. Se calcula como:

\[
\text{Curtosis} = \frac{\frac{1}{n} \sum_{i=1}^n (x_i - \mu)^4}{\sigma^4} - 3
\]

Estos momentos ayudan a identificar patrones específicos en la distribución, como si la distribución es sesgada hacia la derecha o izquierda (asimetría) o si tiene colas largas (curtosis).

Ejemplo Práctico: Visualización y Análisis Matemático

Consideremos un conjunto de datos hipotético que representa las calificaciones de estudiantes en un examen. Para analizar este conjunto de datos:

1. Histograma: Se construye para visualizar la distribución general de las calificaciones, identificando patrones como la concentración de notas y la presencia de outliers.
  
2. KDE: Se calcula para suavizar la curva de densidad y visualizar mejor la tendencia central y la dispersión.

3. Gráfico de Dispersión: Si se tienen calificaciones de diferentes materias, se puede visualizar la relación entre las calificaciones de matemáticas y ciencias para detectar patrones, como una posible correlación positiva.

4. Boxplot: Para cada materia, el boxplot ayudará a identificar la variabilidad y la presencia de outliers.

En resumen, la visualización de distribuciones y patrones, respaldada por cálculos matemáticos precisos, es esencial para comprender y comunicar las características fundamentales de los datos. Las matemáticas proporcionan las herramientas necesarias para cuantificar estas características, mientras que las visualizaciones permiten una interpretación rápida y efectiva.

 

Aplicación práctica

Un ejemplo práctico de cómo realizar un análisis y visualización exploratoria de datos utilizando Python y algunas de sus librerías más populares: Supongamos que tienes un conjunto de datos que contiene información sobre la cantidad de ventas de productos por mes durante el último año. Puedes descargar el conjunto de datos que utilizaremos para este ejemplo en el siguiente enlace: https://drive.google.com/file/d/1Zo86d0oV7X9lwLzGsg1y46FUn6nKpUXf/view?usp=sharing Primero, importamos las librerías que vamos a utilizar:

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
    

Ahora comenzamos a trabajar con los datos. Leemos el archivo csv que contiene los datos, utilizando la función pandas.read_csv(). Observa que es importante revisar la extensión de tu archivo y, en caso necesario, cambiarla en el argumento "sep" de read_csv, de tal forma que coincida con el tipo de separador que tiene el archivo.

 data = pd.read_csv('ventas.csv', sep=",")
    

Una vez que tenemos los datos en un objeto DataFrame, es bastante común revisar cómo se ven los datos. Para ello, utilizaremos comandos como:

  • data.head() que nos muestra los primeros 5 registros de los datos.
  • data.tail() que nos muestra los últimos 5 registros de los datos.
  • data.describe() que nos muestra las estadísticas básicas de los datos como media, mediana, y otros parámetros centrales, incluyendo los cuartiles.
  • data.dtypes que nos muestra los tipos de datos de cada columna de los datos.
 print(data.head())
print(data.tail())
print(data.describe())
print(data.dtypes)
    

Igualmente, es importante conocer las dimensiones de tus datos utilizando el comando data.shape:

 print(data.shape)
    

Ahora procedemos a visualizar los datos. Para ello, en este ejemplo utilizaremos una gráfica de línea que muestre cómo ha sido la evolución de ventas por mes a lo largo del año. Lamentablemente, este dato no viene incluido en el dataset original, pero podemos crearlo leyendo los datos desde el archivo csv y manipulando los mismos.

 data['dia'] = 1 # colocamos el día en 1 para que sea la misma fecha en cada mes
data['date'] = pd.to_datetime(data[['ano','mes','dia']]) # Unimos las columnas 'año', 'mes', y 'dia' para formar un objeto 'date' que pandas interpreta como fecha.
data.drop(['ano', 'mes', 'dia'], axis=1, inplace=True) # eliminamos las columnas innecesarias
data.set_index('date', inplace=True) # Establecemos el objeto 'date' como el índice del DataFrame
print(data.head())
    

Una vez que tenemos nuestro DataFrame listo para trabajar, hacemos uso de la librería matplotlib para dibujar nuestro gráfico de línea.

 plt.figure(figsize=(12,4))
ax = sns.lineplot(data=data, x=data.index, y='ventas')
ax.set_title('Evolución de las ventas durante el año')
ax.set_ylabel('Ventas')
ax.set_xlabel('Fecha')
ax.tick_params(axis='x', labelrotation=90)
plt.show()
    

Con esto, hemos generado un gráfico que muestra la evolución de las ventas a lo largo del año. La visualización exploratoria de datos nos ayuda en gran medida a entender el comportamiento de los datos que estamos trabajando, además de que facilita la detección de patrones o anomalías en el conjunto de datos.