注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

式ボードの使用

ヒストグラムやチャートのような視覚的なツールに加えて、Contourは新たな行をデータから導き出したり、複雑なフィルター処理を行ったり、複雑な集計を行ったりするための豊富な式言語を持つ式ボードを提供しています。Contourの式言語は、SparkSQLの多数の関数を組み込んだカスタム言語です。

Tips
  • 式エディターを使用するときは、? アイコンをクリックして式言語のクイックリファレンスを利用してください。
  • 入力すると、ドロップダウンに推奨される関数が表示されます。関数を選択するには、クリックするかEnterキーを押してください。

行の名前は大文字と小文字を区別します。また、行を選択するときには、行の名前を二重引用符で書くことも、書かないことも可能です。例えば、year("birthdate_col")year(birthdate_col)と同等です。一貫性を保つため、このドキュメンテーションでは行の名前は二重引用符で書かれています。


式ボードの追加

ツールバーからContourの分析に式ボードを追加できます。以下の概要で示しています:

expressions-apply-calculation

この例では、Foundryのリファレンスプロジェクトに保存されているU.S. Bureau of Transportation Statisticsのオープンソースデータを使用しています。


式ボードの設定

式ボードには、保存された式のライブラリとエディターの2つのモードがあります。

ライブラリ

ライブラリを使用すると、引数付きで自分自身や他の人が書いた式を再利用できます:

library

エディター

エディターでは、書くことができる式が4つのカテゴリーに分かれています:

  • 新しい行を追加
  • 行を置換
  • フィルター
  • 集計

新しい行の追加

新しい行の名前と、それを構築するための式を入力します。たとえば、year("birthdate_col")を使用して誕生日から年を抽出して新しい行を作成したり、他の行の値を連結してタクシートリップの説明文字列を含む行を作成したりします:

derive-column


行の置換

置換する行を選択し、それを置換するための式を入力します。


式でのデータのフィルター処理

ブール値に評価される式を入力してフィルター条件を定義します。式が真に評価されるすべての行にデータがフィルター処理されます。例えば、year("birthdate_col") == 1981を使用して1981年生まれの人々だけにフィルター処理をしたり、50ドル以上の運賃のタクシートリップだけを含むテーブルにフィルター処理をしたりします:

filter

SparkSQLの制限により、フィルター式ではウィンドウ関数(OVER構文)を使用することはできません。これらは新しい行を作成するために使用することができます、後で示します。

次のセクションには、Contourで使用できるフィルター式の例が含まれています。


一般的な例

行を静的な値と比較する

"taxi_fare" < 25.0  # タクシー料金が25.0未満であることを確認
"birth_date" == '1776-07-04'  # "birth_date"が'1776-07-04'と等しいかどうかを確認します

式ボードエディタでは、null = nulltrue を生成します。これは SparkSQL と異なり、null = nullnull に解決されます。

等しくない演算子を使ったフィルター

league_id が「NHL」に等しくないすべての行にフィルター処理をします:

league_id != 'NHL'  # league_idが'NHL'でない場合

2つの列を比較する

Copied!
1 2 # "age" は "average_age" より小さい "age" < "average_age"

フィルター処理して、チップの割合(チップを運賃で割ったもの)が average_tip_percentage 以上の行を表示します:

# "tip"を"fare"で割った値が"average_tip_percentage"以上であるかどうかを判断します。
("tip" / "fare") >= "average_tip_percentage"

null 値を持つ行の削除

category が null でないすべての行にフィルター処理する:

not isnull("category")  # "category"がnullでないことを確認

特殊文字を使って行を分割する

categories 行を | で分割します。| は特殊文字の例ですので、リテラルとして扱うためにエスケープが必要です。

SPLIT("categories", '\|')  # "categories"という文字列を"|"で分割します

LIKE を使用してパターンを検索する

SQL LIKE 演算子を使用して、行値のパターンを検索します。

A で終わるすべての国名に一致します:

"country_name" LIKE '%a' -- 国名の最後が'a'で終わるものを検索

複数の条件でフィルター処理する

2つ以上のフィルター式を AND または OR で組み合わせます:

("start_borough" == 'Queens') AND ("end_borough" == 'Queens')  # "start_borough"が'Queens'で、かつ"end_borough"も'Queens'である場合に真となる
"department"は'sales' または "department"は'r&d'

このコードは、"department"が'sales'であるか、または'r&d'であるかを判断します。

MIN または MAX の行を見つける

データ分析でよくあるタスクの一つは、パーティション内のある行で最小値または最大値を持つ行を見つけることです。例えば、患者の記録が含まれるデータセットがあり、各患者がオフィスを訪れた最初の日付を見つけたい場合があります。これらの行を見つけるために、2つの式を使用できます。

まず新しい行を導出し、それを使ってフィルターする必要があります。フィルター式ですべてを行うのではなく、フィルター式ではウィンドウ関数を使用できないため、SparkSQL の制限があるためです。

まず、新しい行を導出して、パーティションの最小値または最大値を見つけます。以下の例では、各キャブ(メダリオン番号で識別される)が最近行ったタクシー乗車を決定し、新しい行 most_recent_ride を作成します:

max("pickup_datetime") OVER (PARTITION BY "medallion") -- "medallion"ごとに"pickup_datetime"の最大値を取得
ヒント

ウィンドウ関数(OVER)の使用方法についての復習が必要な場合は、高度な式:ウィンドウ関数 を参照してください。

次に、各行のピックアップ日の値と、そのパーティションの最大値を比較するフィルター式を追加します:

"pickup_datetime" == "most_recent_ride"  # "pickup_datetime"が"most_recent_ride"と等しいかどうかを確認する

式を使ったデータの集約

このモードでは、group by 式と集約式を使用してデータを集約できます。group by 式は0個、1個、または複数個持つことができ、集約式も1個または複数個持つことができます。各 group by 式と集約式には名前を付ける必要があり、結果として得られるテーブルは、各式に対応する1つの行からなる新しいスキーマを持ちます。

例えば、以下の式では、出発地域ごとに平均タクシーの旅行距離を集約しています。

aggregate

結果として得られるテーブルは以下のようになります。

aggregate-result

add-columnfilter 式とは異なり、集約式は完全に新しいテーブルを生成し、各集約および group by パーティションに対応する列があります。

例えば、以下のような仮想的なデータセットがあるとします。

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

合計で何個の金メダルが獲得されたか知りたい場合は、以下を使用します。

expression-aggregate-sum

すると、以下のようなテーブルが得られます。

sum
21

誕生年とスポーツごとに、金メダルの合計数と平均数を知りたい場合は、以下を使用します。

expression-aggregate-sum-and-average

すると、以下のような結果が得られます。

birth_yearsportsumaverage
1971Swimming77
1971Gymnastics84
1985Swimming66

集約後の新しいテーブルで分析を行いたい場合は、集約されたデータに切り替えることができます。


保存された式

Contourでは、式を保存して、分析やパス間で簡単にロジックを再利用したり、他の人とロジックを共有することができます。例えば、room_type の値が Private room であれば、新しい列に True の値を持つ式を作成し、そうでなければ False の値を持つ式を作成しました。この式を保存して、他の人がこのロジックを使用できるようにしたいと思います。

式ボードの左下にある式を保存をクリックします。

create-saved-expression

式を引数なしで保存するか、引数として値を選択して式を定義するかを選択できます。引数なしで式を保存すると、適用時に式のロジックが定義したとおりになります。引数を定義すると、ユーザーは引数に異なる値を選択できます。以下の画像では、TrueFalse の値をパラメーター化しています。

parameterize-saved-expression

この式を適用すると、true_valuefalse_value の値を選択するように求められます。ここでは、これらの値がそれぞれ Private roomNot private room にマッピングされています。

use-saved-expression

保存された集約式

集約式は、0個以上の group by を基にデータを集約するために使用されます。集約式を group by が0個の状態で保存すると、式の使用者は任意の数の列 group by を選択できます。

例えば、以下では、Inside Airbnb のオープンソースデータを使って、group by が0個で2つの集約がある集約式を作成しています。集約では、price の平均と最大値を計算しています。この集約式を保存しましょう。

aggregate-expression

この式を使用すると、列セレクタが表示されます。複数の列で group by を選択できます。ここでは、neighbourhood_grouproom_type の各組み合わせに対して、price の平均と最大値を計算します。

column-group-bys

結果として得られるセットには4つの列があり、neighbourhood_grouproom_typemax_price、および mean_price です。

used-column-group-bys