> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-sandboxes-integrations-placement.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 시각화, 비교, 대시보드 분석을 위해 CSV 파일을 W&B의 Tables 및 Artifacts로 임포트하세요.

# 실험과 함께 CSV 파일 추적하기

W\&B Python Library를 사용해 CSV 파일을 로깅하고 [W\&B 대시보드](/ko/models/track/workspaces/)에서 시각화하세요. W\&B 대시보드는 머신 러닝 모델의 결과를 정리하고 시각화하는 중심 공간입니다. 특히 [이전에 수행한 머신 러닝 실험 정보가 담긴 CSV 파일](#import-and-log-your-csv-of-experiments)이 W\&B에 로깅되어 있지 않거나, [데이터셋이 포함된 CSV 파일](#import-and-log-your-dataset-csv-file)이 있을 때 유용합니다.

<div id="import-and-log-your-dataset-csv-file">
  ## 데이터셋 CSV 파일을 임포트하고 로깅하세요
</div>

CSV 파일 내용을 더 쉽게 다시 사용할 수 있도록 W\&B Artifacts 사용을 권장합니다.

1. 시작하려면 먼저 CSV 파일을 임포트하세요. 다음 코드 스니펫에서 `iris.csv` 파일명을 CSV 파일명으로 바꾸세요:

```python theme={null}
import wandb
import pandas as pd

# CSV를 새 데이터프레임으로 읽어옵니다
new_iris_dataframe = pd.read_csv("iris.csv")
```

2. [W\&B Dashboards](/ko/models/track/workspaces/)를 활용할 수 있도록 CSV 파일을 W\&B Table로 변환하세요.

```python theme={null}
# 데이터프레임을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)
```

3. 다음으로, W\&B 아티팩트를 생성한 다음 표를 아티팩트에 추가하세요:

```python theme={null}
# 행 제한을 200000으로 늘리고 재사용을 용이하게 하기 위해
# 아티팩트에 테이블 추가
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 데이터를 보존하기 위해 아티팩트 내에 원본 csv 파일 로깅
iris_table_artifact.add_file("iris.csv")
```

W\&B Artifacts에 대한 자세한 내용은 [Artifacts 장](/ko/models/artifacts/)을 참조하세요.

4. 마지막으로, `wandb.init()`으로 새 W\&B Run을 시작해 W\&B에 추적하고 로깅하세요:

```python theme={null}
# 데이터를 로깅할 W&B run 시작
with wandb.init(project="tables-walkthrough") as run:

    # run으로 시각화할 테이블 로깅...
    run.log({"iris": iris_table})

    # 사용 가능한 행 제한을 늘리려면 아티팩트로도 로깅하세요!
    run.log_artifact(iris_table_artifact)
```

`wandb.init()` API는 새 백그라운드 프로세스를 생성해 Run에 데이터를 로깅하며, 기본적으로 데이터를 wandb.ai와 동기화합니다. W\&B Workspace 대시보드에서 실시간 시각화를 확인하세요. 다음 이미지는 코드 스니펫 예제의 출력 결과를 보여줍니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/gsiJ_BEkjRzibnDO/images/track/import_csv_tutorial.png?fit=max&auto=format&n=gsiJ_BEkjRzibnDO&q=85&s=8e14991851703f232e3097ccc399f3e6" alt="W&B 대시보드로 임포트된 CSV 파일" width="2156" height="2116" data-path="images/track/import_csv_tutorial.png" />
</Frame>

앞선 코드 스니펫이 포함된 전체 스크립트는 아래와 같습니다:

```python theme={null}
import wandb
import pandas as pd

# CSV를 새 데이터프레임으로 읽기
new_iris_dataframe = pd.read_csv("iris.csv")

# 데이터프레임을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)

# 행 제한을 200000으로 늘리고 재사용을 쉽게 하기 위해
# 테이블을 아티팩트에 추가
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 데이터 보존을 위해 아티팩트 내에 원본 csv 파일을 로깅
iris_table_artifact.add_file("iris.csv")

# 데이터 로깅을 위해 W&B run 시작
with wandb.init(project="tables-walkthrough") as run:

    # run으로 시각화하기 위해 테이블을 로깅...
    run.log({"iris": iris_table})

    # 사용 가능한 행 제한을 늘리기 위해 아티팩트로도 로깅!
    run.log_artifact(iris_table_artifact)
```

<div id="import-and-log-your-csv-of-experiments">
  ## Experiments CSV를 임포트하고 로그하기
</div>

경우에 따라 실험 세부 정보가 CSV 파일에 들어 있을 수 있습니다. 이러한 CSV 파일에 일반적으로 포함되는 정보는 다음과 같습니다.

* 실험 run 이름
* 초기 [notes](/ko/models/runs/#add-a-note-to-a-run)
* 실험을 구분하기 위한 [Tags](/ko/models/runs/tags/)
* 실험에 필요한 설정([Sweeps Hyperparameter Tuning](/ko/models/sweeps/)도 활용할 수 있다는 추가 이점이 있습니다).

| Experiment   | Model Name       | Notes                    | Tags          | Num Layers | Final Train Acc | Final Val Acc | Training Losses                       |
| ------------ | ---------------- | ------------------------ | ------------- | ---------- | --------------- | ------------- | ------------------------------------- |
| Experiment 1 | mnist-300-layers | 트레이닝 데이터에 과적합이 너무 심함     | \[latest]     | 300        | 0.99            | 0.90          | \[0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
| Experiment 2 | mnist-250-layers | 현재 최고 성능 모델              | \[prod, best] | 250        | 0.95            | 0.96          | \[0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
| Experiment 3 | mnist-200-layers | 기준 모델보다 성능이 낮음. 디버깅이 필요함 | \[debug]      | 200        | 0.76            | 0.70          | \[0.55, 0.45, 0.44, 0.42, 0.40, 0.39] |
| ...          | ...              | ...                      | ...           | ...        | ...             | ...           |                                       |
| Experiment N | mnist-X-layers   | NOTES                    | ...           | ...        | ...             | ...           | \[..., ...]                           |

W\&B는 실험 정보가 담긴 CSV 파일을 W\&B Experiment Run으로 변환할 수 있습니다. 다음 코드 스니펫과 코드 스크립트는 실험 CSV 파일을 임포트하고 로깅하는 방법을 보여줍니다.

1. 시작하려면 먼저 CSV 파일을 읽어 Pandas 데이터프레임으로 변환하세요. `"experiments.csv"`를 CSV 파일 이름으로 바꾸세요:

```python theme={null}
import wandb
import pandas as pd

FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

# Pandas DataFrame을 다루기 쉽게 형식 변환
for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]
```

2. 다음으로, [`wandb.init()`](/ko/models/ref/python/functions/init)을 사용해 W\&B에서 추적 및 로깅할 새 W\&B Run을 시작하세요:

   ```python theme={null}
   with wandb.init(
       project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
   ) as run:
   ```

실험이 진행되는 동안 메트릭의 각 인스턴스를 모두 로깅해 두면 W\&B에서 이를 확인하고, 쿼리하고, 분석할 수 있습니다. 이를 위해 [`run.log()`](/ko/models/ref/python/experiments/run/#method-runlog) 명령을 사용하세요:

```python theme={null}
run.log({key: val})
```

선택적으로 [`define_metric`](/ko/models/ref/python/experiments/run#define_metric) API를 사용해 run의 결과를 정의할 최종 summary 메트릭을 log할 수 있습니다. 이 예제에서는 `run.summary.update()`를 사용해 summary 메트릭을 run에 추가합니다:

```python theme={null}
run.summary.update(summaries)
```

요약 메트릭에 대한 자세한 내용은 [요약 메트릭 로깅](./log-summary)을 참조하세요.

아래는 위의 샘플 표를 [W\&B 대시보드](/ko/models/track/workspaces/)로 변환하는 전체 예제 스크립트입니다:

```python theme={null}
FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]

    with  wandb.init(
        project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
    ) as run:

        for key, val in metrics.items():
            if isinstance(val, list):
                for _val in val:
                    run.log({key: _val})
            else:
                run.log({key: val})

        run.summary.update(summaries)
```
