質問: mglearn.datasets.make_forge()」というコードをjupyter notebookで打つと「name 'mglearn' is not defined」という表示が出てきます。
回答: 簡単に結論をいえば、jupyter notebook(それ以外の場合も同じです)で`mglearn`を使う場合には、`!pip install mglearn`でインストールして(勿論できていれば必要はないですが)、`import mglearn`でインポートする必要があります。 ただし、`mglearn`をインポートする方法としては、`import mglearn`と明示的にする以外に別の方法があり、「Pythonではじめる機械学習」では、その別の方法を使っています。 02-supervised-learning のコードは以下のようになっています。これだけをみるとJupyter Notebookで `X, y = mglearn.datasets.make_forge()`と打ち込むと動作するように思うかもしれません。 ``` %matplotlib inline from preamble import * # generate dataset X, y = mglearn.datasets.make_forge() ``` しかし、`preamble.py`のコードは以下のようになっています。 ``` from IPython.display import set_matplotlib_formats, display import pandas as pd import numpy as np import matplotlib.pyplot as plt import mglearn 中略 __all__ = ['np', 'mglearn', 'display', 'plt', 'pd'] ``` `from preamble import *`とすることで、`__all__`にあるモジュールがインポートされます。`from preamble import *`という書き方は、処理に時間がかかったり、副作用がおこったりするので嫌われていますが、`__all__`でされるインポートされるモジュールで明示することでその問題は解決できます。ドキュメント パッケージから * を import する また、`*`を使うと可読性に乏しいコードになるため使用を避けるべきとなっており、この質問でも混乱がおこっていますが、チュートリアルにあるように対話セッションでキータイプの量を減らすために使うのは有効な使い方です。チュートリアル 6.1. モジュールについてもうすこし Jupyter Notebookで`mglearn`を使う場合には、`pandas`,`numpy`,`matplotlib`等も使うはずで、それを毎回入力するのは手間なので、`preamble.py`をカレントディレクトリにコピーして`from preamble import *`とすることで入力の手間を省くことができます。また、ファイルのコピーが手間な場合は、`preamble.py`の中身をコピーしてJupyter Notebook のセルにペーストして実行することでも対応できます。 また、 からダウンロードして、それのJupyter Notebookのファイル(.ipynb)を使う場合は、`mglearn`をインストールする必要はありません。なぜかというと`mglearn`のソースコードがそこに入っているためです。それ以外の場所で使う場合は、`mglearn`を`pip`でインストールする必要があります。