AutoMLライブラリーPyCaretの環境構築の覚書

### pandas-profilingでエラーが出ないようにインストールする

- 【追記①2020/8/11】 8/1に[アナウンス](https://towardsdatascience.com/announcing-pycaret-2-0-39c11014540e)があり、[PyCaret2.0](https://github.com/pycaret/pycaret)が正式リリースされました。このバージョンをインストール(Ubuntu 18.04/20.04, macOS 10.14.6)したところ、このエラーは出ていません。[アナウンスの記事](https://towardsdatascience.com/announcing-pycaret-2-0-39c11014540e)を参考にインストールし動作を確認後、念の為、本記事のようにバックアップとしてrequirements.txtを作成しておくのも良いかと思います。
- 【追記②2020/8/11】 PyCaret2の新機能AutoMLのサンプルコードではエラーが出る箇所がありますが、以下のように修正すると解消します。

```shell:bash
# サンプルコード
# blend top 5 base models 
blender = blend_models(estimator_list = top5) 

# catboostがtop5に含まれるがblend_models関数に対応していないために (Type Error)が出る
# 前段のcompare all baseline models and select top 5の
top5 = compare_models(n_select = 5) 
#　を以下に変更する。
top5 = compare_models(n_select = 5, blacklist = ['catboost']) 
catboost = create_model('catboost')
```



#### コンピュータ環境
OS:Ubuntu 18.04LTS

#### Anaconda3仮想環境の作成

```shell:bash
$ conda create -n pycaret python=3.6.10
```

#### conda仮想環境下でpyCaretのインストール
1.[マニュアル](https://pycaret.org/install/)に従ってpipでインストール

```shell:bash
$ conda activate pycaret
(pycaret)$ pip install pycaret
(pycaret)$ python -m ipykernel install --user --name pycaret --display-name "display-name-here"
```

ところが最近あらたにインストールしたら、jupyter notebookで以下のコマンドを実行るとエラーを吐くようになった。

```python:python
from pycaret.datasets import get_data
dataset = get_data('credit', profile=True)
```

これは PyCaretのdata respository から`get_data`でダウンロードするためのコマンドで、もともとのチュートリアルでは、引数`profile=True`を与えていない。つまりデフォルトの引数`profile=False`で実行している。*この場合はデータの最初の５行が表示されるだけである*。

　一方、引数`profile=True`を与えると、[pandas profiling report](https://qiita.com/h_kobayashi1125/items/02039e57a656abe8c48f)の形式で出力してくれる。DataFrame の基本統計量や相関係数などを一度にまとめて確認できるのだが、`import pandas_profiling`とわざわざする必要がない。

　ところが、`pip install pycaret`を使ってインストールした時期が異なると、いくつかのパッケージのサブバージョンが違っているからなのか、 `profile=True`でエラーが出るようになったので、requirements.txtを使ってインストールしている。

2.**requirements.txtファイルを別途、仮想環境を起動したディレクトリに置いておき、pipでインストール**

```shell:bash
$ conda activate pycaret
(pycaret)$ pip install -r requirements.txt
(pycaret)$ python -m ipykernel install --user --name pycaret --display-name "display-name-here"
```
requirements.txtには以下を記述しておく。

```
astropy==4.0.1.post1
attrs==19.3.0
awscli==1.18.64
backcall==0.1.0
bleach==3.1.5
blis==0.4.1
boto==2.49.0
boto3==1.13.14
botocore==1.16.14
catalogue==1.0.0
catboost==0.20.2
certifi==2020.4.5.1
chardet==3.0.4
chart-studio==1.1.0
click==7.1.2
colorama==0.4.3
colorlover==0.3.0
combo==0.1.0
confuse==1.1.0
cufflinks==0.17.0
cycler==0.10.0
cymem==2.0.3
datefinder==0.7.0
DateTime==4.3
decorator==4.4.2
defusedxml==0.6.0
docutils==0.15.2
entrypoints==0.3
funcy==1.14
future==0.18.2
gensim==3.8.3
graphviz==0.14
htmlmin==0.1.12
idna==2.9
importlib-metadata==1.6.0
ipykernel==5.3.0
ipython==7.14.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.17.0
Jinja2==2.11.2
jmespath==0.10.0
joblib==0.15.1
jsonschema==3.2.0
jupyter-client==6.1.3
jupyter-core==4.6.3
kiwisolver==1.2.0
kmodes==0.10.1
lightgbm==2.3.1
llvmlite==0.32.1
MarkupSafe==1.1.1
matplotlib==3.2.1
missingno==0.4.2
mistune==0.8.4
mlxtend==0.17.2
more-itertools==8.3.0
murmurhash==1.0.2
nbconvert==5.6.1
nbformat==5.0.6
nltk==3.5
notebook==6.0.3
numba==0.49.1
numexpr==2.7.1
numpy==1.18.4
packaging==20.4
pandas==1.0.3
pandas-profiling==2.3.0
pandocfilters==1.4.2
parso==0.7.0
pexpect==4.8.0
phik==0.9.12
pickleshare==0.7.5
Pillow==7.1.2
plac==1.1.3
plotly==4.4.1
pluggy==0.13.1
preshed==3.0.2
prometheus-client==0.7.1
prompt-toolkit==3.0.5
ptyprocess==0.6.0
py==1.8.1
pyasn1==0.4.8
pycaret==1.0.0
Pygments==2.6.1
pyLDAvis==2.1.2
pyod==0.7.9
pyparsing==2.4.7
pyrsistent==0.16.0
pytest==5.4.2
python-dateutil==2.8.1
pytz==2020.1
PyYAML==5.3.1
pyzmq==19.0.1
regex==2020.5.14
requests==2.23.0
retrying==1.3.3
rsa==3.4.2
s3transfer==0.3.3
scikit-learn==0.22
scipy==1.4.1
seaborn==0.10.1
Send2Trash==1.5.0
shap==0.32.1
six==1.14.0
smart-open==2.0.0
spacy==2.2.4
srsly==1.0.2
suod==0.0.4
tbb==2020.0.133
terminado==0.8.3
testpath==0.4.4
textblob==0.15.3
thinc==7.4.0
tornado==6.0.4
tqdm==4.46.0
traitlets==4.3.3
umap-learn==0.4.3
urllib3==1.25.9
wasabi==0.6.0
wcwidth==0.1.9
webencodings==0.5.1
widgetsnbextension==3.5.1
wordcloud==1.7.0
xgboost==0.90
yellowbrick==1.0.1
zipp==3.1.0
zope.interface==5.1.0
```


3.pandas でデータを読み込んでpandas profiling reportを出力する場合には、以下。

```python:python
import pandas as pd
import numpy as np

df = pd.read_csv('/path/to/data.csv',sep=",", encoding="utf-8")

import pandas_profiling

pandas_profiling.ProfileReport(df)
```