---
html:
toc: true
offline: true
export_on_save:
html: true
---
# Equal-Width-Binning Operator
---
## Operator 설명
- 동일한 범위의 Bins를 n개 만큼 생성하여 범위에 속하는 각 데이터를 범위형태로 표현하게 된다.
- Data:0, 4, 12, 16, 16, 18, 24, 26, 28이고 Bin의 개수가 3일 경우.
- Bin1: 0, 4 [-,10]
Bin2: 12, 16, 16, 18 [10,20]
Bin3: 24, 26, 28 [20,+]
## Operator 파라미터 설명
- selectedColumnId: Equal-width-binning을 수행 할 column ID (repeated)
- numberOfBins: 생성 할 bins의 개수 (required)
- outputType: 수행 후 출력할 타입. Enum(NEW_COLUMN, VALUE_CHANGE) (required)
##작동순서
1. 입력 DataFrame의 유효성 검사를 진행한다. (Numeric Columns, Bins 유효성 검사)
2. Bins 구간을 설정한다. (Bins 간격을 구하는 방법은 해당 칼럼의 데이터의 (최대값 – 최소값) / Bins의 개수)
3. 선택된 칼럼의 데이터를 범위 형태로 변환을 한다.
4. 출력 DataFrame을 생성한다.
## Operator 모듈 테스트 결과
### 입력 데이터
|original_data|index|
:--:|:---:|
| 2| 0|
| 3| 1|
| 4| 2|
| 5| 3|
| 6| 4|
| 7| 5|
| 8| 6|
| 9| 7|
| 10| 8|
| 12| 9|
| 14| 10|
### 결과 데이터
|original_data| result|
|:---:|:---:|:---:|
| 2| range1[-Infinity-...|
| 3| range1[-Infinity-...|
| 4| range1[-Infinity-...|
| 5| range2[5.000000-8...|
| 6| range2[5.000000-8...|
| 7| range2[5.000000-8...|
| 8| range3[8.000000-11...|
| 9| range3[8.000000-11...|
| 10| range3[8.000000-11...|
| 12| range4[11.000000-...|
| 14| range4[11.000000-...|
- 생성할 Bins 수를 4개로 설정하였다.
- 결과 DataFrame을 보면 동일한 크기의 4개의 bins(range1,range2,range3,range4)에 각 data들이 할당 되었음을 알 수 있고 parameter는 다음과 같이 설정하였다.
```scala
val equalWidthBinningInfo = EqualWidthBinningInfo.newBuilder()
.addSelectedColumnId(0)
.setNumberOfBins(4)
.setOutputType(OutputType.NEW_COLUMN)
.build
```