Lección 3 - Práctica 3: Python visualization packages

Autor/a

Mariano Santa Cruz

Fecha de publicación

27/10/2026

Objetivo de la práctica

  • Crear un mismo diagrama de caja (boxplot) con distintos paquetes de Python para visualizar la relación entre la posición de juego y la altura en metros de los jugadores de la NBA en la temporada regular 2025-26.

Opciones de los fragmentos de código

  • En el encabezado YAML se han definido las opciones globales de los fragmentos de código con el campo execute para que estas opciones se apliquen a todos los fragmentos del archivo .qmd sin tener que repetirlas al inicio de cada fragmento.

  • Las opciones de un fragmento de código concreto se escriben en sus primeras líneas con el prefijo #| y tienen prioridad sobre las opciones globales.

  • Las opciones de los fragmentos de código utilizadas en esta práctica, por orden de aparición en el documento, son las siguientes:

    • message: false: se ejecuta el código de R y Python sin mostrar en el documento HTML resultante los mensajes generados durante su ejecución.

    • warning: false: se ejecuta el código de R y Python sin mostrar en el documento HTML resultante las advertencias generadas durante su ejecución.

    • include: true: se ejecuta el código de R y Python y se muestran en el documento HTML resultante el código ejecutado y sus resultados, ya sean valores, tablas o gráficos.

    • results: hide: se ejecuta el código de R y Python y se muestran en el documento HTML resultante el código ejecutado y los gráficos, pero no sus resultados en formato de texto (valores y tablas).

    • code-fold: true: se muestra en el documento HTML resultante el código ejecutado, colapsado y con un botón Código para desplegarlo.

    • collapse: true: se muestra en el documento HTML resultante el código ejecutado en un único bloque, en lugar de dividirlo en varios bloques cuando hay varias expresiones que generan resultados.

Instalación y carga de paquetes

  • En el primer y único fragmento de código de R, denominado install_and_load_packages, instala y carga el paquete de R reticulate (paquete para interoperabilidad entre R y Python) e instala los paquetes de Python necesarios para realizar la práctica (los paquetes de Python se cargarán cuando corresponda).

Importación y transformación de datos

  • En el primer fragmento de código de Python, denominado data_import_and_transformation, copia y pega el código del archivo py_script_nba_rs_2526.py.

Exploración de la estructura de los datos

  • En el segundo fragmento de código de Python, denominado explore_data_structure, explora la estructura del dataframe df_py_nba_rs_2526_transformed con el método info().

  • En la salida de este fragmento de código se muestran el número de observaciones (filas) y variables (columnas), los nombres de las variables, el número de valores no faltantes y el tipo de dato de cada variable.

Selección y filtrado de datos

  • En el tercer fragmento de código de Python, denominado select_and_filter_data, selecciona las variables player_name, position y height_m, filtra las observaciones para conservar solo a los jugadores clasificados en una única posición de juego (Center, Forward, Guard), elimina las categorías no utilizadas de la variable position (Center-Forward, Forward-Center, Forward-Guard, Guard-Forward) y almacena el resultado en el dataframe df_py_nba_rs_2526_reduced.

Creación del boxplot con la interfaz Axes del paquete matplotlib

  • En el cuarto fragmento de código de Python, denominado boxplot_matplotlib_axes, importa el módulo pyplot del paquete matplotlib, crea los objetos positions y heights con las posiciones de juego y sus alturas, crea el diagrama de caja de la altura en metros (height_m) según la posición de juego (position) del dataframe df_py_nba_rs_2526_reduced con el método boxplot() de la clase Axes del paquete matplotlib y guárdalo en el objeto boxplot_matplotlib_axes.

  • El método boxplot() no agrupa los datos por categorías, por lo que heights contiene un conjunto de alturas por cada posición de juego.

Creación del boxplot con la interfaz pyplot del paquete matplotlib

  • En el quinto fragmento de código de Python, denominado boxplot_matplotlib_pyplot, crea el diagrama de caja de la altura en metros (height_m) según la posición de juego (position) del dataframe df_py_nba_rs_2526_reduced con la función boxplot() del módulo pyplot del paquete matplotlib y guárdalo en el objeto boxplot_matplotlib_pyplot, reutilizando el módulo plt y los objetos positions y heights creados en el fragmento anterior.

  • A diferencia de la interfaz Axes, no se crean explícitamente la figura ni los ejes, sino que pyplot los gestiona de forma implícita y todo se configura con funciones de plt.

Creación del boxplot con el paquete seaborn

  • En el sexto fragmento de código de Python, denominado boxplot_seaborn, importa el paquete seaborn y crea el diagrama de caja de la altura en metros (height_m) según la posición de juego (position) del dataframe df_py_nba_rs_2526_reduced con la función boxplot() del paquete seaborn y guárdalo en el objeto boxplot_seaborn.

  • A diferencia de matplotlib, la función boxplot() de seaborn agrupa los datos por categorías, por lo que no hace falta crear listas con las alturas de cada posición de juego.

Creación del boxplot con el paquete plotnine

  • En el séptimo fragmento de código de Python, denominado boxplot_plotnine, importa el paquete plotnine y crea el diagrama de caja de la altura en metros (height_m) según la posición de juego (position) del dataframe df_py_nba_rs_2526_reduced con las funciones ggplot() y geom_boxplot() del paquete plotnine y guárdalo en el objeto boxplot_plotnine.

  • El paquete plotnine de Python está basado en el paquete ggplot2 de R y, por lo tanto, crea gráficos mediante la gramática de gráficos en capas (layered grammar of graphics).

Creación del boxplot con el paquete plotly

  • En el octavo fragmento de código de Python, denominado boxplot_plotly, importa el módulo express del paquete plotly y crea el diagrama de caja interactivo de la altura en metros (height_m) según la posición de juego (position) del dataframe df_py_nba_rs_2526_reduced con la función box() del módulo express del paquete plotly y guárdalo en el objeto boxplot_plotly.

  • En el gráfico resultante se muestran los mismos elementos del diagrama de caja que en los creados con los paquetes anteriores, con la diferencia de que plotly lo convierte en un gráfico interactivo que muestra los valores de los elementos del diagrama de caja y el nombre del jugador (player_name) en cada valor atípico al pasar el cursor del ratón sobre él.

Combinación de boxplots estáticos

  • A diferencia del paquete cowplot en R, los diagramas de caja estáticos creados con diferentes paquetes de Python no se pueden combinar fácilmente y, por ello, no se incluye en esta práctica un apartado equivalente.

  • Esto se debe a que matplotlib y seaborn dibujan directamente sobre los ejes (Axes) de una figura, mientras que plotnine genera sus propios objetos, por lo que no existe una función sencilla que combine gráficos guardados en objetos de paquetes distintos.