# 表形式データの読み込み

Tabular datasetとは、行と列で保存されたデータを記述するために使用される汎用的なデータセットです。ここで、行は1つのサンプル（example）を表し、列は特徴量（feature）を表します（連続値またはカテゴリ値のいずれか）。これらのデータセットは、一般的にCSVファイル、PandasのDataFrame、データベースのテーブルとして保存されます。このガイドでは、以下からタブラーデータセットを読み込み、作成する方法を示します。

- CSVファイル
- PandasのDataFrame
- HDF5ファイル
- データベース

## CSVファイル

🤗 Datasets は、[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset) メソッドで汎用の `csv` データセットビルダー名を指定することで、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の分割にマッピングすることもできます:

```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のDataFrame

🤗 Datasets は、[from_pandas()](/docs/datasets/main/ja/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は、高速でセットアップが簡単な小型かつ軽量なデータベースです。既存のデータベースを使用することも、ゼロから始めることもできます。

このNew York Timesの[Covid-19データ](https://github.com/nytimes/covid-19-data/blob/master/us-states.csv)を使って、まず簡単な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/main/ja/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/main/ja/package_reference/main_classes#datasets.Dataset.filter) など、🤗 Datasets のすべての処理機能を使用できます。

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

SQLクエリからデータセットを読み込むこともできます。これは、複数のテーブルをクエリおよび結合する場合に便利です。

クエリとURIを[from_sql()](/docs/datasets/main/ja/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/main/ja/package_reference/main_classes#datasets.Dataset.filter) など、🤗 Datasets のすべての処理機能を使用できます。

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

### PostgreSQL

PostgreSQLデータベースからデータセットを接続して読み込むこともできますが、この例はノートブックでのみ実行されることを想定しているため、ドキュメントでは直接その方法を示していません。代わりに、PostgreSQLサーバーのインストールとセットアップ方法については、この[ノートブック](https://colab.research.google.com/github/nateraw/huggingface-hub-examples/blob/main/sql_with_huggingface_datasets.ipynb#scrollTo=d83yGQMPHGFi)を参照してください。

PostgreSQLデータベースのセットアップが完了したら、[from_sql()](/docs/datasets/main/ja/package_reference/main_classes#datasets.Dataset.from_sql)メソッドを使用して、テーブルやクエリからデータセットを読み込むことができます。

