Biblioteca Pandas para visualización de datos en Python

En mi artículo anterior, expliqué cómo se puede usar la biblioteca Seaborn para la visualización avanzada de datos en Python. Seaborn es una excelente biblioteca y siempre...

En mi Artículo anterior, expliqué cómo la [Biblioteca nacida del mar](https://seaborn.pydata.org /) se puede usar para la visualización avanzada de datos en Python. Seaborn es una biblioteca excelente y siempre prefiero trabajar con ella, sin embargo, es una biblioteca un poco avanzada y necesita un poco de tiempo y práctica para acostumbrarse.

En este artículo, veremos cómo Pandas, que es otra biblioteca de Python muy útil, se puede usar para la visualización de datos en Python. Pandas se usa principalmente para importar y administrar conjuntos de datos en una variedad de formatos como se explica en el artículo Tutorial para principiantes sobre la biblioteca Python de Pandas. Las capacidades de visualización de datos de Pandas son menos conocidas. En este artículo, se centrará en las capacidades de visualización de datos de Pandas.

Es pertinente mencionar que, al igual que Seaborn, las capacidades de visualización de datos de Pandas también se basan en la [Biblioteca Matplotlib] (https://matplotlib.org/). Pero con Pandas, puede trazar directamente diferentes tipos de visualizaciones directamente desde el marco de datos de Pandas que veremos en este artículo.

Gráficos básicos {#gráficos básicos}

En esta sección, veremos cómo se pueden usar los marcos de datos de Pandas para trazar diagramas simples como histogramas, diagramas de conteo, diagramas de dispersión, etc.

El conjunto de datos

El conjunto de datos que vamos a utilizar para trazar estos gráficos es el famoso conjunto de datos Titanic. El conjunto de datos se puede descargar desde Kaggle. En este artículo, usaremos el archivo train.csv.

Antes de importar el conjunto de datos a nuestra aplicación, debemos importar las bibliotecas requeridas. Ejecute el siguiente script

1
2
3
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

El siguiente script importa el conjunto de datos;

1
titanic_data = pd.read_csv(r"E:\Datasets\train.csv")

Veamos cómo se ve realmente nuestro conjunto de datos. Ejecute el siguiente script:

1
titanic_data.head()

La salida se ve así:

{.img-responsive}

Puede ver que el conjunto de datos contiene información sobre los pasajeros del desafortunado barco titánico que se hundió en el Océano Atlántico Norte en 1912. El conjunto de datos incluye información como el nombre, la edad, la clase de pasajero, si el pasajero sobrevivió o no, etc.

Tracemos algunas gráficas básicas usando esta información.

Histograma

Para dibujar un histograma para cualquier columna, debe especificar el nombre de la columna seguido del método hist() que se muestra a continuación:

1
titanic_data['Age'].hist()

Puede ver lo fácil que es trazar un histograma para la columna de edad utilizando el marco de datos de Pandas. El resultado del script anterior se ve así:

{.img-responsive}

Puede pasar parámetros basados ​​en Matplotlib al método hist() ya que, detrás de escena, Pandas usa la biblioteca Matplotlib. Entonces, por ejemplo, puede aumentar la cantidad de contenedores para su histograma usando el atributo bin, de la siguiente manera:

1
titanic_data['Age'].hist(bins=20)

En el script anterior, establecemos el número de contenedores para nuestro histograma en 20. El resultado se ve así:

{.img-responsive}

Puede mejorar el estilo de los gráficos importando la biblioteca Seaborn y estableciendo un valor para su atributo set_style. Por ejemplo, establezcamos el estilo de la cuadrícula en gris oscuro. Ejecute el siguiente script:

1
2
import seaborn as sns
sns.set_style('darkgrid')

Ahora nuevamente trace el histograma usando el siguiente script:

1
titanic_data['Age'].hist(bins=20)

En la salida, verá cuadrículas de color gris oscuro en el fondo de nuestro gráfico:

{.img-responsive}

Hay dos formas en que puede usar el marco de datos para trazar gráficos. Una de las formas es pasar el valor del parámetro tipo de la función trazar como se muestra a continuación:

1
titanic_data['Age'].plot(kind='hist', bins=20)

La salida se ve así:

{.img-responsive}

La otra forma es llamar directamente al nombre del método para el gráfico usando la función plot sin pasar el nombre de la función al atributo kind. Usaremos el segundo método (llamando el nombre del método para el gráfico usando la función plot) de aquí en adelante.

Gráficos de línea {#gráficos de línea}

Para trazar diagramas de líneas con el marco de datos de Pandas, debe llamar al método line() usando la función plot y pasar el valor para el índice x y el eje y, como se muestra a continuación:

1
titanic_data.plot.line(x='Age', y='Fare', figsize=(8,6))

La secuencia de comandos anterior traza un gráfico de líneas donde el eje x contiene la edad de los pasajeros y el eje y contiene las tarifas pagadas por los pasajeros. Puede ver que podemos usar el atributo figsize para cambiar el tamaño de la trama. La salida se ve así:

{.img-responsive}

Diagramas de dispersión {#diagramas de dispersión}

Para trazar diagramas de líneas con el marco de datos de Pandas, debe llamar al método scatter () usando la función plot y pasar el valor para el índice x y el eje y como se muestra a continuación:

1
titanic_data.plot.scatter(x='Age', y='Fare', figsize=(8,6))

La salida del sript anterior se ve así:

{.img-responsive}

Diagrama de caja {#diagrama de caja}

Los marcos de datos de Pandas también se pueden usar para trazar el diagrama de caja. Todo lo que tienes que hacer es llamar al método box() usando la función plot del marco de datos de pandas:

1
titanic_data.plot.box(figsize=(10,8))

En el resultado, verá diagramas de caja para todas las columnas numéricas en el conjunto de datos Titanic:

{.img-responsive}

Parcelas hexagonales {#parcelas hexagonales}

Los gráficos hexagonales trazan los hexágonos para los puntos de datos que se cruzan en los ejes x e y. Cuantos más puntos se cruzan, más oscuro es el hexágono. Para trazar diagramas hexagonales con el marco de datos de Pandas, debe llamar al método hexbin() usando la función plot y pasar el valor para el índice x y el eje y como se muestra a continuación:

1
titanic_data.plot.hexbin(x='Age', y='Fare', gridsize=30, figsize=(8,6))

En la salida, verá el gráfico hexagonal con la edad en el eje x y la tarifa en el eje y.

{.img-responsive}

Diagramas de densidad del kernel

Al igual que Seaborn y Matplotlib, también podemos dibujar diagramas de densidad del kernel con la biblioteca Pandas. Para trazar diagramas de densidad del kernel con el marco de datos de Pandas, debe llamar al método kde() usando la función plot:

1
titanic_data['Age'].plot.kde()

El resultado del script anterior se ve así:

{.img-responsive}

En esta sección, vimos cómo se puede usar la biblioteca de Pandas para dibujar algunos de los gráficos más básicos. Sin embargo, la aplicación de la biblioteca Pandas para la visualización de datos no se limita a gráficos tan básicos. Más bien, Pandas también se puede usar para visualizar datos de series temporales que veremos en la siguiente sección.

Pandas para visualizar series temporales

Los datos de series temporales son el tipo de datos en los que los atributos o características dependen del índice de tiempo, que también es una característica del conjunto de datos. Algunos de los ejemplos más comunes de datos de series temporales incluyen la cantidad de artículos vendidos por hora, la temperatura diaria y los precios diarios de las acciones. En todos estos ejemplos, los datos dependen de alguna unidad de tiempo y varían según esa unidad de tiempo. La unidad de tiempo puede ser una hora, un día, una semana, un año, etc.

La biblioteca Pandas se puede utilizar para visualizar el día de la serie temporal. La biblioteca de Pandas viene con funciones integradas que se pueden usar para realizar una variedad de tareas en datos de series temporales, como cambio de tiempo y muestreo de tiempo. En esta sección, veremos, con la ayuda de ejemplos, cómo se utiliza la biblioteca Pandas para la visualización de series temporales. Pero primero, necesitamos datos de series de tiempo.

El conjunto de datos

Como se dijo anteriormente, uno de los ejemplos de datos de series de tiempo son los precios de las acciones que varían con respecto al tiempo. En esta sección, utilizaremos los precios de las acciones de AAPL durante los 5 años (del 11 de diciembre de 2013 al 11 de diciembre de 2018) para visualizar datos de series temporales. El conjunto de datos se puede descargar desde este enlace de Yahoo Finanzas. Para otros datos de cotización de la empresa, simplemente vaya a su sitio web, escriba el nombre de la empresa y el período de tiempo para el que desea que se descarguen sus datos. El conjunto de datos se descargará en formato CSV.

Importemos las bibliotecas que vamos a usar para la visualización de datos de series temporales en Pandas. Ejecute el siguiente script:

1
2
3
4
5
import numpy as np
import pandas as pd

%matplotlib inline
import matplotlib.pyplot as plt

A continuación, para importar el conjunto de datos, usaremos el método read_csv() de la biblioteca Pandas de la siguiente manera:

1
apple_data = pd.read_csv(r'F:/AAPL.csv')

Para ver cómo se ve nuestro conjunto de datos, podemos usar la función head(). Ejecute el siguiente script:

1
apple_data.head()

En la salida, verá las primeras cinco filas del conjunto de datos.

{.img-responsive}

Puede ver que el conjunto de datos contiene la fecha, el precio de apertura y cierre de la acción del día, el precio más alto y más bajo de la acción del día, el precio de cierre ajustado y el volumen de la acción. Puede ver que todas las columnas dependen de la Fecha. El cambio en la columna Fecha provoca el cambio en todas las demás columnas. Por lo tanto, la Fecha es la columna de índice en este caso. Sin embargo, en nuestro conjunto de datos, la fecha predeterminada se trata como una cadena. Primero, debemos cambiar el tipo de la columna Fecha de cadena a Fecha y hora y luego debemos establecer la columna Fecha como columna de índice.

Ejecute el siguiente script para cambiar el tipo de la columna DateTime a cadena.

1
apple_data['Date'] = apple_data['Date'].apply(pd.to_datetime)

En el script anterior, aplicamos el método to_datetime a la columna Fecha de nuestro conjunto de datos para cambiar su tipo.

A continuación, debemos configurar la columna Fecha como la columna de índice. El siguiente script hace eso:

1
apple_data.set_index('Date', inplace=True)

En el script anterior, usamos el método set_index del marco de datos de Pandas y le pasamos la columna 'Date' como parámetro. El atributo inplace=True significa que la conversión se llevará a cabo y no es necesario almacenar el resultado en otra variable.

Ahora, imprimamos las primeras cinco filas de nuestro conjunto de datos nuevamente usando la función head():

1
apple_data.head()

El resultado del script anterior se ve así:

{.img-responsive}

En el resultado, puede ver que ahora los valores en la columna Fecha están en negrita, lo que resalta el hecho de que la columna Fecha ahora se usa como una columna de índice.

Antes de pasar a la sección de cambio de hora, grafiquemos el precio de cierre de las acciones de Apple. Ejecute el siguiente script:

1
2
plt.rcParams['figure.figsize'] = (8,6)   # Change the plot size
apple_data["Close"].plot(grid=True)

Observe que en el script anterior simplemente llamamos al método plot en la columna 'Close'. No especificamos ninguna información sobre la fecha, pero dado que la columna Fecha es una columna de índice, el eje x contendrá los valores de la columna Fecha, mientras que el eje y mostrará el precio de cierre de las acciones. El resultado del script anterior se ve así:

{.img-responsive}

Pandas puede realizar una variedad de tareas de visualización en datos de series de tiempo, como cambio de tiempo, muestreo de tiempo, expansión continua, predicciones de series de tiempo. En este artículo, veremos dos aplicaciones de la visualización de series temporales de Pandas: Time Shifting y Time sampling.

Cambio de hora

El cambio de tiempo se refiere a mover los datos un cierto número de pasos hacia adelante o hacia atrás. El cambio de series de tiempo es una de las tareas más importantes en el análisis de series de tiempo.

Trazamos la cabeza del conjunto de datos anteriormente, ahora primero trazaremos la cola de nuestro conjunto de datos. Más adelante usaremos estos marcos de datos de cabeza y cola para ver los efectos del cambio de tiempo.

Para trazar la cola del conjunto de datos, podemos usar la función tail() de la siguiente manera:

1
apple_data.tail()

En el resultado, verá las últimas cinco filas del conjunto de datos como se muestra a continuación:

{.img-responsive}

Primero avancemos los datos para ver cómo funciona el cambio de tiempo en una dirección positiva. Para mover los datos un número específico de pasos de tiempo hacia adelante, simplemente necesita llamar al método shift() en el conjunto de datos y pasarle un número entero positivo. Por ejemplo, la siguiente secuencia de comandos desplaza los datos dos pasos hacia adelante y luego imprime el encabezado de los datos:

1
apple_data.shift(2).head()

En la salida, verá que no se mostrarán datos para las dos primeras filas de la cabeza, ya que los datos de estas filas se moverán dos pasos hacia adelante. En el resultado, verá que los datos que anteriormente pertenecían al primer índice, es decir, 2013-12-10, después de avanzar dos pasos, pertenecen al tercer índice, es decir, 2013-12-12, como se muestra a continuación:

{.img-responsive}

Por otro lado, para desplazar los datos hacia atrás, puede volver a utilizar la función shift() pero debe especificar un valor negativo. Por ejemplo, para desplazar los datos 2 pasos hacia atrás, puede usar el siguiente script:

1
apple_data.shift(-2).tail()

En el script anterior, los datos se desplazan 2 pasos hacia atrás y luego se muestra la cola de los datos. En el resultado, verá que las dos últimas filas no tienen registros, ya que los datos se mueven dos pasos hacia atrás, como se muestra a continuación:

{.img-responsive}

Muestreo de tiempo {#muestreo de tiempo}

El muestreo de tiempo se refiere a agrupar características o atributos de datos en función del valor agregado de la columna de índice. Por ejemplo, si desea ver el precio de apertura máximo general de las acciones por año para todos los años en el conjunto de datos, puede usar el muestreo de tiempo.

Implementar el muestreo de tiempo con Pandas es bastante sencillo. Debe llamar al método resample () utilizando el marco de datos de Pandas. También debe pasar el valor del atributo regla. El valor es básicamente el desplazamiento de tiempo que especifica el marco de tiempo para el que queremos agrupar nuestros datos.

Finalmente, debe llamar a la función de agregación, como media, máx, mín, etc. La siguiente secuencia de comandos muestra el valor máximo para todos los atributos de cada mes en el conjunto de datos:

1
apple_data.resample(rule='M').max()

El resultado del script anterior se ve así:

{.img-responsive}

La lista detallada de los valores de compensación para el atributo regla es la siguiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
B       business day frequency
C       custom business day frequency (experimental)
D       calendar day frequency
W       weekly frequency
M       month end frequency
SM      semi-month end frequency (15th and end of month)
BM      business month end frequency
CBM     custom business month end frequency
MS      month start frequency
SMS     semi-month start frequency (1st and 15th)
BMS     business month start frequency
CBMS    custom business month start frequency
Q       quarter end frequency
BQ      business quarter end frequency
QS      quarter start frequency
BQS     business quarter start frequency
A       year end frequency
BA      business year end frequency
AS      year start frequency
BAS     business year start frequency
BH      business hour frequency
H       hourly frequency
T       minutely frequency
S       secondly frequency
L       milliseonds
U       microseconds
N       nanoseconds

La lista anterior se tomó de la [Documentación oficial de Pandas] (https://seaborn.pydata.org/).

Intentemos ahora imprimir los valores trimestrales promedio (cada tres meses) para el conjunto de datos. Puede ver en la lista de compensación que Q se usa para la frecuencia trimestral. Ejecute el siguiente script:

1
apple_data.resample(rule='Q').mean()

El resultado del script anterior se ve así:

{.img-responsive}

Además de encontrar los valores agregados para todas las columnas en el conjunto de datos. También puede volver a muestrear datos para una columna en particular. Tracemos el diagrama de barras que muestra el valor medio anual para el atributo 'Cerrar' de nuestro conjunto de datos. Ejecute el siguiente script:

1
2
plt.rcParams['figure.figsize'] = (7, 5)
apple_data['Close'].resample('A').mean().plot(kind='bar')

Puede ver que para trazar el gráfico de barras simplemente tiene que llamar a la función plot después de la función agregada y pasarle el tipo de gráfico que desea trazar. El resultado del script anterior se ve así:

{.img-responsive}

De manera similar, para dibujar un diagrama de líneas que muestre el valor del precio máximo mensual de las acciones para el atributo 'Cerrar', puede usar la siguiente secuencia de comandos:

1
2
plt.rcParams['figure.figsize'] = (7, 5)
apple_data['Close'].resample('M').max().plot(kind='line')

El resultado del script anterior se ve así:

{.img-responsive}

Conclusión

Pandas es una de las bibliotecas de Python más útiles para la ciencia de datos. Por lo general, Pandas se usa para importar, manipular y limpiar el conjunto de datos. Sin embargo, Pandas también se puede usar para la visualización de datos, como mostramos en este artículo.

En este artículo, vimos con la ayuda de diferentes ejemplos cómo se pueden usar Pandas para trazar tramas básicas. También estudiamos cómo se pueden usar las funcionalidades de Pandas para la visualización de datos de series temporales. Como regla general, si realmente tiene que trazar una barra simple, una línea o diagramas de conteo, debe usar Pandas.