Python

Essa tarefa te permite rodar scripts em linguagem python, a versão utilizada pode ser escolhida de acordo com as versões disponibilizadas pelo seu administrador Gaio.

Essa tarefa te permite rodar scripts em linguagem python, a versão utilizada pode ser escolhida de acordo com as versões disponibilizadas pelo seu administrador Gaio. As bibliotecas podem ser instaladas e administradas por desenvolvedores Gaio. Além disso fornecemos uma classe chamada bucket que te permite extrair e exportar dados que estão no banco de dados clickhouse que sua aplicação possui permissão.

Limite de Memória A tarefa de Python no Gaio está limitada por padrão com no máximo 80% da memória da máquina, caso exceda esse limite te retornará um erro de limite de memória.

Faremos uma simples navegação pela interface da tarefa, e após isso desenvolveremos um script simples para servir como exemplo.

Para utilizar o Python no Gaio, basta acessar o menu Tarefas e escolher Python.

A primeira página é a principal da tarefa. Nela, à esquerda, temos o espaço em tema azul para escrever o script, enquanto à direita, em tema escuro, está localizado o console, onde podemos visualizar o output do script. Para executar o seu script, basta clicar no botão "executar" e o resultado será exibido no console.

A segunda página é o seu diretório padrão para salvar os arquivos gerados no script, como por exemplo arquivos jpeg, png, mp4, pkl, entre outros. O nome dessa pasta é assets.

Existem outras três pastas que você pode utilizar através da tarefa python, que são as pastas conteúdo, inputs e output da sua aplicação. O caminho está guardado nas seguintes variaveis: app_inputs, app_outputs e app_assets.

Segue um exemplo de como construir seu caminho para a pasta de outputs para você pode realizar o download da imagem gerada.

path = app_outputs + "/imagem_name.png"

Na caixa de texto, você deve escrever em cada linha o nome correto da biblioteca que deseja instalar (apenas o nome, sem mais nenhum caractere, conforme mostrado na imagem abaixo). Após escolher a versão do Python e as bibliotecas, basta clicar no botão "Instalar" para que suas configurações sejam executadas.

Como dito anteriormente possuímos uma classe chamada bucket, que realiza a conexão com o clickhouse de forma encapsulada e possuem os metodos query_df, command, insert_df e create_df.

Exemplos

Função que transforma um select no clickhouse em um dataframe pandas no python.

df = bucket.query_df('select colunaA, colunaB from tabela where colunaB = 'ativo')

Função que faz uma copia de uma tabela clickhouse indicada para um dataframe pandas.

df = bucket.select_df('nova_tabela')

Na primeira linha temos a função que cria uma tabela no clickhouse que seja similar ao seu dataframe pandas, na segunda linha inserimos os dados do seu dataframe pandas na tabela clickhouse.

bucket.create_df('nova_tabela', df)
bucket.insert_df('nova_tabela', df)

Note que para realizar a função insert_df precisamos que seu dataframe pandas seja similar a sua tabela clickhouse.

Exemplo Prático

Nesse exemplo prático vamos passar pela parte de trazer os dados para o python, realizar um agrupamento, salvar uma imagem em formato png, salvar o arquivo do modelo, e criar e salvar a tabela final no clickhouse.

Primeiramente vamos importar as bibliotecas que serão utilizadas

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import joblib

Para esse exemplo utilizaremos a famosa tabela iris disponibilizado por varias bibliotecas como a scikit-learn. Essa tabela está no banco de dados clickhouse dentro do Gaio.

Vamos utilizar a função select_df para trazer para o python, e após isso aplicar o algoritmo kmeans disponibilizado pela biblioteca scikit-learn.

# Trazer dados para o python
data = bucket.select_df('tabela_iris')

# Aplicar o algoritmo de K-Means com 3 clusters (número escolhido arbitrariamente)
kmeans = KMeans(n_clusters=3)
data['cluster'] = kmeans.fit_predict(data)

# Avaliar o resultado - por exemplo, visualizando as médias de cada cluster
cluster_means = data.groupby('cluster').mean()

Nesse próximo passo vamos fazer uma visualização dos grupos encontrados pelo modelo e salvar a figura na pasta assets.

# Plotar os clusters em um gráfico (considerando apenas as duas primeiras colunas)
plt.scatter(data['sepal_length_cm_'], data['sepal_width_cm_'], c=data['cluster'], cmap='viridis')
plt.xlabel('sepal_length_cm_')
plt.ylabel('sepal_width_cm_')

# Salvar o gráfico em formato png
plt.savefig('assets/cluster_iris.png')

Agora vamos salvar esse modelo para poder ser reaproveitado em outros momentos, para isso vamos utilizar a biblioteca joblib.

# Salvar o modelo
joblib.dump(kmeans, 'assets/modelo_kmeans_iris.joblib')

Agora nos resta enviar o dataframe com a nova coluna gerada pelo modelo para o clickhouse para poder ser utilizadas por outras tarefas Gaio. Para isso vamos utilizar create_df e insert_df.

# Criar uma tabela no clickhouse similar ao seu dataframe
bucket.create_df('tmp_iris_clusterizada', data)

# Inserir os dados do seu dataframe em uma tabela clickhouse
bucket.insert_df('tmp_iris_clusterizada', data)

Last updated