Skip to main content

クエリパネルの使用例

クエリパネルの構築方法を学ぶ
Created on September 10|Last edited on September 11
このレポート記事はLuis Berguaによる英文記事の日本語訳です。

概要

クエリパネルクエリの世界へようこそ!ここにいらっしゃるということは、プロットのカスタマイズやアーティファクトからのデータ抽出など、データからより多くの情報を得たいと思っていらっしゃるのでしょう。クエリパネルは、初心者から熟練者まで、幅広いユーザーのニーズに応える多様なクエリオプションを提供しています。このガイドでは、各クエリタイプを明確な例と説明を交えて詳しく解説します。基本的な内容から、より高度で複雑なテクニックまで、クエリパネルを最大限に活用する方法について包括的な理解を得ることができます。私たちと一緒にこの旅に出発し、あなたのデータで実現できることの可能性を最大限に引き出しましょう!



1. はじめに

クエリの詳細に入る前に、正しいセットアップがなされているか確認しましょう。クエリパネルをワークフローに統合することは非常に重要です。ワークスペースやレポートに組み込む場合のいずれにおいても、視覚的なデモンストレーションを交えて説明していきます。

ワークスペースにクエリパネルを追加する

ワークスペースにクエリパネルを追加するには、 Add PanelQuery Panel をクリックします。


レポートへのクエリパネルの追加

レポートにクエリパネルを追加するには、以下のいずれかの方法を使用します:
  • /queryと入力し、Query panelを選択する

  • Typing /Panel grid -> Panel grid and then clicking on Add panel -> Query panel




runs オブジェクトの概要

クエリパネルでは、実験の詳細な記録を保存する runsオブジェクトにアクセスすることができます。これについての詳細は 3. Accessing runs object セクションで説明しますが、簡単な概要として、以下のようなものが利用可能です:
  • summary(サマリー): 実験結果を要約する情報を格納した辞書です。精度や損失などのスカラー値や、大きなファイルを含むことができます。デフォルトでは、wandb.log() がログに記録された時系列データの最終値をサマリーに設定します。サマリーの内容は直接設定することもできます。サマリーは実験の「出力」と考えてください。テーブルを使用している場合は既にお馴染みかもしれません。テーブルはランのsummaryに保存され、runs.summary[<table-key>] のような式でアクセスします。
  • history(履歴): モデルのトレーニング中に変化する損失などの値を保存するための辞書のリストです。wandb.log() コマンドはこのオブジェクトに追加します。
  • config(設定): 実験の設定情報を格納した辞書です。トレーニング実行のハイパーパラメータや、データセットアーティファクトを作成する実行の前処理方法などが含まれます。これらは実験の「入力」と考えてください。



2. 基本的な操作

以下は、クエリパネルが提供する基本的な操作です。これらの操作を組み合わせることで、データを様々な方法で取得し、提示することができます。各操作について、3つのセクションで説明します:クエリパネルでの表現、そしてその理解を助けるために、PandasとMySQLでの同等の表現を示します。

2.1 ソート

クエリ

列オプションを使用してソートすることが可能です:



Pandasでの同等操作

pandasを使用してソートを行う場合、以下のような操作が同等となります:
df.sort_values(by=['Label'], inplace=True, ascending=True)

MySQLでの同等操作

MySQLを使用してソートを行う場合、以下のような操作が同等となります:
SELECT * FROM cifar10_sample_table
ORDER BY Label ASC;

2.2 フィルター

フィルタリングには2つの方法があります:クエリから直接フィルタリングする方法(第1のテーブル)と、左上隅にあるフィルタボタン▼を使用する方法(第2のテーブル)です。0から9の範囲の偶数を取得する例を見てみましょう:



クエリフィルタ

このテーブルから、Label列が"frog"(カエル)の行のみをフィルタリングすることができます。We can filter this table getting only rows with Label column being "frog"




Pandas equivalent

MySQL equivalent

Filtering by index

It's possible to filter by index using the filter button ▼:



高度なフィルタリング

フィルタリングでは、orand の演算子を使用した複雑な条件設定が可能です。これらの操作は、クエリに直接記述するか、左上隅のフィルタボタン▼を使用して行うことができます:
  • 左上のテーブル:クエリから直接、LabelfrogまたはStatusgoodの行のみを取得
  • 右上のテーブル:同じ条件をフィルタボタン▼から適用
  • 左下のテーブル:クエリから直接、LabelfrogかつStatusgoodの行のみを取得
  • 右下のテーブル:同じ条件をフィルタボタン▼から適用



2.3 マップ

マップ操作は、データを反復処理し、関数を適用するものです。1から5までの数字の二乗を計算する例を見てみましょう。これは、クエリから直接行う方法(最初のテーブル)と、列オプションから新しい列を挿入する方法(2番目のテーブル)の両方で実行できます。



クエリ

map操作を使用して、テーブルに列を追加することができます。これにはrunオブジェクトからのデータや、既存の列からのデータを利用できます:
  • 左上のテーブル:cifar10_sample_tableを取得し、各Labelの長さを示す新しい列を1つ追加しています。
  • 右上のテーブル:同じ操作ですが、列の設定から新しい列を追加しています。
  • 左下のテーブル:cifar10_sample_tableを取得し、各行をログに記録したrunの名前を示す新しい列を1つ追加しています。
  • 右下のテーブル:同じ操作ですが、列の設定から新しい列を追加しています。



Pandasでの同等操作

pandasを使用して追加の列を加えるmap 操作の同等の処理は以下のようになります:
df['Label_length'] = df['Label'].apply(len)

MySQLでの同等操作

MySQLを使用して追加の列を加えるmap 操作の同等の処理は以下のようになります:
SELECT *, LENGTH(Label) AS Label_length FROM cifar10_sample_table;


2.4 グループ化(Groupby)

クエリ

テーブルをLabelでグループ化し、各グループの Contrastの最大値を取得してみましょう。これは、クエリで行うか、列オプションから「グループ化」をクリックして実行できます:




Pandasでの同等操作

pandasを使用したグループ化(groupby)の同等の処理は以下のようになります:
df.groupby('Label').agg(Max_Contrast=('Contrast', 'max')).reset_index()

MySQLでの同等操作

MySQLを使用したグループ化(groupby)の同等の処理は以下のようになります:
SELECT Label, MAX(Contrast) AS Max_Contrast FROM cifar10_sample_table GROUP BY Label;

マルチグループ化

テーブルを複数のフィールドでグループ化することができます。これは、クエリで行うか、列オプションから「グループ化」をクリックして実行できます:




2.5 連結(Concat)

concat操作を使用して、複数のリストを1つのリストに連結することができます:

row
1
2
3
4
5
6

クエリ

この操作は、テーブルを連結し、さらに⚙️パネルから行を連結(concatenate)または結合(join)(外部結合/内部結合)するために使用できます:



Pandasでの同等操作

pandasを使用した連結(concat)の同等の処理は以下のようになります:
pd.concat([short_table_0, short_table_1], ignore_index=True)

MySQLでの同等操作

MySQLを使用した連結(concat)の同等の処理は以下のようになります:
SELECT * FROM short_table_0
UNION ALL
SELECT * FROM short_table_1;

2.6 結合(Join)

クエリ

テーブルを結合する方法には2つあります。クエリから直接結合する方法と、テーブルを連結した後にパネルの設定を変更する方法です。クエリの各部分(最初のテーブル)について説明します:
  • project("luis_team_test", "weave_example_queries").runs.summary["short_table_0"].table.rows.concat は最初のテーブルです。
  • project("luis_team_test", "weave_example_queries").runs.summary["short_table_1"].table.rows.concat は2番目のテーブルです。
  • (row) => row["Label"] は各テーブルのセレクタで、どの列を基準に結合するかを決定します。
  • "Table1""Table2" は結合時の各テーブルの名前です。
  • truefalse は左右の内部結合/外部結合の設定を指定します。



Pandasでの同等操作

pandasを使用した結合(join)の同等の処理は以下のようになります:
pd.merge(short_table_0, short_table_1, on='Label', suffixes=('Table1', 'Table2'), how='inner')

MySQLでの同等操作

MySQLを使用した結合(join)の同等の処理は以下のようになります:
SELECT A.Label as LabelTable1, A.Value as ValueTable1, B.Label as LabelTable2, B.Value as ValueTable2
FROM short_table_0 A
INNER JOIN short_table_1 B ON A.Label = B.Label;

3. runs オブジェクトへのアクセス

runs オブジェクトにアクセスすることで、実行(run)に記録されたデータを様々な方法で分析することができます。以下にいくつかの例を示します。

3.1 設定(Config)

実行の設定(config)にアクセスすることができます。設定にアクセスし、map 操作を使用して実行のIDを表示する列を追加してみましょう:



3.2 サマリー(Summary)

設定(config)と同様に、実行(run)のサマリーにもアクセスすることができます。このオブジェクトは、各実行におけるキーごとの最終値を保存しています。実行名を追加し、いくつかの列のみを選���してマッピングしてみましょう:



3.3 履歴(History)

実行(run)の履歴にアクセスすることで、実行のパフォーマンスの推移や各ステップで記録されたデータを確認することができます。

記録されたメディアへのアクセス

wandb.log() を使用してメディア(画像など)を記録している場合、実行の履歴からそれらの画像にアクセスすることができます。以下は、各ステップで記録された画像を含むテーブルを構築する例です。クエリの各部分について説明します:
  • runs.history.concat:これは、行レベルでの操作を可能にするために、すべての行を連結します。
  • filter((row) => !row["cifar10_sample_image"].isNone):これは、cifar10_sample_image 列が None でない行、つまり画像を含む行のみを返します。
  • filter((row) => !row["cifar10_sample_image"].isNone).map((row, index) => {step: row["_step"], image: row["cifar10_sample_image"]}):最後に、履歴をマッピングして画像とステップのみを取得します。

This set of panels contains runs from a private project, which cannot be shown in this report


実行の履歴のプロット

実行(run)のデータに基づいてプロットを作成することも可能です。例えば、履歴オブジェクトにアクセスし、パネルの設定を変更することで(右上隅の⚙️をクリック)、実行した3つの実験のトレーニング精度とテスト精度を比較することができます。



4. アーティファクトへのアクセス

4.1はじめに

アーティファクトにアクセスし、そこに保存されているコンテンツを可視化することも可能です。通常、これらには project オブジェクトからアクセスします。project オブジェクトには以下のような異なるメソッドがあります:
  • project.artifactVersion():プロジェクト内の指定された名前とバージョンの特定のアーティファクトバージョンを返します。
  • project.artifact(""):プロジェクト内の指定された名前のアーティファクトを返します。その後、.versions を使用して、このアーティファクトのすべてのバージョンのリストを取得できます。
  • project.artifactType():プロジェクト内の指定された名前のaを返します。その後、.artifacts を使用して、このタイプのすべてのアーティファクトのリストを取得できます。
  • project.artifactTypes:プロジェクト下のすべてのアーティファクトタイプのリストを返します。



4.2 系統(リネージ)へのアクセス

以下のクエリを使用して、インタラクティブなアーティファクトページにアクセスし、そこからアーティファクトの系統(リネージ)に移動することができます:



4.3 Visualizing models

4.4 Comparing files across artifacts

4.5 Get all runs using a specific artifact

4.6 Get all runs logging a specific artifact

4.7 Query all files under an artifact

4.8 Get one version of all artifacts

4.9 Get all versions of one artifact

4.10 Get all versions of all artifacts

5. Advanced queries

In this section, you can see some more complex examples designed to elucidate advanced capabilities and provide practical insights into tackling intricate querying challenges

5.1 Accessing run's and artifacts metadata

5.2 Building a summary of all artifacts under a project

5.3 Plot data logged at different steps

List<number>