Visualización de datos de Python para finanzas

Ahora que entendemos Python, NumPy y Pandas, lo que nos permite organizar las filas y columnas de nuestras tablas en el orden correcto, necesitamos dar sentido a los datos. La mejor manera de hacerlo es a través de la exploración visual. Cubriré la herramienta que usaremos para crear gráficos en Python con un código de muestra y luego graficaremos el S&P 500 usando datos de la Reserva Federal de St. Louis.

Visualización de datos usando Matplotlib

matplotlib es una biblioteca de gráficos 2D para Python. Se importa utilizando la siguiente convención:

import matplotlib.pyplot as plt

Si usa Jupyter Notebook, puede agregar la siguiente magia para mostrar los gráficos en línea:

Una imagen matplotlib contiene dos componentes principales:

  • matplotlib.figura es el lienzo en el que se colocan un gráfico o múltiples gráficos. Es el contenedor de todos los demás elementos.
  • matplotlib.axes.Axes es el gráfico. Se compone de un eje x y un eje y, conocidos colectivamente como ejes, en los que se colocan uno o más gráficos.
  • A continuación se muestra una figura con múltiples ejes que contienen subparcelas. Comparar el código con la imagen de abajo ayuda a unir los dos.

    # import matplotlib so we can use it
    import matplotlib.pyplot as plt
    
    # Create the figure container element that contains all other elements
    width = 10
    height = 15
    fig = plt.figure(figsize=(width,height))
    
    # Add axes to the figure with first argument being rows,columns, and then position, which starts from left to right then down
    # Our example has 3 rows, 2 columns, and 5 axes skipping the bottom left, or 5th position
    ax1 = fig.add_subplot(3,2,1)
    ax2 = fig.add_subplot(3,2,2)
    ax3 = fig.add_subplot(3,2,3)
    ax4 = fig.add_subplot(3,2,4)
    ax5 = fig.add_subplot(3,2,6)
    
    # Define two lists for the x and y values to graph
    x_values = [1,2,3,4,5]
    y_values = [0,5,10,15,20]
    
    # Add plots, legends, titles, etc. to the axes returned above
    ax1.plot(x_values, y_values, color='red', label='plot 1')
    ax1.plot(y_values, x_values, color='blue', label='plot 2')
    ax1.legend(loc='upper left')
    ax1.set_title("Title for Axes 1")
    ax1.set_xlabel("Axes 1  X-Label")
    ax1.set_ylabel("Axes 1 Y-Label")
    ax2.plot(x_values, y_values, color='orange', label='plot 1')
    ax2.legend(loc='upper right')
    ax2.set_title("Title for Axes 2")
    ax3.plot(x_values, y_values, color='green', label='plot 1')
    ax3.legend(loc='upper left')
    ax4.plot(x_values, y_values, color='blue', label='plot 1')
    ax5.plot(x_values, y_values, color='violet', label='plot 1')
    ax5.legend(loc='upper right')
    
    # Add a title to the figure and then show the plot
    fig.suptitle("This is a Figure Title")
    plt.show()

    Si quieres seguir, descarga el Datos de precios del S&P 500 de los datos económicos de la reserva federal (FRED) de la Reserva Federal de St. Louis. Eliminé las vacaciones de mercado y los valores no numéricos al importar el archivo CSV.

    # import pandas, numpy, and  pyplot so we can use them
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # import the data and convert values to float, convert date column to datetime and set it to the index, and use only latest 10 values
    data = pd.read_csv('SP500.csv', dtype={'SP500': np.float64}, na_values=".", parse_dates=True).dropna()
    data['DATE'] = pd.to_datetime(data['DATE'])
    data.set_index('DATE', inplace=True)
    
    # plot the data and set the yticks to decensing by using a step of -1 (::-1 is start/stop/step)
    plt.plot(data.index, data['SP500'])
    plt.xlabel("Year")
    plt.xticks(rotation=90)
    plt.ylabel("S&P 500 Price")
    yticks = data['SP500']
    plt.yticks(yticks)
    plt.title("S&P 500 Price History")
    plt.show()
    

    El año está espaciado correctamente, pero ¿cómo resolvemos los yticks? El uso de np.linspace nos permitirá espaciar uniformemente los yticks a nuestra frecuencia deseada.

    # Import the data again
    data = pd.read_csv('SP500.csv', dtype={'SP500': np.float64}, na_values=".").dropna()
    data['DATE'] = pd.to_datetime(data['DATE'])
    data.set_index('DATE', inplace=True)
    
    # plot the data and set the yticks to decensing by using a step of -1 (::-1 is start/stop/step)
    plt.plot(data.index, data['SP500'])
    plt.xlabel("Year")
    plt.xticks(rotation=90)
    plt.ylabel("S&P 500 Price")
    yticks = np.linspace(data['SP500'].min(), data['SP500'].max(), 10)
    plt.yticks(yticks)
    plt.title("S&P 500 Price History")
    plt.show()

    Funciones y métodos comunes

    Continuará…

    Deja un comentario