Los histogramas son representaciones gráficas muy usadas que agrupan puntos de datos en rangos definidos. Suele verse en estadística para mostrar cuántas veces aparece un tipo de valor dentro de un rango concreto. Por ejemplo, tu profe de mates quizá usó un histograma para visualizar el número de notas obtenidas por toda tu clase.
Figura 1: ejemplo de histograma que muestra la distribución de notas de una clase.
Sus barras de distintas alturas recuerdan a los gráficos de barras, pero los histogramas visualizan datos cuantitativos, no categóricos, que es el caso de los gráficos de barras.
Por lo general, los datos numéricos representados en histogramas son continuos, es decir, pueden tomar infinitos valores. Intentar trazar todos los valores de una variable continua suele ser poco práctico. Los histogramas resuelven este problema agrupando los datos en rangos lógicos (bins) y permitiendo su visualización.
En este tutorial, veremos cómo crear histogramas en Python con la biblioteca de visualización Plotly. También repasaremos distintas formas de personalizar tu histograma en Plotly y por qué la visualización de datos es tan importante.
Echa un vistazo a este cuaderno de DataLab para seguir el código del tutorial.
La importancia de la visualización de datos en el análisis
Ningún negocio puede decir que no se beneficiará de comprender mejor sus datos. El análisis de datos ayuda a optimizar el rendimiento y mejorar los resultados; se aplica a cualquier ámbito donde haya datos, porque convertir datos en conocimiento es una ventaja competitiva.
Las visualizaciones de datos son representaciones gráficas que los analistas usan para comunicar información y datos. Su objetivo es resumir la información en un formato fácil de entender y destacar los hallazgos clave.
Dicho de otro modo, las empresas usan visualizaciones para identificar rápidamente tendencias que, sin ayuda visual, costaría mucho detectar. Las representaciones gráficas facilitan comunicar información de forma universal, rápida y efectiva.
Introducción a Plotly
Plotly es una biblioteca de visualización de datos interactiva y de código abierto para Python y R escrita en JavaScript. En este artículo nos centraremos en Plotly para Python, a veces llamado «plotly.py» para distinguirlo de su versión en JavaScript.
Muchos usuarios de Plotly comentan que al principio les «cautivó» la estética moderna que permite aplicar con facilidad. Plotly para Python te permite crear visualizaciones web atractivas e interactivas que se pueden:
mostrar en cuadernos Jupyter,
guardar como archivos HTML independientes,
servir como parte de aplicaciones web en puro Python usando Dash.
Otro punto fuerte de Plotly es su amplísima variedad de tipos de gráficos. La biblioteca admite más de 40 gráficos distintos para casos de uso que incluyen estadística, finanzas, geografía, ciencia y visualizaciones en 3D.
Exportar visualizaciones creadas con Plotly es sencillo gracias a su integración con Kaleido, una utilidad de exportación de imágenes. También hay soporte para contextos no web, incluidos editores de escritorio (Spyder, PyCharm, etc.) y la publicación de documentos estáticos (por ejemplo, exportar cuadernos de Jupyter a PDF).
Instalar plotly.py es bastante directo; puedes hacerlo con pip:
Nota: Se recomienda instalar las bibliotecas en un entorno virtual para mantener separadas las dependencias de cada proyecto. También puedes empezar con un cuaderno de DataLab, un IDE de ciencia de datos para Python y R en la nube.
Usar DataLab
DataLab es un entorno de desarrollo integrado (IDE) online que te permite escribir código, analizar datos en solitario o en equipo y compartir insights. Es como un Google Docs pensado para ciencia de datos; descubre más en nuestro artículo sobre Using DataLab in the Classroom.
Para esta tarea, crearemos un cuaderno a partir de un conjunto de datos. DataCamp ofrece un catálogo amplio y en crecimiento de datasets interesantes. Al crear un cuaderno desde un dataset, el entorno incluye los datos preconfigurados y una breve descripción para que puedas ponerte manos a la obra desde el primer minuto.
Los pasos para crear un cuaderno con un dataset de DataCamp son:
Desde la app de DataLab, selecciona "Datasets" en la barra lateral.
Elige un dataset que te interese. Se abrirá un cuadro de diálogo con una vista previa del dataset seleccionado, su diccionario de datos y un enlace a la fuente, la opción de lenguaje (Python o R) y un resumen de publicaciones que otras personas han creado con ese dataset.
Selecciona Create workbook.
Figura 2: GIF con los pasos para crear un cuaderno a partir de un dataset.
Usaremos el dataset Olympics Data de la colección interna de DataCamp. Según la descripción, es un histórico de los Juegos Olímpicos modernos, de Atenas 1896 a Río 2016. Cada fila corresponde a una persona (271116 instancias) que compitió en un evento olímpico y la medalla obtenida (si la hubo).
Las columnas son:
Columna
Descripción
id
Identificador único por atleta
name
Nombre del atleta
sex
M o F
age
Edad del atleta
height
En centímetros
weight
En kilogramos
team
Nombre del equipo
noc
Comité Olímpico Nacional (código de 3 letras)
games
Año y temporada
year
Entero
season
Summer o Winter
city
Ciudad anfitriona
sport
Deporte
event
Prueba
medal
Gold, Silver, Bronze o NA
Con esto en mente, las columnas adecuadas para construir un histograma son: age, height, weight y year. Los histogramas se construyen con valores numéricos continuos: representan la distribución de datos numéricos, donde se agrupan en bins y se muestra el recuento por bin.
Usaremos la columna age para crear nuestro histograma.
Crear un histograma con Plotly
Crear un histograma en Python con Plotly es bastante sencillo. Podemos usar Plotly Express, una interfaz de alto nivel muy fácil de usar…
import plotly.express as px
# Create a histogram
fig = px.histogram(olympic_data.age, x="age",
title="Distribution of Athletes age")
fig.show()Con la tecnología de
Figura 3: histograma creado con Plotly Express
También podemos usar Graph Objects.
import plotly.graph_objects as go
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])# add the title
fig.update_layout(title=dict(text="Distribution of Athletes age"))
fig.show()Con la tecnología de
Figura 4: histograma creado con Plotly Graph Objects.
Las funciones de Plotly express llaman internamente a graph_objects y devuelven una figura. Por eso son tan útiles: permiten crear visualizaciones que, con graph_objects a bajo nivel, requerirían más líneas de código.
«El módulo plotly.express (normalmente importado como px) contiene funciones que pueden crear figuras completas de una vez y se conoce como Plotly Express o PX. Plotly Express forma parte de la biblioteca Plotly y es el punto de partida recomendado para crear la mayoría de figuras comunes. Cada función de Plotly Express usa graph objects internamente y devuelve una instancia de plotly.graph_objects.Figure.»
Aunque express sea la puerta de entrada recomendada, usaremos graph_objects para personalizar la apariencia del histograma, ya que ofrece más flexibilidad.
Personalizar la apariencia del histograma en Plotly
Ahora mismo el histograma es bastante básico. Vamos a mejorarlo cambiando la tipografía del título y añadiendo etiquetas a los ejes.
# Create histogram
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
fig.update_layout(# Set the global font
font ={"family":"Times new Roman","size":16},# Update title font
title ={"text":"Distribution of Athletes age","y":0.9,# Sets the y position with respect to `yref`"x":0.5,# Sets the x position of title with respect to `xref`"xanchor":"center",# Sets the title's horizontal alignment with respect to its x position"yanchor":"top",# Sets the title's vertical alignment with respect to its y position. " "font":{# Only configures font for title"family":"Arial","size":20,"color":"red"}})# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")# Display plot
fig.show()Con la tecnología de
Figura 5: histograma de Plotly con título actualizado y etiquetas de ejes.
Con estos cambios, el histograma es más informativo.
Ahora, cambiemos el tamaño de cada bin.
# Create histogram
fig = go.Figure(data =[
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5)# Change the bin size to 5)])Con la tecnología de
Figura 6: histograma de Plotly con tamaño de bin igual a 5.
En el código anterior, establecemos el parámetro xbins en la instancia de go.Histogram a una instancia de go.histogram.XBins y definimos el tamaño de bin deseado como parámetro. Ten en cuenta que también podríamos haber hecho esto con un dict con propiedades compatibles.
Por último, cambiemos el color de los bins a naranja para que la visualización destaque un poco.
# Create histogram
fig = go.Figure(data =[
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5),# Change the bin size
marker=go.histogram.Marker(color="orange")# Change the color)])Con la tecnología de
Figura 7: histograma de Plotly con bins naranjas.
Mucho mejor.
En el código anterior, establecemos el parámetro marker en la instancia de go.Histogram a una instancia de go.histogram.Marker y definimos el color deseado como parámetro.
Además, hay muchas otras personalizaciones posibles, como añadir texto al pasar el cursor.
Activar el texto al pasar el cursor
Ahora mismo, cuando pasas el cursor por encima de una barra aparece un texto que detalla qué representa, como ves en la Figura 8.
Figura 8: texto actual que se muestra al pasar el cursor sobre el histograma.
No es muy intuitivo. Buscamos que los gráficos se expliquen solos, incluso el texto emergente. Así que vamos a actualizar la información que se muestra al pasar el cursor por un bin.
# Create histogram
fig = go.Figure(data =[
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5),# Change the bin size
marker=go.histogram.Marker(color="orange"),# Change the color
hovertemplate="<br>".join(["Age Range: %{x}","Number of Athletes: %{y}"])# Make hover text more informative)])Con la tecnología de
Figura 9: información actualizada al pasar el cursor.
El texto ahora es mucho más informativo, lo que facilita la interpretación de la visualización. Lo conseguimos actualizando el parámetro hovertemplate en nuestra instancia de go.Histogram.
Añadir opciones de filtrado
Antes comentamos que podíamos construir histogramas con age, height, weight y year. No hace falta crear uno para cada variable.
Podemos crear un único histograma y añadir botones de filtro para alternar qué variable se muestra en la visualización.
Así queda en código.
"""
Starter code provided by vestland on StackOverflow
Link: https://bit.ly/3ipqOMo
"""# continuous features
continuous_vars =["age","height","weight","year"]# plotly
fig = go.Figure()# set up ONE trace
fig.add_trace(
go.Histogram(x = olympic_data.age,
xbins=go.histogram.XBins(size=5),# Change the bin size
marker=go.histogram.Marker(color="orange"),# Change the color))
buttons =[]# button with one option for each dataframefor col in continuous_vars:
buttons.append(dict(method='restyle',
label=col,
visible=True,
args=[{"x":[olympic_data[col]],"type":'histogram',[0]],))# some adjustments to the updatemenus
updatemenu =[]
your_menu =dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']= buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True# add dropdown menus to the figure
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()Con la tecnología de
Figura 10: histograma con filtros para alternar varias variables en una sola visualización.
Este tutorial muestra cómo utilizar Matplotlib, una potente biblioteca de visualización de datos en Python, para crear gráficos de líneas, barras y dispersión con datos bursátiles.
Este tutorial práctico profundiza en la creación y personalización de gráficos lineales con Matplotlib, una potente biblioteca de visualización de datos en Python.
Los histogramas son representaciones gráficas muy usadas que agrupan puntos de datos en rangos definidos. Suele verse en estadística para mostrar cuántas veces aparece un tipo de valor dentro de un rango concreto. Por ejemplo, tu profe de mates quizá usó un histograma para visualizar el número de notas obtenidas por toda tu clase.
Figura 1: ejemplo de histograma que muestra la distribución de notas de una clase.
[Fuente: Example Histogram with Matplotlib]
Sus barras de distintas alturas recuerdan a los gráficos de barras, pero los histogramas visualizan datos cuantitativos, no categóricos, que es el caso de los gráficos de barras.
Por lo general, los datos numéricos representados en histogramas son continuos, es decir, pueden tomar infinitos valores. Intentar trazar todos los valores de una variable continua suele ser poco práctico. Los histogramas resuelven este problema agrupando los datos en rangos lógicos (bins) y permitiendo su visualización.
En este tutorial, veremos cómo crear histogramas en Python con la biblioteca de visualización Plotly. También repasaremos distintas formas de personalizar tu histograma en Plotly y por qué la visualización de datos es tan importante.
Echa un vistazo a este cuaderno de DataLab para seguir el código del tutorial.
La importancia de la visualización de datos en el análisis
Ningún negocio puede decir que no se beneficiará de comprender mejor sus datos. El análisis de datos ayuda a optimizar el rendimiento y mejorar los resultados; se aplica a cualquier ámbito donde haya datos, porque convertir datos en conocimiento es una ventaja competitiva.
Las visualizaciones de datos son representaciones gráficas que los analistas usan para comunicar información y datos. Su objetivo es resumir la información en un formato fácil de entender y destacar los hallazgos clave.
Dicho de otro modo, las empresas usan visualizaciones para identificar rápidamente tendencias que, sin ayuda visual, costaría mucho detectar. Las representaciones gráficas facilitan comunicar información de forma universal, rápida y efectiva.
Introducción a Plotly
Plotly es una biblioteca de visualización de datos interactiva y de código abierto para Python y R escrita en JavaScript. En este artículo nos centraremos en Plotly para Python, a veces llamado «plotly.py» para distinguirlo de su versión en JavaScript.
Consejo: haz los cursos Introduction to data visualization with Plotly in Python o Interactive data visualization with Plotly in R para ponerte al día con Plotly.
Muchos usuarios de Plotly comentan que al principio les «cautivó» la estética moderna que permite aplicar con facilidad. Plotly para Python te permite crear visualizaciones web atractivas e interactivas que se pueden:
Otro punto fuerte de Plotly es su amplísima variedad de tipos de gráficos. La biblioteca admite más de 40 gráficos distintos para casos de uso que incluyen estadística, finanzas, geografía, ciencia y visualizaciones en 3D.
Exportar visualizaciones creadas con Plotly es sencillo gracias a su integración con Kaleido, una utilidad de exportación de imágenes. También hay soporte para contextos no web, incluidos editores de escritorio (Spyder, PyCharm, etc.) y la publicación de documentos estáticos (por ejemplo, exportar cuadernos de Jupyter a PDF).
Instalar plotly.py es bastante directo; puedes hacerlo con pip:
O con Conda:
Nota: Se recomienda instalar las bibliotecas en un entorno virtual para mantener separadas las dependencias de cada proyecto. También puedes empezar con un cuaderno de DataLab, un IDE de ciencia de datos para Python y R en la nube.
Usar DataLab
DataLab es un entorno de desarrollo integrado (IDE) online que te permite escribir código, analizar datos en solitario o en equipo y compartir insights. Es como un Google Docs pensado para ciencia de datos; descubre más en nuestro artículo sobre Using DataLab in the Classroom.
Para esta tarea, crearemos un cuaderno a partir de un conjunto de datos. DataCamp ofrece un catálogo amplio y en crecimiento de datasets interesantes. Al crear un cuaderno desde un dataset, el entorno incluye los datos preconfigurados y una breve descripción para que puedas ponerte manos a la obra desde el primer minuto.
Los pasos para crear un cuaderno con un dataset de DataCamp son:
Figura 2: GIF con los pasos para crear un cuaderno a partir de un dataset.
Nota: Consulta Creating a Plotly Histogram with Olympics Data para seguir el código.
Usaremos el dataset Olympics Data de la colección interna de DataCamp. Según la descripción, es un histórico de los Juegos Olímpicos modernos, de Atenas 1896 a Río 2016. Cada fila corresponde a una persona (271116 instancias) que compitió en un evento olímpico y la medalla obtenida (si la hubo).
Las columnas son:
Columna
Descripción
id
Identificador único por atleta
name
Nombre del atleta
sex
M o F
age
Edad del atleta
height
En centímetros
weight
En kilogramos
team
Nombre del equipo
noc
Comité Olímpico Nacional (código de 3 letras)
games
Año y temporada
year
Entero
season
Summer o Winter
city
Ciudad anfitriona
sport
Deporte
event
Prueba
medal
Gold, Silver, Bronze o NA
Con esto en mente, las columnas adecuadas para construir un histograma son: age, height, weight y year. Los histogramas se construyen con valores numéricos continuos: representan la distribución de datos numéricos, donde se agrupan en bins y se muestra el recuento por bin.
Usaremos la columna age para crear nuestro histograma.
Crear un histograma con Plotly
Crear un histograma en Python con Plotly es bastante sencillo. Podemos usar Plotly Express, una interfaz de alto nivel muy fácil de usar…
También podemos usar Graph Objects.
Las funciones de Plotly
expressllaman internamente agraph_objectsy devuelven una figura. Por eso son tan útiles: permiten crear visualizaciones que, congraph_objectsa bajo nivel, requerirían más líneas de código.«El módulo
plotly.express(normalmente importado como px) contiene funciones que pueden crear figuras completas de una vez y se conoce como Plotly Express o PX. Plotly Express forma parte de la biblioteca Plotly y es el punto de partida recomendado para crear la mayoría de figuras comunes. Cada función de Plotly Express usa graph objects internamente y devuelve una instancia deplotly.graph_objects.Figure.»Fuente: Plotly Express in Python.
Aunque
expresssea la puerta de entrada recomendada, usaremosgraph_objectspara personalizar la apariencia del histograma, ya que ofrece más flexibilidad.Personalizar la apariencia del histograma en Plotly
Ahora mismo el histograma es bastante básico. Vamos a mejorarlo cambiando la tipografía del título y añadiendo etiquetas a los ejes.
Con estos cambios, el histograma es más informativo.
Ahora, cambiemos el tamaño de cada bin.
En el código anterior, establecemos el parámetro
xbinsen la instancia dego.Histograma una instancia dego.histogram.XBinsy definimos el tamaño de bin deseado como parámetro. Ten en cuenta que también podríamos haber hecho esto con undictcon propiedades compatibles.Por último, cambiemos el color de los bins a naranja para que la visualización destaque un poco.
Mucho mejor.
En el código anterior, establecemos el parámetro
markeren la instancia dego.Histograma una instancia dego.histogram.Markery definimos el color deseado como parámetro.Además, hay muchas otras personalizaciones posibles, como añadir texto al pasar el cursor.
Activar el texto al pasar el cursor
Ahora mismo, cuando pasas el cursor por encima de una barra aparece un texto que detalla qué representa, como ves en la Figura 8.
Figura 8: texto actual que se muestra al pasar el cursor sobre el histograma.
No es muy intuitivo. Buscamos que los gráficos se expliquen solos, incluso el texto emergente. Así que vamos a actualizar la información que se muestra al pasar el cursor por un bin.
El texto ahora es mucho más informativo, lo que facilita la interpretación de la visualización. Lo conseguimos actualizando el parámetro
hovertemplateen nuestra instancia dego.Histogram.Añadir opciones de filtrado
Antes comentamos que podíamos construir histogramas con age, height, weight y year. No hace falta crear uno para cada variable.
Podemos crear un único histograma y añadir botones de filtro para alternar qué variable se muestra en la visualización.
Así queda en código.
Y listo. No olvides abrir el cuaderno Creating a Plotly Histogram with Olympics Data y trastear con lo que hemos construido en este tutorial.
Para terminar
Ya sabes cómo crear un histograma en Plotly para Python. En este tutorial hemos visto:
Si buscas más recursos sobre histogramas o sobre Plotly, echa un vistazo a estos enlaces: