Python のまとめ
【要点】 このページは,Pythonの基礎から応用までの一連の知識と手続きについて詳述している.Pythonの起動やインストール方法についてWindowsとUbuntu の両方に対応して説明し,さらに複数バージョンの管理やパッケージ管理ツールpipの使い方も解説している.また,Pythonの隔離環境venvやAnaconda3,Google ColaboratoryといったPython環境の設定も詳しく記載している.さらに,Pythonプログラムの例として,グラフ描画や画像ファイルの操作,主成分分析やk-meansクラスタリングなどを紹介.そして,Python開発環境として,Jupyter Notebook,Jupyter Lab,Nteract,spyderなどのインストール方法と起動方法を解説.最後にPythonのプログラミング基礎,データ型,モジュールとライブラリ,クラス定義とオブジェクト生成,制御構造,関数定義等についても触れている.
【目次】
- Python プログラムの実行
- Python のインストール
- Google Colaboratory
Google Colaboratory はオンラインの Python 開発環境
- Google Colaboratory の主な機能
- Google Colaboratory で PYTHON 3 の新しいノートブックを新規作成
- Google Colaboratory でファイルのアップロードとダウンロード
- Google Colaboratory で TensorFlow,Keras のバージョン確認
- Google Colaboratory で NVIDIA CUDA のバージョン確認
- Google Colaboratory で GPU の確認
- Google Colaboratory を使用中であるかを判別する Python プログラム
- Google Colaboratory での画像表示
- Python プログラムの例と Google Colaboratory での実行結果
- Python 関係のツール
- pip
- Python パッケージ・インデックス (PyPI)
- Google Colaboratory での pip の操作
- Windows での pip の操作
- Ubuntu での pip の操作
- pip と setuptools を最新版に更新
- pip のインストールを手動で行いたい場合
- Python の setup.py の実行
- Python の build_ext の実行
- 「Geospatial library wheels for Python on Windows」のページ
- 2to3
- Python 開発環境,Python コンソール(Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder)
- Python,pip,Python 開発環境,Python コンソールのコマンドでの起動
- Windows での Python 開発環境として,Jupyter Qt Console,Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
- Ubuntu での Python 開発環境として,Jupyter Qt Console,Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
- Python コンソール
- Jupyter Qt Console
- Jupyter ノートブック (Jupyter Notebook)
- Jupyter Lab
- Nteract
- spyder
- PyCharm
- Python プログラミングの基礎
- オブジェクトの生成と削除,同値,同一性
- 単純値のデータ型
- オブジェクトのタイプ(クラス名)の取得
- 文字列の演算子
- pandas データフレーム
- numpy 全般
- 1次元の配列
- 2次元の配列
- 2次元の配列の種々の処理
- numpy の npz 形式(numpy.ndarray)ファイルの書き出しと読み込み
- 2次元配列データのCSV ファイル読み書き
- メッシュグリッド
- 配列の次元を増やす
- リスト
- Pythonのモジュール
- Pythonのライブラリ
- Matplotlib を用いたプロット
- Matplotlib を用いた種々のプロット
- TensorFlow
- Keras
- 制御構造(条件分岐,繰り返し)
- 式と変数
- 関数定義,関数オブジェクト
- 式の抽象化と関数
- 式の評価のタイミング
- クラス定義,オブジェクト生成,属性アクセス
- メソッド
- スーパークラスからの継承
- ファイルの選択
- 画像ファイルの表示,画像ファイルの画像のサイズの取得
- ply ファイルの表示
【関連する外部ページ】
- Python の公式ページ: https://www.python.org/
- 東京大学の「Pythonプログラミング入門」: https://utokyo-ipp.github.io/IPP_textbook.pdf
- ITmedia 社の「Python チートシート」の記事: https://atmarkit.itmedia.co.jp/ait/articles/2004/20/news015.html
- Python の公式サイト: https://www.python.org
【サイト内の関連ページ】
- 種々のまとめページ: [人工知能,データサイエンス,データベース,3次元], [Windows], [Ubuntu], [Python (Google Colaboratory を含む)], [C/C++], [R システム], [Octave]
Python 関連
- Python のプログラム例: 別ページ »にまとめ
- 人工知能の実行,Python のプログラム: 別ページ »にまとめ
- Google Colaboratory の利用(入門者向け): 別ページ »にまとめ
- Python 入門(全14回,Python Tutor と CodeCombat を使用): 別ページ »で説明
- Python 入門(全14回,Python Tutor と CodeCombat を使用): 別ページ »で説明
Python のインストール
- Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール(winget を使用しないインストール): 別ページ »で説明
- Windows での Python とディープラーニング環境(NVIDIA CUDA,NVIDIA cuDNN,Python,TensorFlow,PyTorch その他)のインストール: 別ページで説明
- Ubuntu での Python3 開発用ファイル,pip,setuptools,venv のインストール,Python 開発環境,Python コンソールのインストール: 別ページ »で説明
各種オンラインサービス
【関連項目】 Python のインストール,Anaconda3 のインストール(winget を使用)(Windows 上)
Python
Pythonは,現在,人気の高いプログラミング言語の1つであり,読みやすく書きやすい文法と幅広い応用範囲を持つとされている.現在,様々な分野で使用され,豊富なライブラリがある.
Python 3.10 のインストール(Windows 上)
- Windows で,コマンドプロンプトを管理者として実行
コマンドプロンプトを管理者として実行: 別ページ »で説明
- 次のコマンドを実行
次のコマンドは,Python ランチャーと,Python 3.10 をインストールするものである.
【関連する外部ページ】
- Python の公式ページ: https://www.python.org/
【サイト内の関連ページ】
- Python のまとめ: 別ページ »にまとめている.
- Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール(winget を使用しないインストール): 別ページ »で説明
- Windows での Anaconda3 のインストール: 別ページ »で説明
- Windows,Ubuntu での Python 起動コマンドについて:別ページ で説明している.
【関連項目】 Python
1. Python プログラムの実行
Pythonは,現在,人気の高いプログラミング言語の1つであり,読みやすく書きやすい文法と幅広い応用範囲を持つとされている.現在,様々な分野で使用され,豊富なライブラリがある.
1. (1) Google Colaboratory によるオンライン実行
Google Colaboratory はオンラインの Python 開発環境.詳しくは: このページの別項目で説明.
1. (2) Windows での Python の起動
Windows での Python のインストール: 別ページ »で説明.
- Python のコマンドでの実行
python
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用される.
- Python ランチャー pyで,バージョン指定しての実行.
py -<Python のバージョン>
インストールされている Python のバージョンは「py -0」で確認することができる.
- venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.
- Visual Studio Code での Python の実行,Python のコンソール(Jupyter Qt Console), Jupyter ノートブック (Jupyter Notebook), Python 開発環境( Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.
1. (3) Ubuntu での Python の起動
- システム Python を使用
Ubuntu のシステム Python の Python バージョン3 は,「python3」で起動する.
python3
- pyenv を用いてインストールした Python は,pyenv の設定の後,「python」で起動する.
- venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.
2. Python のインストール
2. (1) Python 3.10 のインストール,pip と setuptools の更新(Windows 上)
Python の公式ページ: https://www.python.org/
Python 開発環境,Python コンソール: 別項目で説明している.
インストールでの注意点
- Python 64-bit 版を使用すること.
- Python をシステム領域にインストールすることを推奨する.
Windowsでは,Python をユーザ領域(既定の設定)またはシステム領域にインストールできる. しかし,ユーザー名に日本語が含まれている場合,Python をユーザ領域にインストールすると問題が発生する可能性がある.システム領域にインストールすることで,ファイルパスに日本語が含まれることを避けることができ,問題を防ぐことができる.
- TensorFlow 2.10.1 の利用
TensorFlow 2.10.1 は次のPythonのバージョンと互換性がある: Python 3.10, Python 3.9,Python 3.8,Python 3.7
この互換性情報は,https://pypi.org/project/tensorflow/2.10/#files で確認できる. 注意点として, TensorFlow 2.10.1 は, Python 3.6以前のバージョン,Python 3.11以降のバージョンではサポートされていない(2024/7時点). 最新の互換性情報は変更される可能性があるため,https://pypi.org/project/tensorflow/2.10/#files などの公式ドキュメントで再確認すること.
- Windows では, Python の 3.6.A,3.7.B,3.8.C,3.9.D,3.10.E のように,複数のバージョンの Python を同時にインストールできる.詳しくは,別項目で説明している.
Python 3.10 のインストール,pip と setuptools の更新(Windows 上)
Windows での Python 3.10 のインストール(あとのトラブルが起きにくいような手順を定めている)
- TensorFlow のインストール予定がある場合には, 次のページで,必要な Python のバージョンを確認
- Python の URL を開く
- Windows 版の Python 3.10 をダウンロード
ページの上の方にある「Downloads」をクリック. 「Downloads」の下にメニューが出るので,その中の「Windows」をクリック
- 「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)
- ファイルの種類を選ぶ.
Windows の 64ビット版のインストーラをダウンロードしたいので,「Windows Installer (64-bit)」を選ぶ
- ダウンロードが始まる
- インストール時の設定
- いまダウンロードした .exe ファイルを右クリック,
右クリックメニューで「管理者として実行」を選ぶ.
-
Python ランチャーをインストールするために,「Use admin privileges when installing py.exe」をチェック.
すでに Python ランチャーをインストール済みのときは, 「Install launcher for all users (recommended)」がチェックできないようになっている場合がある.そのときは,チェックせずに進む.
- 「Add Python.exe to PATH」をチェック.
- 「Customize installation」をクリック.
- オプションの機能 (Optional Features)は,既定(デフォルト)のままでよい.
「Next」をクリック
- 「Install Python 3.10 for all users」を選ぶ.
「Install Python 3.10 for all users」を選ぶ理由.
ユーザ名が日本語のときのトラブルを防ぐため.
- そして,Python のインストールディレクトリは,「C:\Program Files\Python310」のように自動設定されることを確認.
- 「Install」をクリック
- インストールが始まる
- 「Disable path length limit」が表示される場合がある.クリックして,パス長の制限を解除する
表示されない場合は問題ない.そのまま続行.
- インストールが終了したら,「Close」をクリック
- いまダウンロードした .exe ファイルを右クリック,
右クリックメニューで「管理者として実行」を選ぶ.
- インストールのあと,Windows のスタートメニューに「Python 3.10」が増えていることを確認.
- システムの環境変数 Path の確認のため,新しくコマンドプロンプトを開き,次のコマンドを実行する.
py とpip にパスが通っていることの確認である.
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\Python310 と C:\Program Files\Python310\Scripts が追加済みであることを確認(「310」のところは使用する Python のバージョンに読み替えること).無ければ追加し,再度コマンドプロンプトを開いて,再度「where py」,「where pip」を実行して確認.
それでもうまく行かない場合は,いろいろ原因が考えられる.対処としては,Python のアンインストールを行う.過去,アンインストールがうまく行かなかった可能性を疑う(Python の Scripts の中のファイルで,アンインストール操作により削除されるべきファイルが残っている可能性があるなど)
- Windows で,コマンドプロンプトを管理者として実行
- Python 3.10 のインストール,pip と setuptools の更新
次のコマンドを実行する.
python -m pip install -U pip setuptools
Python に関しての情報取得
Python にトラブルがあった時に役に立つように,情報取得の手順をまとめている.
- Windows のシステム環境変数Path
インストール時に,「Add Python ... to PATH」をチェックしたので, Python についての設定が自動で行われる.
- python のバージョンの確認
python --version
-
Python のビルドに用いられたコンパイラのバージョン番号の確認
python
下の実行例では,バージョン番号として「1934」が表示されている
- 次のPythonプログラムを実行し,バージョン番号を確認
下の実行例では,バージョン番号として「14.3」が表示されている
from distutils.msvc9compiler import * get_build_version()
- exit() で終了
- pip の動作確認
Python のパッケージも同時にインストールされることが分かる.
* エラーメッセージが出ないことを確認.
pip list
2. (2) Windows で Python のアンインストール
- まず,Windows で Python のアンインストール操作を行う.
- 次に,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 を同時にインストールできる.
- 但し,3.10.4 と 3.10.5 の同時インストールのようなことはできない(3.X のように,2桁目でバージョン番号が違うものを同時にインストールできる).
- そのときは,環境変数 Path の設定を常に意識すること.
- Python ランチャーである「py」コマンドも利用すること.
複数のバージョンの Python を同時にインストールしたとき, Widndows のPython ランチャーを用いて, インストールされている Python のバージョンを調べたり,Python のバージョンを指定しての起動を行うことができ便利である. Python のバージョンを指定しての pip や venv の実行を行うときにも便利である.
Windows の Python ランチャー py
Python ランチャーは,Windows で動くツール. 複数バージョンの Python を同時にインストールしたときに便利である.
Python ランチャーは,Windows での Python のインストール時に,同時にインストールできる.
- Python の起動
Python ランチャーを使わない場合, Python は,環境変数 Path で先頭の Python が使用される.
Windows の Python ランチャー を用いて, 次のように,使用する Python のバージョンを指定できる.
「py」は Windows の Python ランチャーのコマンドである.
バージョン指定の中での「-32」や「-64」の省略
「py -X」のように,バージョン指定の中の「-32」,「-64」を省略することもできる. そのときは,Python バージョン X が実行されるが, Python のバージョン X 32ビット版と64ビット版をインストールしている場合は, 64ビット版の方が実行される. (公式マニュアルに,そのように記載されている)
バージョン指定自体の省略
「py」のようにバージョン指定を省略したときは, インストールされている Python の最新バージョンが実行される. (公式マニュアルに,そのように記載されている)
- インストールされている Python バージョンの一覧表示
インストールされている Python のバージョンは, Python ランチャー を用いて,「py -0」 (数字の「0」)で確認できる.
「-3.7-64」,「-3.8-32」,「-3.8-64」が表示されたとする. この場合,これら 3つのバージョンがインストール済みであり, 「py -3.7-64」や「py -3.8-32」や「py -3.8-64」で 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 (Ubuntu のシステム Python)
- sudo pip3 (Ubuntu のシステム 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 を用いてインストール可能な Python の一覧表示は,次で行う.
pyenv install -l
- pyenv を用いての Python のインストール: 別ページ »で説明,pip のインストールは,次で行う.
pyenv install <バージョン指定>
- pyenv を用いてインストール済みの Python の確認は,次で行う.
pyenv version
- pyenv を用いての Python の有効化は,次で行う.
pyenv shell <バージョン指定>
- pyenv のアンインストールは,次の手順で行う.
rm -rf ~/.pyenv
pyenv についての詳細説明: 別ページ »で説明
2. (5) Python の隔離された環境
Python の隔離された環境
次のような場合は,Python の仮想環境が役に立つ. Python の仮想環境の利用には,Python 3.3 以上で標準機能になった venv が便利である. Python 3.3 未満では,virtualenv が便利である. venv や virtualenv の利用により, Python の隔離された環境を複数共存させることができる.
- 複数の Python 環境の使用
複数の Python 環境を使用するとき, ある Python でのパッケージの変更や更新などが,他の Python に影響しないように隔離する.
- Ubuntu のシステム Python とは別の Python 環境
Ubuntu では,Python の多くのパッケージは apt 下の管理下にある(例えば「sudo apt -y install python3-numpy」のようなコマンドでインストールする.
これは,他のソフトウェアが Python のパッケージの依存関係にあるようなとき,Ubuntu システムが管理するので便利であるが,「pip でインストールする Python のパッケージ」と 「apt でインストールする Python のパッケージ」が混在し,管理が難しくなったり,動作が不安定になる可能性がある.
このような場合,Ubuntu の Python とは隔離された,別の Python の環境を作ると便利である. Python の仮想環境では,すべてのパッケージを pip で管理するようにできる.
venv
venv は,Python の仮想環境を作成する機能を提供するモジュールである.Python の仮想環境は隔離されており,特定のバージョンのPythonや,特定のバージョンやPythonパッケージを管理するのに役立つ.
Python では,さまざまなパッケージをインストールする. 複数のバージョンの Python を同時インストールすることもある. venv の利用により,Python の仮想環境することで次のメリットがある.
- 簡単なコマンドで,「特定の1つのバージョンの Python だけがインストールされたシステム」を仮想的に作ることができる.
- パッケージが違う複数の Python 環境の共存
使用法の要点
- Python の隔離された環境の新規作成
既定(デフォルト)では,Python の隔離された環境に,システムの site package は含まれない.
- Windows:
python -m venv <ディレクトリ名> (環境変数 Path で先頭の Python が使用される)
py <Python のバージョン指定> -m venv <ディレクトリ名> (Python ランチャーによる Python のバージョン指定)
- Ubuntu:
python3 -m venv <ディレクトリ名> (システム Python が使用される)
- Windows:
- Python の隔離された環境の有効化
- Windows: <ディレクトリ名>\.venv\Scripts\activate.bat
- Ubuntu: source <ディレクトリ名>/bin/activate
- Python の隔離された環境の無効化
- Windows: deactivate
- Ubuntu: deactivate
venv は Python 3.3 から Python の標準機能になった.
venv の公式の説明ページ: https://docs.python.org/ja/3/library/venv.html
Windows で,Python の隔離された環境を扱う(venv を使用)
Windows で,venv を用いて,新しいPython の仮想環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
- 前もって Python をインストールしておく.使用している Python のバージョンの確認は,次のコマンドで行うことができる.
python --version
- Python の仮想環境の作成と確認
ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の仮想環境を生成する.
python -m venv %HOMEPATH%\.venv dir /w %HOMEPATH%\.venv
- Python の隔離された環境の有効化
%HOMEPATH%\.venv\Scripts\activate.bat
- パッケージの確認
python -m pip list
- 現在使用している Python の隔離された環境の使用中止(無効化)
deactivate
Windows の Python ランチャーでバージョン指定して,Python の隔離された環境を扱う(venv を使用)
Windows で,venv を用いて,新しいPython の仮想環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
Python の仮想環境の新規作成では,Python ランチャーを用いて,Python のバージョンを選ぶ.
- Python ランチャーで,インストール済みの Python のバージョンを確認
py -0
このときの表示で,使いたいバージョンの Python が無いときは,Python のインストール: 別ページ »で説明を行う.
- Python の仮想環境の新規作成と確認
ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の仮想環境を生成する.
-3.10 は,使用したい Python のバージョンの指定である.
py -3.10 -m venv %HOMEPATH%\.venv dir /w %HOMEPATH%\.venv
- Python の隔離された環境の有効化
%HOMEPATH%\.venv\Scripts\activate.bat
- パッケージの確認
python -m pip list
- python コマンド,pip コマンドでは,
Python の仮想環境の新規作成のときに
Python ランチャーで
指定した Python のバージョンのものが実行されるように設定されている.そのことを確認.
python --version
- 現在使用している Python の隔離された環境の使用中止(無効化)
deactivate
Ubuntu で Python の隔離された環境を扱う(venv を使用)
venv を用いて,新しいPython の仮想環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
- python3-venv のインストール
sudo apt -y update sudo apt -y install python3-venv
- 使用している システム Python のバージョンの確認は,次のコマンドで行うことができる.
python3 --version
- Python の仮想環境の作成
ここでは,venv のためのディレクトリ名「~/.venv」を指定して,新しいPython の仮想環境を生成する.
*システム Python と違うバージョンの Python を使いたいときは, pyenv の利用が便利である.pyenv の詳細は,別ページ »で説明
- Python の隔離された環境の有効化
source ~/.venv/bin/activate
- パッケージの確認
python -m pip list
- 現在使用している Python の隔離された環境の使用中止(無効化)
deactivate
virtualenv,virtualenv-wrapper
virtualenv,virtualenv-wrapper は,Python の仮想環境の作成ができるソフトウェア venv が対応していないような Python を使いたい場合には, virtualenv,virtualenv-wrapper が便利な場合がある.
virtualenv-wrapper の使い方は次の通り
- mkvirtualenv <Python仮想環境名>: Python仮想環境の新規作成
- workon: Python仮想環境の一覧表示
- workon <Python仮想環境名>: Python仮想環境の有効化
- deactivate: いま有効化されているPython仮想環境の無効化
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.7 のPython の仮想環境を新規作成するときの操作例
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/
- Python 3.10
- Python 3.9
- Python 3.8
- Python 3.7
2. (7) Anaconda3
Anaconda3
Anaconda3は,Anaconda Inc. 社が提供しているPythonバージョン3のソフトウェアである.言語処理系,開発ツール,パッケージ管理ツールconda,さまざまなPythonパッケージから構成されている.さらに,アプリケーションとして Spyder,conda,Anaconda Prompt,Jupyter Notebook,Anaconda Navigator が含まれている.
- Spyder: Python 開発環境
- conda
conda は Python のパッケージのインストール,各種ソフトウェアのインストール,新しい Python 環境の作成等を行えるソフトウェア
conda は Anaconda3 の根幹となっており「conda を使わない」ということはできない.
- Anaconda プロンプト (Anaconda Prompt) はコマンドラインインターフェイス
- Jupyter ノートブック (Jupyter Notebook) は,対話型のプログラム実行ツール.Web ブラウザで動く.Python 以外にも Julia,Ruby,R,Lua,LuaJIT,Haskel,Scala,Go,JavaScript,node.js,bash などに対応.
- Anaconda Navigator は,ベースのアプリケーション管理ツール.
【関連する外部ページ】
- Anaconda3 の公式ページ: https://www.anaconda.com
- Anaconda3 の公式ダウンロードページ: https://www.anaconda.com/download
- conda 公式のチートシート: https://conda.io/projects/conda/en/latest/user-guide/cheatsheet.html
【関連項目】 Anaconda3 のインストール(winget を使用)(Windows 上)
Anaconda3 のインストール(winget を使用)(Windows 上)
- Windows で,コマンドプロンプトを管理者として実行
コマンドプロンプトを管理者として実行: 別ページ »で説明
- 次のコマンドを実行
次のコマンドは,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\")"
- Windows のスタートメニューに「Anaconda3 (64-bit)」が増え,その下に
「Anaconda Navigator」,「Anaconda Powershell Preompt」,「Anaconda Prompt」,「Jupyter Notebook」,「Reset Spyder Settings」,「Spyder」ができる.
【関連する外部ページ】
- Anaconda3 の公式ページ: https://www.anaconda.com
- Anaconda3 の公式ダウンロードページ: https://www.anaconda.com/download
- conda 公式のチートシート: https://conda.io/projects/conda/en/latest/user-guide/cheatsheet.html
【サイト内の関連ページ】
【関連項目】 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 内の Python は,孤立した Python 環境である.
- Anaconda3 の利用では, Anaconda プロンプト (Anaconda Prompt), Spyder が便利である. (いずれもスタートメニューから起動できる)
- (Windows で Python と Anaconda 内の Python が共存する場合,Anaconda3 にパスを通すのは推奨できない).
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
3. Google Colaboratory
Google Colaboratory の使い方
【スライド資料】
3. (1) Google Colaboratory の主な機能
Google Colaboratory の利用により, オンラインで,Web ブラウザを用いて,次のことができる.
- ノートブックの形式で,Python ソースコードの編集や実行,実行結果の保存などができる.
- そのとき,説明文の編集.説明文には,リンク,添付ファイル,図を含めることができる.
- 「!pip」,「%cd /content」などの,システム操作ができる.
- 共有(第三者が,ノートブックをダウンロードし,実行できる.編集もできる).
Google Colaboratory は,オンラインで使用する. Google Colaboratory の使用には,Google アカウントの取得が必要.
「Colaboratory へようこそ」のページのURL:
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
3. (2) Google Colaboratory のプログラムを実行
- すべてのセルの実行
メニューで「ランタイム」,「すべてのセルを実行」と操作する.
- Google アカウントでのログインが求められたときはログインする
- 実行がうまく行かない場合には,次を行う
- Google アカウントでのログインしていないときは,ログインを行う.その後,再度,すべてのセルを実行する操作を行う.
ログインの操作は,Web ブラウザで行う.
- すべてのアクティブなセッションを停止する.その後,再度,すべてのセルを実行する操作を行う.
そのために,メニューの「ランタイム」,「セッションの管理」と操作する.アクティブなセッションの一覧が表示されるので,「終了」をクリックして,すべてのアクティブなセッションを終了する.
- Google アカウントでのログインしていないときは,ログインを行う.その後,再度,すべてのセルを実行する操作を行う.
3. (3) Google Colaboratory で PYTHON 3 の新しいノートブックを新規作成
Google Colaboratory はオンラインの Python 開発環境. 使用するには Google アカウントが必要
- Google Colaboratory のWebページを開く
https://colab.research.google.com
- 「ファイル」で,「ノートブックを新規作成」を選ぶ
- Google アカウントでのログインが求められたときはログインする
- コードセルの中に Python プログラムを書き,「実行ボタン」をクリック
- コードセルを追加したいときは,「挿入」で,「コードセル」をクリック
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 での実行結果
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 モデルを用いた画像分類を行う.
- パソコン接続のカメラを使用するので準備しておく
- 前準備として Python 用 opencv-python のインストール
python -m pip install -U opencv-python opencv-contrib-python
- Windows で,コマンドプロンプトを実行
- エディタを起動
cd /d c:%HOMEPATH% notepad convnext.py
- エディタで,次のプログラムを保存
【プログラム説明】 このプログラムは,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()
- Python プログラムの実行
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
【サイト内の関連ページ】 Python のまとめ: 別ページ »
プログラムを convnext.pyのようなファイル名で保存したので, 「python convnext.py」のようなコマンドで行う.
python convnext.py
- 結果の確認
終了は 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
- pip の起動は 「pip」または「python -m pip」.
- Windows のユーザ名で日本語を使っているときは, コマンドプロンプトを管理者として実行してから, 「pip」または「python -m pip」実行するのがトラブルが少ない.
- venvを使うときは,venv が定める activate を実行した後に「pip」または「python -m pip」.
Ubuntu
- システム Python を使っていて,隔離した Python 環境を作らない(pyenv,venv なども使っていない)ときは,pip ではなくて,apt でインストール.
- pyenvを使うときは,「pyenv shell <バージョン>」のあとに「pip」または「python -m pip」.
- venvを使うときは,venv が定める activate を実行した後に「pip」または「python -m pip」.
5. (2) Python パッケージ・インデックス (PyPI)
パッケージの検索や調査を行うときに,次の URL を使う.
Python パッケージ・インデックス (PyPI) の URL: https://pypi.org/
5. (3) Google Colaboratory での pip の操作
Google Colaboratory では pip を次のように操作する.頭に「!」を付ける.
- パッケージのインストール
!pip3 install <パッケージ名>
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
- インストール済みパッケージの一覧
!pip3 list
- アンインストール
!pip3 uninstall <パッケージ名>
- パッケージの情報
!pip3 show <パッケージ名>
5. (4) Windows での pip の操作
Windows では pip を次のように操作する.
- Python のバージョン指定なし
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用されることに注意.
- パッケージのインストール
pip install <パッケージ名>
Windows で,管理者の領域にPython をインストールしている場合には,管理者の権限で実行する(その方がトラブルが少ないようである).パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
- インストール済みパッケージの一覧
pip list
- アンインストール
pip uninstall <パッケージ名>
Windows で,管理者の領域にPython をインストールしている場合には,管理者の権限で実行する(その方がトラブルが少ないようである). - パッケージの情報
pip show <パッケージ名>
- パッケージのインストール
- Windows の Python ランチャーで Python のバージョン指定
- パッケージのインストール
Windows で,管理者の領域にPython をインストールしている場合には,管理者の権限で実行する(その方がトラブルが少ないようである).
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
- インストール済みパッケージの一覧
- アンインストール
Windows で,管理者の領域にPython をインストールしている場合には,管理者の権限で実行する(その方がトラブルが少ないようである).
- パッケージの情報
- パッケージのインストール
venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.
5. (5) Ubuntu での pip の操作
Ubuntu でシステム Python を使う場合は,pip を次のように操作する.
- パッケージのインストール
sudo pip3 install <パッケージ名> (システム Python を使う場合)
Ubuntu では,「sudo pip3 install」でパッケージをインストールする前に,「apt-cache search <キーワード>」で Ubuntu のパッケージを検索し,Ubuntu パッケージが見つかった場合にはそちらを 「apt install <Ubuntu のパッケージ名>」でインストール.
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
- インストール済みパッケージの一覧
pip3 list (システム Python を使う場合)
- アンインストール
sudo pip3 uninstall <パッケージ名> (システム Python を使う場合)
- パッケージの情報
pip3 show <パッケージ名> (システム Python を使う場合)
pyenv を用いてインストールした Python は,pyenv の設定の後,「python」で起動する.
venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.
5. (6) pip と setuptools を最新版に更新
- Windows の場合
Windows では, コマンドプロンプトを管理者として開き次のコマンドを実行する.
python -m pip install -U pip setuptools
- Ubuntu の場合
sudo apt -y upgrade python3-pip python3-setuptools
5. (7) pip のインストールを手動で行いたい場合
Python をインストールすると pip がインストールされるので,ここに書いた操作は,ふつうは必要ない.
- Windows で pypa を使って pip の更新を行う操作
cd /tmp curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.py
- 次のページから .whl 形式ファイルをダウンロードして pip でインストールする場合もある
「Geospatial library wheels for Python on Windows」のページ: https://github.com/cgohlke/geospatial-wheels
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 Console,Spyder,PyCharm,PyScripter など)が便利である.
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 が使用される.
- python: python
- pip: python -m pip または pip
- 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
Windows の Python ランチャーでバージョン指定
- インストール済み Python のバージョン一覧: py -0
- python: py -3.10 (Python 3.10 を使う場合)
- pip: py -3.10 -m pip (Python 3.10 の pip を使う場合)
- Jupyter Qt Console: py -3.10 -m qtconsole (Python 3.10 を使う場合)
- Jupyter ノートブック (Jupyter Notebook): py -3.10 -m notebook (Python 3.10 を使う場合)
- Jupyter Lab: py -3.10 -m jupyterlab (Python 3.10 を使う場合)
Ubuntu では,python,pip,Jupyter Qt Console,Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,Spyder は,次のコマンドで起動できる.
- python: Ubuntu では python3
- pip: 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
- pip: Ubuntu では sudo pip3
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 開発環境として,Jupyter Qt Console,Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
Python のバージョン指定なし
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用されることに注意.
- Python コンソール(Jupyter Qt Console),Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
Windows では,コマンドプロンプトを管理者として実行し, 次のコマンドを実行する.
次のコマンドを実行することにより,pipとsetuptoolsを更新する,Jupyter Notebook,PyQt5,Spyderなどの主要なPython環境がインストールされる.
python -m pip install -U pip setuptools requests notebook==6.5.7 jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
- Windows での PyCharm のインストール: 別ページ »で説明
- Windows での PyScripter のインストール: 別ページ »で説明
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のプログラムを受け付ける. そして,その実行結果を表示する.
- Jupyter Qt Console : Python コンソールの機能を持つ
- Spyder: Python コンソールの機能を持つ
デフォルトで右下の画面が Python コンソールになっている
- PyCharm: Python コンソールの機能を持つ
- python
Windows では,端末で「python」あるいは「py -3.10(Python 3.10 を使う場合)」を実行して起動する.
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 のパッケージ名>」でインストール.
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 開発環境として,Jupyter Qt Console,Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
Python のバージョン指定なし
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用されることに注意.
- Python コンソール(Jupyter Qt Console),Jupyter ノートブック (Jupyter Notebook),Jupyter Lab,Nteract,spyder のインストール
Windows では,コマンドプロンプトを管理者として実行し, 次のコマンドを実行する.
次のコマンドを実行することにより,pipとsetuptoolsを更新する,Jupyter Notebook,PyQt5,Spyderなどの主要なPython環境がインストールされる.
python -m pip install -U pip setuptools requests notebook==6.5.7 jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
- Windows での PyCharm のインストール: 別ページ »で説明
- Windows での PyScripter のインストール: 別ページ »で説明
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のプログラムを受け付ける. そして,その実行結果を表示する.
- Jupyter Qt Console : Python コンソールの機能を持つ
- Spyder: Python コンソールの機能を持つ
デフォルトで右下の画面が Python コンソールになっている
- PyCharm: Python コンソールの機能を持つ
- python
Windows では,端末で「python」あるいは「py -3.10(Python 3.10 を使う場合)」を実行して起動する.
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))
- 次のコマンドで,設定ファイルを生成
jupyter notebook --generate-config
- 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 プログラム作成に関する種々の機能を持ったソフトウェアである. 次の機能を持つ.
- Python プログラムの編集と実行
- Python コンソール
- Python の仮想環境
PyCharmでは,既定(デフォルト)では,Python の仮想環境が利用されることに注意.pip で Python パッケージをインストールしたときなどで,「システムの Python を使いたい」ときは, 別ページで説明手順で設定すること.
【PyCharm Community 版の主な機能】
- 日本語言語パックのプラグイン
操作: Plugins,japanese で検索,「Install」をクリック
- Python コードインスペクション
シンタックスハイライト,整形(コードフォーマッタ),コード解析, 修正候補の提示と実行(クイックフィックス)(Alt+Enter(同時押し)を使用), コード補完(補完候補は自動表示)など
- 検索
検索は,SHIFT,SHIFT(2回押し)
- ビジュアルなデバッガ
ブレークポイント(ブレークポイントはマウスで指定可能),変数値の表示など
https://www.jetbrains.com/ja-jp/pycharm/features/tools.html#debugger
- リファクタリング
名前の変更,メソッドの抽出など(リファクタリングは,メニューで実行可能),
- 型ヒント
型ヒントは,Alt+Enter(同時押し)
https://www.jetbrains.com/help/pycharm/2016.3/type-hinting-in-pycharm.html
- 単体テストで py.test を使うように設定
ファイル (File),設定(Settings),Python 統合ツール(Python Integrated tools),デフォルトのテストランナー(Default test runner)で,「pytest」を設定
Python プログラミングの基礎
7. (1) オブジェクトの生成と削除,同値,同一性
プログラミングでのオブジェクトは,コンピュータでの操作や処理の対象となるもののことである.
キーワード: =,del,==,is
- 同値
a = 123 b = 123 print(a == b)
- 同一性
x = True y = None print(x is True) print(y is None)
- オブジェクトの生成と削除
最後の「print(c)」の実行ではエラーメッセージが出る.
c = 123 print(c) del c print(c)
7. (2) 単純値のデータ型
- キーワード: int,float,Decimal,True,False,bool,None,str,bytes,
list,range,tuple,dict,set
- int: 整数
- float: 浮動小数点数
- bool: ブール値
- str: 文字列
- bytes: バイト列
- 辞書 (dictionary)
dic = {} dic.update( {"kaneko": 30} ) print(dic)
- 名前付きタップル (named tuple)
import collections Point3d = collections.namedtuple('Point3d', 'x y z') p = Point3d(10, 20, 30) print(p)
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)) )
制御構造(条件分岐,繰り返し)
キーワード: if,elif,else,while,break,for
条件分岐
- 条件分岐
変数の値によって,実行の流れが変わる.
age = 15 if (age <= 12): print(500) else: print(1800)
- 多分岐
age = 15 if age <= 12: print(500) elif age <= 15: print(1000) else: print(1800)
繰り返し
- while による繰り返し
b = 8 s = 0 while s < 100: s = s + b print(s)
- for による繰り返し
for i in range(10): print(i)
月の日数についてのデータを作る.うるう年のことは考えないことにする
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 )
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 でコマンドプロンプトを管理者として開き 次のコマンドを実行する.
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が便利である.
- アンケートデータの読み込み
import pandas as pd import seaborn as sns x = pd.read_csv('C:/enquete.csv', encoding='SHIFT-JIS')
先頭行にデータ本体がある(先頭行が属性名でない)ときは、「pd.read_csv('hoge.csv',
)」のようにする - 読み込んだデータの表示
print(x)
- 読み込んだデータのうち、1列目と 2列目の表示
* オブジェクト x には 0列目と 1列目と 2列目がある.
print(x.iloc[:,1]) print(x.iloc[:,2])
- 読み込んだデータについて、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()
- 各列について、基本的な情報の表示
- head: 先頭部分の表示
- shape: サイズ
- ndim: 次元数
- columns: 属性名
- info(): 各属性のデータ型
print(x.head()) print(x.info()) print(x.shape) print(x.ndim) print(x.columns)
- 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 のコンストラクタ
- リストから
pd.DataFrame([1, 2, 3])
- numpy.ndarray から
import numpy as np import pandas as pd pd.DataFrame( np.array([1,2,3]) )
import numpy as np import pandas as pd pd.DataFrame( np.array([[1,2,3], [10,20,30], [100,200,300]]) )
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次元の配列の生成
- 0要素
type はオブジェクトのタイプの取得.shape は配列(アレイ)のサイズの取得.
import numpy as np x = np.zeros(10) print(x) print(type(x)) print(x.shape)
表示の「0.」は「0」のこと
- 1要素
import numpy as np x = np.ones(10) print(x) print(type(x)) print(x.shape)
表示の「1.」は「1」のこと
- 乱数. 正規分布.平均が0
import numpy as np x = np.random.randn(10) print(x) print(type(x)) print(x.shape)
- 要素指定(要素を並べて書いて配列を作る)
import numpy as np x = np.array([3, 1, 2, 5, 4]) print(x) print(type(x)) print(x.shape)
- arange による指定
-5 から開始して、2 ずつ増やし、4 まで
import numpy as np x = np.arange(-5, 4, 2) print(x) print(type(x)) print(x.shape)
- linespace による指定
-2 から、2 まで、全部で、9 個
import numpy as np x = np.linspace(-2, 2, 9) print(x) print(type(x)) print(x.shape)
合計
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 を用いて行列の積を求める
時間計測も行う.
- CPU を用いて,行列の積を求める
!pip3 install cupy import numpy as np use_gpu=False if use_gpu: import cupy npcp = cupy else: npcp = np x = npcp.random.random((5000, 5000)) y = npcp.random.random((5000, 5000)) import datetime a = datetime.datetime.now() npcp.dot(x, y) print( (a - datetime.datetime.now()).microseconds )
- GPU を用いて,行列の積を求め
上のプログラムと同じ. 「use_gpu=False」を 「use_gpu=True」に変えただけ
!pip3 install cupy import numpy as np use_gpu=True if use_gpu: import cupy npcp = cupy else: npcp = np x = npcp.random.random((5000, 5000)) y = npcp.random.random((5000, 5000)) import datetime a = datetime.datetime.now() npcp.dot(x, y) print( (a - datetime.datetime.now()).microseconds )
行列の積,主成分分析,SVD,k-means
次のプログラムは,NumPy と scikit-learn を使用して,行列計算とデータ分析を行う.
- 2000x2000 の乱数行列 X と Y を生成し、それらの行列積を計算する.
- scikit-learn の PCA を使用して,X の主成分分析を行い,2次元に次元削減する.
- NumPy の svd 関数を使用して、X の特異値分解を行う.
- 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)
最大公約数
24 と 18 の最大公約数を求めたい.結果 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辺の長さが,4と6で,その間の角度が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 のプロットライブラリ.
- x, y からの散布図の作成
%matplotlib inline import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Suppress Matplotlib warnings import numpy as n x = [1, 2, 3, 4, 5] y = [2, 4, 1, 3, 5] plt.style.use('ggplot') plt.scatter(x, y)
- pandas の 2つの属性 x, y からの散布図の作成
import numpy as np import pandas as pd %matplotlib inline import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Suppress Matplotlib warnings a = pd.DataFrame( {'x' : [1, 2, 3, 4, 5], 'y' : [2, 4, 1, 3, 5]} ) plt.style.use('ggplot') plt.plot(a['x'], a['y'], 'ro') plt.show()
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 を用いてのディープラーニング(深層学習)でのモデルの構築と,その訓練(構築)を簡単に行えるようにするソフトウェア
用語集
- Keras のモデルは,複数の層が組み合わさったもの.単純に層を積み重ねたもの(シーケンシャル)や,複雑な構成のもの(グラフ)がある
- Keras の層には,活性化関数,層の重みの種類(カーネル,バイアスなど)を設定できる
- Keras の層には,全結合,畳み込み(コンボリューション)などの種類がある
- 学習のために,オプティマイザの設定を行う
- Keras のモデルの構成やオプティマイザの設定は,保存できる
- 学習の結果は,結合の重みになる.結合の重みも保存できる
ニューラルネットワークのデモサイト: http://playground.tensorflow.org
手順
-
パッケージのインポートなど
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__)
- 画像データセット 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"]
- 画像データセット 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()
- 「サイズ 28 × 28 の 60000枚の濃淡画像」であることを確認
配列の形: 60000×28×28
次元: 3
「+ コード」で,コードセルを追加し,次を実行.
print( x_train.shape ) print( x_train.ndim )
- ディープニューラルネットワークのモデルの作成
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'])
- ニューラルネットワークの確認表示
「+ コード」で,コードセルを追加し,次を実行.
print(m.summary())
- ニューラルネットワークの学習を行う
「+ コード」で,コードセルを追加し,次を実行.
history = m.fit(x_train, y_train, epochs=50)
- 検証用データで検証する
「+ コード」で,コードセルを追加し,次を実行.
print( m.evaluate(x_test, y_test, verbose=2) )
* 訓練(学習)などで乱数が使われるので,下図と違う値になる.
- ニューラルネットワークを使ってみる
テスト画像を,ニューラルネットワークに与えて,予測させる
テスト画像は 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個の数字が得られている.
* 訓練(学習)などで乱数が使われるので,下図と違う値になる.
- 正解表示
テスト画像 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
- アッカーマン関数の定義
def a(m, n): if m == 0: return n + 1 elif n == 0: return a(m-1, 1) else: return a(m-1, a(m, n-1)) print(a(3, 2)) print(a(m = 3, n = 2)) print(a(n = 2, m = 3))
- 既定(デフォルト)値
def a(m, n = 1): if m == 0: return n + 1 elif n == 0: return a(m-1, 1) else: return a(m-1, a(m, n-1)) print(a(3, 1)) print(a(3)) print(a(m = 3))
- 関数オブジェクト
f = lambda x: x + 1 print(f(100))
式の抽象化と関数
式の抽象化は,類似した複数の式(下に書いた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))
クラス定義,オブジェクト生成,属性アクセス
- メソッド: オブジェクトに属する操作や処理
- クラス: 同一種類のオブジェクトの集まり
- クラス定義: あるクラスが持つ属性とメソッドを定めること.
- 「.」+属性名: 属性アクセス
メソッド内では,self + 「.」で,属性にアクセスする
クラス定義,オブジェクト生成,属性アクセスの例
クラス名: 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))
メソッド
メソッドの例
- 「.」+メソッド名: メソッドアクセス
メソッド内では,self + 「.」で,属性やメソッドにアクセスする
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)