quantize_fl()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
A função quantize_fl()
é uma UDF (função definida pelo usuário) que compartimenta colunas métricas. Ele quantifica colunas métricas em rótulos categóricos, com base no algoritmo K-Means.
Pré-requisitos
- O plug-in Python deve ser habilitado no cluster. Isso é necessário para o Python embutido usado na função.
- O plug-in Python deve estar habilitado no banco de dados. Isso é necessário para o Python embutido usado na função.
Sintaxe
T | invoke quantize_fl(
,
num_bins in_cols,
out_cols [,
rótulos ])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
num_bins | int |
✔️ | O número necessário de compartimentos. |
in_cols | dynamic |
✔️ | Uma matriz que contém os nomes das colunas a serem quantizadas. |
out_cols | dynamic |
✔️ | Uma matriz que contém os nomes das respectivas colunas de saída para os valores compartimentados. |
rótulos | dynamic |
Uma matriz que contém os nomes dos rótulos. Se não for especificado, os intervalos de compartimentos serão usados. |
Definição de função
Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:
Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.
Importante
Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de quantize_fl()
, consulte Exemplo.
let quantize_fl=(tbl:(*), num_bins:int, in_cols:dynamic, out_cols:dynamic, labels:dynamic=dynamic(null))
{
let kwargs = bag_pack('num_bins', num_bins, 'in_cols', in_cols, 'out_cols', out_cols, 'labels', labels);
let code = ```if 1:
from sklearn.preprocessing import KBinsDiscretizer
num_bins = kargs["num_bins"]
in_cols = kargs["in_cols"]
out_cols = kargs["out_cols"]
labels = kargs["labels"]
result = df
binner = KBinsDiscretizer(n_bins=num_bins, encode="ordinal", strategy="kmeans")
df_in = df[in_cols]
bdata = binner.fit_transform(df_in)
if labels is None:
for i in range(len(out_cols)): # loop on each column and convert it to binned labels
ii = np.round(binner.bin_edges_[i], 3)
labels = [str(ii[j-1]) + '-' + str(ii[j]) for j in range(1, num_bins+1)]
result.loc[:,out_cols[i]] = np.take(labels, bdata[:, i].astype(int))
else:
result[out_cols] = np.take(labels, bdata.astype(int))
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
// Write your query to use the function here.
Exemplo
O exemplo a seguir usa o operador invoke para executar a função.
Para usar uma função definida por consulta, invoque-a após a definição da função inserida.
let quantize_fl=(tbl:(*), num_bins:int, in_cols:dynamic, out_cols:dynamic, labels:dynamic=dynamic(null))
{
let kwargs = bag_pack('num_bins', num_bins, 'in_cols', in_cols, 'out_cols', out_cols, 'labels', labels);
let code = ```if 1:
from sklearn.preprocessing import KBinsDiscretizer
num_bins = kargs["num_bins"]
in_cols = kargs["in_cols"]
out_cols = kargs["out_cols"]
labels = kargs["labels"]
result = df
binner = KBinsDiscretizer(n_bins=num_bins, encode="ordinal", strategy="kmeans")
df_in = df[in_cols]
bdata = binner.fit_transform(df_in)
if labels is None:
for i in range(len(out_cols)): # loop on each column and convert it to binned labels
ii = np.round(binner.bin_edges_[i], 3)
labels = [str(ii[j-1]) + '-' + str(ii[j]) for j in range(1, num_bins+1)]
result.loc[:,out_cols[i]] = np.take(labels, bdata[:, i].astype(int))
else:
result[out_cols] = np.take(labels, bdata.astype(int))
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
//
union
(range x from 1 to 5 step 1),
(range x from 10 to 15 step 1),
(range x from 20 to 25 step 1)
| extend x_label='', x_bin=''
| invoke quantize_fl(3, pack_array('x'), pack_array('x_label'), pack_array('Low', 'Med', 'High'))
| invoke quantize_fl(3, pack_array('x'), pack_array('x_bin'), dynamic(null))
Saída
x | x_label | x_bin |
---|---|---|
1 | Baixo | 1.0-7.75 |
2 | Baixo | 1.0-7.75 |
3 | Baixo | 1.0-7.75 |
4 | Baixo | 1.0-7.75 |
5 | Baixo | 1.0-7.75 |
20 | Alto | 17.5-25.0 |
21 | Alto | 17.5-25.0 |
22 | Alto | 17.5-25.0 |
23 | Alto | 17.5-25.0 |
24 | Alto | 17.5-25.0 |
25 | Alto | 17.5-25.0 |
10 | Med | 7.75-17.5 |
11 | Med | 7.75-17.5 |
12 | Med | 7.75-17.5 |
13 | Med | 7.75-17.5 |
14 | Med | 7.75-17.5 |
15 | Med | 7.75-17.5 |