Newer
Older
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# Equal-Depth-Binning Operator
---
## Operator 설명
- Equal-Depth-Binning Operator는 데이터를 bins의 개수만큼 그룹으로 나누고 각 그룹에는 대략적으로 동일한 수의 데이터들이 포함된다.
- Data:0, 4, 12, 16, 16, 18, 24, 26, 28이고 Bin의 개수가 3일 경우.
- Bin1: 0, 4, 12 [-,14]
Bin2: 16, 16, 18 [14,21]
Bin3: 24, 26, 28 [21,+]
<img src="./images/4.1.1.3.Eqaul_depth.png">
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
## Operator 파라미터 설명
- selectedColumnId: Equal-depth-binning을 수행 할 column ID (repeated)
- numberOfBins: 생성할 Bins의 개수 (required)
- outputType: 출력할 타입. Enum(NEW_COLUMN, VALUE_CHANGE) (required)
## 작동순서
1. 입력 DataFrame의 유효성 검사를 진행한다. (Numeric Columns, Bins 유효성 검사)
2. 입력 DataFrame의 선택된 칼럼을 정렬한다. (asc)
3. Bins 안에 들어가야하는 이상적인 개수를 미리 설정한다.
4. Bins 구간을 설정한다. ((현재 데이터 – 이전데이터) / 2를 하여 구간 간격을 조율함)
5. 선택된 칼럼의 데이터를 범위 형태로 변환을 한다.
6. 출력 DataFrame을 생성한다.
## Operator 모듈 테스트 결과
### 입력 데이터
|original_data|index|
|:--:|:---:|
| 0| 0|
| 4| 1|
| 12| 2|
| 16| 3|
| 16| 4|
| 18| 5|
| 24| 6|
| 26| 7|
| 28| 8|
### 결과 데이터
|original_data| result|
|:---:|:---:|:---:|
| 0| range1[-Infinity-...|
| 4| range1[-Infinity-...|
| 12| range1[-Infinity-...|
| 16| range2[14.000000-...|
| 16| range2[14.000000-...|
| 18| range2[14.000000-...|
| 24| range3[21.000000-...|
| 26| range3[21.000000-...|
| 28| range3[21.000000-...|
- 생성할 bins 수는 3개로 설정하였다.
- 결과 DataFrame에서 3개의 bins(range1,range2,range3)에 같은 개수의 data들이 할당 되었음을 알 수 있고 parameter는 다음과 같이 설정하였다.
```scala
val equalDepthBinningInfo = EqualDepthBinningInfo.newBuilder()
.addSelectedColumnId(0)
.setNumberOfBins(3)
.setOutputType(OutputType.NEW_COLUMN)
.build
```