> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

> W&B に保存したデータをエクスポートまたは更新します

# データのエクスポートと更新

<h2 id="export-data">
  データをエクスポートする
</h2>

Public API を使用すると、W\&B に保存したデータをエクスポートまたは更新できます。この API を使用する前に、スクリプトからデータをログしてください。詳細については、[クイックスタート](/ja/products/wandb/quickstart)を参照してください。

**Public API のユースケース**

* **データをエクスポートする**: データフレームを取得し、Jupyter ノートブックで独自の分析を行います。データを調べた後、分析用の新しい run を作成して結果をログすることで、検出結果を同期できます。例: `wandb.init(job_type="analysis")`
* **既存の run を更新する**: W\&B run に関連付けてログされたデータを更新できます。たとえば、複数の run の設定を更新し、元々ログしていなかったアーキテクチャやハイパーパラメーターなどの情報を追加できます。

使用可能な関数の詳細については、[自動生成されたリファレンスドキュメント](/ja/products/wandb/ref/python/public-api)を参照してください。

<h3 id="export-run-data">
  run データのエクスポート
</h3>

完了した run または実行中の run からデータをダウンロードします。一般的な用途として、Jupyter ノートブックで独自の分析を行うためにデータフレームをダウンロードしたり、自動化された環境で独自のロジックを使用したりすることが挙げられます。

```python theme={"system"}
import wandb

api = wandb.Api()
run = api.run("<entity>/<project>/<run_id>")
```

Run オブジェクトで最もよく使用される属性は次のとおりです。

| 属性 | 意味 |
| - | - |
| `run.config` | トレーニング run のハイパーパラメーターや、データセットのアーティファクトを作成する run の前処理メソッドなど、run の設定情報を格納する辞書です。これらは run の入力と考えてください。 |
| `run.history()` | モデルのトレーニング中に変化する損失などの値を格納するための辞書のリストです。`run.log()` コマンドはこのオブジェクトに値を追加します。 |
| `run.summary` | run の結果を要約する情報の辞書です。精度や損失などのスカラー値や、大きな file を格納できます。デフォルトでは、`run.log()` はログされた時系列の最後の値をサマリーに設定します。サマリーの内容は直接設定することもできます。サマリーは run の出力と考えてください。 |

過去の run のデータを変更または更新することもできます。デフォルトでは、api オブジェクトの単一インスタンスがすべてのネットワークリクエストをキャッシュします。実行中のスクリプトでリアルタイムの情報が必要な場合は、`api.flush()` を呼び出して更新された値を取得してください。

<h3 id="querying-multiple-runs">
  複数の run のクエリ
</h3>

<Tabs>
  <Tab title="データフレームと CSV">
    このサンプルスクリプトは project を検索し、run 名、設定、サマリー統計を含む run の CSV を出力します。`<entity>` と `<project>` を、それぞれ W\&B entity とプロジェクト名に置き換えてください。

    ```python theme={"system"}
    import pandas as pd
    import wandb

    api = wandb.Api()
    entity, project = "<entity>", "<project>"
    runs = api.runs(entity + "/" + project)

    summary_list, config_list, name_list = [], [], []
    for run in runs:
        # .summary には、精度などのメトリクスの
        # 出力キーと値が含まれます。
        #  大きなファイルを除外するために ._json_dict を呼び出します
        summary_list.append(run.summary._json_dict)

        # .config にはハイパーパラメーターが含まれます。
        #  _ で始まる特殊な値を削除します。
        config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

        # .name は、人が読みやすい run 名です。
        name_list.append(run.name)

    runs_df = pd.DataFrame(
        {"summary": summary_list, "config": config_list, "name": name_list}
    )

    runs_df.to_csv("project.csv")

    run.finish()
    ```
  </Tab>

  <Tab title="MongoDB 形式">
    W\&B API では、api.runs() を使用して project 内の run を横断的にクエリすることもできます。最も一般的な用途は、独自の分析のために run データをエクスポートすることです。クエリのインターフェースは、[MongoDB が使用するもの](https://www.mongodb.com/docs/manual/reference/mql/query-predicates/)と同じです。

    ```python theme={"system"}
    runs = api.runs(
        "username/project",
        {"$or": [{"config.experiment_name": "foo"}, {"config.experiment_name": "bar"}]},
    )
    print(f"Found {len(runs)} runs")
    ```
  </Tab>
</Tabs>

`api.runs` を呼び出すと、リストのように動作するイテラブルな `Runs` オブジェクトが返されます。デフォルトでは、このオブジェクトは必要に応じて順次 50 件ずつ run を読み込みますが、`per_page` キーワード引数でページごとの読み込み件数を変更できます。

`api.runs` は `order` キーワード引数も受け入れます。デフォルトの順序は `-created_at` です。結果を昇順に並べるには、`+created_at` を指定してください。設定やサマリーの値で並べ替えることもできます。たとえば、`summary.val_acc` や `config.experiment_name` を使用できます。

<h3 id="error-handling">
  エラー処理
</h3>

W\&B サーバーとの通信中にエラーが発生すると、`wandb.CommError` が送出されます。元の例外は `exc` 属性を通じて調べることができます。

<h3 id="get-a-runs-name-and-id-during-an-active-run">
  実行中の run で run 名と ID を取得する
</h3>

`wandb.init()` を呼び出した後、次のようにスクリプトからランダムな run ID や人間が読みやすい run 名にアクセスできます。

* 一意の run ID (8 文字のハッシュ) : `run.id`
* ランダムな run 名 (人間が読みやすい形式) : `run.name`

run にわかりやすい識別子を設定したい場合は、次の方法をおすすめします。

* **run ID**: 生成されたハッシュをそのまま使用します。この値は project 内の run 間で一意である必要があります。
* **run 名**: 短く読みやすい名前にし、できれば一意にします。こうすることで、チャート上の各線を区別しやすくなります。
* **run メモ**: run で何を行っているかを簡単に説明するのに最適です。`wandb.init(notes="your notes here")` で設定できます。
* **run タグ**: run タグを使って項目を動的にトラッキングし、UI のフィルターで表を必要な run だけに絞り込めます。タグはスクリプトから設定した後、UI で編集できます。編集は run テーブルと Run page の Overview タブのどちらからでも行えます。詳しい手順は[こちら](/ja/products/wandb/runs/tags)を参照してください。

<h2 id="public-api-examples">
  Public API サンプル
</h2>

<h3 id="read-metrics-from-a-run">
  run からメトリクスを読み取る
</h3>

この例では、`"<entity>/<project>/<run_id>"` に保存された run について、`run.log({"accuracy": acc})` で保存されたタイムスタンプと精度を出力します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history().iterrows():
        print(row["_timestamp"], row["accuracy"])
```

<h3 id="read-specific-metrics-from-a-run">
  run から特定のメトリクスを読み取る
</h3>

run から特定のメトリクスを取得するには、`keys` 引数を使用します。`run.history()` を使用する場合、サンプル数のデフォルトは 500 です。ログされた step に特定のメトリクスが含まれていない場合、出力データフレームでは `NaN` として表示されます。`keys` 引数を指定すると、API は指定されたメトリクスキーを含む step をより高い頻度でサンプリングします。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history(keys=["accuracy"]).iterrows():
        print(row["_timestamp"], row["accuracy"])
```

<h3 id="compare-two-runs">
  2 つの run を比較する
</h3>

`run1` と `run2` で異なる設定パラメーターが出力されます。

```python theme={"system"}
import pandas as pd
import wandb

api = wandb.Api()

# ご自身の <entity>、<project>、<run_id> に置き換えてください
run1 = api.run("<entity>/<project>/<run_id>")
run2 = api.run("<entity>/<project>/<run_id>")


df = pd.DataFrame([run1.config, run2.config]).transpose()

df.columns = [run1.name, run2.name]
print(df[df[run1.name] != df[run2.name]])
```

出力:

```
              c_10_sgd_0.025_0.01_long_switch base_adam_4_conv_2fc
batch_size                                 32                   16
n_conv_layers                               5                    4
optimizer                             rmsprop                 adam
```

<h3 id="update-metrics-for-a-run-after-the-run-has-finished">
  終了済みの run のメトリクスを更新する
</h3>

この例では、以前の run の精度を `0.9` に設定します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["accuracy"] = 0.9
run.summary.update()
```

<h3 id="rename-a-metric-in-a-completed-run">
  完了した run のメトリクスをリネームする
</h3>

この例では、表のサマリー列をリネームします。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["new_name"] = run.summary["old_name"]
del run.summary["old_name"]
run.summary.update()
```

<Note>
  列名の変更は表にのみ適用されます。チャートでは引き続き元のメトリクス名が使用されます。
</Note>

<h3 id="update-config-for-an-existing-run">
  既存の run の設定を更新する
</h3>

この例では、設定のうちの 1 つを更新します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.config["key"] = updated_value
run.update()
```

詳しくは、[実験の設定](/ja/products/wandb/track/config#existing-run)を参照してください。

<h3 id="export-system-resource-consumptions-to-a-csv-file">
  システムのリソース消費量を CSV ファイルにエクスポートする
</h3>

以下のスニペットは、システムのリソース消費量を検索し、CSV に保存します。

```python theme={"system"}
import wandb

run = wandb.Api().run("<entity>/<project>/<run_id>")
system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")
```

<h3 id="get-unsampled-metric-data">
  サンプリングされていないメトリクスデータを取得する
</h3>

履歴からデータを取得すると、デフォルトでは 500 ポイントにサンプリングされます。`run.scan_history()` を使用すると、ログされたすべてのデータポイントを取得できます。次の例では、履歴にログされたすべての `loss` データポイントをダウンロードします。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
history = run.scan_history()
losses = [row["loss"] for row in history]
```

<h3 id="get-paginated-data-from-history">
  履歴からページ分割されたデータを取得する
</h3>

run のサンプリングされていない完全な履歴を取得するには、`run.scan_history()` を使用します。サンプリングされていない履歴には、run のすべての履歴レコードが含まれます。一方、`run.history()` によるサンプリングされたビューでは、個々のレコードが省略されることがあります。

`page_size` パラメーターは、API リクエストごとに取得する履歴レコードの最大数を制御し、デフォルトは `1000` です。リクエストが遅い場合やタイムアウトする場合は、ページサイズを小さくしてみてください。ページを小さくするとタイムアウトのリスクを軽減できますが、より多くの API リクエストが必要になります。

`keys` パラメーターは、返されるメトリクスを個別にフィルターします。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.scan_history(keys=sorted(cols), page_size=100)
```

<h3 id="export-metrics-from-all-runs-in-a-project-to-a-csv-file">
  project 内のすべての run のメトリクスを CSV ファイルにエクスポートする
</h3>

このスクリプトは、project 内の run を取得し、各 run の名前、設定、サマリー統計を含むデータフレームと CSV を生成します。`<entity>` と `<project>` は、それぞれ使用する W\&B entity と project 名に置き換えてください。

```python theme={"system"}
import pandas as pd
import wandb

api = wandb.Api()
entity, project = "<entity>", "<project>"
runs = api.runs(entity + "/" + project)

summary_list, config_list, name_list = [], [], []
for run in runs:
    # .summary には、精度などのメトリクスの
    #  出力キーと値が含まれます。
    #  大きなファイルを除外するために ._json_dict を呼び出します
    summary_list.append(run.summary._json_dict)

    # .config にはハイパーパラメーターが含まれます。
    #  _ で始まる特殊な値を削除します。
    config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

    # .name は、人が読みやすい run の名です。
    name_list.append(run.name)

runs_df = pd.DataFrame(
    {"summary": summary_list, "config": config_list, "name": name_list}
)

runs_df.to_csv("project.csv")
```

<h3 id="get-the-starting-time-for-a-run">
  run の開始時刻を取得する
</h3>

このコードスニペットは、run が作成された時刻を取得します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("entity/project/run_id")
start_time = run.created_at
```

<h3 id="upload-files-to-a-finished-run">
  完了した run への file のアップロード
</h3>

以下のコードスニペットは、選択した file を完了した run にアップロードします。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("entity/project/run_id")
run.upload_file("file_name.extension")
```

<h3 id="download-a-file-from-a-run">
  run から file をダウンロードする
</h3>

これは、cifar project の run ID uxte44z7 に関連付けられた file "model-best.h5" を検索し、ローカルに保存します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.file("model-best.h5").download()
```

<h3 id="download-all-files-from-a-run">
  run のすべてのファイルをダウンロードする
</h3>

run に関連付けられたすべてのファイルを検索し、ローカルに保存します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
for file in run.files():
    file.download()
```

<h3 id="get-runs-from-a-specific-sweep">
  特定の sweep から run を取得する
</h3>

このスニペットは、特定の sweep に関連付けられたすべての run をダウンロードします。

```python theme={"system"}
import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
sweep_runs = sweep.runs
```

<h3 id="get-the-best-run-from-a-sweep">
  sweep から最良の run を取得する
</h3>

次のスニペットは、指定された sweep から最良の run を取得します。

```python theme={"system"}
import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
best_run = sweep.best_run()
```

`best_run` は、sweep の設定の `metric` パラメーターで定義されたメトリクスが最も優れた run です。

<h3 id="download-the-best-model-file-from-a-sweep">
  sweep から最良のモデル file をダウンロードする
</h3>

このスニペットは、モデル file を `model.h5` に保存した run を含む sweep から、検証精度が最も高いモデル file をダウンロードします。

```python theme={"system"}
import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
runs = sorted(sweep.runs, key=lambda run: run.summary.get("val_acc", 0), reverse=True)
val_acc = runs[0].summary.get("val_acc", 0)
print(f"Best run {runs[0].name} with {val_acc}% val accuracy")

runs[0].file("model.h5").download(replace=True)
print("Best model saved to model-best.h5")
```

<h3 id="delete-all-files-with-a-given-extension-from-a-run">
  run から特定の拡張子を持つすべてのファイルを削除する
</h3>

このスニペットは、run から特定の拡張子を持つファイルを削除します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

extension = ".png"
files = run.files()
for file in files:
    if file.name.endswith(extension):
        file.delete()
```

<h3 id="download-system-metrics-data">
  システムメトリクスデータのダウンロード
</h3>

このスニペットは、run のシステムリソース消費量に関するすべてのメトリクスを含むデータフレームを生成し、CSV に保存します。

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")
```

<h3 id="update-summary-metrics">
  サマリー メトリクスを更新する
</h3>

辞書を渡してサマリー メトリクスを更新できます。

```python theme={"system"}
summary.update({"key": val})
```

<h3 id="get-the-command-that-ran-the-run">
  run を実行したコマンドを取得する
</h3>

各 run では、起動に使用したコマンドを取得し、run 概要ページに表示します。このコマンドを API から取得するには、次のコマンドを実行します：

```python theme={"system"}
import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

meta = json.load(run.file("wandb-metadata.json").download())
program = ["python"] + [meta["program"]] + meta["args"]
```
