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:
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á…