룰의 종류 ------------------------------------- 본 절에서는 각 룰을 다음과 같은 항목으로 구분하여 설명합니다. - 룰 이름 - 필수 인자 - 선택 인자 - 상세 설명 - 주의사항 현재 데이터 프리퍼레이션에서 지원하는 룰 종류는 다음과 같습니다. - `drop`_ - `header`_ - `settype`_ - `setformat`_ - `rename`_ - `keep`_ - `delete`_ - `replace`_ - `set`_ - `derive`_ - `split`_ - `merge`_ - `extract`_ - `countpattern`_ - `nest`_ - `unnest`_ - `flatten`_ - `aggregate`_ - `pivot`_ - `unpivot`_ - `join`_ - `union`_ - `window`_ 이러한 룰과 더불어 각종 수식 함수를 제공함으로써, 데이터 프리퍼레이션은 일반적인 데이터 정제에 필요한 대부분의 기능들을 지원하고 있습니다. drop ==================================== 필수 인자 - 컬럼: 대상 컬럼 리스트 상세 설명 - 선택된 컬럼들을 삭제합니다. header =================================== 필수 인자: 컬럼명을 담고 있는 행 번호 (1-base) 상세 설명 - 지정된 행의 내용을 컬럼명으로 설정합니다. - 첫 행에 컬럼명이 있는 CSV 파일을 읽어들일 때에 유용합니다. - 특별한 설정이 없는 한, 데이터 프리퍼레이션은 자동으로 header를 수행합니다. 자동 적용된 header의 결과를 원치 않는 경우 해당 룰을 삭제하면 되지만, 보통 그런 일은 흔치 않습니다. settype ======================================= 필수 인자 - 컬럼: 대상 컬럼 리스트 - 새로운 타입: Long, Double, String, Boolean, Timestamp 중 택 1 선택 인자 - 포멧 지정: Timestamp의 경우 format string (Joda time) 상세 설명 - 선택된 컬럼들의 타입을 바꿉니다. - Type mismatch가 발생해도 룰은 성공하며, type mismatch는 이후 따로 해결해주어야 합니다. setformat ======================================== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 포멧 지정: Jodatime의 포맷 스트링 상세 설명 - Timestamp 컬럼의 화면 표시 형식을 바꿉니다. - 대상 컬럼이 반드시 Timestamp 타입이어야 합니다. 주의사항 - 포멧 지정 입력창은 아래처럼 입력에 따라 제시되는 리스트가 변합니다. 원하는 포멧을 앞에서부터 치다보면 리스트에 나오는 후보가 점점 좁혀집니다. .. figure:: /_static/img/discovery/part07/rule_kinds_setformat_1.png rename ======================================== 필수 인자 - 컬럼: 대상 컬럼 (1개) - 새로운 컬럼 이름: 새로운 이름 상세 설명 - 선택된 컬럼의 이름을 변경합니다. - 2개 이상의 컬럼들에 대해 한번에 rename을 수행하고자 할 때엔 하단 명령 입력창에 있는 **전체 컬럼 변경** 버튼을 클릭하면 다음과 같은 팝업창이 뜹니다. .. figure:: /_static/img/discovery/part07/rule_kinds_rename_1.png keep ============ 필수 인자 - 조건: Boolean이 결과로 나오는 조건식 상세 설명 - 조건식을 참으로 하는 행만 남기고 나머지 행을 지웁니다. .. figure:: /_static/img/discovery/part07/rule_kinds_keep_1.png delete ============ 필수 인자 - 조건: Boolean이 결과로 나오는 조건식 상세 설명 - 조건식을 참으로 하는 행을 모두 지웁니다. `keep`_\과 정반대로 동작합니다. replace =================================== .. figure:: /_static/img/discovery/part07/rule_kinds_replace_1.png 필수 인자 - 컬럼: 대상 컬럼 리스트 - 패턴: 갈아치울 대상 문자열 패턴 - 상수 문자열인 경우: ``'``\로 감싸져 있는 경우 (``'seoul'``, ``'서울'``, ``'서울 특별시'`` 등) - 정규식인 경우: ``/``\로 감싸져 있는 경우 (``/[ ,_]+/``, ``/\s+$/`` 등) - 새로운 값: 새롭게 놓일 문자열 수식 - 상수 문자열 - 정규식의 그룹을 이용한 문자열 수식: ``$1_$2_$3`` 등 선택 인자 - 다음 문자 사이 무시: 이 안에 입력된 문자 사이 내용에 대해서는 치환을 하지 않습니다. - 모든 항목 일치 여부: 단어의 모든 문자가 일치해야하는지 여부 - 대소문자 구분 무시: 대소문자를 동일하게 취급할지 여부 상세 설명 - 선택된 컬럼들에 대하여, 문자열 변환을 수행합니다. 주의사항 - **새로운 값**\에는 ``'``\이나 ``/``\를 사용하지 않습니다. - **새로운 값**\에 다른 컬럼의 값을 이용할 수 없습니다. replace는 순수히 해당 컬럼 내용안에서의 문자열 변환입니다. (cf. `set`_ 룰) set ======================================== .. figure:: /_static/img/discovery/part07/rule_kinds_set_1.png 필수 인자 - 컬럼: 대상 컬럼 리스트 - 수식: 대상 컬럼의 값이 될 수식. 다른 컬럼값을 참조할 수 있습니다. (cf. `replace`_ 룰) - 여러 컬럼을 대상으로 하는 경우, ``$col``\이라고 쓰면 각 컬럼에 대해 변환을 할 때, 그 대상 컬럼을 가리키도록 치환됩니다. - 즉, ``column1``, ``column2``\에 대해 set 명령을 사용하는 경우, ``column1``\에 대해 변환을 할 때엔 ``$col``\이 ``column1``\이 되고, ``column2``\에 대해 변환을 할 때엔 ``$col``\이 ``column2``\가 됩니다. 선택 인자 - 다음 조건에서만 수행 - 이 조건을 만족하는 행에 대해서만 set 룰을 적용합니다. - SQL문에서 ``WHERE``\과 같다고 생각하면 됩니다. 상세 설명 - 해당 컬럼의 값을 주어진 수식의 결과값으로 대체합니다. - 복잡한 수식을 사용하는 경우 **고급 편집기**\를 클릭하면 다음과 같은 팝업창이 뜹니다. .. figure:: /_static/img/discovery/part07/rule_kinds_set_2.png **고급 편집기**\를 활용하면 컬럼의 리스트와 함수의 리스트 및 각 설명, 예시를 보면서 넓은 창에서 수식을 편집할 수 있고, 실제로 룰을 실행하기 전에 수식의 유효성을 체크해볼 수 있습니다. derive ============== 필수 인자 - 수식: 새로운 컬럼의 값이 될 수식. `set`_ 룰과 마찬가지로 다른 컬럼값을 참조할 수 있습니다. - 새로운 컬럼 이름 상세 설명 - `set`_ 룰과 비슷하지만, 어떤 컬럼의 값을 대체하는 것이 아니라 새로운 컬럼을 만들어냅니다. 주의사항 - 수식에 등장하는 컬럼 중에 제일 마지막 컬럼 뒤로 삽입됩니다. split ============== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 패턴: split의 기준이 되는 문자열 수식. `replace`_ 룰과 같이 정규식을 허용합니다. - 횟수: 몇 개의 컬럼으로 나눌 것인지 여부입니다. 상세 설명 - 각 행에 대해 주어진 **횟수** - 1 만큼 split을 합니다. - 컬럼 내용에 패턴이 더 이상 없을 경우 `null` 값을 가진 컬럼을 만들어냅니다. 주의사항 - **횟수**\에 해당하는 개수의 컬럼이 생기게 된다는 것에 유의하세요. merge ============== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 구분자: 컬럼들을 이을 상수 문자열 - 새로운 컬럼 이름 상세 설명 - 대상 컬럼들을 **구분자**\로 이어서 새로운 컬럼을 만듭니다. 주의사항 - `replace`_ 룰도 마찬가지지만, ``'`` 로 감싸는 것은 생략할 수 있습니다. 즉, ``/`` 로도, ``'`` 로도 감싸지지 않는 문자열이 입력되었을 시, 알아서 ``'`` 로 감싸서 전달되게 되어있습니다. extract ============== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 패턴: 추출할 문자열 패턴. `replace`_ 룰과 마찬가지로 정규식을 허용합니다. - 횟수: 추출할 횟수 선택 인자 - 다음 문자 사이 무시: 이 안에 입력된 문자 사이 내용에 대해서는 치환을 하지 않습니다. - 대소문자 구분 무시: 대소문자를 동일하게 취급할지 여부 상세 설명 - 패턴에 매치되는 내용으로 새로운 컬럼을 만듭니다. 주의사항 - 여러 개의 대상 컬럼이 있는 경우, 추출의 결과는 각 컬럼의 뒤로 붙습니다. countpattern ============== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 패턴: 찾아낼 문자열 패턴. `replace`_ 룰과 마찬가지로 정규식을 허용합니다. 선택 인자 - 다음 문자 사이 무시: 이 안에 입력된 문자 사이 내용에 대해서는 치환을 하지 않습니다. - 대소문자 구분 무시: 대소문자를 동일하게 취급할지 여부 상세 설명 - 패턴에 매치되는 내용이 몇 군데에 있는지 세어서, 그 숫자로 새 컬럼을 만듭니다. - `extract`_\와 상당히 비슷합니다. 내용을 추출하는 것이 아니라, 그 숫자를 세는 것만 다를 뿐입니다. 주의사항 - 여러 개의 대상 컬럼이 있는 경우, 추출의 결과는 각각 컬럼의 뒤로 붙습니다. nest ============== 필수 인자 - 컬럼: 대상 컬럼 리스트 - 타입: Map 또는 Array - 새로운 컬럼 이름 상세 설명 - 대상 컬럼을 주어진 타입으로 묶습니다. - 다음은 각각 Array, Map으로 묶여진 경우입니다. .. figure:: /_static/img/discovery/part07/rule_kinds_nest_1.png unnest ============== .. figure:: /_static/img/discovery/part07/rule_kinds_unnest_1.png 필수 인자 - 컬럼: 대상 컬럼 (1개) - 선택할 요소: Array의 경우 *0-base* index, Map의 경우 key값 상세 설명 - Array 또는 Map에서 지정된 요소를 빼서 새 컬럼으로 만듭니다. 주의사항 - 대상 컬럼은 반드시 Array 또는 Map 타입이어야 합니다. flatten ============== 필수 인자 - 컬럼: 대상 컬럼 (1개) 상세 설명 - Array의 각각 원소를 해당 컬럼의 값으로 삼는 행을 만들어냅니다. 주의사항 - 대상 컬럼은 반드시 Array 타입이어야 합니다. .. figure:: /_static/img/discovery/part07/rule_kinds_flatten_1.png 위와 같이 Array 컬럼에 4개의 원소가 있는 경우, 각 원소의 값에 대해 1개씩 행이 생깁니다. 이 때 대상 Array 컬럼을 제외한 모든 컬럼들의 값은 동일하게 됩니다. .. figure:: /_static/img/discovery/part07/rule_kinds_flatten_2.png aggregate ================ .. figure:: /_static/img/discovery/part07/rule_kinds_aggregate_1.png 필수 인자 - 수식: Aggregation 함수 리스트 - 그룹화 기준: Group By에 쓰일 컬럼 리스트 상세 설명 - 그룹화 기준 컬럼들 각 조합에 대해 Group By 연산을 수행한 결과를 새로운 컬럼으로 추가합니다. - 각 수식 당 한 컬럼씩 생깁니다. 예를 들어, 평균값과 카운트를 수식으로 지정하였을 경우, 2개의 컬럼이 생깁니다. - 현재 지원하는 Aggregation 함수는 다음과 같습니다. - count() - sum(*colname*) - avg(*colname*) - min(*colname*) - max(*colname*) 주의사항 - 샘플링된 결과에 대해서만 연산을 수행합니다. 때문에 전체 데이터에 대한 결과, 즉 스냅샷은 달라질 수 있습니다. - count함수 사용시 ``()`` 를 꼭 붙여야 하는 것에 유의하십시오. - count(*colname*)은 현재 지원하지 않습니다. .. figure:: /_static/img/discovery/part07/rule_kinds_aggregate_2.png pivot ============== .. figure:: /_static/img/discovery/part07/rule_kinds_pivot_1.png 필수 인자 - 컬럼: 피봇 대상 컬럼 리스트 - 수식: 컬럼의 값이 될 수식 리스트 (Aggregation 함수만 가능) - 그룹화 기준: Group By에 쓰일 컬럼 리스트 상세 설명 - 대상 컬럼들과 그룹화 기준 컬럼들 각 조합에 대해 Group By 연산을 수행하고, 그 결과를 새로운 컬럼값으로 하는 데이터셋을 만듭니다. - 각 수식에 대해 컬럼 세트들이 생깁니다. 예를 들어, 평균값과 카운트를 수식으로 지정하였을 경우, 피봇 대상 컬럼들의 값이 결국 10개의 그룹으로 나뉠 경우, 20개의 컬럼이 생겨나게 됩니다. 주의사항 - 최소 2개의 컬럼에 대한 복합 Group By를 할 때에 사용됩니다. (피봇 대상 1개, 그룹화 기준 1개) - 일반적으로 컬럼명이 길어지기 때문에, 뒤이어 **전체 rename**\을 필요로하는 경우가 많습니다. .. figure:: /_static/img/discovery/part07/rule_kinds_pivot_2.png unpivot ============== .. figure:: /_static/img/discovery/part07/rule_kinds_unpivot_1.png 필수 인자 - 컬럼: 컬럼값으로 내릴 대상 컬럼들 리스트 - 그룹 수: 결과 컬럼 숫자 (기본적으로 1) 상세 설명 - 선택된 컬럼들에 대해 컬럼 이름과 컬럼의 값을 내용으로 하는 컬럼 2개를 만듭니다. (그룹 수가 1인 경우) - 그룹 수가 선택된 컬럼 숫자와 같은 경우, 각 컬럼 이름과 값에 해당하는 컬럼들을 만듭니다. 즉, 10개 컬럼에 대해 그룹 수 10으로 unpivot을 하면, 총 20개 컬럼이 생깁니다. 주의사항 - 그룹 수가 대상 컬럼 수의 약수인 경우는 곧 지원할 예정입니다. <그룹 수가 1인 경우> .. figure:: /_static/img/discovery/part07/rule_kinds_unpivot_2.png <그룹 수가 컬럼 수와 같은 경우> .. figure:: /_static/img/discovery/part07/rule_kinds_unpivot_3.png join ================= .. figure:: /_static/img/discovery/part07/rule_kinds_join_1.png join은 다른 룰들과는 달리, 별도의 팝업창을 갖습니다. 필수 인자 (팝업에서 선택하거나 입력) - join 대상 데이터셋: 같은 데이터플로우 내의 Wrangled 데이터셋 - join 결과로 나올 컬럼들 (토글) - join 키: 여러 개 입력 가능 - join 타입: 현재 내부조인만 지원 상세 설명 - 대상 데이터셋과 연결해서 컬럼들을 만들어 냅니다. - 기본적으로 관계형 데이터베이스의 ``join``\과 같습니다. - **결과보기** 버튼으로 실제 룰적용 전에 join 결과를 볼 수 있습니다. 주의사항 - 결과로 나올 컬럼에 join 키가 꼭 포함되어있어야 합니다. .. figure:: /_static/img/discovery/part07/rule_kinds_join_2.png union ================= .. figure:: /_static/img/discovery/part07/rule_kinds_union_1.png union 역시 `join`_\처럼 별도의 팝업창을 갖습니다. 필수 인자(팝업에서 선택) - union 대상 데이터셋: 다수 선택 가능 상세 설명 - 지정된 데이터셋의 내용도 함께 처리합니다. - 기본적으로 관계형 데이터베이스의 ``union all``\과 같습니다. 주의사항 - 대상 데이터셋은 union을 수행하는 데이터셋과 컬럼명과 타입, 그리고 컬럼 개수가 일치해야합니다. .. figure:: /_static/img/discovery/part07/rule_kinds_union_2.png window ================= .. figure:: /_static/img/discovery/part07/rule_kinds_window_1.png .. figure:: /_static/img/discovery/part07/rule_kinds_window_2.png 필수 인자 - 수식: Window 함수 리스트 - 그룹화 기준: 이 그룹안에서 행의 순서가 만들어짐. 없으면 그냥 전체적으로 정렬 기준 적용 - 정렬 기준: 이 컬럼의 순서로 전후 관계가 만들어짐. 없으면 그냥 데이터가 입력되는 순서 상세 설명 - 앞의 행, 뒤의 행의 내용을 토대로 수식을 계산해서 컬럼값을 생성합니다. - 그룹화 기준내에서 정렬 기준으로 순서를 정합니다. - 예를 들어, 위의 예시에서는 주(state)별로 앞뒤 3개씩의 행을 포함해서 평균값을 계산합니다. - 화면상에서는 바로 앞에 보인다고 해도, 주가 같지 않으면 더 앞의 행을 보게됩니다. - 현재 지원하는 Window 함수는 다음과 같습니다. - row_number() - lead(*colname*, *int*) - lag(*colname*, *int*) - rolling_sum(*colname*, *int*, *int*) - rolling_avg(*colname*, *int*, *int*) - Window 함수와 더불어 Aggregation 함수도 사용할 수 있습니다. 주의사항 - Window 함수 사용시, 인자 수가 부족하거나 한 상황에 대해 적절한 에러메시지가 제공되지 않습니다. 유의하시기 바랍니다.