Introducción
Cuando se traza datos diarios, como series temporales financieras, a menudo se desea omitir los días en los que no hay datos, como los fines de semana. Esto permite trazar los datos a intervalos regulares sin espacios adicionales para los días sin datos. En este laboratorio, aprenderemos a usar un 'formateador de índice' para obtener la representación gráfica deseada.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Importar las bibliotecas y datos necesarios
En primer lugar, necesitamos importar las bibliotecas necesarias, que son matplotlib, numpy y matplotlib.cbook. También necesitamos cargar una matriz de registros de numpy a partir de datos csv de yahoo con los campos fecha, apertura, alta, baja, cierre, volumen, cierre ajustado desde el directorio mpl-data/sample_data. La matriz de registros almacena la fecha como un np.datetime64 con una unidad de día ('D') en la columna de fecha. Utilizaremos estos datos para trazar la serie temporal financiera.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook
## Cargar datos desde el directorio sample_data
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)
r = r[:9] ## obtener los primeros 9 días
Representación gráfica de datos con espacios en blanco predeterminados los fines de semana
En primer lugar, representaremos los datos con los espacios en blanco predeterminados los fines de semana utilizando la función plot de matplotlib. También destacaremos los espacios en blanco en los datos diarios utilizando líneas discontinuas en blanco.
## Representación gráfica de datos con espacios en blanco los fines de semana
fig, ax1 = plt.subplots(figsize=(6, 3))
ax1.plot(r.date, r.adj_close, 'o-')
## Destacar los espacios en blanco en los datos diarios
gaps = np.flatnonzero(np.diff(r.date) > np.timedelta64(1, 'D'))
for gap in r[['date', 'adj_close']][np.stack((gaps, gaps + 1)).T]:
ax1.plot(gap.date, gap.adj_close, 'w--', lw=2)
ax1.legend(handles=[ml.Line2D([], [], ls='--', label='Espacios en blanco en los datos diarios')])
ax1.set_title("Representación gráfica de datos con espacios en blanco predeterminados los fines de semana")
ax1.xaxis.set_major_locator(DayLocator())
ax1.xaxis.set_major_formatter(DateFormatter('%a'))
Creación de un formateador de índice personalizado
Para representar los datos en función de un índice que va de 0, 1,... len(data), crearemos un formateador de índice personalizado. Este formateador formateará las marcas de graduación como fechas en lugar de enteros.
## Crear formateador de índice personalizado
fig, ax2 = plt.subplots(figsize=(6, 3))
ax2.plot(r.adj_close, 'o-')
## Formatear el eje x como fechas
def format_date(x, _):
try:
## convertir datetime64 a datetime y usar strftime de datetime:
return r.date[round(x)].item().strftime('%a')
except IndexError:
pass
ax2.set_title("Creación de un formateador de índice personalizado")
ax2.xaxis.set_major_formatter(format_date) ## internamente crea FuncFormatter
Usar un objeto llamable para el formateador
En lugar de pasar una función a .Axis.set_major_formatter, podemos usar cualquier otro objeto llamable, como una instancia de una clase que implemente __call__. En este paso, crearemos una clase MyFormatter que formatea las marcas de graduación como fechas.
## Usar un objeto llamable para el formateador
class MyFormatter(Formatter):
def __init__(self, dates, fmt='%a'):
self.dates = dates
self.fmt = fmt
def __call__(self, x, pos=0):
"""Devuelve la etiqueta para el tiempo x en la posición pos."""
try:
return self.dates[round(x)].item().strftime(self.fmt)
except IndexError:
pass
ax2.xaxis.set_major_formatter(MyFormatter(r.date, '%a'))
Mostrar la gráfica
Ahora mostraremos la gráfica utilizando la función show de matplotlib.
plt.show()
Resumen
En este laboratorio, aprendimos cómo utilizar un formateador de índice personalizado para representar series temporales financieras sin espacios en blanco los fines de semana. También aprendimos cómo utilizar un objeto llamable para el formateador en lugar de una función. Al utilizar estas técnicas, podemos crear gráficas de datos diarios más atractivas visualmente.