Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Contour Expression 보드 사용

Expression 보드는 새 열 계산, 열 교체, 복합 필터와 집계를 작성하는 도구입니다. Contour의 표현식 언어는 Spark SQL 함수 일부를 포함하지만 null 동등성 등 고유한 문법과 동작이 있습니다.

열 이름은 대소문자를 구분합니다. year("birthdate_col")과 year(birthdate_col)처럼 큰따옴표 유무가 같은 열을 가리킬 수 있으며, 작은따옴표는 문자열 값에 사용합니다.

보드와 편집기

경로 아래 도구 모음에서 Expression 보드를 추가합니다. 다음 화면은 미국 교통통계국의 공개 데이터를 사용하는 예시입니다.

Library에서는 자신이나 다른 사용자가 저장한 표현식을 인자와 함께 재사용합니다.

Editor에는 Add new column, Replace column, Filter, Aggregate 모드가 있습니다. ?에서 문법을 빠르게 확인할 수 있고 입력 중 나타나는 함수 목록을 선택하거나 Enter로 삽입할 수 있습니다.

열 추가와 교체

Add new column에서 새 열 이름과 식을 입력합니다. year("birthdate_col")로 생년을 추출하거나 다음 식으로 택시 이동 설명을 만듭니다. trip_description이라는 열에 넣는 가상 열 구성 예시입니다.

'trip_' || "start_neighborhood" || '_to_' || "end_neighborhood"

Replace column은 바꿀 열을 선택하고 대체할 값을 계산하는 식을 입력합니다.

Boolean 필터

Filter 모드는 식이 true인 행을 남깁니다. 예를 들어 year("birthdate_col") == 1981로 1981년생을 고르거나, 요금이 50을 넘는 택시 이동을 선택할 수 있습니다.

다음은 열과 상수, 두 열을 비교하는 예시입니다.

"taxi_fare" < 25.0
"birth_date" == '1776-07-04'
"league_id" != 'NHL'
"age" < "average_age"
("tip" / "fare") >= "average_tip_percentage"

각 식은 따로 적용합니다. category가 null인 행을 제거하려면 다음 조건을 사용합니다.

not isnull("category")

Contour에서는 null = null이 true입니다. 일반 Spark SQL의 결과 null과 다르므로 변환하거나 쿼리를 옮길 때 같은 의미가 유지되는지 확인합니다.

LIKE와 조건 결합

다음은 a로 끝나는 국가 이름을 찾는 조건입니다.

"country_name" LIKE '%a'

조건은 AND 또는 OR로 결합합니다.

("start_borough" == 'Queens') AND ("end_borough" == 'Queens')
"department" is 'sales' OR "department" is 'r&d'

파티션별 최솟값 또는 최댓값의 행 찾기

Filter 표현식에는 OVER 구문의 윈도 함수를 직접 사용할 수 없습니다. 먼저 Add new column으로 값을 계산하고 그 열을 필터에서 참조합니다.

예를 들어 택시별 최신 승차 시각을 most_recent_ride 열로 만듭니다.

max("pickup_datetime") OVER (PARTITION BY "medallion")

그다음 Filter에 다음 식을 입력합니다.

"pickup_datetime" == "most_recent_ride"

같은 최댓값을 가진 행이 여러 개면 모두 조건을 만족합니다. 최초 시점의 행이 필요하면 같은 방식으로 min 값을 계산합니다.

문자열을 배열로 분리

SPLIT은 Boolean 필터가 아닌 배열 값을 만듭니다. Add new column 또는 Replace column에서 사용합니다. 다음 Contour 식은 categories를 구분자 |로 나눕니다. |는 정규식 특수 문자이므로 이스케이프합니다.

SPLIT("categories", '\|')

반환 배열을 다른 보드에 전달하는 방법은 배열 처리를 참고합니다.

집계 결과 계산

Aggregate 모드에서는 그룹 표현식을 0개 이상, 집계 표현식을 1개 이상 지정합니다. 각 표현식에 이름을 붙이며 결과 표의 스키마는 그룹 및 집계 표현식별 열로 구성됩니다.

다음은 출발 구역별 평균 택시 이동 거리를 집계하는 화면과 결과입니다.

다음 가상 표에서 birthday는 날짜형입니다.

idnamesportbirthdaynumber_of_gold_medals
1JaneSwimming6/29/19856
2JohnGymnastics2/19/19713
3MikeSwimming3/23/19717
4MichelleGymnastics9/12/19715

그룹을 지정하지 않고 sum이라는 집계에 sum("number_of_gold_medals")를 사용하면 합계는 21입니다.

출생연도와 종목별 합계 및 평균은 다음 이름과 식으로 구성합니다.

역할이름식
그룹birth_yearyear("birthday")
그룹sport"sport"
집계sumsum("number_of_gold_medals")
집계averageavg("number_of_gold_medals")

가상 표의 계산값은 다음과 같습니다. 행 순서는 예시입니다.

birth_yearsportsumaverage
1971Swimming77
1971Gymnastics84
1985Swimming66

이 결과는 원래 표에 열을 붙이는 방식과 달리 새로운 스키마를 가진 표입니다. 다음 보드에서 이 표를 분석하려면 집계 데이터로 전환합니다.

표현식 저장과 재사용

Save expression으로 식을 저장하여 다른 경로와 분석에서 재사용하거나 다른 사용자와 공유합니다. 다음 예제는 room_type이 Private room이면 문자열 'True', 아니면 문자열 'False'를 반환합니다.

CASE WHEN "room_type" is 'Private room' then 'True' ELSE 'False' END

인자를 지정하지 않으면 저장한 로직을 그대로 적용합니다. 바꾸어 사용할 열이나 값을 인자로 지정하면 적용할 때 다른 값을 입력할 수 있습니다. 이 예제에서는 두 반환 문자열을 true_value와 false_value 인자로 만듭니다.

저장된 식에서 인자는 @true_value와 @false_value로 표시됩니다. 이는 분석 매개변수의 $parameter_name 참조와 구분합니다. Library에서 식을 선택한 뒤 true_value에는 Private room, false_value에는 Not private room을 지정할 수 있습니다.

저장한 집계식의 그룹 열

그룹 표현식 없이 Aggregate 식을 저장하면, 재사용할 때 열 선택기로 원하는 수의 그룹 열을 지정할 수 있습니다.

다음 예시는 Inside Airbnb 공개 데이터의 price 평균과 최댓값을 그룹 없이 저장합니다.

저장된 식을 사용할 때 neighbourhood_group과 room_type을 그룹 열로 고르면 두 열의 조합별로 계산합니다.

결과 열은 neighbourhood_group, room_type, max_price, mean_price입니다.