quantize_fl()
함수 quantize_fl()
는 메트릭 열을 bins하는 UDF(사용자 정의 함수) 입니다. K-평균 알고리즘에 따라 메트릭 열을 범주 레이블로 정량화합니다.
사전 요구 사항
- 클러스터에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
- 데이터베이스에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
Syntax
T | invoke quantize_fl(
,
num_bins,
in_colsout_cols [,
레이블 ])
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | 형식 | 필수 | Description |
---|---|---|---|
num_bins | int |
✔️ | 필요한 bin 수입니다. |
in_cols | dynamic |
✔️ | 정량화할 열의 이름을 포함하는 배열입니다. |
out_cols | dynamic |
✔️ | 범주화된 값에 대한 각 출력 열의 이름을 포함하는 배열입니다. |
레이블 | dynamic |
레이블 이름을 포함하는 배열입니다. 지정되지 않은 경우 bin 범위가 사용됩니다. |
함수 정의
코드를 쿼리 정의 함수로 포함하거나 다음과 같이 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.
다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.
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.
예제
다음 예제에서는 invoke 연산자를 사용하여 함수를 실행합니다.
쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.
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))
출력
x | x_label | x_bin |
---|---|---|
1 | 낮음 | 1.0-7.75 |
2 | 낮음 | 1.0-7.75 |
3 | 낮음 | 1.0-7.75 |
4 | 낮음 | 1.0-7.75 |
5 | 낮음 | 1.0-7.75 |
20 | 높음 | 17.5-25.0 |
21 | 높음 | 17.5-25.0 |
22 | 높음 | 17.5-25.0 |
23 | 높음 | 17.5-25.0 |
24 | 높음 | 17.5-25.0 |
25 | 높음 | 17.5-25.0 |
10 | 중간 | 7.75-17.5 |
11 | 중간 | 7.75-17.5 |
12 | 중간 | 7.75-17.5 |
13 | 중간 | 7.75-17.5 |
14 | 중간 | 7.75-17.5 |
15 | 중간 | 7.75-17.5 |
이 기능은 지원되지 않습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기