Python para Análisis de datos: Introducción

Sesión 6

Jesús Fernández (fernandez.cuesta@gmail.com)

10 Abril 2019

Visualización de datos

Visualización de datos - Introducción

Representamos datos de forma gráfica porque:

  • Más fácil y rápido de interpretar
  • Cada dominio representa los datos de una manera
  • Alto volumen de datos: mejor visualmente

Realizar gráficas desde un lenguaje de programación:

  • Gráficas estáticas dinámicas
  • Automatizar proceso complejo
    • Combinar procesamiento de datos con su representación
  • Personalizable
    • Diferentes soportes (web, publicaciones, presentaciones)

En general, seguiremos un procedimiento:

  • Obtención de datos (BB.DD., web, logs, …)
  • Sanear y procesar los datos
  • Selección de parámetros
  • Visualización
  • Personalización (estilos)

Librerías más usadas:

  • Matplotlib para gráficos estáticos
    • standard de-facto, basado en MATLAB
    • hacer fácil tareas sencillas y posible tareas complejas
    • versátil, madura y extensa
    • integrado con pandas (<100%)
    • acepta paquetes de terceros como extensiones (plugins)
  • Seaborn para estadística
    • enfocado a análisis de datos
    • mejora el diseño de matplotlib (plugin)
  • Bokeh para gráficas dinámicas
  • Cartopy, folium para mapas

  • Descargar cuaderno jupyter: matplotlib/pyplot
  • Iniciar jupyter (2 opciones):
    • Desde Anaconda Navigator (jupyter notebook > Launch)
    • Desde un terminal (Anaconda Prompt o terminal de VSCODE):

      > jupyter notebook
  • Abrir cuaderno descargado en jupyter
  • Ejecutar paso a paso de la siguiente sección

Fragmentos de código encerrados entre ‘#####

Matplotlib/pyplot

pyplot: módulo con interfaz parecida a MATLAB

Para importar pyplot:

Partes de una figura

simple_anatomy  fig_anatomy

Los componentes más importantes son:

  • Figura
  • Ejes (axes)
    • región de la figura donde se visualizarán gráficos
  • Eje (axis)
    • eje de coordenadas
  • Artist
    • cualquier elemento (líneas, leyenda, etc., incluidos ejes)

Como regla general seguiremos los siguientes pasos:

  1. Crear figura
  2. Obtener ejes
  3. Dibujar sobre los ejes
  4. Añadir elementos extra (anotaciones, título)
  5. Renderizar gráfica

Nota: 1 y 2 se pueden combinar en un mismo comando

De forma simplificada, los ejes y la figura se crean simultáneamente:

⚠ Importante ⚠

En jupyter/ipython, los gráficos aparecerán automáticamente si la primera línea es:

De lo contrario necesitaremos ejecutar:

… para mostrar cada gráfico

Matplotlib puede dibujar datos organizados en:

  • Listas
  • Diccionarios
  • Arrays (np.array)
  • pandas.DataFrame

El tipo de datos nativo es np.array.

⚠ El resto puede requerir sanear/homogeneizar los datos ⚠

Para crear una tupla (figura, ejes) usaremos:

  • plt.subplots()
    • sin argumentos: crea una figura con 1 area de dibujo
    • plt.subplots(n, m): crea una figura con varias zonas de dibujo distribuidas en n filas y m columnas
    • devuelve la figura y todos los ejes

plt.subplot()

Integración con pandas

Visualización de datos con pandas

  • Descargar y abrir cuaderno jupyter
  • pyplot está (parcialmente) integrado en pandas
  • Podemos dibujar directamente desde un dataframe de pandas
  • se devuelve un objeto “Axes” sobre el que poder trabajar
    • no es necesario crear con antelación la figura y los ejes
    • … aunque suele ser lo recomendable

Sintaxis

pandas_plot

Usar pandas es conveniente y mucho más sencillo:

barplot_stacked

  • Generalmente las opciones más usadas en cada tipo de gráfico (título, ejes y posición, color, tamaño de línea, …) son directamente accesibles desde pandas.DataFrame.plot().
  • Para el resto, usar matplotlib sobre el objecto “Axes”:

Otros tipos de gráficos disponibles

Otros tipos de gráficos con pandas

  • Histograma

pd_hist

  • Series temporales: aquellos donde el índice del DataFrame tiene propiedades de “índice temporal” (DateTimeIndex)

ts

  • Boxplots

:::

  • Área

  • Circular (pie chart)

Parámetros opcionales

Parámetros opcionales en pandas

pd.DataFrame.plot()

Es posible pasar argumentos para realizar personalizaciones rápidas.

  • Existen opciones específicas para cada tipo de visualización
  • También hay opciones comunes a todos ellos

  • Además, podremos usar las primitivas de matplotlib, bien como argumentos adicionales o sobre los ejes

pandas_plot

NaN

  • Por defecto ignora los datos ausentes (NaN)
  • Podemos “rellenar los huecos”: df.fillna()
    • propagando el último valor
    • o con valores preestablecidos
  • O interpolar df.interpolate()

pd_interp

Interactivo/Práctico

Caso práctico

  • Descargar cuaderno jupyter
  • Abrirlo con jupyter notebook
  • Utiliza las celdas vacías para las respuestas, pruebas, etc.

  1. ax: ejes sobre los que dibujar

practica_01

1.2. Barras apiladas (stacked)

practica_01b

  1. subplots [True|False]: subplot para cada columna dibujada
    • layout: (n_filas, n_columnas), opcional con subplot=True

practica_02

2.2. layout como parámetro de plt.subplots()

practica_02b

  1. sharex/sharey: compartir ejes (subplots)

practica_03

  1. title:
    • str: título de la figura
    • list(str): título de cada subplot

practica_04

  1. figsize: tamaño de la figura

practica_05

  1. stacked [True|False]: apilar datos

practica_06

  1. grid [True|False]: dibujar cuadrícula

practica_07

  1. rot: 'horizontal', 'vertical', o número (en grados)

practica_08

  1. xlim, ylim: tuplas (lo, hi) para delimitar visualización

practica_09

  1. colormap: mapa de colores (plt.colormaps())

practica_10

  1. secondary_y: segundo eje de ordenadas

practica_11

  1. table [True|False]: mostrar tabla bajo el gráfico

practica_12

Parámetros de visualización con pyplot

Parámetros de visualización con pyplot

  • Descargar cuaderno jupyter
  • Abrirlo con jupyter notebook
  • Ejecutar paso a paso de la siguiente sección

Color/estilo de línea

Color/estilo de línea

xticks/yticks

tick_rotation

Leyenda

  • Se genera automáticamente según datos inferidos de las etiquetas

loc: define dónde emplazar la leyenda

best, upper right, upper left, lower left, lower right, right, center left, center right, lower center, upper center, center

legend

:::

Estilos

Estilos

Otros estilos

xkcd

Otros estilos

seaborn

:::

Tipos de gráficos más importantes en pyplot

Tipos de gráficos en matplotlib/pyplot

Lineplot (.plot())

Gráfico de dispersión (Scatterplot)

Gráfico de barras (barplot)

Histograma

hist

Diagrama circular (pie)

piechart

Guardar figura a fichero (de forma programática)

Seaborn

seaborn

  • Descargar cuaderno jupyter
  • Abrirlo con jupyter notebook
  • Ejecutar paso a paso de la siguiente sección

Capa de abstracción que simplifica ciertas tareas enfocadas a análisis estadístico

Con matplotlib: …

Multitud de gráficas pre-establecidas

seaborn_kde1

seaborn_kde2

+ ejemplos

tutorial seaborn

Bokeh

bokeh

  • Permite generar gráficos “interactivos”
  • Salida a HTML o integrado en cuaderno jupyter

Geovisualización

  • Librería standard de facto: matplotlib-toolkit (obsoleta)
  • Oficialmente reemplazada por cartopy (muy estática)
  • Alternativa: folium

geo_1

Cartopy

Cuaderno jupyter

geo_2

Folium

Cuaderno jupyter

ejemplos online

Cuadernos jupyter

Cuadernos jupyter

  1. matplotlib/pyplot
  2. pandas
  3. caso práctico (soluciones)
  4. pyplot II
  5. seaborn + bokeh
  6. cartopy
  7. folium