Python のまとめ

要点】 このページは,Pythonの基礎から応用までの一連の知識と手続きについて詳述している.Pythonの起動やインストール方法についてWindowsとUbuntu の両方に対応して説明し,さらに複数バージョンの管理やパッケージ管理ツールpipの使い方も解説している.また,Pythonの隔離環境venvやAnaconda3,Google ColaboratoryといったPython環境の設定も詳しく記載している.さらに,Pythonプログラムの例として,グラフ描画や画像ファイルの操作,主成分分析やk-meansクラスタリングなどを紹介.そして,Python開発環境として,Jupyter Notebook,Jupyter Lab,Nteract,spyderなどのインストール方法と起動方法を解説.最後にPythonのプログラミング基礎,データ型,モジュールとライブラリ,クラス定義とオブジェクト生成,制御構造,関数定義等についても触れている.

目次

  1. Python プログラムの実行
    1. Windows での Python の起動
    2. Ubuntu での Python の起動
  2. Python のインストール
    1. Windows での Python のインストール
    2. Windows で Python のアンインストール
    3. Windows での複数の Python の同時インストール
    4. Ubuntu のシステム Python,Ubuntu での Python のインストール,pip と setuptools の更新
    5. Python の隔離された環境 venv
    6. Python の種々のバージョン
    7. 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 プログラム
    8. Google Colaboratory での画像表示
  4. Python プログラムの例と Google Colaboratory での実行結果
    1. 三角関数のプロット
    2. 折れ線グラフのプロット
    3. 散布図のプロット
    4. 画像ファイルの表示
    5. 画像ファイルのダウンロード,画像ファイル保存,表示
    6. 行列の積,主成分分析,SVD,k-Means クラスタリング
    7. 画像分類
    8. 空白などで区切られたテキストをリストに変換
  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. 「Geospatial library wheels for Python on Windows」のページ

      https://github.com/cgohlke/geospatial-wheels

    11. 2to3
  6. Python 開発環境,Python コンソール(Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder)
    1. Python,pip,Python 開発環境,Python コンソールのコマンドでの起動
    2. Windows での Python 開発環境として,Jupyter Qt ConsoleJupyter ノートブック (Jupyter Notebook)Jupyter LabNteract,spyder のインストール
    3. Ubuntu での Python 開発環境として,Jupyter Qt ConsoleJupyter ノートブック (Jupyter Notebook)Jupyter LabNteract,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. ファイルの選択
    30. 画像ファイルの表示,画像ファイルの画像のサイズの取得
    31. ply ファイルの表示

関連する外部ページ

サイト内の関連ページ

Python 関連

Python のインストール

各種オンラインサービス

関連項目Python のインストールAnaconda3 のインストール(winget を使用)(Windows 上)

Python

Pythonは,現在,人気の高いプログラミング言語の1つであり,読みやすく書きやすい文法と幅広い応用範囲を持つとされている.現在,様々な分野で使用され,豊富なライブラリがある.

Python 3.10 のインストール(Windows 上)

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

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

  2. 次のコマンドを実行

    次のコマンドは,Python ランチャーと,Python 3.10 をインストールするものである.

    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.10
    

    Python 3.12 をインストールするときは,次のように操作する.

    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.12
    

関連する外部ページ

サイト内の関連ページ

関連項目Python

1. Python プログラムの実行

Pythonは,現在,人気の高いプログラミング言語の1つであり,読みやすく書きやすい文法と幅広い応用範囲を持つとされている.現在,様々な分野で使用され,豊富なライブラリがある.

1. (1) Google Colaboratory によるオンライン実行

Google Colaboratory はオンラインの Python 開発環境.詳しくは: このページの別項目で説明.

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

Windows での Python のインストール: 別ページ »で説明.

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

2. Python のインストール

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

Python の公式ページ: https://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」をクリック

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

    ここでは,Python 3.10 系列の最新版を探して,選ぶ.

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

    TensorFlow を使う予定がある場合は,https://pypi.org/project/tensorflow-gpu/#filesで,必要な Python のバージョンを確認しておく. 2024/5 時点では,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)」を選ぶ

  6. ダウンロードが始まる
  7. インストール時の設定
    1. いまダウンロードした .exe ファイルを右クリック, 右クリックメニューで「管理者として実行」を選ぶ.
    2. Python ランチャーをインストールするために,「Use admin privileges when installing py.exe」をチェック.

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

    3. Add Python.exe to PATH」をチェック.
    4. Customize installation」をクリック.
    5. オプションの機能 (Optional Features)は,既定(デフォルト)のままでよい. 「Next」をクリック
    6. Install Python 3.10 for all users」を選ぶ.

      Install Python 3.10 for all users」を選ぶ理由.

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

    7. そして,Python のインストールディレクトリは,「C:\Program Files\Python310」のように自動設定されることを確認.
    8. Install」をクリック
    9. インストールが始まる
    10. Disable path length limit」が表示される場合がある.クリックして,パス長の制限を解除する

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

    11. インストールが終了したら,「Close」をクリック
  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 のバージョンに読み替えること).

    表示されないときは, システムの環境変数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
    

Python に関しての情報取得

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

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

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

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

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

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

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

    from distutils.msvc9compiler import *
    get_build_version()
    
  5. exit() で終了
  6. pip の動作確認

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

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

    pip list
    

2. (2) Windows で Python のアンインストール

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

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

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

    次のコマンドは,rmdir を使用して,%APPDATA%\Python ディレクトリを再帰的に削除する.次に,"C:\Program Files" ディレクトリに移動し,Python3 で始まるディレクトリを検索し,見つかったディレクトリを再帰的に削除する.

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

2. (3) 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. (4) 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. (5) Python の隔離された環境

Python の隔離された環境

次のような場合は,Python の仮想環境が役に立つ. Python の仮想環境の利用には,Python 3.3 以上で標準機能になった venv が便利である. Python 3.3 未満では,virtualenv が便利である. venvvirtualenv の利用により, Python の隔離された環境を複数共存させることができる.

venv

venv は,Python の仮想環境を作成する機能を提供するモジュールである.Python の仮想環境は隔離されており,特定のバージョンのPythonや,特定のバージョンやPythonパッケージを管理するのに役立つ.

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

使用法の要点

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

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

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

Windows で,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
    
  3. Python の隔離された環境の有効化
    %HOMEPATH%\.venv\Scripts\activate.bat
    
  4. パッケージの確認

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

    python -m pip list
    
  5. 現在使用している Python の隔離された環境の使用中止(無効化)
    deactivate
    

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

Windows で,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
    
  3. Python の仮想環境の作成

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

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

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

    python3 -m venv ~/.venv
    ls -la .venv
    
  4. Python の隔離された環境の有効化
    source ~/.venv/bin/activate
    
  5. パッケージの確認

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

    python -m pip list
    
  6. 現在使用している Python の隔離された環境の使用中止(無効化)
    deactivate
    

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. (6) Python の種々のバージョン

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

2. (7) Anaconda3

Anaconda3

Anaconda3は,Anaconda Inc. 社が提供しているPythonバージョン3のソフトウェアである.言語処理系,開発ツール,パッケージ管理ツールconda,さまざまなPythonパッケージから構成されている.さらに,アプリケーションとして Spyder,conda,Anaconda Prompt,Jupyter Notebook,Anaconda Navigator が含まれている.

関連する外部ページ

関連項目Anaconda3 のインストール(winget を使用)(Windows 上)

Anaconda3 のインストール(winget を使用)(Windows 上)

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

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

  2. 次のコマンドを実行

    次のコマンドは,Anaconda3をインストールし,パスを通すものである.

    winget install --scope machine Anaconda.Anaconda3
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\CMake\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    
  3. Windows のスタートメニューに「Anaconda3 (64-bit)」が増え,その下に 「Anaconda Navigator」,「Anaconda Powershell Preompt」,「Anaconda Prompt」,「Jupyter Notebook」,「Reset Spyder Settings」,「Spyder」ができる.

関連する外部ページ

サイト内の関連ページ

関連項目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 に同封されている.

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

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. すべてのセルの実行

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

  2. Google アカウントでのログインが求められたときはログインする
  3. 実行がうまく行かない場合には,次を行う
    • Google アカウントでのログインしていないときは,ログインを行う.その後,再度,すべてのセルを実行する操作を行う.

      ログインの操作は,Web ブラウザで行う.

    • すべてのアクティブなセッションを停止する.その後,再度,すべてのセルを実行する操作を行う.

      そのために,メニューの「ランタイム」,「セッションの管理」と操作する.アクティブなセッションの一覧が表示されるので,「終了」をクリックして,すべてのアクティブなセッションを終了する.

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

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

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

    https://colab.research.google.com

  2. ファイル」で,「ノートブックを新規作成」を選ぶ
  3. Google アカウントでのログインが求められたときはログインする
  4. コードセルの中に Python プログラムを書き,「実行ボタン」をクリック
  5. コードセルを追加したいときは,「挿入」で,「コードセル」をクリック

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

ファイルのアップロード

ファイルのアップロード

from google.colab import files
uploaded = files.upload()
for fname in uploaded.keys():
  print(fname)

ディクトリを新規作成し,そこに,ファイルをアップロード.

from google.colab import files
import os
import shutil

udir = 'upload'
if os.path.isdir(udir):
  shutil.rmtree(udir)
os.mkdir(udir)
uploaded = files.upload()
for fname in uploaded.keys():
  print(fname)
ファイルのダウンロード
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__)

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

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

!nvcc -V

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

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

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

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

Google Colaboratory での実行結果

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

3. (9) Google Colaboratory での画像表示

Google Colaboratory の cv2_imshow を使用 (Google Colaboratory でのみ動く)

%cd /content
!curl -O http://images.cocodataset.org/val2017/000000439715.jpg

import cv2
from google.colab.patches import cv2_imshow
img  = cv2.imread("000000439715.jpg")
cv2_imshow(img)
cv2.waitKey(0)
cv2.destroyAllWindows()

PIL の Image を使用(IPython.display の Image ではない)

%cd /content
!curl -O http://images.cocodataset.org/val2017/000000439715.jpg
from PIL import Image
Image.open('000000439715.jpg').show()

3. (10) Google Colaboratory での画像ファイルの表示

matplotlib.pyplot の imshow を使用

見本1つめ

%cd /content
!curl -O http://images.cocodataset.org/val2017/000000439715.jpg

import cv2
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings

img  = cv2.imread("000000439715.jpg")
plt.style.use('default')
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

見本2つめ

%cd /content
!curl -O http://images.cocodataset.org/val2017/000000439715.jpg

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os

os.environ["MPLBACKEND"] = "Agg"
fpath = '000000439715.jpg
plt.imshow(mpimg.imread(fpath))
plt.axis('off')
plt.show()

3. (11) Google Colaboratory での動画像の表示

from IPython.display import HTML
from base64 import b64encode

def show_mp4(video_path, width=640, height=480):
    with open(video_path, "rb") as video_file:
        video_data = video_file.read()

    video_base64 = b64encode(video_data).decode()
    video_url = f"data:video/mp4;base64,{video_base64}"

    video_html = f"""
    <video width="{width}" height="{height}" autoplay loop controls>
        <source src="{video_url}">
    </video>
    """

    return HTML(video_html)

show_mp4("hoge.mp4")

3. (12) その他

Google Colaboratory での Detectron2 のインストール

!python -m pip install pyyaml==5.1
import sys, os, distutils.core
# Note: This is a faster way to install detectron2 in Colab, but it does not include all functionalities.
# See https://detectron2.readthedocs.io/tutorials/install.html for full installation instructions
!git clone --recursive https://github.com/facebookresearch/detectron2
dist = distutils.core.run_setup("./detectron2/setup.py")
!python -m pip install {' '.join([f"'{x}'" for x in dist.install_requires])}
# sys.path.insert(0, os.path.abspath('./detectron2'))

# Properly install detectron2. (Please do not install twice in both ways)
!python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'

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))

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)

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)

4. (4) 画像ファイルの表示

mmcv を使用 前準備として mmcv のインストールが必要.

import mmcv
mmcv.imshow('000000439715.jpg')

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')

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

【プログラム説明】 このプログラムは,NumPy と scikit-learn を使用して行列計算と機械学習タスクを実行し,その処理時間を測定している.具体的には,行列の積,主成分分析,特異値分解(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)

4. (7) ConvNext

ImageNet で学習済みの ConvNeXtBase モデルを用いた画像分類を行う.

  1. パソコン接続のカメラを使用するので準備しておく
  2. 前準備として Python 用 opencv-python のインストール
    python -m pip install -U opencv-python opencv-contrib-python
    
  3. Windows で,コマンドプロンプトを実行
  4. エディタを起動
    cd /d c:%HOMEPATH%
    notepad convnext.py
    
  5. エディタで,次のプログラムを保存

    【プログラム説明】 このプログラムは,TensorFlow,ConvNeXtBaseモデルを活用し,カメラから取得した画像をリアルタイムで画像分類する.プログラムでは,GPUの設定,モデルのロード,フレームの前処理,画像分類,結果と推論に要した時間を表示する.カメラからの画像をリアルタイムで画像分類し,その結果をビジュアルに確認できるプログラムである.

    import tensorflow as tf
    from tensorflow.keras.applications import ConvNeXtBase
    import numpy as np
    import time
    import cv2
    
    # GPUの確認,GPUのメモリに関する設定
    def set_gpu_config():
        physical_devices = tf.config.list_physical_devices('GPU')
        if len(physical_devices) > 0:
            print("GPU available:", physical_devices)
            for device in physical_devices:
                tf.config.experimental.set_memory_growth(device, True)
        else:
            print("No GPU found. Running on CPU.")
    
    # 画像の前処理関数
    def preprocess_image(img):
        img = cv2.resize(img, (224, 224))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = np.expand_dims(img, axis=0)
        img = tf.keras.applications.convnext.preprocess_input(img)
        return img
    
    # ConvNeXtBaseモデルのロード
    def load_model():
        return ConvNeXtBase(weights='imagenet')
    
    # カメラからのフレームを取得し、分類を行う
    def classify_camera_frames(model):
        cap = cv2.VideoCapture(0)
    
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
    
            # フレームの前処理
            img = preprocess_image(frame)
    
            # 画像の分類
            start_time = time.perf_counter()
            preds = model.predict(img)
            end_time = time.perf_counter()
            prediction_time = end_time - start_time
    
            top_pred_index = np.argmax(preds)
            class_label = tf.keras.applications.convnext.decode_predictions(preds, top=1)[0][0][1]
            confidence = preds[0][top_pred_index]
    
            # 結果の表示
            cv2.putText(frame, f"Class: {class_label}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
            cv2.putText(frame, f"Confidence: {confidence:.4f}", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
            cv2.putText(frame, f"Time: {prediction_time:.4f} seconds", (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    
            cv2.imshow("Camera Classification", frame)
    
            # Press 'q' to exit
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    
        cap.release()
        cv2.destroyAllWindows()
    
    def main():
        set_gpu_config()
        model = load_model()
        classify_camera_frames(model)
    
    if __name__ == '__main__':
        main()
    
  6. Python プログラムの実行

    Python プログラムの実行

    【サイト内の関連ページ】 Python のまとめ: 別ページ »

    プログラムを convnext.pyのようなファイル名で保存したので, 「python convnext.py」のようなコマンドで行う.

    python convnext.py
    
  7. 結果の確認

    終了は q キー

4. (8) 空白などで区切られたテキストをリストに変換

import re

def removeletters(s):
    return re.sub(r':|\||-', ' ', s)

def getdata(s):
    m = re.match(r'[0-9]+(b|B|k|K|m|M|g|G|t|T)*', s)
    if m:
        return m.group()
    else:
        return ''

s = 'system 07-09 15:00:03|  0   0 100   0   0:  0   0 100   0   0:  0   0 100   0   0:  0   0 100   0   0:  1   0  99   0   0:  0   0 100   0   0:  0   0 100   0   0:  0   0 100   0   0|   0    40k| 173   243 |0.03 0.05    0|1856M 14.1G 1553M 13.1G'
a = removeletters(s)
b = a.split()
print(list(map(getdata, b)))

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) Geospatial library wheels for Python on Windows

「Geospatial library wheels for Python on Windows」のページ

https://github.com/cgohlke/geospatial-wheels

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 ConsoleSpyderPyCharmPyScripter など)が便利である.

6. (1) Python,pip,Python 開発環境,Python コンソールのコマンドでの起動

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

Windows では,python,pipJupyter Qt ConsoleJupyter ノートブック (Jupyter Notebook)Jupyter LabNteractSpyder は,次のコマンドで起動できる.

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

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

Ubuntu では,python,pipJupyter Qt ConsoleJupyter ノートブック (Jupyter Notebook)Jupyter LabNteractSpyder は,次のコマンドで起動できる.

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

Python プログラムを動かすために, 「python」,「python3」などのコマンドを使う.

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

6. (2) Windows での 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 requests jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder

6. (3) Ubuntu での 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 -y 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 コンソール」を選ぶ.

6. (5) Jupyter Qt Console

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

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

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

次のプログラムは,NumPy と Matplotlib を使用して,0から6までの範囲のsin関数のグラフを描画する.warnings モジュールを使用して Matplotlib の警告表示を抑制し,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('default')
plt.plot(x, np.sin(x))

Jupyter ノートブック (Jupyter Notebook)

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

Ubuntu では sudo pip3

Ubuntu では,「sudo pip3 install」でパッケージをインストールする前に,「apt-cache search <キーワード>」で Ubuntu のパッケージを検索し,Ubuntu パッケージが見つかった場合にはそちらを 「apt install <Ubuntu のパッケージ名>」でインストール.

  • Jupyter Qt Console: jupyter qtconsole あるいは python -m jupyter qtconsole
  • Jupyter ノートブック (Jupyter Notebook): jupyter notebook
  • Jupyter Lab: jupyter lab あるいは python -m jupyter lab
  • Nteract: jupyter nteract あるいは python -m jupyter nteract
  • Spyder: spyder
  • WindowsUbuntu での Python 開発環境,Python コンソールJupyter Qt ConsoleJupyter ノートブック (Jupyter Notebook)Jupyter LabNteract,spyder)のインストール: このページの別の項目で説明している.

    Python プログラムを動かすために, 「python」,「python3」などのコマンドを使う.

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

    6. (2) Windows での 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 requests jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
    

    6. (3) Ubuntu での 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 -y 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 コンソール」を選ぶ.

    6. (5) Jupyter Qt Console

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

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

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

    次のプログラムは,NumPy と Matplotlib を使用して,0から6までの範囲のsin関数のグラフを描画する.warnings モジュールを使用して Matplotlib の警告表示を抑制し,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('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 を使う場合).

    6. (7) Jupyter Lab

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

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

    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」をクリック,次のプログラムを入れ実行.

    次のプログラムは,NumPy と Matplotlib を使用して,0から6までの範囲のsin関数のグラフを描画する.warnings モジュールを使用して Matplotlib の警告表示を抑制し,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('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 をインストールしたときは,スタートメニューの「Anaconda3 (64-bit)」の下に「Spyder」があるので,これを使って実行するのが簡単である.

    Ubuntu では「spyder」で実行

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

    ラズベリーパイの場合は,次のコマンドで 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)) )
    

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

    キーワード: ifelifelsewhilebreakfor

    条件分岐

    繰り返し

  • 月の日数

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

    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] )
    
  • 物体の落下

    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 )
    
  • 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)
    

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

    for による繰り返し

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

    文字列の演算子

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

    pandas データフレーム

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

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

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

    上のコマンドが実行できないときは,次のリンクからダウンロードする.ダウンロードしたファイルは、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')
      
      

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

    2. 読み込んだデータの表示
      print(x)
      
    3. 読み込んだデータのうち、1列目と 2列目の表示

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

      print(x.iloc[:,1])
      print(x.iloc[:,2])
      
    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()
      
    5. 各列について、基本的な情報の表示
      • head: 先頭部分の表示
      • shape: サイズ
      • ndim: 次元数
      • columns: 属性名
      • info(): 各属性のデータ型
      print(x.head())
      print(x.info())
      print(x.shape)
      print(x.ndim)
      print(x.columns)
      
    6. CSV ファイルに書き出し
      x.to_csv('hoge.csv', header=True, index=False, encoding='SHIFT-JIS')
      

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

    print(x.describe())
    

    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()
    

    2次元ヒストグラム

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

    numpy 全般

    次元数

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

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

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

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

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

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

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

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

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

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

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

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

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

    1次元の配列

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

    1次元の配列の生成

    合計

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

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

    2次元の配列

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

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

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

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

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

    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))
    

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

    時間計測も行う.

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

    次のプログラムは,NumPy と scikit-learn を使用して,行列計算とデータ分析を行う.

    1. 2000x2000 の乱数行列 X と Y を生成し、それらの行列積を計算する.
    2. scikit-learn の PCA を使用して,X の主成分分析を行い,2次元に次元削減する.
    3. NumPy の svd 関数を使用して、X の特異値分解を行う.
    4. scikit-learn の KMeans を使用して,X に対して10クラスタの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)
    

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

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

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

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

    メッシュグリッド

    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)
    

    配列の次元を増やす

    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)
    

    リスト

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

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

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

    Python のモジュール

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

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

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

    import hoge
    print(hoge.tax(10))
    

    Python のライブラリ

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

    現在の日時

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

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

    最大公約数

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

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

    方程式を解く

    4x + 1 = 0 を解きたい

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

    平方根

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

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

    import math
    print( math.sqrt(7) )
    

    円の面積

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

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

    三角形の面積

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

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

    IPython.display を用いた画像表示

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

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

    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')
    

    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()
    

    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()
    

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

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

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

    関数のプロット

    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))
    

    メッシュグリッドと関数の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')
    

    メッシュグリッドと関数の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')
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    ax.scatter(X1, X2, Z[1], c='b')
    

    TensorFlow

    TensorFlowは,Googleが開発した機械学習フレームワークである.Python,C/C++言語から利用可能で,CPU,GPU,TPU上で動作する.TensorFlowの特徴として「データフローグラフ」がある.これは,「データの流れ」を表現するもので,グラフの節点は演算(オペレーション)を,エッジはデータ(テンソル)の流れを表す.TensorFlowを使用することで,音声,画像,テキスト,ビデオなど多様なデータを扱う機械学習アプリケーションの開発が容易になる.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)
    

    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__)
      
    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"]
      
    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()
      
    4. 「サイズ 28 × 28 の 60000枚の濃淡画像」であることを確認

      配列の形: 60000×28×28

      次元: 3

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

      print( x_train.shape )
      print( x_train.ndim )
      
    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'])
      
    6. ニューラルネットワークの確認表示

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

      print(m.summary())
      
    7. ニューラルネットワークの学習を行う

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

      history = m.fit(x_train, y_train, epochs=50)
      
    8. 検証用データで検証する

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

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

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

    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個の数字が得られている.

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

    10. 正解表示

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

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

      print(y_test[0])
      

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

    式と変数

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

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

    x = 100
    y = 200
    print(x + y)
    print( (x + 10) * y)
    
    teihen = 2.5
    takasa = 5
    print(teihen * takasa / 2)
    

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

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

    式の抽象化と関数

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

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

    上の 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))
    

    式の評価のタイミング

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

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

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

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

    クラス名: 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」は属性アクセスである.

    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 はオブジェクトと,属性名(文字列)を指定して,値を取得する.

    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 では,オブジェクトと,属性名(文字列)と値を指定する.

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

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

    クラス名: 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))
    

    メソッド

    メソッドの例

    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 は,メソッドの説明を表示する.

    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())
    

    ファイルの選択

    ファイルダイアログ(tkinter を使用)

    次の Python プログラムは、 tkinter の filedialog を使用し,ファイルを選択するためのダイアログを表示

    import tkinter as tk
    from tkinter import filedialog
    
    root = tk.Tk()
    root.withdraw()
    fpath = filedialog.askopenfilename()
    print("Selected file: ", fpath)
    

    このプログラムを実行することにより、ファイルダイアログが表示され、 その後、ファイルダイアログで指定したファイルのファイル名を表示する。

    次の Python プログラムは、 tkinter の filedialog を使用し,複数のファイルを選択するためのダイアログを表示

    import tkinter as tk
    from tkinter import filedialog
    
    root = tk.Tk()
    root.withdraw()
    fpaths = filedialog.askopenfilenames()
    
    for fpath in root.tk.splitlist(fpaths):
        print("Selected file: ", fpath)
    

    ファイルを1つ選択(pysimplegui を使用)

    PNG ファイルを1つ選び,myinput.png というファイル名にコピーするためのプログラム

    「python -m pip install -U pysimplegui」でインストールを行っておくこと.

    import PySimpleGUI as sg
    import shutil
    layout = [
              [sg.Text('png file', size=(8, 1)), sg.Input(), sg.FileBrowse()],
              [sg.Submit(), sg.Cancel()]]
    window = sg.Window('PNG File Upload', layout)
    event, values = window.read()
    window.close()
    shutil.copyfile(values[0], "myinput.png")
    

    ファイルを複数選択(gooey を使用)

    ファイルを複数選択.選択されたファイル名を表示.

    「python -m pip install -U gooey」でインストールを行っておくこと.

    from gooey import Gooey, GooeyParser
    
    @Gooey(required_cols=0)
    def main():
        parser = GooeyParser(description='Process something.')
    
        parser.add_argument('-i', '--infiles', nargs='*', metavar='InFiles', help='Choose one file or more-than-on files!', widget="MultiFileChooser")
        parser.add_argument('-n', '--name', metavar='Name', help='Enter some text!')
        parser.add_argument('-f', '--foo', metavar='Flag 1', action='store_true', help='I turn things on and off')
        parser.add_argument('-b', '--bar', metavar='Flag 2', action='store_true', help='I turn things on and off')
    
        a = parser.parse_args()
        print(a.infiles)
        print(a.name)
        print(a.foo)
        print(a.bar)
    
    if __name__ == '__main__':
        main()
    

    画像ファイルの表示,画像ファイルの画像のサイズの取得

    PIL の show を使用して画像ファイルの表示

    from PIL import Image
    Image.open('1.png').show()
    

    MatplotLib を使用して画像ファイルの表示

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    img = mpimg.imread('1.png')
    plt.imshow(img)
    plt.show()
    

    PILを使用して,画像の縦横のサイズを取得.

    from PIL import Image
    
    width, height = Image.open(image_path).size
    print(width, height)
    

    ply ファイルの表示

    次のプログラムは,ファイルダイヤログにより ply ファイルを1つ選択ののち,表示を行うプログラムである.マウスの左クリックとマウス移動により回転できる.マウスホイールにより,前後移動する.

    import pygame
    from pygame.locals import *
    from OpenGL.GL import *
    from OpenGL.GLUT import *
    from OpenGL.GLU import *
    from plyfile import PlyData, PlyElement
    
    # PLYファイルを読み込む
    import tkinter as tk
    from tkinter import filedialog
    
    root = tk.Tk()
    root.withdraw()
    fpath = filedialog.askopenfilename()
    
    plydata = PlyData.read(fpath)
    vertex_data = plydata['vertex'].data
    face_data = plydata['face'].data
    
    # 頂点と面をリストとして取得
    vertices = [list(elem) for elem in vertex_data]
    faces = [face[0] for face in face_data]
    
    # PygameとOpenGLを初期化
    pygame.init()
    display = (800, 600)
    pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
    gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)
    glTranslatef(0.0, 0.0, -5)
    
    # マウス操作のための変数
    rotation_enabled = False
    rotation_start = (0, 0)
    zoom = 0.0
    
    # メインループ
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:  # 左クリック
                    rotation_enabled = True
                    rotation_start = pygame.mouse.get_pos()
                elif event.button == 4:  # ホイール回転(上方向)
                    zoom = 1
                elif event.button == 5:  # ホイール回転(下方向)
                    zoom = -1
            elif event.type == pygame.MOUSEBUTTONUP:
                if event.button == 1:  # 左クリック解除
                    rotation_enabled = False
            elif event.type == pygame.MOUSEMOTION:
                if rotation_enabled:
                    dx = event.pos[0] - rotation_start[0]
                    dy = event.pos[1] - rotation_start[1]
                    glRotatef(dx, 0, 1, 0)  # y軸周りに回転
                    glRotatef(dy, 1, 0, 0)  # x軸周りに回転
                    rotation_start = event.pos
    
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    
        # 視点の移動範囲を制限
        max_zoom = 5.0
        min_zoom = -5.0
        zoom = max(min_zoom, min(max_zoom, zoom))
        glTranslatef(0.0, 0.0, -zoom)
        zoom = 0
    
        glBegin(GL_TRIANGLES)
        for face in faces:
            for vertex_i in face:
                glVertex3fv(vertices[vertex_i][:3])
        glEnd()
    
        pygame.display.flip()
        pygame.time.wait(10)