「はじめてのPython(22) AIプログラミング」金城俊哉 著 dockerで機械学習(5) with anaconda(5)

# 1.すぐに利用したい方へ(as soon as)
はじめてのPython AIプログラミング 金城俊哉 978-4-7980-4485-9 2016
https://www.shuwasystem.co.jp/products/7980html/4485.html

![a.jpg](https://qiita-image-store.s3.amazonaws.com/0/51423/2007d78b-0473-1452-d292-621f575b38a5.jpeg)

サンプルファイルのダウンロード
ftp://ftp2.shuwasystem.co.jp/pub/book/4485/sample.zip

 正誤表
ftp://ftp2.shuwasystem.co.jp/pub/book/4485/Seigohyo.pdf

<この項は書きかけです。順次追記します。>

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


## docker pull and run

```
$ docker pull kaizenjapan/anaconda-pythonai

$ docker run -it kaizenjapan/anaconda-pythonai /bin/bash
```

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

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

## ファイル共有または複写

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

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

## コマンドの説明


### ls
ファイル一覧

### cd
change directory

### python
拡張子.pyのpythonファイルを指定すれば、python記述を順次実行する。
`

フォルダを実行しようとすると次のエラーがでる。

```shell-session:docker
(base) root@6f4c91ae627f:/sample/chap05/07# python english_words1/
/opt/conda/bin/python: can't find '__main__' module in 'english_words1/'
```

ごめんなさい.フォルダだった。


以下、うまく動かなかった例を記述する。理由はそれぞれ調査中。

# sample

```
(base) root@6f4c91ae627f:/# cd sample
(base) root@6f4c91ae627f:/sample# ls
chap02	chap03	chap04	chap05	chap06	chap07
(base) root@6f4c91ae627f:/sample# cd chap02
(base) root@6f4c91ae627f:/sample/chap02# ls
03  04
(base) root@6f4c91ae627f:/sample/chap02# cd 03
(base) root@6f4c91ae627f:/sample/chap02/03# ls
hello.py  self_introduction.py
(base) root@6f4c91ae627f:/sample/chap02/03# python hello.py
あたしはレイです
```

# 第3章

```
# cd ../chap03/03
(base) root@6f4c91ae627f:/sample/chap03/03# python ray_answer_problem.py 
問題はナニ?>累乗
累乗を計算するネ。値は？--->3 
指数は？--->9
Traceback (most recent call last):
  File "ray_answer_problem.py", line 7, in <module>
    ans = int(math.pow(int(num),
ValueError: invalid literal for int() with base 10: '\udcef3'

```
## 第3章04
### while_break.py

```shell-session
(base) root@6f4c91ae627f:/sample/chap03/04# python while_break.py
何か入力して->Traceback (most recent call last):
  File "while_break.py", line 2, in <module>
    str = input('何か入力して->')
EOFError
```
###ray_answer_problem_roop.py 

```
(base) root@6f4c91ae627f:/sample/chap03/04# python ray_answer_problem_roop.py 
問題はナニカナ?>累乗
累乗を計算するネ。値は？--->3
指数は？--->9
19683
問題はナニカナ?>累乗
累乗を計算するネ。値は？--->999
指数は？--->999999999
Traceback (most recent call last):
  File "ray_answer_problem_roop.py", line 15, in <module>
    int(index)))
OverflowError: math range error
```
# 第4章
### 第4章03

```shell-session
(base) root@6f4c91ae627f:/sample/chap04/03# python answer_prog_past.py 
動詞を入力してネ>run
現在分詞はコレ->running
過去形はコレ  ->ran-run
動詞を入力してネ>do
Traceback (most recent call last):
  File "answer_prog_past.py", line 39, in <module>
    elif (present[-3] == 'a' or \
IndexError: string index out of range
```
### 第4章04


```
(base) root@6f4c91ae627f:/sample/chap04/04# python Ray_answer_English_writing.py 
第1文型の例文を作るネ
主語(S)は?>i
動詞(V)は?>do
i do.
第2文型の例文を作るネ
主語(S)は?>you
動詞(V)は?>do
補語(C)は?>nothing
you do nothing.
第3文型の例文を作るネ
主語(S)は?>she
動詞(V)は?>do
目的語(O)は?>it
she do it.
第4文型の例文を作るネ
主語(S)は?>he
動詞(V)は?>do
間接目的語(IO)は?>it
直接目的語(DO)は?>broken
he do it broken.
第5文型の例文を作るネ
主語(S)は?>it
動詞(V)は?>do
目的語(O)は?>that
補語(C)は?>broken
it do that broken.
```
### str1.py

```
(base) root@6f4c91ae627f:/sample/chap04# python str1.py 
  File "str1.py", line 13
    elif present == 'visit' or\
       ^
SyntaxError: invalid syntax
```
###第5章07

```shell-session
(base) root@6f4c91ae627f:/sample/chap05/07/ray_answer_meaning# python ray_answer_meaning.py 
```
なにもしない


# 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 continuumio/anaconda3 /bin/bash

## apt

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

(base) root@f19e2f06eabb:/# apt install -y procps vim apt-utils
```

## Deep Learning git
```
(base) root@6f4c91ae627f:/# wget ftp://ftp2.shuwasystem.co.jp/pub/book/4485/sample.zip
--2018-10-05 06:59:51--  ftp://ftp2.shuwasystem.co.jp/pub/book/4485/sample.zip
           => ‘sample.zip’
Resolving ftp2.shuwasystem.co.jp (ftp2.shuwasystem.co.jp)... 153.150.104.114
Connecting to ftp2.shuwasystem.co.jp (ftp2.shuwasystem.co.jp)|153.150.104.114|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub/book/4485 ... done.
==> SIZE sample.zip ... 149938
==> PASV ... done.    ==> RETR sample.zip ... done.
Length: 149938 (146K) (unauthoritative)

sample.zip          100%[===================>] 146.42K  57.6KB/s    in 2.5s    

2018-10-05 06:59:55 (57.6 KB/s) - ‘sample.zip’ saved [149938]

(base) root@6f4c91ae627f:/# ls
bin   dev  home  lib64	mnt  proc  run	       sbin  sys  usr
boot  etc  lib	 media	opt  root  sample.zip  srv   tmp  var
(base) root@6f4c91ae627f:/# apt-get install unzip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  zip
The following NEW packages will be installed:
  unzip
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 170 kB of archives.
After this operation, 547 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 unzip amd64 6.0-21 [170 kB]
Fetched 170 kB in 1s (113 kB/s) 
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76, <> line 1.)
debconf: falling back to frontend: Readline
Selecting previously unselected package unzip.
(Reading database ... 14672 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-21_amd64.deb ...
Unpacking unzip (6.0-21) ...
Processing triggers for mime-support (3.60) ...
Setting up unzip (6.0-21) ...
(base) root@6f4c91ae627f:/# ls
bin   dev  home  lib64	mnt  proc  run	       sbin  sys  usr
boot  etc  lib	 media	opt  root  sample.zip  srv   tmp  var
(base) root@6f4c91ae627f:/# unzip sample.zip
Archive:  sample.zip
   creating: sample/chap02/
   creating: sample/chap02/03/
 extracting: sample/chap02/03/hello.py  
 extracting: sample/chap02/03/self_introduction.py  

(中略)
 
 extracting: sample/chap07/09/img1.gif  
  inflating: sample/chap07/09/ray.py  
  inflating: sample/chap07/09/ray_answer_and_learning.py  
  inflating: sample/chap07/09/ray_form.py  
  inflating: sample/chap07/09/responder.py  
  inflating: sample/chap07/Thumbs.db  
(base) root@6f4c91ae627f:/# ls
bin   dev  home  lib64	mnt  proc  run	   sample.zip  srv  tmp  var
boot  etc  lib	 media	opt  root  sample  sbin        sys  usr
```

## pip

```
# pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 110kB/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.0
```


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

```
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS               NAMES
6f4c91ae627f        continuumio/anaconda3   "/usr/bin/tini -- /b…"   34 minutes ago      Up 34 minutes                           hungry_pare

$ docker commit 6f4c91ae627f kaizenjapan/anaconda-pythonai
sha256:a692f785b0411d41c7599dde188d3492472426e839bacd22fd298de435f2a929

$ docker push kaizenjapan/anaconda-pythonai
The push refers to repository [docker.io/kaizenjapan/anaconda-pythonai]
2d09c26f85b0: Pushed 
513109f92bd0: Mounted from continuumio/anaconda3 
443496790d0d: Mounted from continuumio/anaconda3 
64e142099cde: Mounted from continuumio/anaconda3 
b28ef0b6fef8: Mounted from continuumio/anaconda3 
latest: digest: sha256:9d55effe603c26f4dd272c5a375695b21fc8292dd23b9edf18f5ef8108f5a773 size: 1378

```

# 参考資料(reference)
dockerで機械学習(python:anaconda)「直感Deep Learning」Antonio Gulli、Sujit Pal　第1章,第2章
https://qiita.com/kaizen_nagoya/items/483ae708c71c88419c32

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


## 一覧
物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

量子(0) 計算機, 量子力学 
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

仮説（0）一覧（目標100現在40）
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

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

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

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

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

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

プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

なぜ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

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

「はじめての」シリーズ　 ベクタージャパン　
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb

AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869

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

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

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

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
### 文書履歴(document history)
ver. 0.10 初稿 20181005 朝
ver. 0.11 docker上のLinuxコマンド説明, wgetでsample取得　追記 20181005 夕
ver. 0.12 docker pull kaizenjapan/anaconda-pythonai の誤記訂正 20181010
ver. 0.13 参考文献、標題　追記 20181014
ver. 0.14 apt-getをaptに20180304
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.

<a href="http://b.hatena.ne.jp/entry/s/qiita.com/kaizen_nagoya/items/d374bfe9366a39eca337" class="hatena-bookmark-button" data-hatena-bookmark-layout="basic-label-counter" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
http://b.hatena.ne.jp/guide/bbutton