curso
Tutorial de visualización de datos con Python y Tableau
Por qué usar Python con Tableau
Tableau ofrece varias opciones para aumentar y crear nuevos campos de datos. Puedes usar funciones aritméticas, lógicas, espaciales y de modelado predictivo con campos calculados. Tableau es una potente herramienta de inteligencia empresarial (BI), pero tiene limitaciones; ahí es donde el lenguaje Python viene al rescate.
Python es una programación popular entre la comunidad de datos. Puedes utilizarlo para extraer, limpiar, procesar y aplicar funciones estadísticas complejas en los datos. Te proporciona marcos de machine learning, orquestaciones de datos, multiprocesamiento y ricas bibliotecas para realizar casi cualquier tarea posible.
Python es un lenguaje polivalente, y usarlo con Tableau nos da libertad para realizar tareas muy complejas. En este tutorial, vamos a utilizar Python para extraer y limpiar los datos. A continuación, utilizaremos datos limpios para crear una visualización de datos en Tableau.
No utilizaremos Tabpy para crear un servidor Python de Tableau y ejecutar scripts Python dentro de Tableau. Primero extraeremos y limpiaremos los datos en Python (Jupyter Notebook) y luego utilizaremos Tableau para crear una visualización interactiva.
Goodreads Data Viz | Tableau Public
Este es un tutorial paso a paso basado en código sobre la API de Goodreads y la creación de visualizaciones complejas en Tableau. Consulta el siguiente enlace para acceder al código y al panel de Tableau.
Ingesta y procesamiento de datos con Python
En la primera parte del tutorial, aprenderemos a utilizar la API de Goodreads para acceder a datos públicos. En nuestro caso, nos centraremos en el perfil de usuario y lo convertiremos en un dataframe Pandas legible. Además, limpiaremos los datos y los exportaremos al formato de archivo CSV.
Cómo empezar
Utilizaremos el Workspace de DataCamp para ejecutar el código Python. Viene con los paquetes de Python necesarios para las tareas de ciencia de datos.
Si eres nuevo en Python y quieres configurar el entorno en tu equipo local, instala Anaconda. Instalará Python, Jupyter Notebook y los paquetes de Python necesarios.
Antes de empezar a escribir el código, tenemos que instalar el paquete xmltodict, ya que no forma parte de la pila de datos de Workspace ni de Anaconda. Utilizaremos `pip` para instalar el paquete de Python que falta.
Nota: El símbolo `!` solo funciona en Jupyter Notebooks. Nos permite acceder al terminal dentro de la celda de código Jupyter.
!pip install xmltodict
>>> Collecting xmltodict
>>> Using cached xmltodict-0.13.0-py2.py3-none-any.whl (10.0 kB)
>>> Installing collected packages: xmltodict
>>> Successfully installed xmltodict-0.13.0
En el siguiente paso, importaremos los paquetes necesarios.
import pandas as pd
import xmltodict
import urllib.request
Análisis del enlace del perfil
Para extraer los datos del usuario, necesitamos tanto el ID de usuario como el nombre de usuario. En esta sección, analizaremos el enlace del perfil del usuario (Abid).
Nota: Puedes utilizar el perfil de tu amigo o utilizar el enlace de tu perfil, y ejecutar este script.
- Extrae user_id filtrando los dígitos dentro del enlace y devuelve "73376016".
- Para extraer user_name, dividiremos la cadena en user_id y luego en "-" para obtener el usuario. Tras sustituir "-" por un espacio, obtenemos el nombre de usuario "abid".
- Por último, concatenaremos user_id con user_name. Este ID único se utilizará en la siguiente sección para acceder a los datos del usuario.
Goodread_profile = "https://www.goodreads.com/user/show/73376016-abid"
user_id = ''.join(filter(lambda i: i.isdigit(), Goodread_profile))
user_name = Goodread_profile.split(user_id, 1)[1].split('-', 1)[1].replace('-', ' ')
user_id_name = user_id+'-'+user_name
print(user_id_name)
>>> 73376016-abid
Extracción de datos de Goodreads
A finales de 2020, Goodreads dejará de proporcionar la API para desarrolladores. Puedes leer el informe completo aquí. Para superar este problema, utilizaremos claves de API de proyectos anteriores, como streamlit_goodreads_app. El proyecto explica cómo acceder a los datos de usuario de Goodreads utilizando la API.
Goodreads también te ofrece la opción de descargar los datos en formato de archivo CSV sin una clave de API, pero está limitada a un usuario, y no nos da la libertad de extraer datos en tiempo real.
En esta sección, crearemos funciones que tomarán user_id_name, version, shelf, per_page y apiKey.
- apiKey: sirve para acceder a los datos públicos
- version: para especificar el tipo de datos más reciente.
- shelf: hay varias instancias de shelf en el perfil de usuario, pero la mayoría son read, to-read y currently-reading.
- per_page: número de entradas de libro por página
La función toma las entradas del usuario para preparar la URL y luego descarga los datos utilizando urllib.request. Por último, obtenemos los datos en formato XML.
apiKey = "ZRnySx6awjQuExO9tKEJXw"
version = "2"
shelf = "read"
per_page = "200"
def get_user_data(user_id, apiKey, version, shelf, per_page):
api_url_base = "https://www.goodreads.com/review/list"
final_url = (
api_url_base
+ user_id
+ ".xml?key="
+ apiKey
+ "&v="
+ version
+ "&shelf="
+ shelf
+ "&per_page="
+ per_page
)
contents = urllib.request.urlopen(final_url).read()
return contents
contents = get_user_data(user_id_name,apiKey,version, shelf, per_page)
print(contents[0:100])
>>> b'<?xml version="1.0" encoding="UTF-8"?>\n<GoodreadsResponse>\n <Request>\n <authentication>true</aut'
Conversión de XML a JSON
Nuestros datos iniciales están en formato XML, y no hay forma directa de convertirlos en una base de datos estructurada. Así que los transformaremos en JSON utilizando el paquete xmltodict de Python.
Los datos XML se convierten en formato JSON anidado, y para mostrar la primera entrada de los datos de reseñas de libros, utilizaremos corchetes para acceder a los datos encapsulados.
Puedes experimentar con los metadatos y explorar más opciones, pero en este tutorial nos centraremos en los datos de reseñas de usuarios.
contents_json = xmltodict.parse(contents)
print(contents_json["GoodreadsResponse"]["reviews"]["review"][:1])
>>> [{'id': '4626706284', 'book': {'id': {'@type': 'integer', '#text': '57771224'}, 'isbn': '1250809606', 'isbn13': '9781250809605', 'text_reviews_count': {'@type': 'integer', '#text': '150'}, 'uri': 'kca://book/amzn1.gr.book.v3.tcNoY0o7ErAhczdQ', 'title': 'Good Intentions', 'title_without_series': 'Good Intentions', 'image_url': .........
Conversión de JSON a dataframe Pandas
Para convertir el tipo de datos JSON en un dataframe Pandas, utilizaremos la función json_normalize. Los datos de las reseñas están presentes en el tercer nivel, y para acceder a ellos, accederemos a GoodreadsResponse, reseñas y reseña.
Antes de mostrar el dataframe, filtraremos los datos irrelevantes eliminando los libros a los que les falte la columna date_updated.
Aprende diferentes formas de ingesta de archivos CSV, hojas de cálculo, JSON, bases de datos SQL y API utilizando Pandas en el curso Ingesta de datos optimizada con pandas.
df = pd.json_normalize(contents_json["GoodreadsResponse"]["reviews"]["review"])
df = df[df["date_updated"].notnull()]
df.head()
Limpieza de datos
El dataframe sin procesar parece razonablemente limpio, pero aún tenemos que reducir el número de columnas.
Como podemos ver, hay 61 columnas.
df.shape
(200, 61)
Eliminemos las vacías.
df.dropna(axis=1, how='all', inplace=True)
df.shape
(200, 58)
Hemos eliminado correctamente 3 columnas a las que les faltaban los valores.
Ahora comprobaremos todos los nombres de columna utilizando `df.columns` y seleccionaremos las columnas más útiles.
final_df = df[
[
"rating",
"started_at",
"read_at",
"date_added",
"book.title",
"book.average_rating",
'book.ratings_count',
"book.publication_year",
"book.authors.author.name"
]
]
final_df.head()
Como podemos observar, el dataframe final está limpio y tiene los campos de datos relevantes.
Exportación de archivo CSV
En la última sección, exportaremos el dataframe a un archivo CSV compatible con Tableau. En la función to_csv, añade el nombre del archivo con el tipo de extensión y elimina el índice cambiando el argumento de índice a False.
final_df.to_csv("abid_goodreads_clean_data.csv",index=False)
El archivo CSV se mostrará en el directorio actual.
Archivo CSV limpio de Goodreads
También puedes consultar Python Jupyter Notebook: Ingesta de datos mediante la API de Goodreads. Te ayudará a depurar tu código y, si quieres saltarte la parte de programación en Python, puedes descargar el archivo haciendo clic en el botón Copy & Edit y ejecutando el script.
Visualización de datos en Tableau
En la segunda parte, utilizaremos datos limpios y crearemos visualizaciones de datos sencillas y complejas en Tableau. Nuestro objetivo es trazar gráficos interactivos que nos ayuden a comprender el comportamiento de lectura de libros del usuario.
Conexión de los datos
Conectaremos el archivo CSV seleccionando la opción de archivo Text y seleccionando el archivo abid_goodreads_clean_data.csv. Después, cambiaremos los campos de datos Started At, Read at y Date Added por Dater & Time, como se muestra a continuación.
Nota: Es una práctica recomendada modificar tus campos de datos al principio.
Conexión de datos y modificación de tipos de datos
Creación de un histograma de valoraciones
En esta sección, crearemos el histograma de valoraciones de libros del usuario.
- Primero, arrastra el campo Rating y colócalo en la instancia de shelf Rows.
Histograma de valoraciones del usuario parte 1
- Haz clic en el botón desplegable Show Me para acceder a las plantillas de visualización. Convertiremos el gráfico de barras en un histograma haciendo clic en la opción Histogram.
Histograma de valoraciones del usuario parte 2
- El eje Rating tiene marcas de verificación a intervalos de 0,5. Cambia las marcas de verificación haciendo clic con el botón derecho en el eje inferior y seleccionando Edit Axis. Después haz clic en la pestaña Tick Marks y cambia Major Tick Marks a Fixed. Asegúrate de que el valor de Tick Origin sea 0 y de que el valor de Tick Interval sea 1.
Histograma de valoraciones del usuario parte 3
- Personalizaremos el histograma limpiando las etiquetas de los ejes, cambiando los colores y los bordes de la barra y añadiendo etiquetas de marca. Puedes hacer todo esto accediendo a las opciones del panel Marks. Está en la sección central izquierda.
Histograma de valoraciones del usuario parte 4
Normalmente, el usuario había dado valoraciones entre 3 y 4. Las valoraciones cero son los libros que no están valorados.
Gráfico de líneas
Para trazar un gráfico de líneas:
- Arrastra el campo Book.Publication Year y colócalo en la instancia de shelf Rows y Columns.
- Cambia el campo de datos Rows por Count haciendo clic con el botón derecho en él y seleccionando Measure > Count.
- Cambia el campo de datos Columns por Dimensions haciendo clic con el botón derecho en él y seleccionando Dimensions.
- Ve al panel Marks, haz clic en la opción desplegable Automatic y cámbiala por Line.
- Limpia la etiqueta del eje, personaliza el gráfico, añade un título y elimina los valores nulos.
Gráfico de líneas de año de publicación de libro
El usuario ha leído algunos libros antiguos, pero está especialmente interesado en los libros publicados entre los años 2015 y 2020.
Si te sientes abrumado y quieres aprender los fundamentos de Tableau, puede que te resulte útil el tutorial de Tableau para principiantes de Eugenia Anello.
Gráfico de caja
Para trazar el gráfico de caja y bigotes:
- Arrastra el campo de datos Books.Ratings Count y colócalo en la instancia de shelf Rows. Cámbialo de Discrete a Continuous.
- Arrastra el campo de datos Books.Ratings Count y colócalo en la opción Detail del panel Marks. Cámbialo de Measure a Dimension.
- Haz clic en la opción desplegable Show Me y selecciona la opción de gráficos de caja y bigotes.
- Mueve el campo de datos de la instancia de shelf Rows a Columns para hacerlo horizontal.
- La última parte es de personalización. Aumentaremos el tamaño, cambiaremos el color, añadiremos un título y cambiaremos el nombre del eje a "Popularity".
Gráfico de caja de número de reseñas por libro
Parece que el usuario lee menos libros populares y unos cuantos libros famosos. Significa que el usuario tiene un gusto único basado en el contenido, no en la popularidad.
Gráfico de burbujas
Hemos creado una visualización sencilla pero sorprendente para conocer el comportamiento de lectura de los libros de los usuarios. A continuación, aprenderemos una visualización de datos más compleja, que incluye la creación de un nuevo campo calculado, la edición de bins y la creación de varias capas.
En los gráficos de burbujas, las etiquetas representan el número de días que tardó un usuario en terminar un libro, y el tamaño de la burbuja representa el número de casos. No tenemos un campo de datos para la duración, pero podemos crearlo utilizando Started At y Read At.
En el primer paso, tenemos que crear un nuevo campo calculado haciendo clic en la flecha hacia abajo del panel Data y seleccionando Create Calculated Field.
Creación de campo calculado
Aparecerá la nueva ventana y tendrás que:
- Cambiar el nombre del campo de título a "Read Duration".
- Utilizar la función DATEDIFF para obtener la diferencia entre Read At y Started At.
- Asegurarte de que el primer argumento de las funciones sea "day".
- Arrastrar y colocar o escribir el nombre del campo del corchete como segundo y tercer argumento.
Duración de la lectura en días
El campo de datos Read Duration es continuo, y para trazar la visualización de burbujas empaquetadas, tenemos que dividir el campo de datos en fragmentos menores conocidos como bins.
- Arrastra el campo `Read Duration` recién creado y colócalo en la instancia de shelf Rows.
- Haz clic en Show Me y selecciona histogram. Se creará automáticamente un campo de bin.
Crea un campo de bin
- Haz clic con el botón derecho en el campo (de bin) Read Duration creado recientemente y selecciona la opción Read Duration in Days.
- Cambia Size of Bins a 10. Se crearán varios fragmentos de datos menores que nos ayudarán a crear una versión más refinada del gráfico de burbujas empaquetadas.
Edición de bins
Hemos recorrido un duro camino, y ahora es el momento de ver los frutos de nuestro trabajo.
- Para crear la visualización sencilla, haz clic en Show Me y selecciona la opción packed bubbles. Verás círculos monocromos de diferentes tamaños.
- Para añadir algunos colores, arrastraremos el campo Read Duration y lo colocaremos en la opción Color del panel Marks.
- Cambia el campo de color a Count (Distinct) haciendo clic con el botón derecho en el campo y seleccionando Measure > Count (Distinct). Se dará un color único a cada bin o etiqueta.
Gráfico de burbujas empaquetadas monocromo
- Haz clic en la opción Color del panel Marks y selecciona Edit Colors... > Sunrise-Sunset Diverging. Puedes elegir cualquier color degradado que se adapte a tu gusto.
- La última parte es de personalización y de asegurarte de que tu visualización sea atractiva y transmita el mensaje adecuado.
Gráfico de burbujas empaquetadas
El usuario tardó menos de un día en terminar la mayoría de los libros. También puedes ver algunos valores atípicos por encima de 300.
También podemos crear un panel de Tableau combinando estas visualizaciones. Aprende a crear un panel de Tableau en este tutorial.
Conclusión
En este tutorial, hemos aprendido la importancia de Python y cómo utilizarlo con Tableau. En la primera sección, extrajimos los datos de usuario de Goodreads utilizando la API para desarrolladores y convertimos los datos XML en un dataframe Pandas limpio y estructurado. En la segunda parte, utilizamos datos limpios para crear visualizaciones de datos sencillas y complejas.
La combinación de Python con Tableau abre todo un nuevo mundo de posibilidades. Puedes integrar pipelines de datos, implementar modelos de machine learning, ejecutar análisis estadísticos complejos y realizar diversas tareas que son imposibles solo con Tableau.
Puedes ejecutar el código Python en el Workspace de DataCamp de forma gratuita, que incluye todos los paquetes necesarios para ejecutar este ejemplo. Para crear la visualización de Tableau, hemos utilizado una versión gratuita de Tableau llamada Tableau Public.
Si eres nuevo en Python y quieres aprender más sobre las funcionalidades y la sintaxis, consulta el curso Introducción a la ciencia de datos en Python. Además, puedes dominar los fundamentos de la visualización y la personalización de Tableau con el programa de habilidades Fundamentos de Tableau. Consta de 5 cursos que abarcan una introducción a Tableau, análisis de datos, creación de paneles interactivos, trabajo en un caso práctico y conexión de varias fuentes de datos.
Cursos de Tableau y Python en DataCamp
curso
Intermediate Python
curso
Data Manipulation with pandas
tutorial
Tutorial de funciones de Python
tutorial
Tutorial sobre la ejecución de scripts de Python en Power BI
tutorial
Python Seaborn Tutorial Para Principiantes: Empezar a visualizar datos
tutorial
Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos
tutorial
Introducción al trazado con Matplotlib en Python
Kevin Babitz
25 min
tutorial