아래의 튜토리얼 내용은 dataiku academy 자료를 참고하여 제작되었습니다.
안녕하세요.
Window, Fuzzy join 레시피 활용편 입니다 : )
Window 레시피
데이터 보강과 그룹화된 계산을 수행하는 강력한 도구입니다. 이 레시피를 사용하면 데이터셋의 구조를 유지하면서 윈도우 함수를 적용하여 추가 정보를 얻을 수 있습니다. 이를 통해 데이터 분석 작업을 향상시키고 다양한 용도로 활용할 수 있습니다.
Window 레시피 기능
파티셔닝: Window 레시피를 사용하여 데이터를 그룹화할 수 있습니다. 특정 열의 값을 기준으로 데이터를 파티션화하고 각 그룹 내에서 계산을 수행할 수 있습니다.
정렬: 각 그룹 내에서 데이터를 특정 열을 기준으로 정렬할 수 있습니다. 정렬 순서에 따라 계산 결과가 달라질 수 있습니다.
윈도우 프레임: 윈도우 프레임을 정의하여 계산에 포함될 데이터의 범위를 지정할 수 있습니다. 예를 들어, 특정 시간 범위 내의 데이터만을 고려할 수 있습니다.
집계 함수: 각 그룹 내에서 원하는 집계 함수를 선택하여 계산 결과를 생성할 수 있습니다. 평균, 합계, 최대값, 최소값 등 다양한 집계 함수를 사용할 수 있습니다.
결과 열: 계산된 결과는 원래 데이터셋에 새로운 열로 추가됩니다. 이를 통해 그룹화된 계산 결과를 쉽게 확인하고 활용할 수 있습니다.
Group 레시피와 차이점
Group 레시피: Group 레시피는 데이터셋을 특정 열(그룹 키)을 기준으로 그룹화하고, 그룹 내에서 Aggregation 함수를 사용하여 계산을 수행합니다. 예를 들어, 특정 고객별로 매출액의 합계를 계산하거나, 지역별로 평균 주문량을 계산하는 등의 작업을 수행할 수 있습니다. Group 레시피를 사용하면 데이터셋의 차원이 변경되어 각 그룹당 하나의 행이 생성됩니다.
Window 레시피: Window 레시피는 그룹화된 계산을 수행하는 동시에 원래 데이터셋의 구조를 유지합니다. 특정 열(파티션 키)을 기준으로 데이터셋을 그룹화하고, 그룹 내에서 정렬된 순서를 기준으로 계산을 수행합니다. 예를 들어, 각 고객의 첫 번째 주문인지, 이전 주문과의 차이, 고객의 이동 평균 주문량 등을 계산할 수 있습니다. Window 레시피를 사용하면 새로운 열이 원래 데이터셋에 추가되며, 각 행은 개별적인 계산 결과를 포함하게 됩니다.
요약하자면, Group 레시피는 그룹화된 결과를 요약된 형태로 반환하며, Window 레시피는 그룹화된 계산 결과를 원래 데이터셋에 추가하여 보존합니다. Window 레시피는 그룹 간 비교나 시계열 분석과 같은 작업에 유용하며, Group 레시피는 집계된 결과를 기반으로 보고서나 대시보드를 생성하는 데 적합합니다.
데이터셋을 고르고, window 레시피를 선택 후 CREATE RECIPES 버튼을 클릭합니다.
데이터는 Customer ID, Date, Sales Amount 로 이루어져있습니다.
이 예에서는 각 고객에 대한 구매 금액의 평균과 합을 계산하고, 집계는 오늘과 지난 3일간의 거래만 포함하도록 하고 싶습니다. 동시에 각 거래를 별도의 행으로 유지하려고 합니다!
Window 정의 단계에서 Partitioning을 켜고 Customer ID를 선택합니다. 각 고객에 대한 거래의 합과 평균 금액을 찾기를 원하기 때문입니다. 다음 각 파티션 내에서 date를 오름차순으로 행을 정렬합니다.
이러한 정의로 인해 데이터셋이 파티션화되고, 각 파티션 내에서는 날짜별로 행이 정렬됩니다.
Window Frame 에서는, 지난 3일간의 거래를 위해 lower bound를 3으로 지정하고 아래의 단위를 Days로 설정합니다.
Aggregaions 설정 단계에서는 원하는 집계를 선택합니다.
Sales Amount 의 Avg와 Sum 을 선택하여, 판매량의 평균과 합계를 새로운 열로 추가해보겠습니다. 결과 데이터셋은 원래 데이터셋의 구조를 유지하면서 새로운 열인 Sales Amount_avg및 Sales Amount_sum를 포함합니다.
Customer ID가 1번인 고객의 데이터를 살펴보겠습니다.
먼저, 1월 1일 에서 Sales Amount 평균 값은 (1200+800) / 2 = 1000.0 입니다.
1월 6일의 경우, 3일전 데이터까지 포함하기로 했으므로 1월 3일 데이터까지의 평균을 구합니다.
즉, (1500+2000+2300) / 3 = 1933.3333 입니다.
1월 11일은 3일전의 데이터가 1월 8일까지 이지만, 8일~10일 까지의 데이터가 존재하지 않으므로
11일의 데이터만 평균값을 구하면 됩니다.
(1200 + 1400) / 2 = 1300.0 입니다.
Window 레시피는 데이터 보강을 위한 강력한 도구로 사용될 수 있습니다. 이를 통해 우리는 원래 데이터셋에 유의미한 정보를 추가하고 그룹화된 계산을 수행할 수 있습니다. 이는 기계 학습 모델링이나 패턴 탐지와 같은 다양한 분석 작업에 유용합니다.
FUZZY JOIN 레시피
데이터 조인 작업에서 일치하지 않는 텍스트 값을 매핑하는 데 사용되는 Dataiku DSS의 기능입니다. 일반적인 조인 작업은 정확한 일치를 기준으로 데이터를 조인하지만, FUZZY JOIN은 유사한 텍스트 값을 가진 열을 매핑하는 데 사용됩니다. 이것은 오타, 철자 오류, 대소문자 차이 등으로 인해 정확한 일치를 찾기 어려운 경우에 유용합니다.
예를 들어, 한 데이터셋에는 "New York"이라는 도시 이름이 있고 다른 데이터셋에는 "Newyork"이라는 철자 오류가 있는 경우, FUZZY JOIN을 사용하여 이 두 값을 매핑할 수 있습니다.
FUZZY JOIN 레시피의 기능
거리 측정 방법 선택: FUZZY JOIN은 일치하지 않는 텍스트 값을 매핑하기 위해 다양한 거리 측정 방법을 제공합니다. Damerau-Levenshtein, Jaccard등의 거리 측정 방법을 선택할 수 있습니다.
거리 임계값 설정: 사용자는 FUZZY JOIN 작업에서 허용되는 최대 거리를 정의할 수 있습니다. 이 거리 임계값은 두 텍스트 값 사이의 거리가 임계값 이내인 경우에만 매핑을 수행합니다. 이를 통해 사용자는 매우 유사한 텍스트 값만을 매핑하고 다른 텍스트 값은 무시할 수 있습니다.
정규화 옵션 제공: FUZZY JOIN은 대소문자 차이, 구두점, 공백 등과 같은 텍스트의 정규화를 위한 옵션을 제공합니다. 이를 통해 데이터의 일관성을 유지하고 일치 여부를 결정할 때 영향을 받지 않는 요소를 제거할 수 있습니다.
다양한 조인 유형 지원: FUZZY JOIN은 다양한 조인 유형을 지원합니다. 일반적인 조인 유형인 내부 조인, 왼쪽 조인, 오른쪽 조인, 외부 조인 등을 사용할 수 있습니다. 이를 통해 사용자는 데이터의 일치 여부에 따라 조인 결과를 조정할 수 있습니다.
튜토리얼 프로젝트를 가져와서 fuzzy join 레시피를 활용해보겠습니다.
+New Project > DSS Tutorials > General Topics > Fuzzy Join Recipe (Tutorial)을 클릭합니다.
flight_reviews의 arrival 컬럼에서 홍콩은 Hongkong 으로 저장되어있고, world_cities의 city 컬럼에서는 Hong Kong 으로 저장 하고 있습니다. 따라서 일반 join 을 사용하기는 어려워보이고, fuzzy join 을 활용해보도록 하겠습니다 !
Flow로 돌아가서 world_cities , flight_reviews 데이터셋을 선택하고 그 상태에서 Fuzzy join 레시피를 선택합니다.
Join 단계에서 자동으로 감지된 조인 키 중 하나를 클릭하여 Join 편집 창을 열어주세요.
fligth_reviews_prepared 데이터셋에서 arrival을 조인 열로 선택하고, world_cities 데이터셋에서 city를 조인 열로 선택합니다. 조인 키 외에도 Fuzzy Join 레시피에서는 Distance 유형, 거리 임계값, 임계값 유형 및 정규화 매개변수를 선택할 수 있습니다.
기본적으로 선택된 거리 유형은 Damerau-Levenshtein이며, 이는 한 단어를 다른 단어로 변환하는 데 필요한 최소한의 작업(문자 하나의 삽입, 삭제 또는 대체, 두 인접 문자의 위치 전환) 수를 측정합니다.
예를 들어, "Lisbon"과 "Lisboa" 사이의 Damerau-Levenshtein 거리는 1입니다. 두 단어 사이에 변환할 문자 "n"을 문자 "a"로 대체하는 작업이 하나만 필요하기 때문입니다.
Fuzzy Join 레시피는 조인 열의 값 사이의 거리를 계산한 다음 사용자가 정의한 "최대 거리" 임계값을 사용하여 거리가 선택한 임계값 내에 들어맞는 유사한 값에 대해 열을 매핑하고 조인합니다.
Damerau-Levenshtein 거리 유형을 사용하고 오차 범위를 최소화하기 위해 최대 거리 임계값을 1로 둘 것입니다. 마지막으로 대소문자 철자와 구두점의 작은 차이를 무시하기 위해 정규화 매개변수를 설정하겠습니다.
Case insensitve 와 Remove punctuation and extra spaces 를 선택하고, OK를 눌러주세요!
Selected columns 단계로 이동합니다. 두 데이터셋에서 모든 열을 검색하려고 합니다. 기본적으로 선택되어 있지만 도착 도시를 나타내는 world_cities 데이터셋의 검색된 열에 접두사를 추가하여 어느 도시를 참조하는지 명확하게 할 것입니다. 오른쪽의 world_cities 데이터셋 열 창에서 Prefix 필드에 arrival을 입력합니다. 출력 단계에서 결과를 미리보고 레시피를 실행하고, 스키마 변경을 수락합니다.
reviews_airports_joined 데이터셋을 열어서 확인해보면 Fuzzy Join 레시피가 도착 공항을 나타내는 두 열의 값을 성공적으로 매칭시킨 것을 알 수 있습니다.
FUZZY JOIN 레시피는 데이터 조인 작업에서 정확한 일치를 찾기 어려운 상황에서 유용한 도구입니다. 이를 통해 데이터의 일관성을 유지하고 유사한 텍스트 값을 매핑함으로써 데이터 분석 및 처리 작업에서 더 정확하고 포괄적인 결과를 얻을 수 있습니다.
Window, Fuzzy join 레시피 활용을 확인해보았습니다.
궁금한 내용 있으시면, 댓글로 질문 남겨주세요 : )
'AI 및 데이터 분석' 카테고리의 다른 글
보고서 시스템 데이터 파이프라인 구축 - (2) (0) | 2023.06.13 |
---|---|
보고서 시스템 데이터 파이프라인 구축 - (1) (0) | 2023.06.12 |
Dataiku - 레시피 활용 (7) (1) | 2023.06.10 |
Dataiku - 레시피 활용 (6) (0) | 2023.06.09 |
Dataiku - 레시피 활용 (5) (0) | 2023.06.08 |