Pythonを用いた機械学習3日目
本日は、エディタを使ってスクリプトファイルを作ってみる(①)。それから、Pythonのライブラリについて(②)、練習問題(Pythoneのコードの書き方とfor文if文のアルゴリズムを考える)(③)に取り組む。
前回の記事はこちら。
1.スクリプトファイル
前回までは対話モードで処理を実行していたが、その方法だと毎回ソースコードを入力する必要がある。しかし、同じ処理を何回も行う場合には、処理をスクリプトファイルに記述しておくと便利である。
<スクリプトファイルを実行するまでの流れ>
①スクリプトファイルの作成
・スクリプトファイルは、エディタを用いて作成する。
・「.py」 Pythonのスクリプトファイルの拡張子
②スクリプトを実行する
・ターミナルにて、pythonというコマンドの後ろにスクリプトファイル名を打ち込む
<実践> 〜フィボナッチ数列を求めるスクリプトを実行してみよう〜
まずは、エディタを起動してスクリプト「fibonacci.py」を作る
・保存場所は「desktop/fibonacci.py」
次に、ターミナルにて、スクリプト「fibonacci.py」を実行する。
・事前に、保存したディレクトリに移動し(cd desktop)、「python fibonacci.py」を入力すると、スクリプトが実行される
Python 3xのソースコードで日本語を扱うときは、文字コードを「UTF-8」に指定すること。
Python 2xを使う場合は、「UTF-8」を指定し、かつ、ソースコード冒頭に次の記述をする。
# -*- coding:utf-8 -*-
2.ライブラリ
・「ライブラリ」 特定の機能を実現するためにあらかじめ用意されたプログラムの集まり
・代表的なライブラリ
NumPy | 数値計算を効率よく処理でき、ベクトルや行列などの計算が得意
SciPy | 統計や乱数、積分など科学技術計算における処理が多く用意されている
Theano | 数値計算ライブラリ、2017年に開発終了
scikit-learn |機械学習を容易に試せるよう便利な機能がまとまっている。分類や回帰、クラスタリング、時限削減など
TensorFlow |Googleが開発した機械学習ライブラリ。分散処理が行えるが高性能なハードウェアも必要
Chainer | 日本のPerferred Networksが開発した機械学習ライブラリ。簡単にインストールでき、直感的かつシンプルに実装できる
Caffe |コミュニティで開発された機械学習ライブラリ。画像認識などを得意とする
Keras | ニューラルネットワークのプロトタイプを簡単に作成できる。画像認識などに多く使われている
・「モジュール」 ほかのプログラムから再利用できるようにしたファイル
「組み込みモジュール」 Pythonにデフォルトで組み込まれている
「拡張モジュール」 C言語などほかの言語で開発されたモジュール
・ライブラリの導入
Anacondaをインストールしている場合は、以下の例外を除いてNumPyやSciPyといったライブラリは導入されているので新たにインストールなどはしなくていい。
例外1)Anacondaを最小構成でインストールした場合
例外2)ほかのモジュールやパッケージを使う場合
この場合は、必要なライブラリをインストールしないといけない。
1)公式サイトからダウンロードする
2)condaコマンドを使ってインストールする ←簡単b
TheanoやTensorFlowをインストールする場合は、次のように実行する
conda install theano
conda install tensorflow
(補足)Anacondaをインストールしていない場合は「pipコマンド」を使う
pip install chainer
pip install keras
使用するときは、「import」でモジュールを指定して使う
import [モジュール名またはパッケージ名]
別名をつけてプログラム内で使用したい場合
import [モジュール名またはパッケージ名] as [別名]
例)NumPyライブラリを使用し「np」という別名で登録したい場合
import NumPy as np
・importする場合は以下の検索パス順にライブラリを検索する
実行ディレクトリと同じディレクトリ
カレントディレクトリ
環境変数「PYTHONPATH」に設定されているディレクトリ
検索パスである「sys.path」に含まれるディレクトリ
3.練習問題
①1月から12月までの英語名をリストに格納し、出力する
プログラム
for i, name in enumerate(['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']):
print(i+1, " 月 ", name)
出力結果
どうも力技な気もするが、これで表示できた。所要時間30分。スペルミスなどは見なかったことにして、次の問題にいこう!
②以下の条件で出力する
・1〜52までの整数で、トランプのカードを表すと考える
・♤1〜13、♡14〜26、♢27〜39、♧40〜52
*♤1〜13はスペード
*14〜26はハート
*27〜39はダイヤ
*40〜52はクラブ
・それぞれのマークは1〜13までの連番
・1は「A」、11は「J」、12は「Q」、13は「K」に変換
・1〜52までの整数でループし、出力する
プログラム
mark = ["スペード", "ハート", "ダイヤ", "クラブ"]
def card(n):
if i % 13 == 0:
return "A"
elif i % 13 == 10:
return "J"
elif i % 13 == 11:
return "Q"
elif i % 13 == 12:
return "K"
else:
return i % 13 + 1
for i in range(52):
print(i+1, mark[i // 13], card(i))
出力結果
うん、解答を見ましたm(__)mカードの数字を表示するアルゴリズムはなんとなくイメージできたけど、マーク部分の宣言と出力はコードを見て素直に、尊敬する!てっきり4つに場合わけするのかと思っていたので、目からうろこ。
次回は、いよいよ数学とPythonを絡めた学習に入っていく。
よろしければサポートお願いします。いただいたサポートを皆さんに還元していきたいと思っております。