モデル永続化
============
本項では、モデル永続化について、SAMPO/FABとsklearn-fabにおける実現方法およびスクリプトの差異を示します。

**SAMPO/FAB**

* SAMPO API export_process関数によりプロセスを保存し、import_process関数によりロードします。
* SAMPO/FABでは、プロセス内にモデルだけでなく、学習用データや属性データも含みます。

**sklearn-fab**

* \ joblib_\を利用し、学習済みのestimatorインスタンスをモデルとして保存、ロードします。
* 学習時に使用したデータを併せて保存する場合、データが\ pandas.DataFrame_\形式であれば\ `pandas.DataFrame.to_csv()`_\を使用します。

.. csv-table::
  :header: "SAMPO/FAB", "sklearn-fab"

  "
  .. code-block:: python

    import os

    # プロセスの保存
    output_dir = './export_dir'
    process_store.export_process(pstore_url, train_proc_name, output_dir)

    # プロセスのロード
    new_pstore_url = './new_pstore'
    process_store.create(new_pstore_url)

    with os.scandir(output_dir) as exported_processes:
        for entry in exported_processes:
            if entry.is_dir():
                process_store.import_process(new_pstore_url, entry.path)

    process_store.list_process_metadata(new_pstore_url)
  ", "
  .. code-block:: python
    :caption: **モデルの保存とロード**

    import joblib

    # モデルの保存
    save_estimator_path = 'save_estimator.joblib'
    joblib.dump(estimator, save_estimator_path)

    # モデルのロード
    loaded_estimator = joblib.load(save_estimator_path)
    loaded_estimator

  .. code-block:: python
    :caption: **データの保存**

    # データの保存
    train_data.to_csv('./train_data.csv', index=False)
  "

.. _joblib: https://joblib.readthedocs.io/en/latest/
.. _pandas.DataFrame: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
.. _pandas.DataFrame.to_csv(): https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
