Artículo Piyush Adhikari · oct 23 4m read

Python embebido e IRIS en Jupyter Notebook en un entorno virtual

Estoy documentando una demostración de InterSystems IRIS que incluye Python embebido y Jupyter Notebook desplegados en el mismo contenedor, junto con una aplicación de Python embebido desarrollada en ese entorno de Jupyter Notebook.

He utilizado el contenedor Docker creado por @Bob Kuszewski como entorno de desarrollo para mostrar cómo se puede crear una aplicación de Python embebido, capaz de enviar y recuperar datos desde y hacia InterSystems IRIS. La ventaja de usar este contenedor como entorno de desarrollo es que se trata de un entorno virtual con el IDE de Jupyter y IRIS conectados y ejecutándose en paralelo. El uso de esta configuración frente a cualquier otra puede justificarse por la prueba de velocidad de ingesta y consulta de datos que realicé en varias plataformas, donde InterSystems IRIS ofreció la tasa más rápida tanto de ingesta como de consulta de datos.

La aplicación de Python embebido escrita en Jupyter Notebook obtiene datos CSV de un catálogo de conjuntos de datos externo llamado data.world mediante Pandas, y almacena los datos en una clase de IRIS que se ejecuta en el mismo contenedor.

Dado que la instancia de IRIS se ejecuta en un contenedor Docker, no hay acceso a Studio, por lo que he utilizado VS Code para crear clases en la instancia de IRIS. Podemos conectarnos a IRIS y programar en ObjectScript usando las extensiones de InterSystems para Servers Manager y ObjectScript, respectivamente.

Una vez que los datos se almacenan en IRIS, he utilizado una consulta SQL para acceder a ellos y guardarlos en un DataFrame.

importirisquery = "SELECTProperty, Property, Property, Property, Property, FROMNamespace.Class"
iris.sql.exec(query)

Después, he utilizado Plotly, una biblioteca usada para la visualización y el análisis de datos, para generar un gráfico de barras a partir de los datos almacenados en la clase de IRIS. Me he basado en dash-python-iris para el uso de la biblioteca pyplot de Python en la visualización.

Código de la aplicación

import pandasaspddf = pd.read_csv('https://query.data.world/s/tus52dys57qbhqz4qjmla3r34pnuti')

number = df['Number']name = df['Name']symbol = df['Symbol']marketcap = df['Market Cap']price = df['Price']supply = df['Circulating Supply']tfhr = df['Volume (24hr)']import irisfor i in range(1515):

    num = number.loc[i]
    nam = name.loc[i]
    sym = symbol.loc[i]
    mc = marketcap.loc[i]
    pr = price.loc[i]
    sup = supply.loc[i]
    tf = tfhr.loc[i]
     

    setData = iris.cls("vizdata.vizdata")._New()

    setData.Number = str(num)

    setData.Name = str(nam)

    setData.Symbol = str(sym)

    setData.Marketcap = str(mc)

    setData.Price = str(pr)

    setData.Supply = str(sup)

    setData.TwentyFourHour = str(tf)

    setData._Save()

import irisimport plotly.expressaspximport plotly.graph_objsasgofrom plotly.offline import init_notebook_mode, iplotquery = "SELECTTOP 20 Name, Number, Marketcap, Price, Symbol, TwentyFourHourFROMvizdata.vizdata"
df = iris.sql.exec(query).dataframe().sort_values(by='price', ascending = False)

print(df)

fig = px.bar(df.head(20), x="name", y="price", barmode="group", text_auto='.3s')

fig.update_traces(textfont_size=12, textangle=0, textposition="outside", cliponaxis=False)

fig.update_layout(height=330)

fig.show()

Video de demostración

https://www.loom.com/share/4c26cd5c719a48789b6a67295db816ed

Recursos utilizados

Referencias

  1. Dash-Python: https://community.intersystems.com/post/dash-python-iris
  2. Documentación de la prueba de velocidad: https://usconfluence.iscinternal.com/x/lSBwIQ