1ページに Python の用語,知識をまとめる.
【目次】
Google Colaboratory はオンラインの Python 開発環境
【サイト内のまとめページへのリンク】
【サイト内の主な Python 関連ページ】
Python のインストール
【外部ページへのリンク(Python 関連)】
【サイト内の関連ページ】
Google Colaboratory はオンラインの Python 開発環境.詳しくは: このページの別項目で説明.
Windows での Python のインストール: 別ページ »で説明.
python
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用される.
py -<Python のバージョン>
インストールされている Python のバージョンは「py -0」で確認することができる.
Ubuntu のシステム Python の Python バージョン3 は,「python3」で起動する.
python3
Python の URL: https://www.python.org/
Python 開発環境,Python コンソール: 別項目で説明している.
Windows で,ユーザ名が日本語のとき,あとでトラブルが発生するかもしれない. トラブルの回避のため, Python をシステム管理者の領域にインストール(パソコンの全ユーザの共有領域)する.
TensorFlow を使う予定がある場合は,https://pypi.org/project/tensorflow-gpu/#filesで,必要な Python のバージョンを確認しておく. 2022/9 時点では,TensorFlow バージョン 2.10 が動くのは,Python 3.10 または Python 3.9 または Python 3.8 または Python 3.7 (https://pypi.org/project/tensorflow/2.10/#files)
Windows での Python 3.10 のインストール(あとのトラブルが起きにくいような手順を定めている)
ページの上の方にある「Downloads」をクリック. 「Downloads」の下にメニューが出るので,その中の「Windows」をクリック
ここでは,Python 3.10 系列の最新版を探して,選ぶ.
以下,Python 3.10.9 を選んだとして説明を続ける.他のバージョンでも以下の手順はほぼ同じである.
TensorFlow を使う予定がある場合は,https://pypi.org/project/tensorflow-gpu/#filesで,必要な Python のバージョンを確認しておく. 2022/9 時点では,TensorFlow バージョン 2.10 が動くのは,Python 3.10 または Python 3.9 または Python 3.8 または Python 3.7 (https://pypi.org/project/tensorflow/2.10/#files)
Windows の 64ビット版のインストーラをダウンロードしたいので、「Windows Installer (64-bit)」を選ぶ
すでに Python ランチャーをインストール済みのときは, 「Install launcher for all users (recommended)」がチェックできないようになっている場合がある.そのときは,チェックせずに進む.
「Install Python 3.10 for all users」を選ぶ理由.
ユーザ名が日本語のときのトラブルを防ぐため.
表示されない場合は問題ない.そのまま続行.
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 の中のファイルで,アンインストール操作により削除されるべきファイルが残っている可能性があるなど)
次のコマンドを実行する.
python -m pip install -U pip setuptools
Python にトラブルがあった時に役に立つように,情報取得の手順をまとめている.
インストール時に,「Add Python ... to PATH」をチェックしたので、 Python についての設定が自動で行われる.
python --version
python
下の実行例では、バージョン番号として「1934」が表示されている
下の実行例では、バージョン番号として「14.3」が表示されている
from distutils.msvc9compiler import * get_build_version()
Python のパッケージも同時にインストールされることが分かる.
※ エラーメッセージが出ないことを確認.
pip list
Windows では,コマンドプロン プトを管理者として実行し, 次のコマンドを実行する.
この操作は,必ずPython をすべてアンインストールした後に行うこと.
rmdir /s /q %APPDATA%\Python cd "C:\Program Files" for /F %i in ('dir /ad /b /w Python3*') do rmdir /s /q %i
Windows では, Python の 3.6.A,3.7.B, 3.8.C, 3.9.D, 3.10.E のように,複数のバージョンの Python を同時にインストールできる.
複数のバージョンの Python を同時にインストールしたとき, Widndows のPython ランチャーを用いて, インストールされている Python のバージョンを調べたり,Python のバージョンを指定しての起動を行うことができ便利である. Python のバージョンを指定しての pip や venv の実行を行うときにも便利である.
Python ランチャーは,Windows で動くツール. 複数バージョンの Python を同時にインストールしたときに便利である.
Python ランチャーは,Windows での 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 ランチャー を用いて,「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 を使うことができる.
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 の更新は次のコマンドで行う.
次のコマンドを実行.
sudo apt -y update sudo apt -y install python3-pip python3-setuptools
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 install -l
pyenv install <バージョン指定>
pyenv version
pyenv shell <バージョン指定>
rm -rf ~/.pyenv
pyenv についての詳細説明: 別ページ »で説明
次のような場合は,Python の隔離された環境が役に立つ. Python の隔離された環境の利用には,Python 3.3 以上で標準機能になった venv が便利である. Python 3.3 未満では,virtualenv が便利である. venv や virtualenv の利用により, Python の隔離された環境を複数共存させることができる.
複数の Python 環境を使用するとき, ある Python でのパッケージの変更や更新などが,他の Python に影響しないように隔離する.
Ubuntu では,Python の多くのパッケージは apt 下の管理下にある(例えば「sudo apt -y install python3-numpy」のようなコマンドでインストールする.
これは,他のソフトウェアが Python のパッケージの依存関係にあるようなとき,Ubuntu システムが管理するので便利であるが,「pip でインストールする Python のパッケージ」と 「apt でインストールする Python のパッケージ」が混在し,管理が難しくなったり,動作が不安定になる可能性がある.
このような場合,Ubuntu の Python とは隔離された,別の Python の環境を作ると便利である. Python の隔離された環境では,すべてのパッケージを pip で管理するようにできる.
venv は,Python の隔離された環境の作成が簡単にできる機能.
Python では,さまざまなパッケージをインストールする. 複数のバージョンの Python を同時インストールすることもある. venv の利用により,Python の隔離された環境することで次のメリットがある.
使用法の要点
既定(デフォルト)では,Python の隔離された環境に,システムの site package は含まれない.
python -m venv <ディレクトリ名> (環境変数 Path で先頭の Python が使用される)
py <Python のバージョン指定> -m venv <ディレクトリ名> (Python ランチャーによる Python のバージョン指定)
python3 -m venv <ディレクトリ名> (システム Python が使用される)
venv は Python 3.3 から Python の標準機能になった.
venv の公式の説明ページ: https://docs.python.org/ja/3/library/venv.html
venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
python --version
ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の隔離された環境を生成する.
python -m venv %HOMEPATH%\.venv dir /w %HOMEPATH%\.venv
%HOMEPATH%\.venv\Scripts\activate.bat
python -m pip list
deactivate
venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
Python の隔離された環境の新規作成では,Python ランチャーを用いて,Python のバージョンを選ぶ.
py -0
このときの表示で,使いたいバージョンの Python が無いときは,Python のインストール: 別ページ »で説明を行う.
ここでは,venv のためのディレクトリ名「%HOMEPATH%\.venv」を指定して,新しいPython の隔離された環境を生成する.
-3.10 は,使用したい Python のバージョンの指定である.
py -3.10 -m venv %HOMEPATH%\.venv dir /w %HOMEPATH%\.venv
%HOMEPATH%\.venv\Scripts\activate.bat
python -m pip list
python --version
deactivate
venv を用いて,新しいPython の隔離された環境の生成 Python の隔離された環境の新規作成,有効化,無効化を行う.
sudo apt -y update sudo apt -y install python3-venv
python3 --version
ここでは,venv のためのディレクトリ名「~/.venv」を指定して,新しいPython の隔離された環境を生成する.
※システム Python と違うバージョンの Python を使いたいときは, pyenv の利用が便利である.pyenv の詳細は,別ページ »で説明
source ~/.venv/bin/activate
python -m pip list
deactivate
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.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 を指定する。
Python の公式ページ: https://www.python.org/
Anaconda3 は,Anaconda Inc. 社が提供している Python バージョン 3 の言語処理系,開発環境やツール,管理ツールである conda,主要な Python パッケージを1つにまとめたソフトウェアである.
Anaconda3 には, 次のアプリケーションが同封されている.
conda は Python のパッケージのインストール,各種ソフトウェアのインストール,新しい Python 環境の作成等を行えるソフトウェア
conda は Anaconda3 の根幹となっており「conda を使わない」ということはできない.
Anaconda3 でのパッケージ管理は pip でなく conda を用いる.
このサイトでは,システムの環境変数 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 プロンプト」は,Anaconda3 に同封されたコマンドプロンプトのソフトウェア. Windows のコマンドプロンプトとの違いは,CONDA関係の環境変数と,環境変数PYTHONIOENCODINGが自動設定されること.
Windows では,Anaconda プロンプト (Anaconda Prompt)は,Anaconda3 に同封されている.
Python にはバージョンがある. Python には,さまざまなパッケージをインストールすることができる. conda の利用により,バージョンが違ったり,パッケージが違ったりする複数の Python 環境を共存させることができる.
Windows では,Anaconda3 に同封の conda が便利.
conda create --name py39 python=3.9
Anaconda3 に内蔵の Python を使いたいときは,「py」コマンドは使わない. パスを通すか,フルパスで指定するか,Anaconda Prompt を使う.
すでに,Python をインストール済みの場合でも,Anaconda 3 と両立できる.
Anaconda 3 では pip を使わないこと(Anaconda Prommpt など). Anaconda3 は pip の使用を想定していない.
Windows のシステムの Python について,バージョンの違う Python を並列できる. バージョンの違う Python を使いたいだけのために Anaconda 3 をインストールする必要はない.
「Anaconda プロンプト」は,Anaconda3 に同封されたコマンドプロンプトのソフトウェア. Windows のコマンドプロンプトとの違いは,conda 関係の環境変数と,環境変数PYTHONIOENCODINGが自動設定されること.
Windows では,Anaconda プロンプト (Anaconda Prompt)は,Anaconda3 に同封されている.
Google Colaboratory の使い方
【スライド資料】
Google Colaboratory の利用により, オンラインで,Web ブラウザを用いて,次のことができる.
Google Colaboratory は,オンラインで使用する. Google Colaboratory の使用には,Google アカウントの取得が必要.
「Colaboratory へようこそ」のページのURL:
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
メニューで「ランタイム」,「すべてのセルを実行」と操作する.
ログインの操作は,Web ブラウザで行う.
そのために,メニューの「ランタイム」,「セッションの管理」と操作する.アクティブなセッションの一覧が表示されるので,「終了」をクリックして,すべてのアクティブなセッションを終了する.
Google Colaboratory はオンラインの Python 開発環境. 使用するには Google アカウントが必要
https://colab.research.google.com
ファイルのアップロード
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')
Google Colaboratory のコードセルで,次の Python プログラムを実行
import tensorflow as tf print(tf.__version__) import keras print(keras.__version__)
Google Colaboratory のコードセルで,次の Python プログラムを実行
!nvcc -V
!nvidia-smi --query-gpu=gpu_name,driver_version,memory.total --format=csv
try: from google.colab import drive USE_COLAB = True except: USE_COLAB = False
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()
matplotlib.pyplot の imshow を使用
%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()
PIL の Image を使用(IPython.display の Image ではない)
%cd /content !curl -O http://images.cocodataset.org/val2017/000000439715.jpg from PIL import Image from IPython.display import display display(Image.open('000000439715.jpg'))
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'
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))
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)
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)
mmcv を使用 前準備として mmcv のインストールが必要.
import mmcv mmcv.imshow('000000439715.jpg')
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')
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)
VGG 16, Imagenet による学習済みの重みデータによる画像分類を試してみる
Kerasのサイトで公開されているものを少し書き換えて使用。
「'127.png'」のところは,実際に使用する画像ファイル名に書き換えること.
import h5py from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.vgg16 import VGG16 from tensorflow.keras.applications.vgg16 import preprocess_input import numpy as np m = VGG16(weights='imagenet', include_top=False) img_path = '127.png' img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) features = m.predict(x) print(features)
InceptionV3, Imagenet による学習済みの重みデータによる画像分類を試してみる
Kerasのサイトで公開されているものを少し書き換えて使用。
「'127.png'」のところは,実際に使用する画像ファイル名に書き換えること.
import h5py from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3 import numpy as np m = InceptionV3(weights='imagenet') img_path = '127.png' img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = m.predict(x) print('Predicted:') for p in decode_predictions(preds, top=5)[0]: print("Score {}, Label {}".format(p[2], p[1]))
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)))
pip は Python のパッケージマネージャ.
パッケージの検索や調査を行うときに,次の URL を使う.
Python パッケージ・インデックス (PyPI) の URL: https://pypi.org/
Google Colaboratory では pip を次のように操作する.頭に「!」を付ける.
!pip3 install <パッケージ名>
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
!pip3 list
!pip3 uninstall <パッケージ名>
!pip3 show <パッケージ名>
Windows では pip を次のように操作する.
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用されることに注意.
pip install <パッケージ名>
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
pip list
pip uninstall <パッケージ名>
pip show <パッケージ名>
パッケージのバージョン指定を行うときは,パッケージ名(例えば「numpy」)の後に,「numpy==19.5」のように付ける.
venvを使うときは,venv が定める activate コマンドを実行した後,「python」で起動する.
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」で起動する.
Windows では, コマンドプロンプトを管理者として開き次のコマンドを実行する.
python -m pip install -U pip setuptools
sudo apt -y upgrade python3-pip python3-setuptools
Python をインストールすると pip がインストールされるので,ここに書いた操作は,ふつうは必要ない.
cd /tmp curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.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
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
これは,Windows 用の非公式Pythonパッケージ。非公式なので,Pythonパッケージの扱いに慣れた人向け。
URL: https://www.lfd.uci.edu/~gohlke/pythonlibs/
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 .
Python プログラムを動かして,結果をビジュアルに見たいときは, Python の開発環境や Python コンソール(Jupyter Qt Console, Spyder,PyCharm,PyScripter など)が便利.
Python, pip, Python 開発環境の起動コマンドのまとめ.
Windows では,python, pip, Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder は,次のコマンドで起動できる.
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用される.
Windows の Python ランチャーでバージョン指定
Ubuntu では,python, pip, Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder は,次のコマンドで起動できる.
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 開発環境の説明: 別ページ »にまとめ
Windows で複数の Python をインストールしているときは,環境変数 Path で先頭の Python が使用されることに注意.
Windows では,コマンドプロン プトを管理者として実行し, 次のコマンドを実行する.
python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
使用する Python のバージョンを指定する.Python 3.10 を使う場合は, コマンドプロンプトを管理者として開き次のコマンドを実行する.
「3.10」のところにバージョンを指定する.
py -3.10 -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
Ubuntu でインストールを行うには,次のコマンドを実行.
sudo apt -y update sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential sudo pip3 uninstall ptyprocess sniffio terminado tornado jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder sudo apt -y install jupyter jupyter-qtconsole spyder3 sudo apt -y install python3-ptyprocess python3-sniffio python3-terminado python3-tornado sudo pip3 install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter
Ubuntu で複数の Python バージョンを共存しているときは, pyenvを使う. 次のようにバージョン指定する.
pyenv shell 3.8.3 python -m pip install jupyterlab jupyter jupyter-console jupytext
Python コンソールは,Python のシェルの画面のこと. プロンプトが出て,Pythonのプログラムを受け付ける. そして,その実行結果を表示する.
デフォルトで右下の画面が Python コンソールになっている
Windows では,端末で「python」あるいは「py -3.10(Python 3.10 を使う場合)」を実行して起動する.
Blender に内蔵された Python のコンソールである. Blender 3.0 では次の手順で開くことができる.
画面として「Python コンソール」を選ぶ.
Jupyter Qt Console は Python コンソールの機能を持ったソフトウェア. インストールは,このページの別の項目で説明している.
Jupyter Qt Console の起動: 「jupyter qtconsole」または「py -3.10 -m qtconsole」 (Python 3.10 を使う場合).
次の Python プログラムを実行してみる.
import numpy as np %matplotlib inline import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Suppress Matplotlib warnings x = np.linspace(0, 6, 100) plt.style.use('default') plt.plot(x, np.sin(x))
Jupyter ノートブックは,Pythonなどのプログラムのソースコード,実行結果などを1つのノートとして残す機能をもったノートブック. インストールは,このページの別の項目で説明している.
Jupyter ノートブック (Jupyter Notebook) の起動: 「jupyter notebook」または「py -3.10 -m notebook」 (Python 3.10 を使う場合).
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」.
Nteractは,Pythonなどのプログラムのソースコード,実行結果などを1つのノートとして残す機能をもったノートブック. インストールは,このページの別の項目で説明している.
Nteract の起動: 「jupyter nteract」
次の Python プログラムを実行してみる. そのために「Start a new notebook」の下の「Python」をクリック,次のプログラムを入れ実行.
import numpy as np %matplotlib inline import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Suppress Matplotlib warnings x = np.linspace(0, 6, 100) plt.style.use('default') plt.plot(x, np.sin(x))
jupyter notebook --generate-config
c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"
PyCharm は Python プログラム作成に関する種々の機能を持ったソフトウェア.
Windows での PyScripter のインストール: PyScripter別ページで説明している.
Windows では,スタートメニューの「Anaconda3 (64-bit)」の下に「Spyder」があるので,これを使って実行するのが簡単.
Ubuntu では「spyder」で実行
spyder の右下の画面は,既定(デフォルト)で, Python コンソールになっている.
ラズベリーパイの場合は,次のコマンドで spyder をインストールすることができる.
sudo apt install python3-spyder sudo apt install spyder3
PyCharm は Python プログラム作成に関する種々の機能を持ったソフトウェア. 次の機能を持つ.
PyCharmでは,既定(デフォルト)では,Python の隔離された環境が利用されることに注意.pip で Python パッケージをインストールしたときなどで,「システムの Python を使いたい」ときは, 別ページで説明手順で設定すること.
【PyCharm Community 版の主な機能】
操作: Plugins, japanese で検索, 「Install」をクリック
シンタックスハイライト,整形(コードフォーマッタ),コード解析, 修正候補の提示と実行(クイックフィックス)(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
ファイル (File), 設定(Settings), Python 統合ツール(Python Integrated tools), デフォルトのテストランナー(Default test runner)で,「pytest」を設定
プログラミングでのオブジェクトは,コンピュータでの操作や処理の対象となるもののこと.
キーワード: =, del, ==, is
a = 123 b = 123 print(a == b)
x = True y = None print(x is True) print(y is None)
c = 123 print(c) del a print(c)
dic = {} dic.update( {"kaneko": 30} ) print(dic)
import collections Point3d = collections.namedtuple('Point3d', 'x y z') p = Point3d(10, 20, 30) print(p)
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)
b = 8 s = 0 while s < 100: s = s + b print(s)
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)
for による繰り返し
import sys for i in range(18): sys.stdout.write("*")
キーワード: +, in, %, split, join, replace, strip, match, sprintf
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
※ 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',
※ オブジェクト x には 0列目と 1列目と 2列目がある.
「plt.style.use('ggplot')」はグラフの書式の設定.「ro」は「赤い丸」という意味.
print(x.iloc[:,1])
print(x.iloc[:,2])
%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()
print(x.head())
print(x.info())
print(x.shape)
print(x.ndim)
print(x.columns)
x.to_csv('hoge.csv', header=True, index=False, encoding='SHIFT-JIS')
print(x.describe())
import numpy as np pd.to_json('hoge.json') a = pd.read_json('hoge.json')
pd.DataFrame([1, 2, 3])
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 の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 )
配列は,データの並びで,それぞれのデータに,0 から始まる番号(添字)が付いている.
type はオブジェクトのタイプの取得.shape は配列(アレイ)のサイズの取得.
import numpy as np x = np.zeros(10) print(x) print(type(x)) print(x.shape)
表示の「0.」は「0」のこと
import numpy as np x = np.ones(10) print(x) print(type(x)) print(x.shape)
表示の「1.」は「1」のこと
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)
-5 から開始して、2 ずつ増やし、4 まで
import numpy as np x = np.arange(-5, 4, 2) print(x) print(type(x)) print(x.shape)
-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))
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)
時間計測も行う.
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))
時間計測も行う.
!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 )
上のプログラムと同じ. 「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 )
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)
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'] )
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 のモジュールは,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))
ここでの例 現在の日時, 最大公約数, 方程式を解く, 平方根, 円周率, 三角関数, など
オペレーティングシステム(コンピュータ)のタイマーを利用 いまの日時が表示されることを確認.
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) )
画像ファイルを読み込んで表示
from PIL import Image from IPython.display import display filename = '127.png' # 画像ファイルの読み込みと,画像の表示 img = Image.open(filename) display(img)
matplotlib は,オープンソースの Python のプロットライブラリ.
%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)
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()
%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 のカラー画像を表示する例は次の通り.
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 画像の表示を表示すると,小さく表示される.
「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))
%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 は,機械学習のアプリケーションを簡単に作成するのに役立つソフトウェア. Python, C/C++ 言語から利用可能. プロセッサ(CPU), GPU, Google TPU で動く Google 社のディープラーニング研究プロジェクトから出発し, 2015年11月に最初のリリースが行われた.ソースコード等は公開されている.
TensorFlow のプログラム例 - 行列の足し算
import tensorflow as tf import numpy as np a = tf.constant( np.reshape([1, 1, 1, 1, 1, 1], (2, 3) ) ) b = tf.constant( np.reshape( [1, 2, 3, 4, 5, 6], (2, 3) ) ) c = tf.add(a, b) print(c)
Keras は,TensorFlow を用いてのディープラーニング(深層学習)でのモデルの構築と,その訓練(構築)を簡単に行えるようにするソフトウェア
用語集
ニューラルネットワークのデモサイト: 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__)
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"]
「+ コード」で,コードセルを追加し,次を実行.
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()
配列の形: 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])
※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.
2071.png のようなファイル名で保存しておく
import h5py from tensorflow.keras.preprocessing import image from keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3 import numpy as np m = InceptionV3(weights='imagenet') img_path = '2071.png' img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = m.predict(x) print('Predicted:') for p in decode_predictions(preds, top=5)[0]: print("Score {}, Label {}".format(p[2], p[1]))
画像分類の結果(lab_coat, syringe, beaker, stethoscope, plate)と,それぞれの 確率が表示される.
変数は,変化するデータのこと. 「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」は属性アクセスである.
クラス名: 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 はオブジェクトと,属性名(文字列)を指定して,値を取得する.
クラス名: 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 は,メソッドの説明を表示する.
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())
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")
ファイルを複数選択.選択されたファイル名を表示.
「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()