Estou documentando uma demonstração do InterSystems IRIS que inclui Python incorporado (embedded) e Jupyter Notebook implantados no mesmo contêiner, juntamente com uma aplicação de Python incorporado desenvolvida nesse ambiente de Jupyter Notebook.
Utilizei o contêiner Docker criado por @Bob Kuszewski como ambiente de desenvolvimento para demonstrar como uma aplicação de Python incorporado pode ser criada, capaz de enviar e recuperar dados de e para o InterSystems IRIS. A vantagem de usar este contêiner como ambiente de desenvolvimento é que se trata de um ambiente virtual com o IDE do Jupyter e o IRIS conectados e executando em paralelo. O uso desta configuração, em comparação com qualquer outra, pode ser justificado pelo teste de velocidade de ingestão e consulta de dados que realizei em várias plataformas, onde o InterSystems IRIS ofereceu a taxa mais rápida tanto de ingestão quanto de consulta de dados.
A aplicação de Python incorporado escrita no Jupyter Notebook obtém dados CSV de um catálogo de conjuntos de dados externo chamado data.world usando Pandas, e armazena os dados em uma classe do IRIS que está rodando no mesmo contêiner.
Dado que a instância do IRIS está sendo executada em um contêiner Docker, não há acesso ao Studio, por isso utilizei o VS Code para criar classes na instância do IRIS. Podemos nos conectar ao IRIS e programar em ObjectScript usando as extensões da InterSystems para Servers Manager e ObjectScript, respectivamente.
Uma vez que os dados são armazenados no IRIS, utilizei uma consulta SQL para acessá-los e salvá-los em um DataFrame.
import iris
query = "SELECT Property, Property, Property, Property, Property, FROM Namespace.Class"
iris.sql.exec(query)
Depois, utilizei o Plotly, uma biblioteca usada para visualização e análise de dados, para gerar um gráfico de barras a partir dos dados armazenados na classe do IRIS. Baseei-me no dash-python-iris para o uso da biblioteca pyplot do Python na visualização.
Código da Aplicação
import pandas as pd
df = 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 iris
for 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 iris
import plotly.express as px
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
query = "SELECT TOP 20 Name, Number, Marketcap, Price, Symbol, TwentyFourHour FROM vizdata.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()
Vídeo de Demonstração
https://www.loom.com/share/4c26cd5c719a48789b6a67295db816ed
Recursos Utilizados
- Docker
- Repositório do GitHub do contêiner:: https://github.com/intersystems-community/iris-embedded-python-venv-jupyter
- Data.World: https://data.world/chasewillden/cryptocurrency-price-by-date-2013-february-2018
- Visual Studio Code
- Pyplot
Referências
- Dash-Python: https://community.intersystems.com/post/dash-python-iris
- Documentação do teste de velocidade: https://usconfluence.iscinternal.com/x/lSBwIQ

