トップページ用語集,まとめページPython まとめ(Google Colaboratory の実行画面付き)

Python まとめ(Google Colaboratory の実行画面付き)

1ページに Python の用語,知識をまとめる

【範囲】 Google Colaboratory,パッケージ管理, Python のインストール,Python 言語処理系,Python コンソール, Python ランチャー,Python の仮想環境,Python の開発環境, 標準ライブラリ,PyPI,Python プログラミングなど, さまざまな話題が Python とプログラミングの基本になる.

【目次】

  1. Python の起動
  2. Google Colaboratory

    Google Colaboratory はオンラインの Python 開発環境

  3. Python プログラムの例と Google Colaboratory での実行結果
  4. pip
  5. 2to3
  6. Windows での Python のインストール
  7. Ubuntu のシステム Python,Ubuntu での Python のインストール
  8. Python 開発環境,Python コンソール(Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)
  9. Windows での複数の Python の同時インストール
  10. Python の隔離された環境 venv
  11. Anaconda3
  12. オブジェクトの生成と削除, 同値, 同一性
  13. 単純値のデータ型
  14. オブジェクトのタイプ(クラス名)の取得
  15. 文字列の演算子
  16. pandas データフレーム
  17. numpy 全般
  18. 1次元の配列
  19. 2次元の配列
  20. 2次元の配列の種々の処理
  21. numpy の npz 形式(numpy.ndarray)ファイルの書き出しと読み込み
  22. 2次元配列データのCSV ファイル読み書き
  23. メッシュグリッド
  24. 配列の次元を増やす
  25. リスト
  26. Pythonのモジュール
  27. Pythonのライブラリ
  28. Matplotlib を用いたプロット
  29. Matplotlib を用いた種々のプロット
  30. TensorFlow
  31. Keras
  32. ニューラルネットワークによる画像分類
  33. 制御構造(条件分岐,繰り返し)
  34. 式と変数
  35. 関数定義,関数オブジェクト
  36. 式の抽象化と関数
  37. 式の評価のタイミング
  38. クラス定義,オブジェクト生成,属性アクセス
  39. メソッド
  40. スーパークラスからの継承

【Python の公開の電子書籍】

Python の電子書籍としては,次のようなものが公開されている.

【サイト内の Python 関連の資料】

【用語集,まとめページへのリンク(サイト内)】

【Windows ソフトウエアのインストールと設定(サイト内)】

Python の起動

Python プログラムの実行には,

Python プログラムのソースコードを実行するためのソフトウエアのこと

Windows での Python の起動

Windows で Python を使うには,Python のインストールが必要.

venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.

Ubuntu での Python の起動

pyenv を用いてインストールした Python は,pyenv の設定の後,「python」で起動する.

venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.

Google Colaboratory

Google Colaboratory の利用により, オンラインで,Web ブラウザを用いて,次のことができる.

Google Colaboratory は,オンラインで使用する. Google Colaboratory の使用には,Google アカウントの取得が必要.

「Colaboratory へようこそ」のページのURL:

https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

Google Colaboratory で PYTHON 3 の新しいノートブックを新規作成

Google Colaboratory はオンラインの Python 開発環境. 使用するには Google アカウントが必要

  1. Google Colaboratory のWebページを開く

    https://colab.research.google.com

    [image]
  2. ファイル」で、「ノートブックを新規作成」を選ぶ

    [image]
  3. Google アカウントでのログインが求められたときはログインする

    [image]
  4. コードセルの中に Python プログラムを書き、「再生ボタン」をクリック

    [image]
  5. コードセルを追加したいときは、「挿入」で、「コードセル」をクリック

    [image]

Google Colaboratory で TensorFlow, Keras のバージョン確認

Google Colaboratory のコードセルで,次の Python プログラムを実行

import tensorflow as tf
print(tf.__version__)

import keras
print(keras.__version__)

[image]

Google Colaboratory で NVIDIA CUDA のバージョン確認

Google Colaboratory のコードセルで,次の Python プログラムを実行

!nvcc -V 

[image]

Google Colaboratory で GPU の確認

!nvidia-smi --query-gpu=gpu_name,driver_version,memory.total --format=csv

[image]

Google Colaboratory を使用中であるかを判別する Python プログラム

try:
    from google.colab import drive
    USE_COLAB = True
except:
    USE_COLAB = False

Google Colaboratory での実行結果

[image]

Windows のコマンドプロンプトでの実行結果

[image]

Python プログラムの例と Google Colaboratory での実行結果

三角関数のプロット

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
plt.style.use('ggplot')
x = np.linspace(0, 6, 100)
plt.plot(x, np.sin(x))
[image]

折れ線グラフのプロット

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
plt.style.use('ggplot')
x = [1, 2, 3, 4]
y = [3, 5, 2, 4]
plt.plot(x, y)
[image]

散布図のプロット

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
plt.style.use('ggplot')
x = [1, 2, 3, 4]
y = [3, 5, 2, 4]
plt.scatter(x, y)
[image]

画像ファイルのロード,表示

from PIL import Image
from IPython.display import display

filename = '127.png'
# 画像ファイルの読み込みと,画像の表示
img = Image.open(filename)
display(img)
[image]

画像ファイルのダウンロード,画像ファイル保存,表示

from PIL import Image
import requests
from IPython.display import display

# ダウンロード(リダイレクト)とロード
url = 'https://github.com/pytorch/hub/raw/master/images/dog.jpg'
response = requests.get(url)
img = Image.open(requests.get(url, stream=True).raw)
# 画像の表示
display(img)
# 画像ファイルに保存
img.save('dog.jpg')
[image]

行列の積,主成分分析,SVD,k-Means クラスタリング

import time
import numpy
import numpy.linalg
import sklearn.decomposition
import sklearn.cluster
X = numpy.random.rand(2000, 2000)
Y = numpy.random.rand(2000, 2000)
# 行列の積
a = time.time(); Z = numpy.dot(X, Y); print(time.time() - a)
# 主成分分析
pca = sklearn.decomposition.PCA(n_components = 2)
a = time.time(); pca.fit(X); X_pca = pca.transform(X); print(time.time() - a)
# SVD
a = time.time(); U, S, V = numpy.linalg.svd(X); print(time.time() - a)
# k-means
a = time.time(); 
kmeans_model = sklearn.cluster.KMeans(n_clusters=10, random_state=10).fit(X)
labels = kmeans_model.labels_
print(time.time() - a)
[image]

TensorFlow, Keras, VGG 16, Imagenet による画像分類

VGG 16, Imagenet による学習済みの重みデータによる画像分類を試してみる

Kerasのサイトで公開されているものを少し書き換えて使用。

「'127.png'」のところは,実際に使用する画像ファイル名に書き換えること.

import h5py
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.applications.vgg16 import preprocess_input
import numpy as np

m = VGG16(weights='imagenet', include_top=False)

img_path = '127.png'
img = image.load_img(img_path, target_size=(299, 299))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = m.predict(x)
print(features) 
[image]

TensorFlow, Keras, InceptionV3, Imagenet による画像分類

InceptionV3, Imagenet による学習済みの重みデータによる画像分類を試してみる

Kerasのサイトで公開されているものを少し書き換えて使用。

「'127.png'」のところは,実際に使用する画像ファイル名に書き換えること.

import h5py
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3
import numpy as np

m = InceptionV3(weights='imagenet')

img_path = '127.png'
img = image.load_img(img_path, target_size=(299, 299))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

preds = m.predict(x)

print('Predicted:')
for p in decode_predictions(preds, top=5)[0]:
    print("Score {}, Label {}".format(p[2], p[1]))
[image]

pip

pip は Python のパッケージ管理のツール.

Python パッケージ・インデックス (PyPI)

パッケージの検索や調査を行うときに,次の URL を使う.

Python パッケージ・インデックス (PyPI) の URL: https://pypi.org/

Google Colaboratory での pip の操作

Google Colaboratory では pip を次のように操作する.頭に「!」を付ける

Windows での pip の操作

Windows では pip を次のように操作する.

venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.

Ubuntu での pip の操作

Ubuntu でシステム Python を使う場合は,pip を次のように操作する.

pyenv を用いてインストールした Python は,pyenv の設定の後,「python」で起動する.

venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.

pip と setuptools を最新版に更新

pip のインストールを手動で行いたい場合

Python をインストールすると pip がインストールされるので,ここに書いた操作は,ふつうは必要ない.

2to3

2to3 は,Python バージョン 2 用のソースコードを Python バージョン 3 用に変換するプログラム.次のように実行

2to3 -w .

Windows で 2to3 が動かないとき,環境変数 PATH の設定により動くようになる.

システムの環境変数 PATH に,「C:\Program Files\Python\Python39\Tools\scripts」を加える.「C:\Program Files\Python\Python39」は,実際に Python をインストールしたディレクトリに読み替えること.

Windows で次のようにフルパスを書いて実行してもよい

python %LOCALAPPDATA%\Programs\Python\Python39\Tools\scripts\2to3.py -w .

Windows での Python のインストール

Python の URL: http://www.python.org/

Windows では,複数のバージョンの Python を同時にインストールすることは簡単である.そのときは,環境変数 Path の設定を常に意識すること.Python ランチャーである「py」コマンドも利用すること.

Windows の Python ランチャーは,複数のバージョンの Python を同時にインストールしているとき,Python のバージョンを指定しての起動を行うことができ便利である. Python のバージョンを指定しての pipvenv の実行を行うにも便利である.

古いバージョンの Python のアンインストール

すでに,Python がインストール済みのとき.

ここで示すインストール手順とは異なる設定ですでに Python をインストールしていた場合は,それをそのまま使うよりも, アンインストールしておいたほうがトラブルが少ない可能性がある.

  1. Python をインストール済みであるかを確認.
  2. インストール済みのときは,Pythonをすべてアンインストールしてから,ここから先の操作を開始した方がトラブルが少ない.
  3. Python 関係のファイルの削除

    コマンドプロンプト管理者として実行し,次のコマンドを実行.

    この操作は,必ずPython をすべてアンインストールした後に行うこと.

    rmdir /s /q %APPDATA%\Python
    rmdir /s /q "C:\Program Files\Python3*"
    

Python 3.9 のインストール

インストールの要点

Python 3.9 のインストール(Windows 上)のページ: https://www.kkaneko.jp/tools/win/python.html

動画 URL: https://www.youtube.com/watch?v=2MlVmx-yLM8

インストール手順

Windows での Python 3.9 のインストール(あとのトラブルが起きにくいような手順を定めている)

  1. TensorFlow のインストール予定がある場合には, 次のページで,必要な Python のバージョンを確認

    URL: https://pypi.org/project/tensorflow-gpu/#files

  2. Python の URL を開く

    URL: https://www.python.org

  3. Windows 版の Python 3.9 をダウンロード

    ページの上の方にある「Downloads」の下の「Windows」をクリック

    [image]
  4. Stable Releases」から,Python のバージョンを選ぶ

    ここでは,Python 3.9.x (x は数字)を探して,選ぶ.

    [image]

    以下,Python 3.9.9 を選んだとして説明を続ける.他のバージョンでも以下の手順はほぼ同じである.

    TensorFlow を使う予定がある場合は,https://pypi.org/project/tensorflow-gpu/#filesで,必要な Python のバージョンを確認しておく. 2021/11 時点では,TensorFlow バージョン 2.7.0 が動くのは,Python 3.73.83.9

  5. ファイルの種類を選ぶ.

    Windows の 64ビット版のインストーラをダウンロードしたいので、「Windows Installer (64-bit)」を選ぶ

    [image]
  6. ダウンロードが始まる

    [image]
  7. いまダウンロードした .exe ファイルを右クリック, 右クリックメニューで「管理者として実行」を選ぶ.

    [image]
  8. Python ランチャーをインストールするために,「Install launcher for all users (recommended)」をチェック.

    [image]

    ※ すでに Python ランチャーをインストール済みのときは, 「Install launcher for all users (recommended)」がチェックできないようになっている場合がある.そのときは,チェックせずに進む.

    [image]
  9. Add Python 3.9 to PATH」をチェック.

    [image]
  10. Customize installation」をクリック.

    [image]
  11. オプションの機能 (Optional Features)は,既定(デフォルト)のままでよい. 「Next」をクリック

    [image]
  12. Install for all users」を選ぶ.

    Install for all users」を選ぶ理由.

    ユーザ名が日本語のときのトラブルを防ぐため.

    [image]
  13. そして,Python のインストールディレクトリは,「C:\Program Files\Python39」のように自動設定されることを確認.

    [image]
  14. Install」をクリック

    [image]
  15. インストールが始まる
  16. Disable path length limit」が表示される場合がある.クリックして、パス長の制限を解除する

    表示されない場合は問題ない.そのまま続行.

    [image]
  17. インストールが終了したら,「Close」をクリック

    [image]
  18. インストールのあと,Windows のスタートメニューに「Python 3.9」が増えていることを確認.
  19. システムの環境変数 Path の確認のため,新しくコマンドプロンプトを開き,次のコマンドを実行.

    pypipパスが通っていることの確認である.

    where py
    where pip
    

    where py では「C:\Windows\py.exe」 が表示され, where pip では「C:\Program Files\Python39\Scripts\pip.exe」 が表示されることを確認. (「39」のところは使用する Python のバージョンに読み替えること).

    [image]

    表示されないときは, システムの環境変数Pathに,C:\Program Files\Python39C:\Program Files\Python39\Scripts が追加済みであることを確認(「39」のところは使用する Python のバージョンに読み替えること).無ければ追加し,再度コマンドプロンプトを開いて,再度「where py」,「where pip」を実行して確認.

    それでもうまく行かない場合は,いろいろ原因が考えられる.対処としては,Python のアンインストールを行う.過去,アンインストールがうまく行かなかった可能性を疑う(Python の Scripts の中のファイルで,アンインストール操作により削除されるべきファイルが残っている可能性があるなど)

  20. pip と setuptools の更新

    コマンドプロンプト管理者として実行し,次のコマンドを実行.

    Windows での pip の実行では,コマンドプロンプト管理者として実行することにする。

    [image]

    python -m pip install -U pip setuptools
    

    [image]

Python に関しての情報取得

Python にトラブルがあった時に役に立つように,情報取得の手順をまとめている.

  1. Windowsのシステム環境変数Path

    インストール時に,「Add Python ... to PATH」をチェックしたので、 Python についての設定が自動で行われる.

    [image]
  2. python のバージョンの確認
    python --version 
    

    [image]
  3. Python のビルドに用いられたコンパイラのバージョン番号の確認
    python
    

    下の実行例では、バージョン番号として「1928」が表示されている

    [image]
  4. 次のPythonプログラムを実行し,バージョン番号を確認

    下の実行例では、バージョン番号として「14.2」が表示されている

    from distutils.msvc9compiler import *
    get_build_version()
    

    [image]
  5. exit() で終了

    [image]
  6. pip の動作確認

    Python のパッケージも同時にインストールされることが分かる.

    ※ エラーメッセージが出ないことを確認.

    pip list
    

    [image]

Ubuntu のシステム Python,Ubuntu での Python のインストール

Ubuntu の システム Python

Ubuntu の場合はシステム Python を使用することが多いと思われる.この場合は,インストール操作は不要.

Ubuntu のシステム Python を用いるとき, python, pip は,次のコマンドで起動できる.

「python3」や「pip3」のように「3」を付ける.

次の実行により, 「python」や「pip」で,「3」を付けなくても済むようになる.

sudo apt -y install python-is-python3

Ubuntu での Python のインストール

Ubuntu で,システム Python 以外Python をインストールするには pyenv の利用が便利である. pyenv は,Linux, MacOS で動く Python バージョン管理のツールである.

Ubuntu をインストールすると,Ubuntu のシステム Python も同時にインストールされる. Ubuntu では,システム Python は,Ubuntu システムの動作に関わっている. システム Python をバージョンアップしたり,アンインストールを行ったりするのは良くない.

pyenv のインストール

Ubuntu での pyenv のインストールは,次の手順で行う.

pyenv の URL: https://github.com/pyenv/pyenv

sudo apt -y update
sudo apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
cd /tmp
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
echo '    eval "$(pyenv init -)"' >> ~/.bashrc
echo '    eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'fi' >> ~/.bashrc
exec $SHELL -l

pyenv の利用

Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder, PyCharm)

Python プログラムを動かして,結果をビジュアルに見たいときは, Python の開発環境や Python コンソール(Jupyter Qt Console, SpyderPyCharmPyScripter など)が便利.

Python, pip, Python 開発環境,Python コンソールのコマンドでの起動

Python, pip, Python 開発環境の起動コマンドのまとめ.

Windows では,python, pip, Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder は,次のコマンドで起動できる.

Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用される.

WindowsPython ランチャーでバージョン指定

Ubuntu では,python, pip, Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder は,次のコマンドで起動できる.

Windows, Ubuntu での Python 開発環境,Python コンソールJupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)のインストール: このページの別の項目で説明している.

Python プログラムを動かすために, Python のコマンド (python あるいは python3 を使う. あるいは, Python の開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

Windows での Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)のインストール

Ubuntu での Python 開発環境,Python コンソール(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)のインストール

Ubuntu でインストールを行うには,端末で,次のコマンドを実行する.

sudo apt -y update
sudo apt -y install python-is-python3 python3-dev python3-pip python3-setuptools python3-venv
sudo pip3 uninstall ptyprocess sniffio terminado tornado jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
sudo apt -y install jupyter jupyter-qtconsole spyder3
sudo apt -y install python3-ptyprocess python3-sniffio python3-terminado python3-tornado 
sudo pip3 install -U jupyterlab nteract_on_jupyter

Ubuntu で複数の Python バージョンを共存しているときは, pyenvを使う. 次のようにバージョン指定する.

pyenv shell 3.8.3
python -m pip install jupyterlab jupyter jupyter-console jupytext

Python コンソール

Python コンソールは,Python のシェルの画面のこと. プロンプトが出て,Pythonのプログラムを受け付ける. そして,その実行結果を表示する.

Jupyter Qt Console

Jupyter Qt Console は Python コンソールの機能を持ったソフトウエア. インストールは,このページの別の項目で説明している.

Jupyter Qt Console の起動: 「jupyter qtconsole」または「py -3.9 -m qtconsole」 (Python 3.9 を使う場合).

次の Python プログラムを実行してみる.

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
x = np.linspace(0, 6, 100)
plt.plot(x, np.sin(x))

Jupyter ノートブック (Jupyter Notebook)

Jupyter ノートブックは,Pythonなどのプログラムのソースコード,実行結果などを1つのノートとして残す機能をもったノートブック. インストールは,このページの別の項目で説明している.

Jupyter ノートブック (Jupyter Notebook) の起動: 「jupyter notebook」または「py -3.9 -m notebook」 (Python 3.9 を使う場合).

[image]

[image]

Jupyter Lab

Jupyter Lab は Python プログラム作成に関する種々の機能を持ったソフトウエア. インストールは,このページの別の項目で説明している.

Jupyter Lab の起動: 「jupyter lab」または「py -3.9 -m jupyerlab」 (Python 3.9 を使う場合).

[image]

pyenvを使うときは, 次のようにバージョン指定する.

JupyterLab の起動は,「pyenv shell <バージョン>; jupyter lab」. Jupyter Qt Console の起動は,「pyenv shell <バージョン>; jupyter qtconsole」.

Nteract

Nteractは,Pythonなどのプログラムのソースコード,実行結果などを1つのノートとして残す機能をもったノートブック. インストールは,このページの別の項目で説明している.

Nteract の起動: 「jupyter nteract

次の Python プログラムを実行してみる. そのために「Start a new notebook」の下の「Python」をクリック,次のプログラムを入れ実行.

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
x = np.linspace(0, 6, 100)
plt.plot(x, np.sin(x))

  • Juypter Notebook で,保存のときに,.py ファイルと .ipyrb ファイルが保存されるように設定.(この設定を行わないときは .ipyrb ファイルのみが保存される)
    1. 次のコマンドで,設定ファイルを生成

      jupyter notebook --generate-config
      
    2. jupyter/jupyter_notebook_config.py を編集し,末尾に,次を追加

      c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"

    spyder

    spyder の右下の画面は,既定(デフォルト)で, Python コンソールになっている.

    [image]

    PyCharm

    PyCharm は Python プログラム作成に関する種々の機能を持ったソフトウエア. 次の機能を持つ.

    PyCharmでは,既定(デフォルト)では,Python の隔離された環境が利用されることに注意.pip で Python パッケージをインストールしたときなどで,「システムの Python を使いたい」ときは, 別のページで説明している.手順で設定すること.

    【PyCharm Community 版の主な機能】

    Windows での複数の Python の同時インストール

    Windows では, Python の 3.6.A,3.7.B, 3.8.C, 3.9.D のように,複数のバージョンの Python を同時にインストールできる.

    但し,3.9.8 と 3.9.9 の同時インストールのようなことはできない(3.X のように,2桁目でバージョン番号が違うものを同時インストールできる).

    複数のバージョンの Python を同時にインストールしたとき, Python ランチャーを用いて,インストールされている Python のバージョンを調べたり,起動したい Python のバージョンを選んだりができる.

    Windows の Python ランチャー py

    Python ランチャーは,Windows で動くツール. 複数バージョンの Python を同時にインストールしたときに便利である.

    Python ランチャーは,Windows での Python のインストール時に,同時にインストールできる.

    Python の隔離された環境

    venv

    venv は,Python の隔離された環境の作成が簡単にできる機能.

    Python では,さまざまなパッケージをインストールする. 複数のバージョンの Python を同時インストールすることもある. venv の利用により,Python の隔離された環境することで次のメリットがある.

    使用法の要点

    venv は Python 3.3 から Python の標準機能になった.

    venv の公式の説明ページ: https://docs.python.org/ja/3/library/venv.html

    Windows で,Python の隔離された環境を扱う(venv を使用)

    venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.

    1. 前もって Python をインストールしておく.使用している Python のバージョンの確認は,次のコマンドで行うことができる.
      python --version
      
    2. Python の隔離された環境の作成と確認

      ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の隔離された環境を生成する.

      venv のためのディレクトリ名は何でもよいが,venv で使うことが分かるような分かりやすい名前がよい.記号や,日本語などの全角文字を含めないのがよい.

      ※ 「python -m venv」は,venv モジュールの実行

      python -m venv %HOMEPATH%\.venv
      dir /w %HOMEPATH%\.venv
      

      [image]
    3. Python の隔離された環境の有効化
      %HOMEPATH%\.venv\Scripts\activate.bat
      

      [image]

      [image]
    4. パッケージの確認

      いま,venv を使用中かどうか,プロンプトの「(venv)」で分かる.

      python -m pip list
      

      [image]
    5. 現在使用している Python の隔離された環境の使用中止(無効化)
      deactivate
      

      [image]

    Windows の Python ランチャーでバージョン指定して,Python の隔離された環境を扱う(venv を使用)

    venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.

    Python の隔離された環境の新規作成では,Python ランチャーを用いて,Python のバージョンを選ぶ.

    1. Python ランチャーで,インストール済みの Python のバージョンを確認
      py -0
      

      このときの表示で,使いたいバージョンの Python が無いときは,Python のインストールを行う.

    2. Python の隔離された環境の新規作成と確認

      ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の隔離された環境を生成する.

      venv のためのディレクトリ名は何でもよいが,venv で使うことが分かるような分かりやすい名前がよい.記号や,日本語などの全角文字を含めないのがよい.

      -3.9 は,使用したい Python のバージョンの指定である.

      py -3.9 -m venv %HOMEPATH%\.venv
      dir /w %HOMEPATH%\.venv
      
    3. Python の隔離された環境の有効化
      %HOMEPATH%\.venv\Scripts\activate.bat
      
    4. パッケージの確認

      いま,venv を使用中かどうか,プロンプトの「(venv)」で分かる.

      python -m pip list
      
    5. python コマンド, pip コマンドでは, Python の隔離された環境の新規作成のときに Python ランチャーで 指定した Python のバージョンのものが実行されるように設定されている.そのことを確認.
      python --version
      
    6. 現在使用している Python の隔離された環境の使用中止(無効化)
      deactivate
      

    Ubuntu で Python の隔離された環境を扱う(venv を使用)

    venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.

    1. python3-venv のインストール
      sudo apt -y update
      sudo apt -y install python3-venv
      
    2. 使用している システム Python のバージョンの確認は,次のコマンドで行うことができる.
      python3 --version
      

      [image]
    3. Python の隔離された環境の作成

      ここでは,venv のためのディレクトリ名「~/.venv」を指定して,新しいPython の隔離された環境を生成する.

      venv のためのディレクトリ名は何でもよいが,venv で使うことが分かるような分かりやすい名前がよい.記号や,日本語などの全角文字を含めないのがよい.

      システム Python違うバージョンの Python を使いたいときは, pyenv の利用が便利である.pyenv の詳細は,別ページで説明している.

      python3 -m venv ~/.venv
      ls -la .venv 
      

      [image]
    4. Python の隔離された環境の有効化
      source ~/.venv/bin/activate
      

      [image]
    5. パッケージの確認

      いま,venv を使用中かどうか,プロンプトの「(venv)」で分かる.

      python -m pip list
      

      [image]
    6. 現在使用している Python の隔離された環境の使用中止(無効化)
      deactivate
      

      [image]

    Anaconda3

    Anaconda3 は,Continuum Analytics 社が提供している Python バージョン 3 の言語処理系,開発環境やツール,管理ツールである conda,主要な Python パッケージを1つにまとめたソフトウエアである.

    Anaconda3 には, 次のアプリケーションが同封されている.

    Anaconda プロンプト(Anaconda Prompt)

    Anaconda プロンプト」は,Anaconda3 に同封されたコマンドプロンプトのソフトウエア. Windows のコマンドプロンプトとの違いは,conda 関係の環境変数と,環境変数PYTHONIOENCODINGが自動設定されること.

    Windows では,Anaconda プロンプト (Anaconda Prompt)は,Anaconda3 に同封されている.

    conda

    Anacondaは, condaを同封している.

    オブジェクトの生成と削除, 同値, 同一性

    プログラミングでのオブジェクトは,コンピュータでの操作や処理の対象となるもののこと.

    キーワード: =, del, ==, is

    単純値のデータ型

    オブジェクトのタイプ

    print( type(100) )
    print( type(1.23) )
    print( type(True) )
    print( type(False) )
    print( type("Hello") )
    print( type([1, 2, 3]) )
    dic = {}
    dic.update( {"kaneko": 30} )
    print( type(dic) )
    Point3d = collections.namedtuple('Point3d', 'x y z')
    p = Point3d(10, 20, 30)
    print( type(p) )
    import numpy as np
    print( type(np.zeros(10)) )
    

    [image]

    制御構造(条件分岐,繰り返し)

    キーワード: if, elif, else, while, break, for

    条件分岐

    繰り返し

  • 月の日数

    月の日数についてのデータを作る.うるう年のことは考えないことにする

    import numpy as np
    days = np.array([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])
    print( days[7] )
    print( days[9] )
    

    [image]
  • 物体の落下

    for による繰り返し

    import numpy as np
    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    for t in x:
        print( (9.8 / 2) * t * t )
    

    [image]
  • 10倍

    for による繰り返し

    import numpy as np
    x = np.array([8, 6, 4, 2, 3])
    y = np.array([0, 0, 0, 0, 0])
    for i in range(0,5):
        y[i] = x[i] * 10
    
    print(x)
    print(y)
    

    [image]

    「*」の表示を 18 回繰り返す(* を 18 個並べて表示)

    for による繰り返し

    import sys
    for i in range(18):
        sys.stdout.write("*")
    

    [image]

    文字列の演算子

    キーワード: +, in, %, split, join, replace, strip, match, sprintf

    pandas データフレーム

    Pandas を用いたデータの扱い (CVSファイル読み込み、散布図、要約統計量、ヒストグラム)を示す.

    説明のために,次のようなデータ(CSV ファイル)を使う.ファイル名は enquete.csv

    [image]

    このデータ(CSV ファイル)のダウンロードは, Windows でコマンドプロンプト管理者として実行し, 次のコマンドを実行.

    cd C:\
    curl -O https://www.kkaneko.jp/sample/csv/enquete.csv
    

    上のコマンドが実行できないときは,次のリンクからダウンロードする.ダウンロードしたファイルは、C:\ の直下に置く https://www.kkaneko.jp/sample/csv/enquete.csv

    CSV ファイルの読み込み、確認

    ※ Python でグラフや図を表示したい. Windows では,スタートメニューの「IDLE (Python ...)」,spyder3コマンド,PyCharmが便利である.

    1. アンケートデータの読み込み
      import pandas as pd
      import seaborn as sns
      
      x = pd.read_csv('C:/enquete.csv', encoding='SHIFT-JIS')
      
      

      [image]

      先頭行にデータ本体がある(先頭行が属性名でない)ときは、「pd.read_csv('hoge.csv', )」のようにする

    2. 読み込んだデータの表示
      print(x)

      [image]
    3. 読み込んだデータのうち、1列目と 2列目の表示

      オブジェクト x には 0列目と 1列目と 2列目がある.

      print(x.iloc[:,1]) 
      print(x.iloc[:,2]) 
      

      [image]
    4. 読み込んだデータについて、1列目と 2列目の散布図

      plt.style.use('ggplot')」はグラフの書式の設定.「ro」は「赤い丸」という意味.

      %matplotlib inline
      import matplotlib.pyplot as plt
      import warnings
      warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
      plt.style.use('ggplot')
      plt.plot(x.iloc[:,1], x.iloc[:,2], 'ro')
      plt.show()
      

      [image]
    5. 各列について、基本的な情報の表示
      • head: 先頭部分の表示
      • shape: サイズ
      • ndim: 次元数
      • columns: 属性名
      • info(): 各属性のデータ型
      print(x.head())
      print(x.info())
      print(x.shape)
      print(x.ndim)
      print(x.columns)
      

      [image]
    6. CSV ファイルに書き出し
      x.to_csv('hoge.csv', header=True, index=False, encoding='SHIFT-JIS')
      

    各属性の要約統計量(総数、平均、標準偏差、最小、四分位点、中央値、最大)

    print(x.describe())
    

    [image]

    JSONファイルの書き出しと読み込み

    import numpy as np
    pd.to_json('hoge.json')
    a = pd.read_json('hoge.json')
    

    pandas.DataFrame のコンストラクタ

  • データフレーム
    import pandas as pd
    pd.DataFrame( {'x' : [1, 2, 3], 'y' : [4, 5, 6]} )
    
    ヒストグラムの表示
    plt.hist(x.iloc[:,1])
    plt.show()
    
    plt.hist(x.iloc[:,2])
    plt.show()
    

    [image]

    [image]

    2次元ヒストグラム

    plt.hist2d(x.iloc[:,1], x.iloc[:,2])
    plt.show()
    

    [image]

    numpy 全般

    次元数

    numpy の1次元の配列の次元数1.(ndimで得る)

    1次元の配列の(<要素数>,)のように表示される(shapeで得る)

    import numpy as np
    x = np.zeros(10)
    print( x.ndim )
    print( x.shape )
    

    [image]

    numpy の2次元の配列の次元数2.(ndimで得る)

    2次元の配列の((<要素数>,<要素数>))のように表示される(shapeで得る)

    import numpy as np
    x = np.zeros((2, 3))
    print( x.ndim )
    print( x.shape )
    

    [image]

    データ型と,要素のデータ型

    1次元の配列のデータ型は numpy.darray.(typeで得る)

    配列の要素のデータ型は dtypes を使って表示… 「float64」は浮動小数点数

    import numpy as np
    x = np.zeros(10)
    print( type( x ) )
    print( x.dtype )
    

    [image]

    2次元の配列のデータ型は numpy.darray.(typeで得る)

    配列の要素のデータ型は dtypes を使って表示… 「float64」は浮動小数点数

    import numpy as np
    x = np.zeros((2, 3))
    print( type( x ) )
    print( x.dtype )
    

    [image]

    1次元の配列

    配列は,データの並びで,それぞれのデータに,0 から始まる番号(添字)が付いている.

    1次元の配列の生成

    合計

    8, 6, 4, 3, 2 というデータについて,合計を求める

    import numpy as np
    x = np.array([8, 6, 4, 2, 3])
    print(sum(x))
    

    [image]

    2次元の配列

    import numpy as np
    x = np.zeros((2, 3))
    print(x)
    print(type(x))
    print(x.shape)
    

    表示の「0.」は「0」のこと

    [image]
    import numpy as np
    x = np.ones((2, 3))
    print(x)
    print(type(x))
    print(x.shape)
    

    表示の「1.」は「1」のこと

    [image]
    import numpy as np
    x = np.random.randn(2,3)
    print(x)
    print(type(x))
    print(x.shape)
    

    [image]
  • 乱数(正規分布)
    import numpy as np
    x = np.random.randn(2,3)
    print(x)
    

    [image]

    2次元の配列の種々の処理

    行列の積

    時間計測も行う.

    import numpy as np
    import time
    
    x = np.random.randn(5000, 5000)
    y = np.random.randn(5000, 5000)
    
    s = time.time()
    z = np.dot(x, y)
    print("%1.3f [sec.]" % float(time.time() - s))
    

    [image]

    CuPy を用いて行列の積を求める

    時間計測も行う.

    行列の積,主成分分析,SVD,k-means

    import time
    import numpy
    import numpy.linalg
    import sklearn.decomposition
    import sklearn.cluster
    X = numpy.random.rand(2000, 2000)
    Y = numpy.random.rand(2000, 2000)
    # 行列の積
    a = time.time(); Z = numpy.dot(X, Y); print(time.time() - a)
    # 主成分分析
    pca = sklearn.decomposition.PCA(n_components = 2)
    a = time.time(); pca.fit(X); X_pca = pca.transform(X); print(time.time() - a)
    # SVD
    a = time.time(); U, S, V = numpy.linalg.svd(X); print(time.time() - a)
    # k-means
    a = time.time(); 
    kmeans_model = sklearn.cluster.KMeans(n_clusters=10, random_state=10).fit(X)
    labels = kmeans_model.labels_
    print(time.time() - a)
    

    numpy の npz 形式(numpy.ndarray)ファイルの書き出しと読み込み

    import numpy as np
    np.savez('hoge.npz',a = np.array([1, 2, 3]), b = np.array([1, 2, 3]))
    m = np.load('hoge.npz')
    print( m['a'] )
    print( m['b'] )
    

    2次元配列データのCSV ファイル読み書き

    CSV ファイル書き出し.pandas の機能で行う.次のプログラム実行により, ファイル XX.csv とYY.csv ができる.

    import numpy as np
    import pandas as pd
    X, Y = np.meshgrid( np.array([2, 3, 4]), np.array([10, 20]) )
    XX = pd.DataFrame(X)
    print(XX)
    XX.to_csv("XX.csv", header=False, index=False)
    YY = pd.DataFrame(Y)
    print(YY)
    YY.to_csv("YY.csv", header=False, index=False)
    

    [image]

    CSV ファイル読み込み.pandas の機能で行う. これは,いま作成したファイル XX.csv を読み込むもの.

    pd.read_csv("XX.csv", header=None)
    

    [image]

    今度は,ファイル YY.csv を読み込む.

    pd.read_csv("YY.csv", header=None)
    

    [image]

    メッシュグリッド

    3次元のグラフを作るとき.あるいは,計算を繰り返すときに便利

    import numpy as np
    X, Y = np.meshgrid( np.array([2, 3, 4]), np.array([10, 20]) )
    print(X)
    print(type(X))
    print(X.shape)
    print(Y)
    print(type(Y))
    print(Y.shape)
    

    [image]

    配列の次元を増やす

    1次元を2次元に.

    次のプログラムは,1次元の配列 x を,2次元の配列 A, B に変換する.

    import numpy as np
    x = np.array([3, 1, 2, 5, 4])
    A = x[:, np.newaxis]
    B = x[np.newaxis, :]
    print(A)
    print(type(A))
    print(A.shape)
    print(B)
    print(type(B))
    print(B.shape)
    

    [image]

    リスト

    a = [1, 2, 3, 4]
    print(a)
    type(a)
    

    [image]

    Python のリストの添字は 0 から開始する

    a = [10, 20, 30]
    print(a[1])
    a[2] = 200
    print(a)
    

    [image]

    Python のモジュール

    Python のモジュールは,1つ以上の関数を集めて,1つのファイルに集めたもの.下の Python モジュールには関数 tax が入っている. p> Python のモジュールは,単体でも実行できるように作ることができる.これは,モジュールのテストを行いたいときに便利(下の例では,「if __name__ == "__main__"」から始まる部分が,単体でも実行できるようにするためのもの)

    def tax(x):
        return x * 1.08
    
    if __name__ == "__main__":
        print(tax(100))
    

    [image]

    上に書いたモジュールを,他のプログラムでインポートして使いたいときは, まず,モジュールを,「hoge.py」のようなファイル名で保存すする.そして,プログラムを 次のように書く.

    import hoge
    print(hoge.tax(10))
    

    Python のライブラリ

    ここでの例 現在の日時, 最大公約数, 方程式を解く, 平方根, 円周率, 三角関数, など

    現在の日時

    オペレーティングシステム(コンピュータ)のタイマーを利用 いまの日時が表示されることを確認.

    import datetime
    now = datetime.datetime.now()
    print(now)
    

    [image]

    最大公約数

    2418 の最大公約数を求めたい.結果 6 を確認.

    import math
    print( math.gcd(24, 18) )
    

    [image]

    方程式を解く

    4x + 1 = 0 を解きたい

    from scipy import optimize
    def foo(x):
        return 4 * x + 1
    print( optimize.fsolve(foo, 10) )
    

    [image]

    平方根

    面積が 7 の正方形の一辺の長さは?

    次のプログラムを実行.結果 2.6457513110645907 を確認(結果は近似値)

    import math
    print( math.sqrt(7) )
    

    [image]

    円の面積

    半径 3 の円の面積は? 円周率は, Pythonのモジュールの math.pi を使用 結果は,近似値で求まる.

    import math
    print( 3 * 3 * math.pi )
    

    [image]

    三角形の面積

    三角形の2辺の長さが,46で,その間の角度が60度のとき.

    import math
    print( (1/2) * 4 * 6 * math.sin(60 * math.pi / 180) )
    

    [image]

    IPython.display を用いた画像表示

    画像ファイルを読み込んで表示

    from PIL import Image
    from IPython.display import display
    
    filename = '127.png'
    # 画像ファイルの読み込みと,画像の表示
    img = Image.open(filename)
    display(img)
    

    [image]

    Matplotlib を用いた散布図のプロット

    matplotlib は,オープンソースの Python のプロットライブラリ.

    3次元散布図

    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    import numpy as np
    from mpl_toolkits.mplot3d import axes3d
    plt.style.use('ggplot')
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    x = [1, 2, 3, 4, 5]
    y = [2, 4, 1, 3, 5]
    z = [1, 1, 2, 2, 3]
    ax.scatter(x, y, z, c='b')
    

    [image]

    Matplotlib を用いた種々のプロット

    OpenCV 画像の表示

    matplotlib を用いて,OpenCV のカラー画像を表示する例は次の通り.

    import cv2
    import matplotlib.pyplot as plt
    bgr = cv2.imread("126.png")
    plt.style.use('default')
    plt.imshow(cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB))
    plt.show()
    

    [image]

    matplotlib を用いて,OpenCV の濃淡画像を表示する例は次の通り.

    import cv2
    import matplotlib.pyplot as plt
    bgr = cv2.imread("126.png")
    mono = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
    plt.style.use('default')
    plt.imshow(mono, cmap='gray')
    plt.show()
    

    [image]

    Matplotlib を用いて OpenCV 画像の表示するときに,小さく表示される場合

    普通に Matplotlib を用いてOpenCV 画像の表示を表示すると,小さく表示される.

    「plt.style.use('default') 」の実行により,Matplotlib での OpenCV 画像の表示が大きくなる.

    [image]

    関数のプロット

    matplotlib を用いたグラフ描画の例は次の通り.

    import numpy as np
    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    x = np.linspace(0, 6, 100)
    plt.style.use('ggplot')
    plt.plot(x, np.sin(x))
    

    [image]

    メッシュグリッドと関数の3次元プロット

    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    import numpy as np
    from mpl_toolkits.mplot3d import axes3d
    plt.style.use('ggplot')
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    X, Y = np.meshgrid( np.array([-2, -1, 0, 1, 2]), np.array([-3, -2, -1, 0, 1, 2, 3]) )
    def f(x,y):
        return x * y
    Z = f(X, Y)
    ax.scatter(X, Y, Z, c='b')
    

    [image]

    メッシュグリッドと関数の3次元プロット. 今度は x1, x2 のソフトマックス関数

    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    import numpy as np
    from mpl_toolkits.mplot3d import axes3d
    plt.style.use('ggplot')
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    X1, X2 = np.meshgrid( np.array([-2, -1, 0, 1, 2]), np.array([-3, -2, -1, 0, 1, 2, 3]) )
    def softmax(x):
        A = np.exp(x - np.max(x))
        return A / A.sum()
    def f(x1, x2):
        return softmax( np.array([x1, x2]) )
    Z = f(X1, X2)
    ax.scatter(X1, X2, Z[0], c='b')
    

    [image]
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    ax.scatter(X1, X2, Z[1], c='b')
    

    [image]

    TensorFlow

    TensorFlow は,機械学習のアプリケーションを簡単に作成するのに役立つソフトウエア. Python, C/C++ 言語から利用可能. プロセッサ(CPU), GPU, Google TPU で動く Google 社のディープラーニング研究プロジェクトから出発し, 2015年11月に最初のリリースが行われた.ソースコード等は公開されている.

    TensorFlow のプログラム例 - 行列の足し算

    import tensorflow as tf
    import numpy as np
    a = tf.constant( np.reshape([1, 1, 1, 1, 1, 1], (2, 3) ) ) 
    b = tf.constant( np.reshape( [1, 2, 3, 4, 5, 6], (2, 3) ) )
    c = tf.add(a, b)
    
    print(c)
    

    [image]

    Keras

    Keras は,TensorFlow を用いてのディープラーニング(深層学習)でのモデルの構築と,その訓練(構築)を簡単に行えるようにするソフトウエア

    用語集

    ニューラルネットワークのデモサイト: http://playground.tensorflow.org

    手順

    1. パッケージのインポートなど
      from __future__ import absolute_import, division, print_function, unicode_literals
      
      # TensorFlow と tf.keras のインポート
      import tensorflow as tf
      import tensorflow_datasets as tfds
      from tensorflow import keras
      
      # ヘルパーライブラリのインポート
      import numpy as np
      %matplotlib inline
      import matplotlib.pyplot as plt
      import warnings
      warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
      
      print(tf.__version__)
      

      [image]
    2. 画像データセット MNIST の準備

      x_train: サイズ 28 × 28 の 60000枚の濃淡画像

      y_train: 60000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか) x_test: サイズ 28 × 28 の 10000枚の濃淡画像

      y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

      「+ コード」で,コードセルを追加し,次を実行.

      mnist, metadata = tfds.load(
          name="mnist", as_supervised=False, with_info=True, batch_size = -1)
      train, test = mnist['train'], mnist['test']
      print(metadata)
      
      x_train, y_train = train["image"].numpy().astype("float32") / 255.0, train["label"] 
      x_test, y_test = test["image"].numpy().astype("float32") / 255.0, test["label"]
      

      [image]
    3. 画像データセット MNIST の確認表示

      「+ コード」で,コードセルを追加し,次を実行.

      plt.style.use('default')
      plt.figure(figsize=(10,10))
      for i in range(25):
        plt.subplot(5,5,i+1)
        plt.xticks([])
        plt.yticks([])
        plt.grid(False)
        image, label = train["image"][i], train["label"][i]
        plt.imshow(image.numpy()[:, :, 0].astype(np.float32), cmap='gray')
        plt.xlabel(label.numpy())
      
      plt.show()
      

      [image]

    4. 「サイズ 28 × 28 の 60000枚の濃淡画像」であることを確認

      配列の形: 60000×28×28

      次元: 3

      「+ コード」で,コードセルを追加し,次を実行.

      print( x_train.shape )
      print( x_train.ndim )
      

      [image]
    5. ディープニューラルネットワークのモデルの作成

      2層のニューラルネットワークを作成

      1層目:ユニット数は 28 かける28

      2層目:ユニット数は 10

      「+ コード」で,コードセルを追加し,次を実行.

      「実行」をクリックして結果が何も出ないのは正常動作.

      m = tf.keras.Sequential()
      m.add(tf.keras.layers.Flatten(input_shape=(28, 28, 1)))
      m.add(tf.keras.layers.Dense(units=128, activation='relu'))
      m.add(tf.keras.layers.Dropout(rate=0.2))
      m.add(tf.keras.layers.Dense(units=10, activation='softmax'))
      m.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),,
                    loss='sparse_categorical_crossentropy',
                    metrics=['accuracy'])
      

      [image]
    6. ニューラルネットワークの確認表示

      「+ コード」で,コードセルを追加し,次を実行.

      print(m.summary())
      

      [image]
    7. ニューラルネットワークの学習を行う

      「+ コード」で,コードセルを追加し,次を実行.

      history = m.fit(x_train, y_train, epochs=50)
      

      [image]
    8. 検証用データで検証する

      「+ コード」で,コードセルを追加し,次を実行.

      print( m.evaluate(x_test,  y_test, verbose=2) )
      

      ※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.

      [image]
    9. ニューラルネットワークを使ってみる

      テスト画像を,ニューラルネットワークに与えて,予測させる

      テスト画像は 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 が書かれた画像である. 画像を読み取って,数字を予測する.

      「+ コード」で,コードセルを追加し,次を実行.

      predictions = m.predict( x_test )
      print( predictions[0] )
      

      結果の見方. 0である確率,1である確率,2である確率,・・・9である確率と,10 個の 数字が,結果として得られる. 先ほど作成したニューラルネットワークの2層目は 10個のユニットがあった.各ユニットから1個の数字が得られている.

      ※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.

      [image]
    10. 正解表示

      テスト画像 0 番の正解を表示

      「+ コード」で,コードセルを追加し,次を実行.

      print( y_test[0] )
      

      ※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.

      [image]

    ニューラルネットワークによる画像分類

    1. このページでは、次の画像を使うことにする

      2071.png のようなファイル名で保存しておく

      [image]
    2. 画像のアップロード操作
      1. ファイルをアップロードしたい.「ファイル」を選ぶ

        [image]
      2. アップロード」を選ぶ

        [image]
      3. アップロードしたいファイルを選ぶ

        [image]
    3. InceptionV3 を使うプログラム。Kerasのサイトで公開されているものを少し書き換えて使用。
      import h5py
      from tensorflow.keras.preprocessing import image
      from keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3
      import numpy as np
      
      m = InceptionV3(weights='imagenet')
      
      img_path = '2071.png'
      img = image.load_img(img_path, target_size=(299, 299))
      x = image.img_to_array(img)
      x = np.expand_dims(x, axis=0)
      x = preprocess_input(x)
      
      preds = m.predict(x)
      
      print('Predicted:')
      for p in decode_predictions(preds, top=5)[0]:
          print("Score {}, Label {}".format(p[2], p[1]))
      

      画像分類の結果(lab_coat, syringe, beaker, stethoscope, plate)と,それぞれの 確率が表示される.

      [image]

    式と変数

    変数は,変化するデータのこと. 「x = 100」のように書くと x の値が 100 に変化する

    の実行結果としてが得られる.式の中に,変数名を書くことができる.

    x = 100
    y = 200
    print(x + y)
    print( (x + 10) * y)
    

    [image]
    teihen = 2.5
    takasa = 5
    print(teihen * takasa / 2)
    

    [image]

    関数定義,関数オブジェクト

    関数定義は def, 帰り値は return

    式の抽象化と関数

    式の抽象化は,類似した複数の(下に書いた3つの式のようなもの)を, 変数を使って1つにまとめること.

    print(100 * 1.08) 
    print(150 * 1.08) 
    print(400 * 1.08) 
    

    [image]

    上の 3つの式を抽象化すると「a * 1.08」のようなになる.

    「a * 1.08」を本体式とするような関数 (関数名は foo)の定義とその使用例は次の通り. 関数の利用により,繰り返し同じことを書く(例えば「* 1.08」)ことを防ぐことができ,ミスを減らすこともできる.プログラムの変更も簡単になる.

    def foo(a):
        return a * 1.08 
    print(foo(100))
    print(foo(150))
    print(foo(400))
    

    [image]

    式の評価のタイミング

    関数の中の式の評価では, 最新の変数値が用いられる

    x = 30
    def foo(a):
        return(a * x) 
    x = 300
    print(foo(100))
    x = 3000
    print(foo(100))
    

    [image]

    クラス定義,オブジェクト生成,属性アクセス

    クラス定義,オブジェクト生成,属性アクセスの例

    クラス名: C

    その属性名: qty, weight, name

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
    
    x = C(5, 170.51, 'apple')
    y = C(3, 40.97, 'orange')
    print(vars(x))
    print(vars(y))
    print(x.name)
    print(y.name)
    

    vars はオブジェクトの属性名と値を取得する. 「x.name」,「y.name」は属性アクセスである.

    [image]

    getattr による属性値の取得

    クラス名: C

    その属性名: qty, weight, name

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
    
    x = C(5, 170.51, 'apple')
    y = C(3, 40.97, 'orange')
    print(getattr(x, 'qty'))
    print(getattr(y, 'weight'))
    

    getattr はオブジェクトと,属性名(文字列)を指定して,値を取得する.

    [image]

    setattr による属性の動的な追加

    クラス名: C

    その属性名: qty, weight, name

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
    
    x = C(5, 170.51, 'apple')
    y = C(3, 40.97, 'orange')
    setattr(x, 'color', 'red')
    print(vars(x))
    print(vars(y))
    

    setattr では,オブジェクトと,属性名(文字列)と値を指定する.

    [image]

    コンストラクタでの既定値(デフォルト値)

    既定値(デフォルト値)を設定している場合には,引数を省略できる.コンストラクタ以外のメソッドでも同様.

    クラス名: D

    属性名: s_hour, s_minute, e_hour, e_minute

    class D(object):
        def __init__(self, s_hour, s_minute):
            self.s_hour = s_hour
            self.s_minute = s_minute
            self.e_hour = None
            self.e_minute = None
    
    z = D(15, 30)
    z2 = D(16, 15)
    print(vars(z))
    print(vars(z2))
    

    [image]

    メソッド

    メソッドの例

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
        def total(self):
            return self.qty * self.weight
    
    x = C(5, 170.51, 'apple')
    print(vars(x))
    print(x.total())
    help(x)
    

    help は,メソッドの説明を表示する.

    [image]

    setattr によるメソッドの追加

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
        def total(self):
            return self.qty * self.weight
    
    x = C(5, 170.51, 'apple')
    setattr(C, 'hoge', lambda self: int(self.weight))
    print(x.hoge())
    help(x)
    

    スーパークラスからの継承

    クラス名: C

    その属性名: qty, weight, name

    クラス名: E

    その属性名: qty, weight, name, price

    クラス E は,スーパークラスであるクラス C の属性とメソッドを継承する

    class C(object):
        def __init__(self, qty, weight, name):
            self.qty = qty
            self.weight = weight  
            self.name = name
        def total(self):
            return self.qty * self.weight
    
    class E(C):
        def __init__(self, qty, weight, name, price):
            super(E, self).__init__(qty, weight, name)
            self.price = price
        def payment(self):
            return self.qty * self.price
    
    x2 = E(2, 875.34, 'melon', 500)
    print(vars(x2))
    print(x2.total())
    print(x2.payment())
    

    [image]