4.1.1.10.MissingValueImpute_manual.md 5.29 KB
Newer Older
HooYoungAhn's avatar
HooYoungAhn committed
---
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 모듈 테스트 결과

### 입력 데이터
<table style="text-align:center; font-size:10pt;">
<tr>
  <td>-0.2947324415</td><td>-0.1463210702</td><td> </td> <td>-0.3093645485</td><td>-0.3841973244</td><td>-0.3511705686</td><td>-0.1647157191</td>
</tr>
<tr>
  <td>-0.2683946488</td><td>-0.1998327759</td><td>-0.1655518395</td><td>-0.2826086957</td><td>-0.3883779264</td><td>-0.3319397993</td><td>-0.1730769231</td>
</tr>
<tr>
  <td>-0.2880434783</td><td></td><td>-0.2566889632</td><td></td><td>-0.3850334448</td><td>-0.3704013378</td><td>-0.1693143813</td>
</tr>
<tr>
  <td>-0.3131270903</td><td>-0.2215719064</td><td>-0.1580267559</td><td>-0.2408026756</td><td>-0.3683110368</td><td></td><td>-0.2274247492</td>
</tr>
<tr>
  <td>-0.3152173913</td><td>-0.1421404682</td><td>-0.1484113712</td><td>-0.1605351171</td><td>-0.3386287625</td><td>-0.3465719064</td><td></td>
</tr>
<tr>
  <td>-0.2683946488</td><td>-0.1998327759</td><td>-0.1655518395</td><td>-0.2826086957</td><td></td><td>-0.3319397993</td><td>-0.1730769231</td>
</tr>
<tr>
  <td>-0.2880434783</td><td>-0.2186454849</td><td></td><td>-0.2491638796</td><td>-0.3850334448</td><td></td><td>-0.1693143813</td>
</tr>
<tr>
  <td></td><td>-0.2215719064</td><td>-0.1580267559</td><td>-0.2408026756</td><td>-0.3683110368</td><td>-0.3837792642</td><td></td>
</tr>
<tr>
  <td>-0.3152173913</td><td>-0.1421404682</td><td>-0.1484113712</td><td>-0.1605351171</td><td>-0.3386287625</td><td>-0.3465719064</td><td>-0.1772575251</td>
</tr>
<tr>
  <td>-0.3110367893</td><td>-0.1906354515</td><td>-0.2495819398</td><td></td><td>-0.3595317726</td><td>-0.3298494983</td><td>-0.1496655518</td>
</tr>

</table>




### 결과 데이터
<table style="text-align:center; font-size:10pt;">
<tr>
  <td>-0.2947324415</td><td>-0.1463210702</td><td><b>0</b></td> <td>-0.3093645485</td><td>-0.3841973244</td><td>-0.3511705686</td><td>-0.1647157191</td>
</tr>
<tr>
  <td>-0.2683946488</td><td>-0.1998327759</td><td>-0.1655518395</td><td>-0.2826086957</td><td>-0.3883779264</td><td>-0.3319397993</td><td>-0.1730769231</td>
</tr>
<tr>
  <td>-0.2880434783</td><td><b>0</b></td><td>-0.2566889632</td><td><b>0</b></td><td>-0.3850334448</td><td>-0.3704013378</td><td>-0.1693143813</td>
</tr>
<tr>
  <td>-0.3131270903</td><td>-0.2215719064</td><td>-0.1580267559</td><td>-0.2408026756</td><td>-0.3683110368</td><td><b>0</b></td><td>-0.2274247492</td>
</tr>
<tr>
  <td>-0.3152173913</td><td>-0.1421404682</td><td>-0.1484113712</td><td>-0.1605351171</td><td>-0.3386287625</td><td>-0.3465719064</td><td><b>0</b></td>
</tr>
<tr>
  <td>-0.2683946488</td><td>-0.1998327759</td><td>-0.1655518395</td><td>-0.2826086957</td><td><b>0</b></td><td>-0.3319397993</td><td>-0.1730769231</td>
</tr>
<tr>
  <td>-0.2880434783</td><td>-0.2186454849</td><td><b>0</b></td><td>-0.2491638796</td><td>-0.3850334448</td><td><b>0</b></td><td>-0.1693143813</td>
</tr>
<tr>
  <td><b>0</b></td><td>-0.2215719064</td><td>-0.1580267559</td><td>-0.2408026756</td><td>-0.3683110368</td><td>-0.3837792642</td><td><b>0</b></td>
</tr>
<tr>
  <td>-0.3152173913</td><td>-0.1421404682</td><td>-0.1484113712</td><td>-0.1605351171</td><td>-0.3386287625</td><td>-0.3465719064</td><td>-0.1772575251</td>
</tr>
<tr>
  <td>-0.3110367893</td><td>-0.1906354515</td><td>-0.2495819398</td><td><b>0</b></td><td>-0.3595317726</td><td>-0.3298494983</td><td>-0.1496655518</td>
</tr>
</table>

- 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
```