トップページインストール,使い方まとめPython のまとめ

Python のまとめ

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

目次

  1. Python の起動
    1. Windows での Python の起動
    2. Ubuntu での Python の起動
  2. Python のインストール
    1. Windows での Python のインストール
    2. Windows での複数の Python の同時インストール
    3. Ubuntu のシステム Python,Ubuntu での Python のインストール,pip と setuptools の更新
    4. Python の隔離された環境 venv
    5. Python の種々のバージョン
    6. Anaconda3
  3. Google Colaboratory

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

    1. Google Colaboratory の主な機能
    2. Google Colaboratory で PYTHON 3 の新しいノートブックを新規作成
    3. Google Colaboratory でファイルのアップロードとダウンロード
    4. Google Colaboratory で TensorFlow, Keras のバージョン確認
    5. Google Colaboratory で NVIDIA CUDA のバージョン確認
    6. Google Colaboratory で GPU の確認
    7. Google Colaboratory を使用中であるかを判別する Python プログラム
  4. Python プログラムの例と Google Colaboratory での実行結果
    1. 三角関数のプロット
    2. 折れ線グラフのプロット
    3. 散布図のプロット
    4. 画像ファイルのロード,表示
    5. 画像ファイルのダウンロード,画像ファイル保存,表示
    6. 行列の積,主成分分析,SVD,k-Means クラスタリング
    7. TensorFlow, Keras, VGG 16, Imagenet による画像分類
    8. TensorFlow, Keras, InceptionV3, Imagenet による画像分類
  5. Python 関係のツール
    1. pip
    2. Python パッケージ・インデックス (PyPI)
    3. Google Colaboratory での pip の操作
    4. Windows での pip の操作
    5. Ubuntu での pip の操作
    6. pip と setuptools を最新版に更新
    7. pip のインストールを手動で行いたい場合
    8. Python の setup.py の実行
    9. Python の build_ext の実行
    10. Python Extension Packages for Windows - Christoph Gohlke
    11. 2to3
  6. Python 開発環境,Python コンソール(Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)
    1. Python, pip, Python 開発環境,Python コンソールのコマンドでの起動
    2. Windows での Python 開発環境として,Python コンソール(Jupyter Qt Console), Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder のインストール
    3. Ubuntu での Python 開発環境として,Python コンソール(Jupyter Qt Console), Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder のインストール
    4. Python コンソール
    5. Jupyter Qt Console
    6. Jupyter ノートブック (Jupyter Notebook)
    7. Jupyter Lab
    8. Nteract
    9. spyder
    10. PyCharm
  7. Python プログラミングの基礎
    1. オブジェクトの生成と削除, 同値, 同一性
    2. 単純値のデータ型
    3. オブジェクトのタイプ(クラス名)の取得
    4. 文字列の演算子
    5. pandas データフレーム
    6. numpy 全般
    7. 1次元の配列
    8. 2次元の配列
    9. 2次元の配列の種々の処理
    10. numpy の npz 形式(numpy.ndarray)ファイルの書き出しと読み込み
    11. 2次元配列データのCSV ファイル読み書き
    12. メッシュグリッド
    13. 配列の次元を増やす
    14. リスト
    15. Pythonのモジュール
    16. Pythonのライブラリ
    17. Matplotlib を用いたプロット
    18. Matplotlib を用いた種々のプロット
    19. TensorFlow
    20. Keras
    21. ニューラルネットワークによる画像分類
    22. 制御構造(条件分岐,繰り返し)
    23. 式と変数
    24. 関数定義,関数オブジェクト
    25. 式の抽象化と関数
    26. 式の評価のタイミング
    27. クラス定義,オブジェクト生成,属性アクセス
    28. メソッド
    29. スーパークラスからの継承

サイト内のまとめページ

  1. 人工知能応用,データ応用,3次元のまとめ
  2. Windows の使い方
  3. Ubuntu の使い方
  4. Python のまとめ
  5. C/C++ のまとめ
  6. R システムのまとめ
  7. Octave のまとめ

サイト内の主な Python 関連ページ

Python のインストール

外部へのリンク(Python 関連)

サイト内の主な Windows 関連ページ

1. Python の起動

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

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

1. (1) Windows での Python の起動

Windows での Python のインストール: 別ページで説明している..

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

1. (2) Ubuntu での Python の起動

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

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

2. Python のインストール

2. (1) Python 3.10 のインストール,pip と setuptools の更新(Windows 上)

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

Python 開発環境,Python コンソール: 別項目で説明している.

インストールでの注意点

Python 3.10 のインストール,pip と setuptools の更新(Windows 上)

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

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

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

  2. Python の URL を開く

    URL: https://www.python.org

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

    ページの上の方にある「Downloads」をクリック. 「Downloads」の下にメニューが出るので,その中の「Windows」をクリック

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

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

    [image]

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

    TensorFlow を使う予定がある場合は,https://pypi.org/project/tensorflow-gpu/#filesで,必要な Python のバージョンを確認しておく. 2022/9 時点では,TensorFlow バージョン 2.10 が動くのは,Python 3.10 または Python 3.9 または Python 3.8 または Python 3.7 (https://pypi.org/project/tensorflow/2.10/#files)

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

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

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

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

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

      [image]

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

      [image]
    3. Add Python 3.10 to PATH」をチェック.

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

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

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

      Install for all users」を選ぶ理由.

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

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

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

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

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

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

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

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

    where py
    where pip
    

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

    [image]

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

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

  10. Windows で,コマンドプロンプト管理者として実行

    Windowspip を実行するときは,コマンドプロンプト管理者として実行し,それを使って pip を実行することにする.

    コマンドプロンプトを管理者として実行: 別ページで説明している.

  11. Python 3.10 のインストール,pip と setuptools の更新

    次のコマンドを実行する.

    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]

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

  1. まず,Windows で Python のアンインストール操作を行う.
  2. 次に,Python 関係のファイルの削除

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

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

    [image]

    rmdir /s /q %APPDATA%\Python
    cd "C:\Program Files"
    for /F %i in ('dir /ad /b /w Python3*') do rmdir /s /q %i 
    

2. (2) Windows での複数の Python の同時インストール

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

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

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

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

2. (3) Ubuntu のシステム Python,Ubuntu での Python のインストール,pip と setuptools の更新

Ubuntu の システム Python

Ubuntu をインストールすると,Ubuntu のシステム Python も同時にインストールされる.

Ubuntu の場合はシステム Python を用いる(その場合はインストールは不要)か,pyenv などを用いて,システム Python とは隔離した形でインストールする.

Ubuntuシステム Python を使用するときは,改めてPython のインストールを行う必要はない.

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

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

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

sudo apt -y install python-is-python3

システム Python を使っているときの pip と setuptools の更新(Ubuntu 上)

システム Python を用いるときは,pip, setuptools の更新は次のコマンドで行う.

端末で,次のコマンドを実行する.

sudo apt -y update
sudo apt -y install python3-pip python3-setuptools

Ubuntu での Python のインストール(pyenv を使用)

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 の利用

pyenv についての詳細説明: 別ページで説明している.

2. (4) Python の隔離された環境

Python の隔離された環境

次のような場合は,Python の隔離された環境が役に立つ. Python の隔離された環境の利用には,Python 3.3 以上で標準機能になった venv が便利である. Python 3.3 未満では,virtualenv が便利である. venvvirtualenv の利用により, 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.10 は,使用したい Python のバージョンの指定である.

    py -3.10 -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]

virtualenv, virtualenv-wrapper

virtualenv, virtualenv-wrapper は,Python の隔離された環境の作成ができるソフトウェア

venv が対応していないような Python を使いたい場合には, virtualenv, virtualenv-wrapper が便利な場合がある.

virtualenv-wrapper の使い方は次の通り

Windows で virtualenv, virtualenv wrapper をインストール する手順

python -m pip install -U pip setuptools
python -m pip install -U setuptools
python -m pip install -U virtualenv virtualenvwrapper-win

Windows で Python 3 のPython の隔離された環境を新規作成するときの操作例

mkvirtualenv py3

Windows で Python 3.6(旧バージョン)のPython の隔離された環境を新規作成するときの操作例

mkvirtualenv --python=%LOCALAPPDATA%\Programs\Python\Python36\python.exe py36

Windows で Python 2.7Python の隔離された環境を新規作成するときの操作例

mkvirutalenv --python="C:\Python27\python.exe" py27

PyCharm で virtualenv の Python 環境を使いたいときは,File→ Settings→ Project→ Project Interpreter で,Python 環境内の python.exe を指定した後, File→ Settings→ Console→ Python Console でその python.exe を指定する。

2. (5) Python の種々のバージョン

Python の公式ページ: https://www.python.org/

2. (6) Anaconda3

Anaconda3 の概要

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

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

Anaconda3 の使用上の注意点

Anaconda3 でのパッケージ管理は pip でなく conda を用いる.

Anaconda3 の Python のパスの設定

このサイトでは,システムの環境変数 PATHの先頭部分に,次の5つが設定されているものとして,説明している.

C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Library\mingw-w64\bin
C:\ProgramData\Anaconda3\Library\usr\bin
C:\ProgramData\Anaconda3\Library\bin
C:\ProgramData\Anaconda3\Scripts

Anaconda プロンプト(Anaconda Prompt)

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

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

[image]

conda でPython の隔離された環境

Python にはバージョンがある. Python には,さまざまなパッケージをインストールすることができる. conda の利用により,バージョンが違ったり,パッケージが違ったりする複数の Python 環境を共存させることができる.

Windows では,Anaconda3 に同封の conda が便利.

conda create --name py39 python=3.9

Windows での,Python と Anaconda 内の Python の共存

Anaconda3 に内蔵の Python を使いたいときは,「py」コマンドは使わない. パスを通すか,フルパスで指定するか,Anaconda Prompt を使う.

すでに,Python をインストール済みの場合でも,Anaconda 3両立できる

Anaconda 3 では pip を使わないこと(Anaconda Prommpt など). Anaconda3 は pip の使用を想定していない.

Windows のシステムの Python について,バージョンの違う Python を並列できる. バージョンの違う Python を使いたいだけのために Anaconda 3 をインストールする必要はない.

Anaconda プロンプト(Anaconda Prompt)

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

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

conda

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

3. Google Colaboratory

3. (1) Google Colaboratory の主な機能

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

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

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

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

3. (2) Google Colaboratory のプログラムを実行

  1. すべてのセルの実行

    メニューで「ランタイム」,「すべてのセルを実行」と操作する.

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

    [image]
  3. 実行がうまく行かない場合には,次を行う

3. (3) 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]

3. (4) Google Colaboratory でファイルのアップロードとダウンロード

アップロード

from google.colab import files
files.upload()

ダウンロード

from google.colab import files
files.download('filename')

3. (5) Google Colaboratory で TensorFlow, Keras のバージョン確認

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

import tensorflow as tf
print(tf.__version__)

import keras
print(keras.__version__)

[image]

3. (6) Google Colaboratory で NVIDIA CUDA のバージョン確認

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

!nvcc -V 

[image]

3. (7) Google Colaboratory で GPU の確認

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

[image]

3. (8) Google Colaboratory を使用中であるかを判別する Python プログラム

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

Google Colaboratory での実行結果

[image]

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

[image]

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

4. (1) 三角関数のプロット

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.style.use('default')
plt.plot(x, np.sin(x))
[image]

4. (2) 折れ線グラフのプロット

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]

4. (3) 散布図のプロット

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]

4. (4) 画像ファイルのロード,表示

from PIL import Image
from IPython.display import display

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

4. (5) 画像ファイルのダウンロード,画像ファイル保存,表示

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]

4. (6) 行列の積,主成分分析,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]

4. (7) 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]

4. (8) 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]

5. Python 関係のツール

5. (1) pip

pip は Python のパッケージマネージャ.

Windows

Ubuntu

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

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

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

5. (3) Google Colaboratory での pip の操作

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

5. (4) Windows での pip の操作

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

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

5. (5) Ubuntu での pip の操作

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

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

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

5. (6) pip と setuptools を最新版に更新

5. (7) pip のインストールを手動で行いたい場合

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

5. (8) Python の setup.py の実行

次のような操作になる.「pip」のところは,Ubuntu では,必要に応じて「pip3」に読み替えること

git clone https://github.com/openai/gym
cd gym
pip install -e .

必要に応じて,「pip install -e .」の代わりに,次のように操作する.

git clone https://github.com/openai/gym
cd gym
python setup.py build
python setup.py install 

python setup ... にオプションを付けたいときは「 --set CMAKE_PREFIX_PATH="c:\dlib"」のように付け加える.

Windows では,setup.py の実行前に,次のようなコマンドを実行し,環境変数などを設定できる場合がある.

set MSVC_VERSION=16
set CMAKE_GENERATOR=Visual Studio 16 2019 
set PREBUILD_COMMAND=vcvarsall.bat
set PREBUILD_COMMAND_ARGS=x64
# call "vcvarsall.bat" x64 -vcvars_ver=14.11

Python の setup.py を用いて,wheel 形式の pip パッケージを作成したいとき

python -m pip install wheel
python setup.py bdist_wheel

5. (9) Python の build_ext の実行

Python の pip コマンドで,pillow をソースコードからビルドしている例

python -m pip install pillow==6 --global-option="build_ext" --global-option="--disable-jpeg" --global-option="--disable-zlib"

pillow のソースコードをダウンロードし,ビルドしている例

cd c:\pytools
git clone https://github.com/python-pillow/Pillow
cd Pillow
python setup.py build_ext --disable-zlib --disable-jpeg install

5. (10) Python Extension Packages for Windows - Christoph Gohlke

これは,Windows 用の非公式Pythonパッケージ。非公式なので,Pythonパッケージの扱いに慣れた人向け。

URL: https://www.lfd.uci.edu/~gohlke/pythonlibs/

5. (11) 2to3

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

2to3 -w .

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

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

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

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

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

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

6. (1) 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」,「python3」などのコマンドを使う.

Python プログラムを動かすために, python3コマンドを使う. Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である. Python 開発環境の説明: 別ページにまとめている.

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

Python のバージョン指定なし

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

Windows の Python ランチャーで Python のバージョン指定

使用する Python のバージョンを指定する.Python 3.10 を使う場合は, コマンドプロンプト管理者として実行し,次のコマンドを実行する.

3.10」のところにバージョンを指定する.

py -3.10 -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder

6. (3) 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 python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential
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 jupyter jupyter-console jupytext nteract_on_jupyter

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

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

6. (4) Python コンソール

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

Blender の Python コンソール

Blender に内蔵された Python のコンソールである. Blender 3.0 では次の手順で開くことができる.

画面として「Python コンソール」を選ぶ.

[image]

6. (5) Jupyter Qt Console

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

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

次の 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.style.use('default')
plt.plot(x, np.sin(x))

Jupyter ノートブック (Jupyter Notebook)

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

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

[image]

[image]

6. (7) Jupyter Lab

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

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

[image]

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

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

6. (8) 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.style.use('default')
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"

    6. (9) PyScripter

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

    Windows での PyScripter のインストール: PyScripter別ページで説明している.。

    6. (10) spyder

    Windows では,スタートメニューの「Anaconda3 (64-bit)」の下に「Spyder」があるので,これを使って実行するのが簡単.

    Ubuntu では「spyder」で実行

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

    [image]

    ラズベリーパイの場合は,次のコマンドで spyder をインストールすることができる.

    sudo apt install python3-spyder
    sudo apt install spyder3
    

    6. (11) PyCharm

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

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

    【PyCharm Community 版の主な機能】

    Python プログラミングの基礎

    7. (1) オブジェクトの生成と削除, 同値, 同一性

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

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

    7. (2) 単純値のデータ型

    7. (3) オブジェクトのタイプ

    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]