En publicaciones anteriores ya he introducido seaborn y matplotlib.pyplot para visualización en Python. En este post quiero presentarles el módulo altair. Este es un módulo alternativo que admite la visualización en Python.
El módulo altair se puede instalar con pip install en el símbolo del sistema.
A continuación, importo el módulo altair junto con pandas y pandas_datareader. Usaré pandas_datareader para leer los datos del precio de las acciones de Tesla. Visualizaré la evolución del precio de las acciones con un gráfico creado en altair. Pero primero consulto los datos de Yahoo Finance y muestro el encabezado del marco de datos recuperado:
# importar módulos relevantes import pandas as pd import altair as alt import pandas_datareader.data as web import datetime # leer en los datos de precios de las acciones de tesla durante los últimos 5 años start = datetime.datetime(2015,10,11) end = datetime.datetime(2020,10,11) df = web.DataReader("TSLA","yahoo",start,end) # mostrar el encabezado del marco de datos del precio de las acciones df.head()
High | Low | Open | Close | Volume | Adj Close | |
---|---|---|---|---|---|---|
Date | ||||||
2015-10-12 | 44.599998 | 43.054001 | 44.598000 | 43.116001 | 19181500.0 | 43.116001 |
2015-10-13 | 44.504002 | 42.226002 | 42.655998 | 43.849998 | 25857500.0 | 43.849998 |
2015-10-14 | 44.189999 | 43.085999 | 44.133999 | 43.375999 | 15522000.0 | 43.375999 |
2015-10-15 | 44.346001 | 42.740002 | 43.285999 | 44.262001 | 14221000.0 | 44.262001 |
2015-10-16 | 46.096001 | 44.574001 | 44.608002 | 45.402000 | 21672500.0 | 45.402000 |
Actualmente, las fechas son índices de fila del marco de datos. Para trabajar con altair, es mejor agregarlos como una columna separada con un encabezado de columna específico:
df["Dates"] = df.index
Ahora que tengo mis datos, puedo crear un gráfico de precios de acciones con el módulo altair en Python:
# crear gráfico con altair chart = alt.Chart(df).mark_area().encode( x="Dates", y="Close" ) # mostrar gráfico de altair chart
Ese fue un gráfico muy básico. A continuación creo otro gráfico de áreas, con un degradado de color:
# crear gráfico de altair chart = alt.Chart(df).mark_area(line={'color':'darkgreen'},color=alt.Gradient( gradient='linear', stops=[alt.GradientStop(color='white', offset=0), alt.GradientStop(color='darkgreen', offset=1)])).encode(x="Dates",y="Close") # mostrar gráfico de altair chart
Quiero agregar un título al gráfico. También quiero cambiar los títulos de los ejes X e Y. Lo hago en el siguiente código:
# agregar título de gráfico chart.title = "Daily TSLA stock closing prices [USD]" # ajustar las etiquetas de los ejes xey chart.encoding.x.title = "Time" chart.encoding.y.title = "Daily closing price [USD]" # mostrar gráfico modificado chart
Ahora intentemos hacer un diagrama de velas. Una explicación del análisis de existencias con diagramas de velas puede, por ejemplo, se puede encontrar aquí: https://diagrammm.com/candlestick_chart
# crear condiciones de color color_conditions = alt.condition("datum.Open <= datum.Close", alt.value("green"), alt.value("red"))# build chart chart = alt.Chart(df).encode(x = "Dates") # establecer el título del gráfico chart.title = "Candle-stick diagram of TSLA stock prices" # establecer la etiqueta del eje x para el gráfico chart.encoding.x.title = "Time" # construir una marca de regla usando el método mark_rule () rules = chart.mark_rule().encode( y = "Low", y2 = "High") # ajustar la etiqueta del eje y para las reglas rules.encoding.y.title = "Price" # construir barras bars = chart.mark_bar().encode( y="Open", y2="Close", color = color_conditions) # mostrar reglas y barras (ambas basadas en el mismo gráfico básico rules + bars
En el diagrama de velas de arriba, las barras de altair se han colocado como una segunda capa sobre las reglas de altair.
Creemos algunos ejemplos de trazado más, utilizando los datos del precio de las acciones de Tesla. En el siguiente código, creo un gráfico de línea de precio de acciones para los precios de cierre diarios de las acciones de Tesla:
# crear diagrama de línea chart = alt.Chart(df).mark_line().encode(x="Dates",y="Close") # establecer etiquetas de título y eje chart.title = "Daily TSLA stock closing prices" chart.encoding.x.title = "Time" chart.encoding.y.title = "Price [USD]" # mostrar gráfico de líneas chart
Al crear un gráfico, también puedo especificar algunas propiedades adicionales como, por ejemplo, el ancho del gráfico:
Al crear un gráfico, también puedo especificar algunas propiedades adicionales como, por ejemplo, el ancho del gráfico:
# definir las condiciones de coloración color_conditions = alt.condition("datum.Open <= datum.Close", alt.value("green"), alt.value("red")) # construir gráfico chart = alt.Chart(df).encode(x = "Dates").properties(width=800) # establecer el título del gráfico chart.title = "Candle-stick diagram of TSLA stock prices" # establecer la etiqueta del eje x para el gráfico chart.encoding.x.title = "Time" # construir una marca de regla usando el método mark_rule () rules = chart.mark_rule().encode( y = "Low", y2 = "High") # adjust y axis label for rules rules.encoding.y.title = "Price" # construir barras bars = chart.mark_bar().encode( y="Open", y2="Close", color = color_conditions) # mostrar reglas y barras (ambas basadas en el mismo gráfico básico rules + bars
Esto completa mi introducción básica al módulo altair en Python. Para obtener más información, p. Ej. recomiendo consultar la documentación: https://altair-viz.github.io/
También puede consultar mis otras publicaciones sobre visualización en Python y R, que cubren, por ejemplo, visualización de datos espaciales con Leaflet en R, geocodificación y mapas de calor con Folium y Leaflet en Python y mapas de calor 3D con deckgl en R. También escribí varios tutoriales sobre visualización de datos con Seaborn y Matplotlib.pyplot en Python. Yo, por ejemplo utilizó Matplotlib para visualizar la frontera eficiente de las existencias de camiones aplicando la teoría de la cartera de Markowitz en combinación con simulaciones de montecarlo.
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply