Python始めの第一歩
機械学習においてPythonは 必須のプログラミング言語になります
また、Pythonは機械学習だけでなくネットからの情報を取得したり、Webサイトを作れたり、さまざまなアプリケーションで使われているプログラミング言語です
初心者にも とっつきやすい言語ですので、Pythonの基礎を勉強していきましょう
実行環境の準備
Google Colaboratory(Colab)使って、Pythonに慣れていきましょう
ページにアクセスして ノートブックから新規作成をクリックします
四則演算の実行
まずは電卓的な感じで使ってみます
四則演算(足す、引く、割る、掛ける)を試してみます
以下のコード(式)を入れてShift + Entherキーを押して実行してみてください
ただのEntherだと続けてコードを入力できる改行になります
10 * 10
100
コードが実行されて100という結果が得られたと思います
“*” は 掛け算を表しています
同様に “+ , – , * , / ” は、足し算、引き算、掛け算、割り算を表します
データの形式
Pythonで扱えるデータは数値、文字列、論理の3種類を覚えておけば大丈夫です
3種類覚れば、あとはこの3種類を拡張したものになっていきます
数値型
先ほどの四則演算で出てきた数値がまさに数値型になります
数値型には1, 10, 431と言った整数を扱う整数型 ( int型 )と
0.1, 3.141592など小数まで扱える浮動小数型( float型 )があります
Pythonの場合、int型、float型をあまり気にせず実行できます
文字列型
文字列型は”こんにちは”や”Hello”と言った文字を扱う型( str型 )になります
シングルクォーテーション(‘)もしくはダブルクォーテーション(“)で囲むと 文字列のデータが作れます
下記のように実行すると文字列が出力されます
"こんにちは"
‘こんにちは’
ブール型
ブール型は真偽を表す2つの値をとります
真のときはTrue、偽の時はFalseの値になります
主に下で紹介する while文 や if文 で使います
変数
先ほどの例では数値を直接実行しましたが、数値を毎回入力するのは非効率です
そんな時に変数という仕組みを使うと楽になります
例えば下記のような例を考えてみましょう
みかんを3個、りんごを4個買いました
みかん1個あたり80円、りんご1個当たり100円です
消費税は10%として合計金額を求めてみましょう
愚直に書くと下記のようなコードになると思います
(80 * 3 + 100 * 4) * 1.10
704.0
実際は、704.0は小数なので整数にする必要があると思いますが計算はできています
これが複数の会計処理をするのに毎回同じように入力するの大変ですよね
また、みかんの単価が80円から90円に値上げしたり、消費税が12%に変更になった時にも入力のミスをなくすために変数という箱に入れて楽をします
変数の使い方は下記のようにします
# みかんとりんごの単価(円)を設定
mikan_price = 80
apple_price = 100
# 消費税率
tax = 1.1
上の例のように “変数名 = データ” のような形で変数を定義していきます
また、コードに”#”をつけると、その行はプログラムとして実行しないコメントという機能が使えます
コメントは後から見返す場合や 他の人がコードを読む際に手助けになるので
めんどくさがらずにコメントを残すようにしましょう
先ほどと同様のみかん3個、りんご4個の合計額は下記のようなコードになります
(mikan_price * 3 + apple_price * 4) * tax
704.0
一見、コードを書く量が増えて大変かと思いますが、消費税が変わった場合や毎回数値を入力するミスがなくなるので 基本的にデータは変数に格納して使うようにしましょう
リスト
リストは 先ほどまでにあげた数値型や文字列型を一つにまとめるものです
下記のように都道府県名をまとめたいときや、数学で使うベクトルなども同じような仕組みのものを使っていきます
上のリストを定義するには下記のようにします
pref_name = ["北海道", "青森", "岩手", "宮城", "秋田"]
リストの3番目の内容を取り出したい時は下記のようにします
pref_name[2]
‘岩手’
リストの添字は0始まりなので3番目にアクセスしたい場合、添字は2を指定することになります
制御文
for文
for文はリストの中身を一つずつ処理する文法になります
forループとか言われたりもします
以下に例を示します
list_obj = [1, 2, 3, 4, 5]
for obj in list_obj:
print(obj * 2)
2
4
6
8
10
1回目のループでは0番目(添え字0)の要素1をobjという変数に入れて処理を進めます
for文の次の行でobj変数を2倍にしたものを表示するという命令なので
1*2の2が表示されます
2回目のループでは1番目(添え字1)の要素2がobj変数に入って処理をします
それをリストの末尾まで行ったらfor文が終了するという流れになります
ここで出てきたprint(***)は括弧の中身を表示するという関数になります
あとで、関数でも説明しますがprint()関数は便利なので覚えておきましょう!
文法は下記の形式になります
for 変数名 in リスト:
処理1
処理2
・・・
while文
while文もfor文と同じループをしますが、ループの終了条件が異なります
while文は決まった条件が満たされている間だけ ループを繰り返します
具体例として以下のようなコードになります
result = 1
while result <= 100:
result = result * 2
print(result)
2
4
8
16
32
64
128
上の例ではまずresult変数に1を入れてます
次のwhile文の判定ではresultが100以下の間だけ、以下のコードを実行するという意味になります
最初の実行ではresultは1なので実行します
次の行が少し難しい表現になってますが result に (result * 2)の計算結果を入れるということになります
つまり、result=1を2倍した結果を入れるので 新しいresultの結果は2になります
resultを表示して次のループを継続するかの判定になります
その結果、2、4と続いて128までループしていきます
128まで実行するとwhile文の条件100以下を満たしていないのでwhile文を抜け出すことになります
文法は以下の通りです
while 条件:
処理1
処理2
・・・
while文は条件の設定を間違うと無限ループと言ってwhile文から抜け出せないコードになってしまいますので、しっかり条件のところは確認しましょう
Colabで無限ループに入った場合、下の画像の停止ボタンを押すとプログラムが停止するので
慌てずに対処しましょう
if文
制御構文の最後はif文になります
if文は条件に合っている場合に 実行される制御文になります
具体的には下記のようなコードになります
num = 10
if num <= 20:
print("条件合致")
条件合致
また条件に合わなかった時の処理は elif , else で実装できます
num = 10
if num < 5:
print("numは5未満")
elif num < 10:
print("numは10未満")
else:
print("numは10以上")
numは10以上
elifは複数重ねて使うこともできます
elseは今まで出た条件以外という条件で使います
if文の文法は以下の通りです
if 条件:
処理
elif 条件:
処理
else:
処理
関数
同じ処理を何個も使う場合や コードが長くなってしまう場合、関数という方法で
コードを別の場所で定義することができます
先ほどから使っているprint()も関数です
他にもPythonには最初から準備されている組み込み関数というものがあります
参考リンクを貼っておきますので時間がある時に眺めてみてください
例えば、数値の累乗を計算するpow関数を使ってみます
pow(10, 3)
1000
pow(10, 3)は10の3乗を計算しています
括弧の中に入れているデータを関数の引数(ひきすう)といいます
powは計算結果として1000を出力していますが、結果のことを関数の返り値(かえりち)
と言います
自分で関数を定義する場合は下記のようなコードになります
def add(num1, num2):
return num1 + num2
sum = add(10, 2)
print(sum)
12
関数の文法は下記の通りです
def add(引数1, 引数2, ...):
処理
return 処理結果
引数は0個以上必要で返り値も0個以上のデータを返すことができます
モジュール/ライブラリ
Pythonは色々便利な関数などの資産が、モジュール/ライブラリといった形でまとまっています
やりたいことは モジュールを使えば大体できると思うので、まずは探してみることが大事になります (複雑になればなるほど、自分で定義するより楽で 時間も短縮できます)
例えば数値計算でよく使うnumpyというモジュールは 下記のように使います
import numpy
A = numpy.array([[1, 2, 3], [4, 2, 2], [-1, -3, 8]])
上記のコードの1行目はnumpyを使いますというimport文になります
3行目はnumpyモジュールのarrayを使うという意味になります
また、numpyと毎回打つのがめんどくさいので下記のようにasという構文であだ名をつけることができます
import numpy as np
A = np.array([[1, 2, 3], [4, 2, 2], [-1, -3, 8]])
from構文などもよく使われます
モジュールの一部だけを使いたく、コード量を少なくしたい場合に使います
例えば、numpyには整数の乱数を返すrandintという関数があります
これを使う場合、numpy.random.randint()という風に関数を呼ぶ必要があります
意味としてはnumpyの乱数モジュールの整数乱数関数になります
from文を使って下記のように省略することができます
from numpy.random import randint
print(randint(1,7))
1
from文は最初は難しいですが、よく使われているので出てきたらモジュールの一部だけ使っているのだなくらいで捉えてもらえれば大丈夫です
最後に機械学習でよく使われるモジュールについて紹介します
numpy | 数値計算用ライブラリ ベクトル・行列計算でよく使われます |
matplotlib | データ可視化ライブラリ グラフを作るのに使われます |
scikit-learn | 機械学習ライブラリ 機械学習で使われる定番のライブラリです |
OpenCv | 画像処理ライブラリ カメラを使うときや画像処理で使われるライブラリです |
PyTorch | 深層学習(ディープラーニング)ライブラリ ディープラーニングの一連の流れが実装されているライブラリ |
TensorFlow | 深層学習(ディープラーニング)ライブラリ PyTorchと並んで、ディープラーニングの一連の流れが実装されているライブラリ |
おすすめの書籍
ここで紹介したのはPythonの機能のほんの一部ですが、マスターすれば機械学習のコードが少し理解できると思います
Pythonには、他にも便利機能だったり覚えたほうがいい機能はたくさんあります
リストのスライス、辞書型、エラー処理など 使いこなせばプログラムの幅が広がるので
ぜひ覚えてください
最後に初心者にもとっつきやすい書籍を紹介します
Pythonで動かして学ぶ!あたらしい機械学習の教科書 第3版
本書の前半はPythonの基礎・ライブラリの使い方を学習した後に 数学、機械学習へと移っていきます
丁寧にPythonの使い方も紹介されているのでおすすめです
Python ゼロからはじめるプログラミング
Python[完全]入門
スッキリわかるPython入門 スッキリわかるシリーズ
上の3つの書籍は Pythonの基礎固めにおすすめです
Pythonの概念や ここで紹介しなかったオブジェクト指向プログラムの基礎も学習できます