dockerで機械学習(9) with anaconda(9)「pythonではじめる機械学習」Andreas C. Muller, Sarah Guido 著

# 1.すぐに利用したい方へ(as soon as)

pythonではじめる機械学習 Andreas C. Muller, Sarah Guido 著

![picture_large978-4-87311-798-0.jpeg](https://qiita-image-store.s3.amazonaws.com/0/51423/21a1d393-29be-1e4c-fc84-7a0a15f49027.jpeg)
https://www.oreilly.co.jp/books/9784873117980/

p.12 
「本書のコードは双方で動くように書かれているが、厳密にはPython2では若干出力が違っているかもしれない」
まずpython3で動作確認し、その後python2でも動作確認する予定である。
<この項は書きかけです。順次追記します。>

## docker
dockerを導入し、Windows, Macではdockerを起動しておいてください。
Windowsでは、BiosでIntel Virtualizationをenableにしないとdockerが起動しない場合があります。
また、セキュリティの警告などが出ることがあります。

## docker pull and run

```
$ docker pull kaizenjapan/conda3-amueller

$ docker run -it -p 8888:8888 kaizenjapan/conda3-amueller /bin/bash
```

以下のshell sessionでは
(base) root@f19e2f06eabb:/#は入力促進記号(comman prompt)です。実際には数字の部分が違うかもしれません。この行の#の右側を入力してください。
それ以外の行は出力です。出力にエラー、違いがあれば、コメント欄などでご連絡くださると幸いです。
それぞれの章のフォルダに移動します。

dockerの中と、dockerを起動したOSのシェルとが表示が似ている場合には、どちらで捜査しているか間違えることがあります。dockerの入力促進記号(comman prompt)に気をつけてください。

## ファイル共有または複写
dockerとdockerを起動したOSでは、ファイル共有をするか、ファイル複写するかして、生成したファイルをブラウザ等表示させてください。参考文献欄にやり方のURLを記載しています。

複写の場合は、dockerを起動したOS側コマンドを実行しました。お使いのdockerの番号で置き換えてください。複写したファイルをブラウザで表示し内容確認しました。

# 第1章

```
(base) root@040a6abb468b:/# ls
bin  boot  dev	etc  home  introduction_to_ml_with_python  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var

(base) root@040a6abb468b:/# cd introduction_to_ml_with_python/

(base) root@040a6abb468b:/introduction_to_ml_with_python# ls
01-introduction.ipynb		04-representing-data-feature-engineering.ipynb	07-working-with-text-data.ipynb  cover.jpg	  images
02-supervised-learning.ipynb	05-model-evaluation-and-improvement.ipynb	08-conclusion.ipynb		 data		  mglearn
03-unsupervised-learning.ipynb	06-algorithm-chains-and-pipelines.ipynb		README.md			 environment.yml  preamble.py

(base) root@040a6abb468b:/introduction_to_ml_with_python# (base) root@31962e40c4e8:/#  jupyter notebook --ip=0.0.0.0 --allow-root
[I 13:40:42.077 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 13:40:42.077 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 13:40:42.081 NotebookApp] Serving notebooks from local directory: /
[I 13:40:42.082 NotebookApp] The Jupyter Notebook is running at:
[I 13:40:42.082 NotebookApp] http://(31962e40c4e8 or 127.0.0.1):8888/?token=b17ae3b8734a4f9e9ca8966549f4921e1b0b92f9b8c21138
[I 13:40:42.082 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 13:40:42.084 NotebookApp] No web browser found: could not locate runnable browser.
[C 13:40:42.084 NotebookApp] 
    
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://(31962e40c4e8 or 127.0.0.1):8888/?token=b17ae3b8734a4f9e9ca8966549f4921e1b0b92f9b8c21138
[I 13:40:55.489 NotebookApp] 302 GET / (172.17.0.1) 0.55ms
[I 13:41:02.760 NotebookApp] Writing notebook-signing key to /root/.local/share/jupyter/notebook_secret
[W 13:41:02.764 NotebookApp] Notebook introduction_to_ml_with_python/01-introduction.ipynb is not trusted
[I 13:41:03.467 NotebookApp] 302 GET /notebooks/introduction_to_ml_with_python/images/iris_petal_sepal.png (172.17.0.1) 0.96ms
[I 13:41:04.205 NotebookApp] Kernel started: f1e65f6f-4743-4e2a-bcc8-900016d4e998
[I 13:41:04.805 NotebookApp] Adapting to protocol v5.1 for kernel f1e65f6f-4743-4e2a-bcc8-900016d4e998
[I 13:43:04.181 NotebookApp] Saving file at /introduction_to_ml_with_python/01-introduction.ipynb
[W 13:43:04.183 NotebookApp] Notebook introduction_to_ml_with_python/01-introduction.ipynb is not trusted
[I 14:57:05.976 NotebookApp] Starting buffering for f1e65f6f-4743-4e2a-bcc8-900016d4e998:4d92028184f8491b89a300c250760954
```
dockerを起動したOSのブラウザで localhost:8888 を表示してください。

<img width="453" alt="jupy1.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/4d3381eb-e820-3d77-1f55-fe01a9b15714.png">

tokenの欄に、b17ae3b8734a4f9e9ca8966549f4921e1b0b92f9b8c21138
をコピペ
<img width="880" alt="and1.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/6cdd8a55-cad8-6225-4388-3155857880fb.png">

01-introduction.ipynbをクリック

<img width="863" alt="and2.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/304c03ce-0b31-de62-2992-2d1db9c7f5c1.png">

In[1]があるため、本より番号が１多くなっている。
図1-1 のグラフの数字がきめ細かい。

```shell-session:Out[8]
Python version: 3.6.3 |Anaconda, Inc.| (default, Nov 20 2017, 20:41:42) 
[GCC 7.2.0]
pandas version: 0.21.0
matplotlib version: 2.1.0
NumPy version: 1.13.3
SciPy version: 1.0.0
IPython version: 6.2.1
scikit-learn version: 0.20.dev0
```
それぞれ少しづつ版が新しいことを確認。

<img width="496" alt="and3.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/29cc04fe-c88f-5d91-f5bb-ba25192da6f2.png">

日本語ではなく英語のまま。

```shell-session:in[87]
In [93]:

display(mglearn.plots.plot_logistic_regression_graph())
<graphviz.dot.Digraph at 0x7f071f5f16d8>
```


# 2. dockerを自力で構築する方へ

ここから下は、上記のpullしていただいたdockerをどういう方針で、どういう手順で作ったかを記録します。
上記のdockerを利用する上での参考資料です。本の続きを実行する上では必要ありません。
自力でdocker/anacondaを構築する場合の手順になります。
dockerfileを作る方法ではありません。ごめんなさい。
## docker

ubuntu, debianなどのLinuxを、linux, windows, mac osから共通に利用できる仕組み。
利用するOSの設定を変更せずに利用できるのがよい。
同じ仕様で、大量の人が利用することができる。
ソフトウェアの開発元が公式に対応しているものと、利用者が便利に仕立てたものの両方が利用可能である。今回は、公式に配布しているものを、自分で仕立てて、他の人にも利用できるようにする。
## python

DeepLearningの実習をPhthonで行って来た。
pythonを使う理由は、多くの機械学習の仕組みがpythonで利用できることと、Rなどの統計解析の仕組みもpythonから容易に利用できることがある。
### anaconda

pythonには、2と３という版の違いと、配布方法の違いなどがある。
Anacondaでpython3をこの１年半利用してきた。
Anacondaを利用した理由は、統計解析のライブラリと、JupyterNotebookが初めから入っているからである。
## docker公式配布

ubuntu, debianなどのOSの公式配布,gcc, anacondaなどの言語の公式配布などがある。
これらを利用し、docker-hubに登録することにより、公式配布の質の確認と、変更権を含む幅広い情報の共有ができる。dockerが公式配布するものではなく、それぞれのソフト提供者の公式配布という意味。
### docker pull

docker公式配布の利用は、URLからpullすることで実現する。
### docker Anaconda

anacondaが公式配布しているものを利用。

```
$  docker pull continuumio/anaconda3
Using default tag: latest
latest: Pulling from continuumio/anaconda3
Digest: sha256:e07b9ca98ac1eeb1179dbf0e0bbcebd87701f8654878d6d8ce164d71746964d1
Status: Image is up to date for continuumio/anaconda3:latest
OgawaKiyoshi-no-MacBook-Pro:docker-toppers ogawakiyoshi$ docker run -it -p 7777:7777 continuumio/anaconda3 /bin/bash
```

## apt

```shell-session
(base) root@040a6abb468b:/# apt update

(base) root@040a6abb468b:/# apt install -y procps

(base) root@040a6abb468b:/# apt install -y vim

(base) root@040a6abb468b:/# apt install -y apt-utils

(base) root@040a6abb468b:/# apt install sudo

(base) root@040a6abb468b:/# apt install -y git
```

## git
```
(base) root@f19e2f06eabb:/# git clone https://github.com/amueller/introduction_to_ml_with_python
```


# 3.docker hub 登録
ここからは、新たにソフトを導入したdockerを自分のhubに登録する方法です。
ご自身で何かソフトウェアを導入されたら、ぜひhubに登録することをお勧めします。
続きの作業を誰かに依頼したり、エラーがでてわからなくなったときに、対処方法を問い合わせるのにも役立ちます。

```
$ docker ps 
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                            NAMES
b28c065c8b45        continuumio/anaconda3            "/usr/bin/tini -- /b…"   21 hours ago        Up 21 hours                                                                                  elegant_gates       

$ docker commit b28c065c8b45  kaizenjapan/ pull kaizenjapan/conda3-amueller
sha256:2d26c8621bf9cc3c2400477a9db98bb21a953fdbe53c22da395ca4a80b15261f

$ docker push  kaizenjapan/ pull kaizenjapan/conda3-amueller
The push refers to repository [docker.io/kaizenjapan//conda3-amueller]
b6d479cc3a0f: Pushing [==>                                                ]  68.41MB/1.453GB
6410333f34cf: Mounted from kaizenjapan/anaconda-keras-ten 
cf342e34eca3: Mounted from kaizenjapan/anaconda-keras-ten 
cea95006e36a: Mounted from kaizenjapan/anaconda-keras-ten 
0f3a12fef684: Mounted from kaizenjapan/anaconda-keras-ten 


```
# 参考資料(reference)
dockerで機械学習 with anaconda(1)「ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装」斎藤 康毅 著
https://qiita.com/kaizen_nagoya/items/a7e94ef6dca128d035ab
dockerで機械学習with anaconda(2)「ゼロから作るDeep Learning2自然言語処理編」斎藤 康毅 著
https://qiita.com/kaizen_nagoya/items/3b80dfc76933cea522c6
dockerで機械学習 with anaconda(3)「直感Deep Learning」Antonio Gulli、Sujit Pal　第1章,第2章
https://qiita.com/kaizen_nagoya/items/483ae708c71c88419c32

dockerで機械学習(71) 環境構築(1) docker どっかーら、どーやってもエラーばっかり。
https://qiita.com/kaizen_nagoya/items/690d806a4760d9b9e040
dockerで機械学習(72) 環境構築(2) Docker for Windows
https://qiita.com/kaizen_nagoya/items/c4daa5cf52e9f0c2c002
dockerで機械学習(73) 環境構築(3) docker/linux/macos bash スクリプト, ms-dos batchファイル
https://qiita.com/kaizen_nagoya/items/3f7b39110b7f303a5558
dockerで機械学習(74) 環境構築(4) R 難関いくつ？
https://qiita.com/kaizen_nagoya/items/5fb44773bc38574bcf1c
dockerで機械学習(75)環境構築(5)docker関連ファイルの管理
https://qiita.com/kaizen_nagoya/items/4f03df9a42c923087b5d


OpenCVをPythonで動かそうとしてlibGL.soが無いって言われたけど解決した。
https://qiita.com/toshitanian/items/5da24c0c0bd473d514c8

サーバサイドにおけるmatplotlibによる作図Tips
https://qiita.com/TomokIshii/items/3a26ee4453f535a69e9e

Dockerでホストとコンテナ間でのファイルコピー
https://qiita.com/gologo13/items/7e4e404af80377b48fd5

Docker for Mac でファイル共有を利用する
https://qiita.com/seijimomoto/items/1992d68de8baa7e29bb5


「名古屋のIoTは名古屋のOSで」Dockerをどっかーらどうやって使えばいいんでしょう。TOPPERS/FMP on RaspberryPi with Macintosh編 ５つの関門
https://qiita.com/kaizen_nagoya/items/9c46c6da8ceb64d2d7af

64bitCPUへの道 and/or 64歳の決意
https://qiita.com/kaizen_nagoya/items/cfb5ffa24ded23ab3f60

ゼロから作るDeepLearning２自然言語処理編　読書会の進め方（例）
https://qiita.com/kaizen_nagoya/items/025eb3f701b36209302e

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
# 文書履歴(document history)
ver. 0.10 初稿 20181007 
ver. 0.11 誤記訂正 20181014
ver. 0.12 みだし、参考文献追記 20181019
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.