AI 実装検定への道(2)
AI 実装検定 A級合格へ向けて学習を進めています。
前回投稿が最初で、プログラミングの章の導入部分について書いてみました。コードの初歩的な部分から、配列(行列)の生成、「Matplotlib」「NumPy」「pandas」などのライブラリを利用を進めました。
今回は、Visual Studio Code利用においても初期に勉強したpandasのデータフレーム型に花の「アヤメ」の品種を分類するデータセット(iris)を読み込ませると言うところから再開します。(公式テキスト160ページ)
ここまでに公式テキストでは135ページから進め、160ページまで25ページ分進んでいます。まだ初歩的なPythonの勉強ですが、あくまでもAI 実装検定合格の目的の勉強なので、ディープラーニング理解に向けた配列(行列)に関することの勉強が進んでいきます。若干、面白みがないかもしれませんが、我慢我慢で進めていきます。
花の「アヤメ」の品種を分類するデータセット(iris)を見てみる
(コード記述)
import pandas as pd
from sklearn import datasets
iris = datasets.load_iris()df = pd.DataFrame(iris.data,columns=iris.feature_names)
print("type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
print(type(df))
print("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
print()
df.head()
import pandas as pdによりライブラリ「pandas」を使う指示をして、機械学習のライブラリ「sklearn」からdatasetsを使う指示を記します。
そのdatasetsは花のアヤメの品種を分類する「iris」として、表計算の形式(DataFrame)に表す指示をします。その後、表題を表す部分をprintで3行示し、空白行を1行(print())、そして「DataFrame」には最初の5行だけ取り出すものとしてdf.head()と書かれています。ここでdfとだけ書けば、全部取り出されるらしい・・・何行になるやら怖いのでやめておきます。
(結果)
type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
<class 'pandas.core.frame.DataFrame'> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
Sepalは「がく片」を表し、その長さと幅の数値ならびにPetalは「花弁」を表し、その長さと幅を表したデータとなります。
コード記述において、最後の行のdf.head()の括弧の中に10を入れてやると、こんなふうに10行目まで抽出されました。
(結果2)
type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
<class 'pandas.core.frame.DataFrame'> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
5 5.4 3.9 1.7 0.4
6 4.6 3.4 1.4 0.3
7 5.0 3.4 1.5 0.2
8 4.4 2.9 1.4 0.2
9 4.9 3.1 1.5 0.1
Pythonで繰り返し処理(for文)
for 文は下記の様に表すのが、基本だそうです。
for 変数 in [配列]:
繰り返す処理
[配列]の後には、必ず「:」(コロン)を置き、繰り返し処理の前にはスペース4つ分の空白を設けることが必要とのこと。次に、Hello!を繰り返す構文を見ていきます。
(コード記述)
for i in[0,1,2,3,4]:
print("Hello!")
(結果)
Hello!
Hello!
Hello!
Hello!
Hello!
コードでは、for 文で、i が0〜4まで取り出され、そこにprintで示された「Hello!」を表示するというふうに記されています。ここでは、i と記されていますが i ではなく、_(アンダーバー)としても結果は同じとなります。
(コード記述)
for _ in[0,1,2,3,4]:
print("Hello!")
(結果)
Hello!
Hello!
Hello!
Hello!
Hello!
今度は、printの指示の部分に、i を入れてみます。
(コード記述)
for i in[0,1,2,3,4]:
print(i)
(結果)
0
1
2
3
4
コードでは、for 文で、i が0〜4まで取り出され、printにはその i を表示するというふうにしているわけですから、そのまま0〜4まで順に表示されるというもの。これが、数字ではなくアルファベットに置き換わっても、表示される結果は同じ様なものとなります。
(コード記述)
for ii in["a","b","c","d","e"]:
print(ii)
(結果)
a
b
c
d
e
最初の構文の様に[0,1,2,3,4]と書くのもありですが、range関数を利用して対象をある幅で処理することも可能みたいです。
(コード記述)
for i in range[1:10]:
print(i)
(結果)
1
2
3
4
5
6
7
8
9
ここで注意せねばならないのは、range[1:10]:の使い方。
最初の1は初期値を表します。次の10は終了値の次の数値であるようです。少しアレンジしてみましょう。初期値を5にして、終了値の次の数値を12に変えてみます。
(コード記述)
for i in range[5:12]:
print(i)
(結果)
5
6
7
8
9
10
11
と結果が出てきます。初期値を省いて、range[7]: とだけにしてみましょう。
(コード記述)
for i in range[7]:
print(i)
(結果)
0
1
2
3
4
5
6
この通り、初期値0から7の前の6までが表示されました。
このfor 文を2つ繰り返して、それに計算式を付け足してやると九九を表すことができます。
(コード記述)
for i in range(1,10):
for j in range(1,10):
print(i,"×",j,"=",i*j)
i を初期値1から10の手前までの数値とし、j も同様に幅を示します。
その次に、print構文で、i の値の次に「×」、そしてj の値、「=」、その次に i*j の結果を表示せよ、との内容です。
(結果)
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 * 1 = 2
(中略)
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
ちょっと面白くなってきましたね。
Pythonで条件分岐(if 文)
Excelにも if 関数がありますが、基本的には考え方は似ているようです。
if 文
if 条件:(コロン)
条件が正しい場合の処理
A=80と先に示し、条件としては70点以上の場合「合格です!」と表示する構文です。
(コード記述)
A=80
if A>=70:
print("合格です!")
この場合、A=69 とすると、もちろん何も返されません。少し寂しいので、それ以外の場合には「再チャレンジしよう!」と応援メッセージを表示するようにします。
(コード記述)
A=60
if A>=70:
print("合格です!")
else:
print("再チャレンジしよう!")
このように、そうでない場合は・・・と「else:」を用いてパターン化してやるわけですね。では、もっと多くのパターン分けが必要な場合はどうでしょうか?60点以上取れた場合には、「おしい!」と表してみましょう。
(コード記述)
A=62
if A>=70:
print("合格です!")
elif 60<A<=69:
print("おしい!")
else:
print("再チャレンジしよう!")
ここでも、必ず「:」(コロン)の記述を忘れないようにしよう。
忘れてると、エラーになってしまいます。
公式テキストでは、もう少し分岐のある構文を勉強します。
次に、もう少し関数を学んでいきましょう。
Python で関数
公式テキストでは171ページに進んでいます。
なんだか難しい表記ですが、関数は、繰返しや条件分岐などの命令を1つのセットとしてまとめたものであり、この関数にわたす数値を引数、処理した結果を返り値と呼ぶそうです。(これもテストに出るんだろうか??)
関数
def 関数名(引数):(コロン)
関数が行う処理
return 返り値
では、引数をXと表し、5を足した結果について、Xが3の時と9の時の結果(返り値)をみていきましょう。
(コード記述)
def func(X):
ans = X+5
return ans
print(func(3))
print(func(9))
(結果)
8
14
引数を固定しないで、ランダムな数値を利用した場合を考えよとのこと。サイコロを振ってでための数を答えさせるという仕様です。まずは、コードを見てみましょう。
(コード記述)
import random
def dice():
M=[1,2,3,4,5,6]
return random.choice(M)
result=dice()
print("サイコロの目は、",result,"です。")
最初の行の「random」というのがランダムな値を生成するものだそうです。3行目でサイコロに相当する目の数を1〜6と示します。その次の行には「random」を利用してMからチョイスすると書かれています。で、結果を得てprint構文で「サイコロの目は、(result)です。」と表す仕組みです。
さすが「random」さん、何回実行してもまた違う数値を返してくれますね。これを利用したパスワード生成プログラムなんてのも簡単に作れそうですね。次に for文を利用してサイコロを10回振った場合を示してみます。
(コード記述)
import random
for i in range(1,11):
def dice():
M=[1,2,3,4,5,6]
return random.choice(M)
result=dice()
print(i,"回目に振ったサイコロの目は、",result,"です。")
2行目にfor 文を入れ込み、レンジを初期値1回目から、11の前まで(つまり10回目まで)サイコロを振ると設定します。その結果を、最終行にて「( i )回目に振ったサイコロの目は、(result)です。」と返してやる分けですね。
これも少し楽しいですね。
何回実行しても違う答えを返してくれるのが「random」さんの面白いところでした。
さてさて、今日はここまでにします。
今回は、「pandas」を使い、機械学習のライブラリ「sklearn」からdatasetsを使う方法を学び、花のアヤメのがく片と花びらの長さと幅の数値を表示すること、for 文、if 文、さらには関数を利用するところまで進めました。次は、なんだか難しそうなシグモイド関数(sigmoid)をみていくことになるようです・・・難しそうですが、頑張って進めていきます。
この記事が気に入ったらサポートをしてみませんか?