---
html:
toc: true
offline: true
export_on_save:
html: true
---
# Missing Value Impute Operator
---
## Operator 설명
- 데이터 공백 처리기(MVI)는 사용자가 원하는 범위, MVI method, drop 조건 등을 설정하면, 입력 DataFrame에 대해 데이터 공백을 채우는 동작을 수행한 후, 결과 DataFrame을 생성한다.
## Operator 파라미터 설명
- scope: missing value imputation을 적용할 범위. Enum(SCOPE_ALL, SCOPE_SELECTED) (required)
- selectedColumnId: Missing Value Imputation을 수행 할 column ID.SCOPE_ALL일 경우 무시 (repeated)
- method: 적용할 방법. Enum(IM, SPECIFIC_VALUE, MEDIAN, MEAN) (required)
- how: 삭제 조건. Enum(HOW_ANY, HOW_ALL) (required)
'HOW_ANY': null값이 포함된 행이 삭제된다.
'HOW_ALL': 모든 column이 null인 경우에만 행을 삭제합니다.
- subParam: 특정 값을 채우는 option. (repeated)
Ex: {numeric, 0}
|filed|value|설명|
|:---:|:---:|:---:|
| subParam.key | numeric | 특정 숫자로 채우는 방법 선택 |
| subParam.value | 0 | missing value를 0의 값으로 채움|
##작동 순서
1. 입력 DataFrame 및 Protobuffer 입력 파라미터 유효성 검사를 진행한다.
2. Spark ml 및 DataFrame API를 이용하여 MVI 알고리즘 동작한다.
3. 출력 DataFrame을 생성한다.
## Operator 모듈 테스트 결과
### 입력 데이터
-0.2947324415 | -0.1463210702 | | -0.3093645485 | -0.3841973244 | -0.3511705686 | -0.1647157191 |
-0.2683946488 | -0.1998327759 | -0.1655518395 | -0.2826086957 | -0.3883779264 | -0.3319397993 | -0.1730769231 |
-0.2880434783 | | -0.2566889632 | | -0.3850334448 | -0.3704013378 | -0.1693143813 |
-0.3131270903 | -0.2215719064 | -0.1580267559 | -0.2408026756 | -0.3683110368 | | -0.2274247492 |
-0.3152173913 | -0.1421404682 | -0.1484113712 | -0.1605351171 | -0.3386287625 | -0.3465719064 | |
-0.2683946488 | -0.1998327759 | -0.1655518395 | -0.2826086957 | | -0.3319397993 | -0.1730769231 |
-0.2880434783 | -0.2186454849 | | -0.2491638796 | -0.3850334448 | | -0.1693143813 |
| -0.2215719064 | -0.1580267559 | -0.2408026756 | -0.3683110368 | -0.3837792642 | |
-0.3152173913 | -0.1421404682 | -0.1484113712 | -0.1605351171 | -0.3386287625 | -0.3465719064 | -0.1772575251 |
-0.3110367893 | -0.1906354515 | -0.2495819398 | | -0.3595317726 | -0.3298494983 | -0.1496655518 |
### 결과 데이터
-0.2947324415 | -0.1463210702 | 0 | -0.3093645485 | -0.3841973244 | -0.3511705686 | -0.1647157191 |
-0.2683946488 | -0.1998327759 | -0.1655518395 | -0.2826086957 | -0.3883779264 | -0.3319397993 | -0.1730769231 |
-0.2880434783 | 0 | -0.2566889632 | 0 | -0.3850334448 | -0.3704013378 | -0.1693143813 |
-0.3131270903 | -0.2215719064 | -0.1580267559 | -0.2408026756 | -0.3683110368 | 0 | -0.2274247492 |
-0.3152173913 | -0.1421404682 | -0.1484113712 | -0.1605351171 | -0.3386287625 | -0.3465719064 | 0 |
-0.2683946488 | -0.1998327759 | -0.1655518395 | -0.2826086957 | 0 | -0.3319397993 | -0.1730769231 |
-0.2880434783 | -0.2186454849 | 0 | -0.2491638796 | -0.3850334448 | 0 | -0.1693143813 |
0 | -0.2215719064 | -0.1580267559 | -0.2408026756 | -0.3683110368 | -0.3837792642 | 0 |
-0.3152173913 | -0.1421404682 | -0.1484113712 | -0.1605351171 | -0.3386287625 | -0.3465719064 | -0.1772575251 |
-0.3110367893 | -0.1906354515 | -0.2495819398 | 0 | -0.3595317726 | -0.3298494983 | -0.1496655518 |
- DataFrame의 missing value를 원하는 특정 값으로 채울 수 있고 예제에서는 0 값으로 설정하였다.
- 입력 DataFrame에서 missing value(빈 공간)가 결과 DataFrame에서는 0 값으로 채워지는 것을 알 수 있다.
- parameter는 다음과 같이 설정하였다.
```scala
val mviInfo = MissingValueImputationInfo.newBuilder()
.setScope(MissingValueImputationInfo.Scope.SCOPE_ALL)
.addSelectedColumnId(1)
.setMethod(MissingValueImputationInfo.Method.SPECIFIC_VALUE)
.setHow(MissingValueImputationInfo.How.HOW_ANY)
.addSubParam(
SubParameter.newBuilder
.setKey("numeric")
.setValue("0")
.build
)
.build
```