注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
ヒストグラムやチャートのような視覚的なツールに加えて、Contourは新たな行をデータから導き出したり、複雑なフィルター処理を行ったり、複雑な集計を行ったりするための豊富な式言語を持つ式ボードを提供しています。Contourの式言語は、SparkSQLの多数の関数を組み込んだカスタム言語です。
行の名前は大文字と小文字を区別します。また、行を選択するときには、行の名前を二重引用符で書くことも、書かないことも可能です。例えば、year("birthdate_col")
はyear(birthdate_col)
と同等です。一貫性を保つため、このドキュメンテーションでは行の名前は二重引用符で書かれています。
ツールバーからContourの分析に式ボードを追加できます。以下の概要で示しています:
この例では、Foundryのリファレンスプロジェクトに保存されているU.S. Bureau of Transportation Statisticsのオープンソースデータを使用しています。
式ボードには、保存された式のライブラリとエディターの2つのモードがあります。
ライブラリを使用すると、引数付きで自分自身や他の人が書いた式を再利用できます:
エディターでは、書くことができる式が4つのカテゴリーに分かれています:
新しい行の名前と、それを構築するための式を入力します。たとえば、year("birthdate_col")
を使用して誕生日から年を抽出して新しい行を作成したり、他の行の値を連結してタクシートリップの説明文字列を含む行を作成したりします:
置換する行を選択し、それを置換するための式を入力します。
ブール値に評価される式を入力してフィルター条件を定義します。式が真に評価されるすべての行にデータがフィルター処理されます。例えば、year("birthdate_col") == 1981
を使用して1981年生まれの人々だけにフィルター処理をしたり、50ドル以上の運賃のタクシートリップだけを含むテーブルにフィルター処理をしたりします:
SparkSQLの制限により、フィルター式ではウィンドウ関数(OVER
構文)を使用することはできません。これらは新しい行を作成するために使用することができます、後で示します。
次のセクションには、Contourで使用できるフィルター式の例が含まれています。
"taxi_fare" < 25.0 # タクシー料金が25.0未満であることを確認
"birth_date" == '1776-07-04' # "birth_date"が'1776-07-04'と等しいかどうかを確認します
式ボードエディタでは、null = null
は true
を生成します。これは SparkSQL と異なり、null = null
は null
に解決されます。
league_id
が「NHL」に等しくないすべての行にフィルター処理をします:
league_id != 'NHL' # league_idが'NHL'でない場合
Copied!1 2
# "age" は "average_age" より小さい "age" < "average_age"
フィルター処理して、チップの割合(チップを運賃で割ったもの)が average_tip_percentage
以上の行を表示します:
# "tip"を"fare"で割った値が"average_tip_percentage"以上であるかどうかを判断します。
("tip" / "fare") >= "average_tip_percentage"
category
が null でないすべての行にフィルター処理する:
not isnull("category") # "category"がnullでないことを確認
categories
行を |
で分割します。|
は特殊文字の例ですので、リテラルとして扱うためにエスケープが必要です。
SPLIT("categories", '\|') # "categories"という文字列を"|"で分割します
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'
データ分析でよくあるタスクの一つは、パーティション内のある行で最小値または最大値を持つ行を見つけることです。例えば、患者の記録が含まれるデータセットがあり、各患者がオフィスを訪れた最初の日付を見つけたい場合があります。これらの行を見つけるために、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つの行からなる新しいスキーマを持ちます。
例えば、以下の式では、出発地域ごとに平均タクシーの旅行距離を集約しています。
結果として得られるテーブルは以下のようになります。
add-column や filter 式とは異なり、集約式は完全に新しいテーブルを生成し、各集約および group by パーティションに対応する列があります。
例えば、以下のような仮想的なデータセットがあるとします。
id | name | sport | birthday | number_of_gold_medals |
---|---|---|---|---|
1 | Jane | Swimming | 6/29/1985 | 6 |
2 | John | Gymnastics | 2/19/1971 | 3 |
3 | Mike | Swimming | 3/23/1971 | 7 |
4 | Michelle | Gymnastics | 9/12/1971 | 5 |
合計で何個の金メダルが獲得されたか知りたい場合は、以下を使用します。
すると、以下のようなテーブルが得られます。
sum |
---|
21 |
誕生年とスポーツごとに、金メダルの合計数と平均数を知りたい場合は、以下を使用します。
すると、以下のような結果が得られます。
birth_year | sport | sum | average |
---|---|---|---|
1971 | Swimming | 7 | 7 |
1971 | Gymnastics | 8 | 4 |
1985 | Swimming | 6 | 6 |
集約後の新しいテーブルで分析を行いたい場合は、集約されたデータに切り替えることができます。
Contourでは、式を保存して、分析やパス間で簡単にロジックを再利用したり、他の人とロジックを共有することができます。例えば、room_type
の値が Private room
であれば、新しい列に True
の値を持つ式を作成し、そうでなければ False
の値を持つ式を作成しました。この式を保存して、他の人がこのロジックを使用できるようにしたいと思います。
式ボードの左下にある式を保存をクリックします。
式を引数なしで保存するか、引数として値を選択して式を定義するかを選択できます。引数なしで式を保存すると、適用時に式のロジックが定義したとおりになります。引数を定義すると、ユーザーは引数に異なる値を選択できます。以下の画像では、True
と False
の値をパラメーター化しています。
この式を適用すると、true_value
と false_value
の値を選択するように求められます。ここでは、これらの値がそれぞれ Private room
と Not private room
にマッピングされています。
集約式は、0個以上の group by を基にデータを集約するために使用されます。集約式を group by が0個の状態で保存すると、式の使用者は任意の数の列 group by を選択できます。
例えば、以下では、Inside Airbnb のオープンソースデータを使って、group by が0個で2つの集約がある集約式を作成しています。集約では、price
の平均と最大値を計算しています。この集約式を保存しましょう。
この式を使用すると、列セレクタが表示されます。複数の列で group by を選択できます。ここでは、neighbourhood_group
と room_type
の各組み合わせに対して、price
の平均と最大値を計算します。
結果として得られるセットには4つの列があり、neighbourhood_group
、room_type
、max_price
、および mean_price
です。