Introducción a la Visualización con Python (1)

Francisco Palm
qu4nt
Published in
4 min readJan 5, 2019
Cortesía de Pexels.com

Visualizar es mucho más que hacer dibujitos, usualmente despreciada en los entornos académicos ya que es vista como relleno en los documentos, es una herramienta de valor indiscutible en el ejercicio profesional para comunicar resultados y generar intercambios entre puntos de vista.

En el marco de la ciencia de datos, nos interesamos obviamente en la visualización de datos, aunque escalando en la llamada pirámide del conocimiento nos interesa igualmente la visualización de la información y del conocimiento.

Aunque parece no haber tal cosa como la visualización de la sabiduría, todo indica que surge de la interacción entre la visualización y el observador.

Es especialmente notable la crítica que hace Edward Tufte del uso de presentaciones de PowerPoint en general, y del uso en particular que se le dio en la NASA en algún momento, señalándolo como uno de los factores que provocaron el accidente del Transbordador Espacial Columbia, debido a la pérdida de una muy importante información dentro de una lámina de la presentación, al estar ésta recargada de texto.

Lo que haremos en este artículo y el siguiente, será utilizar la herramienta Cuadernos de Jupyter, que es una poderosa herramienta de computación interactiva, para manejo de datos, construcción de información y generación de visualizaciones con Python.

El presente cuaderno de Jupyter no realiza una explicación detallada de los conceptos y los elementos técnicos involucrados en las tareas que muestra. En realidad, tiene como finalidad servir de motivación y generar expectativas para las personas que desean adentrarse en el ámbito de la visualización. Tampoco se pretende dar una revisión amplia de las herramientas de visualización disponibles en Python, que son muchas, y tampoco de todos los tipos de gráficos disponibles, la estrategia consiste en realizar un recorrido en base a un estudio de caso que sirva de demostración.

Preparemos el escenario

La intención será mostrar los conceptos a través de ejemplos con código escrito en Python, si algunos dicen que una imagen vale más que mil palabras, en contra de la opinión de Sartori, podemos afirmar que un ejemplo vale generalmente más que una definición, y si además viene acompañado de código fuente, ¡mucho mejor!.

Empecemos introduciendo al entorno los sospechosos habituales de cualquier cuaderno de Jupyter para ciencia de datos:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Solamente recordemos que:

  • numpy implementa arreglos numéricos optimizados.
  • pandas implementa dataframes, tablas de datos indexadas formadas por series de datos de un mismo tipo. Funciona en base a numpy.
  • matplotlib es una herramienta clásica para graficación en Python.
  • seaborn es una herramienta de gráficos de alto nivel para estadística, basada en matplotlib.

Y que no falte:

%matplotlib inline
sns.set_style("whitegrid")

Pensando en utilizar un conjunto de datos divertido, sin caer en el ya trillado iris, usaremos un conjunto de datos relativamente pequeño que se ha hecho muy popular en Kaggle (portal dedicado a la ciencia de datos): Pokemon- Weedle’s Cave.

Este conjunto contiene dos archivos: pokemon.csv con estadísticas de los pokemons hasta la sexta generación y combats.csv con los resultados de cincuenta mil batallas. No nos pondremos muy quisquillosos, sabemos que cada tipo de pokemon aparece con un valor fijo en sus estadísticas, que no se considera el estado inicial del pokemon en el combate y otros elementos de una batalla pokemon real, como la relación con su entrenador.

Logo Internacional de Pokémon. Cortesía de Nintendo

Asumamos, entonces, que todas son batallas individuales y que los pokemon son utilizados con sus estadísticas base.

pokemon = pd.read_csv('pokemon-challenge/pokemon.csv', index_col="#")
combats = pd.read_csv('pokemon-challenge/combats.csv')

Nótese que establecemos el número de pokemon como índice.

Siempre es conveniente verificar si los datos fueron leídos correctamente y tomar nota de sus campos, tipos de datos y rangos de valores.

pokemon.head()
Salida de Jupyter
pokemon.describe()
Salida de Jupyter
pokemon.info()
Salida de Jupyter
combats.head()
Salida de Jupyter
combats.describe()
Salida de Jupyter
combats.info()
Salida de Jupyter

Ahora que tenemos los datos ya cargados … nos gustaría verlos también ¿no? ¡En la siguiente parte de este post mostraré la narrativa de los datos!

--

--

Francisco Palm
qu4nt
Writer for

geomática poética, geomancia matemática, hacktivista, Python & R, Pop & Rock Indie, Otaku & Geek, Zen & K, Utopía & Emancipación