# 테이블 데이터 로드

테이블 데이터셋은 행과 열로 저장된 데이터를 설명하는 일반적인 데이터셋으로, 행은 예시(example)를, 열은 특징(feature, 연속형 또는 범주형)을 나타냅니다. 이러한 데이터셋은 일반적으로 CSV 파일, Pandas DataFrame, 데이터베이스 테이블에 저장됩니다. 이 가이드에서는 다음에서 테이블 데이터셋을 로드하고 생성하는 방법을 보여줍니다:

- CSV 파일
- Pandas DataFrames
- HDF5 파일
- 데이터베이스

## CSV 파일

🤗 Datasets는 [load_dataset()](/docs/datasets/v5.2.0/ko/package_reference/loading_methods#datasets.load_dataset) 메서드에서 범용 `csv` dataset 빌더 이름을 지정하여 CSV 파일을 읽을 수 있습니다. 여러 CSV 파일을 로드하려면 `data_files` 매개변수에 리스트로 전달하세요:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")

# load multiple CSV files
>>> dataset = load_dataset("csv", data_files=["my_file_1.csv", "my_file_2.csv", "my_file_3.csv"])
```

특정 CSV 파일을 train 및 test split에 매핑할 수도 있습니다:

```py
>>> dataset = load_dataset("csv", data_files={"train": ["my_train_file_1.csv", "my_train_file_2.csv"], "test": "my_test_file.csv"})
```

원격 CSV 파일을 로드하려면 대신 URL을 전달하세요:

```py
>>> base_url = "https://huggingface.co/datasets/lhoestq/demo1/resolve/main/data/"
>>> dataset = load_dataset('csv', data_files={"train": base_url + "train.csv", "test": base_url + "test.csv"})
```

압축된 CSV 파일을 로드하려면:

```py
>>> url = "https://domain.org/train_data.zip"
>>> data_files = {"train": url}
>>> dataset = load_dataset("csv", data_files=data_files)
```

## Pandas DataFrames

🤗 Datasets는 [from_pandas()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.from_pandas) 메서드를 사용하여 [Pandas DataFrames](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)에서 데이터셋을 로드하는 것도 지원합니다:

```py
>>> from datasets import Dataset
>>> import pandas as pd

# create a Pandas DataFrame
>>> df = pd.read_csv("https://huggingface.co/datasets/imodels/credit-card/raw/main/train.csv")
>>> df = pd.DataFrame(df)
# load Dataset from Pandas DataFrame
>>> dataset = Dataset.from_pandas(df)
```

`splits` 매개변수를 사용하여 데이터셋 분할 이름을 지정합니다:

```py
>>> train_ds = Dataset.from_pandas(train_df, split="train")
>>> test_ds = Dataset.from_pandas(test_df, split="test")
```

데이터셋이 예상대로 보이지 않는 경우, [데이터셋의 기능을 명시적으로 지정](loading#specify-features)해야 합니다. [pandas.Series](https://pandas.pydata.org/docs/reference/api/pandas.Series.html)에는 Arrow가 데이터 유형을 자동으로 추론하는 데 필요한 정보가 항상 포함되지 않을 수 있습니다. 예를 들어, DataFrame의 길이가 `0`이거나 Series에 `None/NaN` 객체만 포함된 경우, 유형은 `null`로 설정됩니다.

## HDF5 파일

[HDF5](https://www.hdfgroup.org/solutions/hdf5/) 파일은 과학 계산 및 기계 학습에서 대량의 수치 데이터를 저장하는 데 일반적으로 사용됩니다. 🤗 Datasets로 HDF5 파일을 로드하는 방법은 CSV 파일을 로드하는 것과 유사합니다:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("hdf5", data_files="data.h5")
```

HDF5 로더는 파일이 "테이블" 구조, 즉 파일 내 모든 데이터셋이 첫 번째 차원에서 (같은 수의) 행을 가질 것이라고 가정한다는 점에 유의하세요.

## 데이터베이스

데이터베이스에 저장된 데이터셋은 일반적으로 SQL 쿼리로 접근합니다. 🤗 Datasets를 사용하면 데이터베이스에 연결하여 필요한 데이터를 쿼리하고 이를 데이터셋으로 만들 수 있습니다. 그런 다음 🤗 Datasets의 모든 처리 기능을 사용하여 데이터셋을 학습에 맞게 준비할 수 있습니다.

### SQLite

SQLite는 빠르고 설정이 간편한 소형 경량 데이터베이스입니다. 기존 데이터베이스를 사용해도 되고, 처음부터 시작하는 것을 따라 해도 됩니다.

이 [Covid-19 데이터](https://github.com/nytimes/covid-19-data/blob/master/us-states.csv)를 사용하여 New York Times의 빠른 SQLite 데이터베이스를 만들어 시작해 보세요:

```py
>>> import sqlite3
>>> import pandas as pd

>>> conn = sqlite3.connect("us_covid_data.db")
>>> df = pd.read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-states.csv")
>>> df.to_sql("states", conn, if_exists="replace")
```

`us_covid_data.db` 데이터베이스에 `states` 테이블을 생성하며, 이제 이를 데이터셋으로 로드할 수 있습니다.

데이터베이스에 연결하려면 데이터베이스를 식별하는 [URI 문자열](https://docs.sqlalchemy.org/en/13/core/engines.html#database-urls)이 필요합니다. URI를 사용하여 데이터베이스에 연결하면 반환된 데이터셋이 캐시됩니다. URI 문자열은 데이터베이스 방언별로 다르므로, 사용 중인 데이터베이스에 해당하는 [Database URLs](https://docs.sqlalchemy.org/en/13/core/engines.html#database-urls)을 확인하십시오.

SQLite의 경우 다음과 같습니다:

```py
>>> uri = "sqlite:///us_covid_data.db"
```

테이블 이름과 URI를 [from_sql()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.from_sql)에 전달하여 테이블을 로드합니다:

```py
>>> from datasets import Dataset

>>> ds = Dataset.from_sql("states", uri)
>>> ds
Dataset({
    features: ['index', 'date', 'state', 'fips', 'cases', 'deaths'],
    num_rows: 54382
})
```

이후 [filter()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.filter)와 같은 🤗 Datasets의 모든 처리 기능을 사용할 수 있습니다. 예를 들어:

```py
>>> ds.filter(lambda x: x["state"] == "California")
```

전체 테이블 대신 SQL 쿼리를 통해 데이터셋을 로드할 수도 있으며, 이는 여러 테이블을 조회하고 조인하는 데 유용합니다.

쿼리와 URI를 [from_sql()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.from_sql)에 전달하여 데이터셋을 로드합니다:

```py
>>> from datasets import Dataset

>>> ds = Dataset.from_sql('SELECT * FROM states WHERE state="California";', uri)
>>> ds
Dataset({
    features: ['index', 'date', 'state', 'fips', 'cases', 'deaths'],
    num_rows: 1019
})
```

이후 [filter()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.filter)와 같은 🤗 Datasets의 모든 처리 기능을 사용할 수 있습니다. 예를 들어:

```py
>>> ds.filter(lambda x: x["cases"] > 10000)
```

### PostgreSQL

PostgreSQL 데이터베이스에서 데이터셋을 연결하고 로드할 수도 있지만, 해당 예제는 노트북에서만 실행되도록 설계되어 있어 문서에서는 직접 시연하지 않습니다. 대신, 이 [노트북](https://colab.research.google.com/github/nateraw/huggingface-hub-examples/blob/main/sql_with_huggingface_datasets.ipynb#scrollTo=d83yGQMPHGFi)에서 PostgreSQL 서버를 설치하고 설정하는 방법을 확인해 보세요!

PostgreSQL 데이터베이스를 설정한 후, [from_sql()](/docs/datasets/v5.2.0/ko/package_reference/main_classes#datasets.Dataset.from_sql) 메서드를 사용하여 테이블이나 쿼리에서 데이터셋을 로드할 수 있습니다.

