dockerで機械学習(40) with anaconda(40)「Hands-On Data Science and Python Machine Learning」By Frank Kane

# 1.すぐに利用したい方へ(as soon as)
「Hands-On Data Science and Python Machine Learning」By Frank Kane

![cat40.gif](https://qiita-image-store.s3.amazonaws.com/0/51423/d1e9371a-ad93-9c72-37d7-59f7bb8368de.gif)
http://shop.oreilly.com/product/9781787280748.do

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

## docker run

```
$ docker pull kaizenjapan/anaconda-frank

$ docker run -it -p 8888:8888 kaizenjapan/anaconda-frank /bin/bash
```

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

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

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

dockerを起動したOSのディスクの整理を行う上で、どのやり方がいいか模索中です。一部の方法では、最初から共有設定にしています。

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

```
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# python SparkDecisionTree.py 
Traceback (most recent call last):
  File "SparkDecisionTree.py", line 1, in <module>
    from pyspark.mllib.regression import LabeledPoint
ImportError: No module named pyspark.mllib.regression
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# pip install pyspark
bash: pip: command not found
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# find / -name pip -print
/root/anaconda3/bin/pip
/root/anaconda3/lib/python3.7/site-packages/pip
/root/anaconda3/pkgs/pip-10.0.1-py37_0/bin/pip
/root/anaconda3/pkgs/pip-10.0.1-py37_0/lib/python3.7/site-packages/pip
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# /root/anaconda3/bin/pip install pyspark        
Collecting pyspark
  Downloading https://files.pythonhosted.org/packages/5e/cb/d8ff49ba885e2c88b8cf2967edd84235ffa9ac301bffef657dfa5605a112/pyspark-2.3.2.tar.gz (211.9MB)
    100% |████████████████████████████████| 211.9MB 201kB/s 
Collecting py4j==0.10.7 (from pyspark)
  Downloading https://files.pythonhosted.org/packages/e3/53/c737818eb9a7dc32a7cd4f1396e787bd94200c3997c72c1dbe028587bd76/py4j-0.10.7-py2.py3-none-any.whl (197kB)
    100% |████████████████████████████████| 204kB 951kB/s 
Building wheels for collected packages: pyspark
  Running setup.py bdist_wheel for pyspark ... done
  Stored in directory: /root/.cache/pip/wheels/be/7d/34/cd3cfbc75d8b6b6ae0658e5425348560b86d187fe3e53832cc
Successfully built pyspark
twisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed.
Installing collected packages: py4j, pyspark
Successfully installed py4j-0.10.7 pyspark-2.3.2
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# pip install --upgrade pip
bash: pip: command not found
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# apt-get install pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package pip
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning#  /root/anaconda3/bin/pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 8.5MB/s 
twisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed.
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-18.1
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning#  /root/anaconda3/bin/pip install PyHamcrest   
Collecting PyHamcrest
  Downloading https://files.pythonhosted.org/packages/9a/d5/d37fd731b7d0e91afcc84577edeccf4638b4f9b82f5ffe2f8b62e2ddc609/PyHamcrest-1.9.0-py2.py3-none-any.whl (52kB)
    100% |████████████████████████████████| 61kB 2.6MB/s 
Requirement already satisfied: six in /root/anaconda3/lib/python3.7/site-packages (from PyHamcrest) (1.11.0)
Requirement already satisfied: setuptools in /root/anaconda3/lib/python3.7/site-packages (from PyHamcrest) (40.2.0)
Installing collected packages: PyHamcrest
Successfully installed PyHamcrest-1.9.0
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# python SparkDecisionTree.py
Traceback (most recent call last):
  File "SparkDecisionTree.py", line 1, in <module>
    from pyspark.mllib.regression import LabeledPoint
ImportError: No module named pyspark.mllib.regression
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning#  /root/anaconda3/bin/pip install LabeledPoint
Collecting LabeledPoint
  Could not find a version that satisfies the requirement LabeledPoint (from versions: )
No matching distribution found for LabeledPoint
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning#  /root/anaconda3/bin/pip install regression  
Collecting regression
  Could not find a version that satisfies the requirement regression (from versions: )
No matching distribution found for regression
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# 

```

## jupyternotebook


```
root@0ece3ffce439:/Hands-On-Data-Science-and-Python-Machine-Learning# /root/anaconda3/bin/jupyter notebook --ip=0.0.0.0 --allow-root
[I 14:00:45.307 NotebookApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 14:00:45.307 NotebookApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[I 14:00:45.311 NotebookApp] Serving notebooks from local directory: /Hands-On-Data-Science-and-Python-Machine-Learning
[I 14:00:45.311 NotebookApp] The Jupyter Notebook is running at:
[I 14:00:45.311 NotebookApp] http://(0ece3ffce439 or 127.0.0.1):8888/?token=03a8851511d5e0e2457d5448b0f66f71b8378d4ac9b1c141
[I 14:00:45.311 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 14:00:45.313 NotebookApp] No web browser found: could not locate runnable browser.
[C 14:00:45.313 NotebookApp] 
```

ブラウザで
localhost:8888
を開く

<img width="453" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35313432332f34643333383165622d653832302d336437372d316635352d6665303161396231353731342e706e67.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/7c4bd7ae-2a80-cd52-e897-483f0c20267f.png">


上記の場合は、token に
03a8851511d5e0e2457d5448b0f66f71b8378d4ac9b1c141
を入れる。

<img width="998" alt="ju40-1.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/45a9f1bf-09ef-d8d7-54bb-233e313068f2.png">

<img width="980" alt="ju40-2.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/d463822d-f566-6056-93f5-fafc9145031b.png">

<img width="983" alt="ju40-3.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/6e8b6d7e-1c34-db5e-1c8a-0c032e559276.png">

<img width="976" alt="ju40-5.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/cbdb8876-f79b-6812-47f2-1f69a0ce312c.png">

<img width="972" alt="ju40-6.png" src="https://qiita-image-store.s3.amazonaws.com/0/51423/e6e5771a-e68c-6645-851a-2658f80f7927.png">



#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 kaizenjapan/anaconda-keras
Using default tag: latest
latest: Pulling from continuumio/anaconda3
Digest: sha256:e07b9ca98ac1eeb1179dbf0e0bbcebd87701f8654878d6d8ce164d71746964d1
Status: Image is up to date for continuumio/anaconda3:latest

$ docker run -it -p 8888:8888 continuumio/anaconda3 /bin/bash
````
実際にはkeras, tensorflow を利用していた他のpushをpull

##apt-get

```shell-session
(base) root@d8857ae56e69:/# apt-get update

(base) root@d8857ae56e69:/# apt-get install -y procps

(base) root@d8857ae56e69:/# apt-get install -y vim

(base) root@d8857ae56e69:/# apt-get install -y apt-utils

(base) root@d8857ae56e69:/# apt-get install sudo

apt-get install scala

apt-get install default-jre 



```

##ソース git

```
(base) root@f19e2f06eabb:/# git clone https://github.com/PacktPublishing/Hands-On-Data-Science-and-Python-Machine-Learning
```


## conda

```
(base) root@f19e2f06eabb:/d# conda update --prefix /opt/conda anaconda

```

## pip

```
(base) root@f19e2f06eabb:/# pip install --upgrade pip

/root/anaconda3/bin/pip install pyspark  
```

#docker hubへの登録

```
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
caef766a99ff        continuumio/anaconda3   "/usr/bin/tini -- /b…"   10 hours ago        Up 10 hours         0.0.0.0:8888->8888/tcp   sleepy_bassi

$ docker commit 3bf1f723168d   kaizenjapan/anaconda-frank
 

$ docker push kaizenjapan/anaconda-frank
```
# 参考資料(reference)
なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

dockerで機械学習(1) with anaconda(1)「ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装」斎藤 康毅 著
https://qiita.com/kaizen_nagoya/items/a7e94ef6dca128d035ab

dockerで機械学習(2)with anaconda(2)「ゼロから作るDeep Learning2自然言語処理編」斎藤 康毅 著
https://qiita.com/kaizen_nagoya/items/3b80dfc76933cea522c6

dockerで機械学習(3)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

Ubuntu 16.04 LTS で NVIDIA Docker を使ってみる
https://blog.amedama.jp/entry/2017/04/03/235901

一覧の一覧( 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 初稿 20181024　
ver. 0.11 push 20181028
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.