エンジニアの備忘録

エンジニアの備忘録

元文系出身のエンジニアが、趣味から現場レベルまで様々なIT技術を紹介します。

PythonでAIをつくろう!~練習2:アドレス帳作成~

前回はじゃんけんプログラムの作成を行いました。

 

network-engineer.hatenablog.jp

 

今回はアドレス帳の作成を行っていきます。

クラスというプログラミングに必須の概念を勉強していくので、ぜひ頑張りましょう。

 

 

1.  要件定義をしよう

 では、さっそく作成に移っていきましょう。

今回はアドレス帳なので、情報の紐づけとキーワードによる検索を意識しましょう。

 

①全体の流れを考える

アドレス帳なので、まずは入れ物が必要です。

#アドレス帳そのものを作成する

そして、登録する情報が必要です。

登録したい情報は以下です。

・苗字

・名前

・電話番号

・メールアドレス

・生年月日

#データを登録する

また、登録した情報を検索して表示できるようにしたいです。

 #登録した情報を検索できるようにする

 

これらの流れを簡単にまとめてみましょう。

 

アドレス帳を作る

アドレスに個人情報を追加する

アドレス帳と個人のクラスを作成する

アドレス帳に検索機能を作成する

 

クラスについては次の項目で説明します。

 

②クラス・オブジェクト

 続いて細かい要素の定義を行いますが、その前にクラスについて説明します。

プログラムにおいては「表現力」が非常に重要になります。

ある程度の基本形が利用できるようになると、今度は組み合わせたり自分のオリジナルの関数を作ったりでプログラムを動かす必要があります。

ただプログラムを作成するだけではなく、メンテナンスがしやすく理解がしやすいプログラムを作成することが非常に重要です。

そして、その表現力を実現するための概念が「オブジェクト」「クラス」の2つです。

 

☆オブジェクトとは

オブジェクトはプログラミングにおいて最も多義的に解釈される難しい単語です。

Pythonの公式ドキュメントの内容をようやくしてみます。

 

 「Pythonにおけるオブジェクトとは、データを抽象的に表したものです。Pythonプログラムにおけるデータはすべて、オブジェクトまたはオブジェクト間の関係として表されます。オブジェクトはアイデンティティ値、型、値を持ちます。」

 

※全文はこちら

docs.python.org

 

分かりにくいですが、まとめると以下になります。

 

①データを抽象的に表したもの

オブジェクトは自分に所属する関数を保持することができます。

例えば、文字列について考えていきます。

「test='AbCdEfG'」というデータは文字列です。

この場合、「test」は文字列の型と、「AbCdEfG」という値を所持していることになります。

また、オブジェクトは「.(ドット)」をつけることで保有している関数を利用することができます。

「lower(文字を小文字にする)」や「upper(文字を大文字にする)」を利用する際に、testに対して「.」で呼び出すことができるのです。

f:id:Network_engineer:20210217214746p:plain

 

 

アイデンティティ(ID)、型(Type)、値(Value)の3つを持っていること

ID:データに対して固有の番号が割り当てられる

型:すべてのオブジェクトは型が存在する

値:すべてのオブジェクトは値を所有する

 

☆クラスとは

 クラスとは、オブジェクトでデータを表現するためのテンプレートです。

そして、テンプレートから作成するオブジェクトをインスタンスといいます。

例えば、人間というクラスがあったとします。

構成要素は「性別・年齢・名前・身長・体重・生年月日」です。

このクラスをもとに、田中というインスタンスを作ります。

「男性・25歳・田中・170cm・60kg・10月10日」

同じように、加藤というインスタンスを作ります。

「女性・20歳・加藤・150cm・45kg・9月9日」

このように、クラスを用いればテンプレートとして様々なデータを扱うことができます。

 

③ 要素を考える

 では、実際に要素を考えていきます。

 

アドレス帳を作る

アドレス帳を作るにあたって、アドレス帳自体に登録したり検索したりできる機能がないといけません。

ですので、今回はアドレス帳をクラスとして作成し、中に関数を作成する方式を取ろうと思います。

#アドレス帳のクラスを作成する

 

アドレスに個人情報を追加する

次に、アドレス帳に登録する個人情報について考えます。

今回アドレス帳に登録する情報は「苗字・名前・電話番号・メールアドレス・生年月日」です。

これらの情報を毎回入力するのは非常に手間がかかるので、今回はクラスでテンプレートの作成を行います。

#個人情報のクラスを作成する

 

アドレス帳の機能を用意する

今回必要な機能は、「追加」「表示」「検索」です。

これらを実行できるプログラムを考えていきます。

「追加」については、配列を用意して配列の中に情報を追加していきたいと思います。

そのためには「appned関数」を利用します。

「表示」については、配列の中身を繰り返し表示することですべてのデータを閲覧できるようにします。

「検索」については、配列の中身から条件に一致するものを表示するようにします。

そのためには「in関数」を利用します。

#配列を作成する

#appned関数で配列に追加する

#繰り返しで配列データを表示する

#in関数で条件に一致するデータを表示する

 

これで全体の流れと要素の整理ができました。

続いてコードの作成を行っていきましょう。

2.  設計をしよう

では、実際にコードの作成を行いましょう。

 

①要素をコード化しよう

#配列を作成する

person_list=

こちらはクラスの中に埋め込みます。

 #アドレス帳のクラスを作成する

class AddressBook:

  person_list=
    #アドレス帳に登録された人物一覧

   

  def add(self,person):
    #新規にアドレス帳に人を追加
    pass

※passは外枠をとりあえず作るときに各値です。

関数の中身を作成したら削除します。

  def show_all(self):
    #登録された個人一覧を表示
    pass

  def search(self,keyword):
    #検索条件にマッチする人を表示
    pass

 

 #個人情報のクラスを作成する

class Person:

  firstname=''
  #名前
  lastname=''
  #苗字
  tel=''
  #電話番号
  mail_address=''
  #メールアドレス
  age=''
  #年齢

 

 インスタンスで関数利用するためには「.」を利用します。

 例えば、AddressBookの「add関数」を利用するとします。

クラスを変数で定義すると、クラスに対してオブジェクトを呼び出すことが可能です。

test = AddressBook()

test.add('追加します')

 

②関数を作成しよう

つづいて、クラスの中で利用する関数を作成します。

クラスの中の関数を利用するときは、()の中に「self」を入れます。

これは、クラスの中の自分自身に変数を代入するという意味です。

とりあえずは、クラスではselfを入れると覚えておいてください。

 

#appned関数で配列に追加する

def add(self,person):
  self.person_list.append(person)

#「person_list」に、()の変数を追加する

#繰り返しで配列データを表示する

def show_all(self):
#登録された個人一覧を表示
  for person in self.person_list:
    print(person.lastname + '' + person.firstname)
    #「person_list」の苗字と名前を繰り返し表示

#in関数で条件に一致するデータを表示する

 for person in self.person_list:
  if keyword in person.firstname or keyword in person.lastname:
    print(person.firstname + '' + person.lastname)

     #名前か苗字が含まれていたら表示する

③クラスの中身を確定させる

上記で作成した関数をクラスの中に入れましょう。

 

class AddressBook:

  person_list=[]
  #アドレス帳に登録された人物一覧

  def add(self,person):
    self.person_list.append(person)

  def show_all(self):
  #登録された個人一覧を表示
    for person in self.person_list:
      print(person.lastname + '' + person.firstname)
      #「person_list」の苗字と名前を繰り返し表示
  def search(self,keyword):
  #検索条件にマッチする人を表示
    for person in self.person_list:
      if keyword in person.firstname or keyword in person.lastname:
      print(person.lastname + '' + person.firstname)

 

class Person:

  firstname=''
  #名前
  lastname=''
  #苗字
  tel=''
  #電話番号
  mail_address=''
  #メールアドレス
  age=''
  #年齢

  

3.  プログラムを作成しよう

先ほどのクラスで概ねプログラムは完成しました。

ここからは、実際にアドレス帳を利用する流れを確認します。

 

①変数にクラスを代入する

ab = AddressBook()

#変数に代入する

#クラス名と()でクラスの利用が可能

p = Person()

#変数に代入する

 

②Personクラスを利用してインスタンスを作成する

 今回は以下の3名を追加します。

☆田中 一郎(080-0000-0000)

☆加藤 次郎(080-1111-1111)

☆中村 三郎(080-2222-2222)

 

p = Person()

p.firstname = '一郎'

p.lastname =  '田中'

p.tel = '090-0000-0000'

ab.add(p)

 

p2 = Person()
p2.firstname = '次郎'
p2.lastname = '加藤'
p2.tel = '090-1111-1111'

ab.add(p2)

 

p3 = Person()
p3.firstname = '三郎'
p3.lastname = '中村'
p3.tel = '090-2222-2222'

ab.add(p3)

 

③作成したアドレス帳の機能を利用する

print('---動作確認---')
print('アドレス帳の人数 ->' + 'str(len(ab.person_list))' + '人')

#len関数:指定したオブジェクトの数を数える

#配列のデータ数を数えることで人数を把握する
print('---一覧表示---')
ab.show_all()

#アドレス帳の関数を利用する
print('---検索---')
ab.search(input('検索したい名前を入れてください: '))

#inputで好きな文字を指定してもらい、検索可能にする

 

f:id:Network_engineer:20210221223404p:plain

f:id:Network_engineer:20210221223415p:plain


4.試験をしよう

 では、実際に作成したアドレス帳を実行してみましょう。

今回はデスクトップに「アドレス帳.py」というファイルを作成しました。

実行はコマンドプロンプトから行います。

 

f:id:Network_engineer:20210221224455p:plain

 

 以上で一連の流れが完了しました。

今回はプログラムの中に実行を組み込みましたが、最終的には自分で追加する情報を入力できるのが理想です。

追加機能の実装については別の記事でおまけとして説明します。

 

 次回はいよいよ人工無能の作成を行いたいと思います。

ここまで読んでいただきありがとうございました。

 

PythonでAIをつくろう!~練習1:じゃんけんプログラム~

前回の記事でpythonの構文の基本形について学びました。

network-engineer.hatenablog.jp

 

 

今回からは実際に簡単なプログラムを作成してみましょう。

簡単なプログラムからプログラムの作成経験を積み、AIの作成に移っていこうと思います。

今回は、じゃんけんプログラムの作成を行いましょう。

 

 

1.  要件定義をしよう

プログラムの作成を始まるにあたって、まずは要件の確認が必要です。

要件とは、プログラムを作るうえで必要になる要素のことです。

例えば、引き算をしようと思ったら「元の数字」「引く数字」「演算子(-)」といった要素が必要になります。

このように、プログラムを作る前にまずは言葉でどんなプログラムにするのかを考えていきましょう。

 

①全体の流れを考える

まず最初に、プログラムの動きを考えましょう

 

じゃんけんなので相手が必要です。

#相手を用意する

相手を用意したら、同じく自分も定義してあげましょう。

#自分を用意する

次に、自分が出す手を選択する必要があります。

#自分の手を選択する

自分の手を選択したら、自動的に相手の手が選択されます。

#相手の手が選択される

自分の手と相手の手が決まったら、勝敗の判断をする必要があります。

#勝敗の判断

以上でじゃんけんの流れは終わります。

これらをまとめると以下になります。

 

相手を定義する

自分を定義する

自分の手を用意する

相手の手を用意する

勝敗を判断する

 

全体の流れだけで見ると非常にシンプルなものができました。

次に、実際にプログラムを作るにあたって必要な要素を考えましょう。

 

②必要な要素を考える

先ほどの流れを実現するために必要な要素を考えていきます。

要素を考えるための流れは大きく分けて2通りあります。

 

1つ目は全体の流れに沿って考える方法。

2つ目は逆順に必要なものを考える方法。

作成するプログラムに応じて使い分ければいいです。

 

大きなプログラムでは流れに沿って作ることが多いですが、今回は簡単なプログラムなので逆順で考えていきましょう。

 

勝敗を判断する

判断するためには、条件を作る必要があります。

例えば、相手がパーで自分がチョキだと勝ちなどです。

しかし、文章だけでは判断をすることができません。

ですので、手に数字を割り当てることで条件を分岐させる必要があります。

グーは1でチョキは2、相手が1で自分が2の時は勝ち、などです。

#数字で条件分岐を利用する。

 

相手の手を用意する

ここでは、相手の手を考えていきます。

先ほど手と数字をリンクさせると決めました。

ですので、条件として決めてしまいます。

ここで注意する必要があるのは、プログラムにおいては「0」から始まるということです。

ですので、「グー、チョキ、パー」 = 「0、1、2」とします。

さて、次は相手の手の選択が必要になります。

毎回同じ手だとつまらないので、実行するたびにランダムで手が選択されるようにしましょう。

#「グー、チョキ、パー」 = 「0、1、2」

#相手の手はランダムに選択される

 

自分の手を用意する

続いて自分の手を選択します。

先ほど手と数字はリンクさせたので、ここでは純粋に自分の手を選択します。

手と数字をリンクさせた、つまり自分の手を数字で選択する必要があります。

ですので、説明を表示した後に任意の手を数字で入力するようにします。

#手の説明を表示、任意の数字を入力させる

 

自分を定義する

自分の定義を行います。

しかし、自分の定義はイコール自分の手になりますのでここは割愛可能です。

ですが、せっかくなので自分の名前を入力できるようにしましょう。

入力した名前が表示されるようにします。

#名前を入力して表示させる

 

相手を定義する

最後に、相手の定義です。

ここでは相手は「コンピュータ」とします。

自分で入力するのではなく、最初から定義しておきます。

#コンピュータを定義する

 

2.  設計をしよう

では、実際にコードの作成を行いましょう。

 

①要素をコード化しよう

まずは、それぞれの要素をざっくりとプログラムに落とし込んでみます。

ポイントは、実現できそうなものをとりあえず記入してみることです。

また、名前はなるべくわかりやすいものにしましょう。

 

#コンピュータを定義する

computer = 'コンピュータ'

#名前を入力して表示させる

my_name = input('名前を入力してください')

#手の説明を表示、任意の数字を入力させる

print('何を出しますか?(0: グー, 1: チョキ, 2: パー)')
my_hand = int(input('数字で入力してください:'))

#「グー、チョキ、パー」 = 「0、1、2」

hands = ['グー', 'チョキ', 'パー']

#相手の手はランダムに選択される

computer_hand = random.randint(0,2)

#数字で条件分岐を利用する。
if my_hand == computer_hand:
 return '引き分け'
elif my_hand == 0 and computer_hand == 1:
 return '勝ち'
elif my_hand == 1 and computer_hand == 2:
 return '勝ち'
elif my_hand == 2 and computer_hand == 0:
 return '勝ち'
else:
 return '負け'

 

②関数を作成しよう

続いて、関数を作成します。

実際に必要になると想定される処理を考えてみます。

例えば、じゃんけんの結果を判断する処理が必要です。

こちらは先ほどの条件分岐を関数にしてしまいましょう。

さらに、自分と相手が出した手を判断して表示する処理も必要です。

入力された結果が0~2ではない、数字ではない場合に注意を促す処理も必要です。

 

じゃんけんの結果を判断する処理

def judge():
 if my_hand == computer_hand:
 return '引き分け'
elif my_hand == 0 and computer_hand == 1:
 return '勝ち'
elif my_hand == 1 and computer_hand == 2:
 return '勝ち'
elif my_hand == 2 and computer_hand == 0:
 return '勝ち'
else:
 return '負け'

0から2までの組み合わせをもとに、じゃんけんの結果を組み合わせます。

今回は引き分けと勝ちを定義し、そのほかを負けとします。

 

自分と相手が出した手を判断して表示する処理

def print_hand(hand, name='ゲスト'):
 hands = ['グー', 'チョキ', 'パー']
 print(name + 'は' + hands[hand] + 'を出しました')

関数は()の中にあらかじめデータを入れておくと、何も入力しなかった場合に代入されます。

ですので、今回は名前が入力されなかった場合には「ゲスト」と表示されるようにします。

 

注意を促す処理

def caution(hand):
 if hand < 0 or hand > 2:
  return False
 return True

今回は0-2までの数字でじゃんけんの結果を判定します。

ですので、それ以外の数字や文字の場合は間違った結果だと知らせる必要があります。

ですので、それ以外の場合は「False」と返すようにします。

Trueは正しい値、Falseは間違った値だと覚えていれば大丈夫です。

 

③構成を確認しよう

 今回は関数とプログラムの実行データを別のファイルに分けます。

Pythonではファイルを読み込むことで実行ファイルにコードを記入していなくても利用することが可能です。

実行ファイルはなるべく簡潔にした方がいいです。

小さいプログラムではそこまで影響はないのですが、プログラムが大きくなればなるほど細かいミスが大きな影響を及ぼすようになります。

 

①関数ファイル

②実行ファイル

 

今回はこちらの構成で作成していきます。 

 

3.  ファイルを作ろう

それでは実際にファイルを作成していきましょう。

 実行のファイル名を「script.py」、関数ファイルを「utils.py」とします。

 

①utils.py

def caution(hand):
 if hand < 0 or hand > 2:
  return False
 return True

 

def print_hand(hand, name='ゲスト'):
 hands = ['グー', 'チョキ', 'パー']
 print(name + 'は' + hands[hand] + 'を出しました')

 

def judge(my_hand,player_hand):
 if my_hand == computer_hand:
 return '引き分け'
elif my_hand == 0 and computer_hand == 1:
 return '勝ち'
elif my_hand == 1 and computer_hand == 2:
 return '勝ち'
elif my_hand == 2 and computer_hand == 0:
 return '勝ち'
else:
 return '負け'

 

②script.py

import utils
import random

#importでファイルよライブラリ(便利データみたいなイメージ)を読み込みます

#pyファイルの場合は識別子の省略が可能です

print('じゃんけんをはじめます')
my_name = input('名前を入力してください:')
print('何を出しますか?(0: グー, 1: チョキ, 2: パー)')
my_hand = int(input('数字で入力してください:'))

#事前の情報を表示します

#自分の手を決めます

if utils.caution(my_hand):
 computer_hand = random.randint(0,2)
#自分の手が条件に当てはまることを確認し、ランダムにコンピュータの手を決めます。

#random.randint(x.y)で、x~yの間のランダムな数字を選びます
 if my_name == '':

 #''で空白を表すことができます
  utils.print_hand(my_hand)

  #空白の場合は「ゲスト」で入力した手になります
 else:
  utils.print_hand(my_hand, my_name)

  #入力した場合は名前と入力した手になります

 utils.print_hand(computer_hand, 'コンピューター')

  #今度はコンピューターの手を表示します

 result = utils.judge(my_hand, computer_hand)
 print('結果は' + result + 'でした')

 #今までのデータをもとに結果を判定します
else:
 print('正しい数値を入力してください')

 

4.  プログラムを作成しよう

では、実際にコードを作成していきましょう。

今回のプログラムの作成にはanacondaではなくテキストエディタAtomを利用します。

実際に2つのファイルを開いてコードを張り付けていきましょう。 

 

f:id:Network_engineer:20210211223807p:plain

 

こんな感じで作成していきます。

設計段階である程度できあがっているので、作成自体は貼り付けと微修正だけで出来るはずです。

完成したら、いよいよ実際に動かしてみましょう。

 

5.試験をしよう

 プログラムが出来上がったら実際に動かしてみましょう。

実行方法は簡単で、コマンドプロントからファイルを指定して実行するだけです。

 

コマンドプロンプトを開きます。

プログラムファイルが置いてあるフォルダに移動します。

 移動の仕方は「cd フォルダ名」で移動できます。

 例えばデスクトップに移動するのであれば「cd Desktop」です。

 最初の一文字を入力すればあとは「Tabキー」で補完が可能です。

 詳しくは機会があればLinuxの話をします。

python ファイル名」でファイルの実行が可能です。

 今回の場合はpython script」で実行できます。

 

以下が実行結果です。

f:id:Network_engineer:20210211225242p:plain



このように、毎回入力内容が変更することや結果が変わることを確認できました。

正確な試験を行うには「unittestモジュール」を利用するのがいいですが、この程度の小規模プログラムでは問題ありません。

 

いかがでしょうか。

このような流れで大まかにプログラムの作成を行っていきます。

省いている部分はありますが、構文を作ったり流れを作るのにわからない部分が出てきた場合は逐一調べるのが普通です。

全て暗記して書く人はほとんどいないです。

数をこなせばよく使う構文は自然と身についてくるので安心してください。

次回も簡単なプログラムを作成していきましょう。

 

ここまで読んでいただきありがとうございました。

 

 

 

PythonでAIをつくろう!~基本の型を学ぼう~

前回までの記事でPC上でpythonの実行や、開発環境の構築が完了しました。

network-engineer.hatenablog.jp

 

今回から実際にpythonでコードの作成を始めたいと思います。

まず最初は基本の型を学び、いくつかの簡単なプログラムを作成したのちにAIの作成に取り組みたいと思います。

pythonのコードにはたくさんの基本形がありますが、ここではよく使うものだけを抑えたいと思います。

実際に使うコードはたくさんありますが、その都度調べて覚えていけば問題ないです。

最初は最低限覚えるものだけを覚えていきましょう。

 

 

 

1.  データ型

 

プログラミングの目的は「値」を操作することです。

値のあるデータを目的のために捜査していくのがプログラミングです。

 

データ型のポイント

Pythonのコードは要素(リテラル予約語、識別子、記号)によって構成される

☆プログラムで扱う数値や文字列のことを「リテラル」と呼ぶ

Pythonではすべてのデータを「データ型」によって区別する

 

リテラル

コードに直接書き込んだ、もしくは別ファイルから読み込んだ値のこと。

予約語 :

特別な意味が割り当てられた単語のこと。あらかじめ決められた処理を行う。

識別子 :

ある処理を行うためのソースコードのまとまりに付ける名前(変数に付ける名前)

記号  :

[]や()など、特別な意味を持つ文字列。

 

次に、データ型でよく使う型について説明します。

 

①数値型

数値型には、整数型「int型」浮動小数点数「float型」があります。

これら2つはよく利用します。

特に、int(整数型)は個数の入力などで頻繁に利用します。

コードの入力はシンプルで、数値の入力を行うだけです。

例:10

数値はそのまま入力するとint型ですが、str(数値)として入力すると文字列型になります。

例:str(10) = '10'

 

例えば、inputという予約語があります。

これは指定した文字列を表示したのちに入力した処理を行うものなのですが、ここで入力した数字(リテラルを直接入れた状態)は文字列型として扱います。

 

②文字列型

文字列型(str型)は文字を扱うデータ型です。

 文字列リテラルは、「'(シングルクォート)」か「"(ダブルクォート)」で囲んで記述します。

例:'Hello'、"こんにちは"

どちらを利用しても大丈夫ですが、統一する必要があります。

ちなみに、どちらを利用することは完全に好みですのでどちらでも大丈夫です。

 

③コメント

先頭に「#」をつけるとデータではなくメモとして利用することができます。

自分が書いたコードについて、どういう処理をさせたくて書いたコードなのかをメモで残しておくと次の人がメンテナンスをする際に非常にスムーズになります。

 

データ型のまとめ

☆数値型は数字をそのまま入力

☆文字列型はクォーツ(''か"")で囲む

#を先頭に付けるとメモとして利用可能

 

f:id:Network_engineer:20210204002024p:plain

 

2. if構文

 if構文は条件分岐処理を行うために利用します。

条件ごとに異なった処理を行うことが可能です。

 

if構文のポイント

☆条件式に一致するかで処理の判断をする

☆上から順に条件に一致するか処理が行われる

☆2つの条件で1つの条件式を作ることも可能

 

if     :

条件式1が一致するときに、処理を実行する。

elif  :

条件式2が一致するときに、処理を実行する。

else :

条件式がすべて一致しないときに処理を実行する。

 

and :

2つの条件が一致するときに処理を実行する。

or   :

2つの条件のうち、どちらかが一致する場合に処理を実行する。

 

①構文

if    条件式1:

   条件式1が一致するときに実行される処理

 

elif 条件式2:

   条件式2が一致するときに事項される処理

 

else  :

   条件式がすべて一致しないときに実行される処理

 

andやorを利用する場合は、条件式同士をつなげます。

 

条件式1 and 条件式2

 

条件式1 or   条件式2

 

②利用例

 例えば、3の倍数を判断するプログラムを作成したいとします。

まずは設計をするのですが、こんな感じになります。

・3で割り切れるかどうかを判断する

・3で割り切れるものである旨を表示する

・3で割り切れないものを判断する

・それ以外は3の倍数じゃないと表示する

これをプログラムするときに、条件分岐を使います。

では、実際にコードを書いてみましょう。

 

if x%3 == 0:

#3で割り切れるかどうかを判断する

 print('3の倍数です!')

 #3で割り切れるものである旨を表示する

else:

#3で割り切れないものを判断する

 print('これは3の倍数ではありません')

 #それ以外は3の倍数じゃないと表示する

 

・3で割り切れるものである旨を表示する

・それ以外は3の倍数じゃないと表示する

 

if構文のまとめ

☆条件分岐のために利用する

☆if,elif,elseの3段階で条件を判断する

 

f:id:Network_engineer:20210208002339p:plain

 

3. for構文

 if構文は条件分岐処理を行うために利用します。

条件ごとに異なった処理を行うことが可能です。

 

for構文のポイント

☆範囲を指定して繰り返し同じ処理を行うことができる

☆範囲指定は主に配列をを利用する

 

for   :

繰り返しの処理を行う

while  :   

特定の条件が一致しなくなるまで繰り返しを継続する

continue  :

特定の処理をスキップして、他の処理を継続する

break  

特定の条件を満たすことで処理を中断させる

 

 

繰り返し処理を行う理由は、元データの修正がしやすくなるからです。

例えば、AAABBBCCCというデータがあったとします。

これをコピーして利用するのは簡単です。

しかし、元データがABCABCABCに変わった場合にすべてのデータを修正しなければいけません。

そこで、繰り返しで同じデータを読み取って処理を行うことで、元データの修正だけで済むようになるのです。

 

※[1,2,3]のようにすると配列と言って複数データをひとまとまりにすることが可能です。

 

①構文

array = [1,2,3]

#arrayは好きな単語で大丈夫です

for v in array:

#vは好きな単語で大丈夫です

  print(v)  

>>1

>>2

>>3 

 

array = [1,2,3,4,5]

for v in array:

  if v == 3:

    break

  print(v)

>>1

>>2

 

array = [1,2,3,4,5]

for v in array:

  if v == 3:

    continue

  print(v)

>>1

>>2

>>4

>>5

 

②利用例

例えば、簡単な授業のカリキュラム票を作成してみましょう。

こちらも設計を行います。

・「〇限目は〇〇です」と表示させる

・1~6までの順に表示させる

・国語・数学・社会・理科・英語・体育の順に表示させる

 

これをプログラムするときに、繰り返し処理を使います。

では、実際にコードを書いてみましょう。

 

 

curriculum = ['国語','数学','社会','理科','英語','体育']
#授業カリキュラムの入れ物

number = 1

#〇限目の表示に利用する
for curriculums in curriculum:

#繰り返し処理
print(str(number) + '限目は' + curriculums + 'です')

#表示させる
number += 1

#数を1つ足すことで〇+1限目にする

 

for構文型のまとめ

☆繰り返し処理のために利用する

☆break,continue,whileを利用することで条件付きで繰り返し処理が可能

 

f:id:Network_engineer:20210208230757p:plain

 

4. def構文

 

一定の処理をまとめてオリジナルの関数として利用することができます。

毎回コードを書くのではなく使いまわしができる非常に便利な構文です。

 

def構文のポイント

☆オリジナルの関数を作成可能

☆複数の処理をまとめて処理することが可能

 

①構文

def 関数名():

    return 処理プログラム

()の中に要素を入れることで、記入する要素数を指定することもできます。

例えば、2つの数を書けるオリジナルプログラムを作成するとします。

def 関数名(a,b):

    return a*b

 

 

②利用例

 

例えば、文字を入力したら擬音をつける関数を作成します。

・語尾に擬音をつけて表示する

これをプログラムするときに、def構文を使います。

では、実際にコードを書いてみましょう。

 

def add_sound(letter):

   print(letter,'"ドンッッ!!"')

#()内の文字に擬音を付け足す処理

result = add_sound('俺はプログラム王になる!!')

 

def構文のまとめ

☆オリジナルの処理を作成できる

☆処理をまとめて使いまわすことができる

 

f:id:Network_engineer:20210208234257p:plain 

5. 基本の型を覚えたら

 

ここまででpythonの構文の基本形を学んでいきました。

これらは基礎中の基礎なので必須の知識になります。

もちろん、これらを覚えただけではプログラムを作るのは難しいです。

ここからは実践経験を積むことが必要になります。

 

次回から簡単なプログラムの作成を行い、実際のプログラム作成の流れを学んでいきたいと思います。

それが終わったらいよいよAIの作成に取り掛かりましょう。 

 

ここまで読んでいただきありがとうございました。

PythonでAIをつくろう!~環境準備編 Part2~

こんにちは。

前回の記事ではpythonを利用する環境の準備についてお話しました。

network-engineer.hatenablog.jp

 

プログラミングの実行にはpythonのインストールが必要ですが、実行するためのプログラムファイルを作成するためには開発環境が必須です。

今回は無料で簡単に準備ができる、エンジニア必須のアプリである「anaconda」について説明していきます。

 

 

1. 開発環境とは

開発環境とは、自分のPC上でpythonを実行できる環境を用意することです。

前回PCにpythonをインストールしたので、確かに実行はできる状態です。

しかし、pythonをインストールしただけでは自分の書いたコートが正しいかどうか実行しないとわかりません。

そこで、今回はコードを書いてすぐ実行ができる環境を用意します。

pythonには、開発に便利な機能をたくさん搭載したツールが無料で用意されています。 

一般的には、開発に便利なツールが多数搭載された環境を開発環境と呼びます。

 

2.anaconda

「anaconda」はAnaconda.incが開発、無料配布しているPythonディストリビューションです。

ディストリビューションとはコンパイルしてある設定済みのソフトウェアの集合体を指します。

Anacondaを利用してPythonの開発環境を導入することで、手間のかかるインストール作業や細かな設定などの環境構築にかかる時間を短縮することができます。

Pythonの開発はライブラリによって補完される部分が非常に大きいため、有用なライブラリをインストールする必要があります。

しかし、初めてPythonに触れる人にはどのライブラリを導入するべきかわかりにくい難点があり、その点を補ってくれるのがAnacondaというわけです。

Anacondaはデータサイエンス、機械学習などの開発でメジャーなツールが多数含まれています。

インストール後すぐにAIやディープラーニングについて学習したり開発することができるのでAI開発には必須です。

 

anacondaは開発目的ごとに仮想環境を作成することができます。

それぞれ独自の環境を作成し、仮想環境ごとにツールをインストールすることが可能です。

anacondaでメインで利用するのは、「Jupyter Notebook」 と「Spyder」です。

この2つについて詳しく説明していきます。

 

f:id:Network_engineer:20210202005544p:plain

 

3. Jupyter Notebook

Jupyter Notebookは、Python統合開発環境です。

ブラウザー上で動作するWebアプリケーションなので、プログラムの描画などのビジュアル画が充実しています。

また、最大の特徴は書いたプログラムをその場で実行して結果を確認できることです。

1画面にソースコードと実行結果を交互に並べていくことができるので、 小さなプログラムを繋ぎ合わせて大きなプログラムを作るときに活躍します。

AIなどの複数回の実行が必要な開発には定番の開発環境です。

 

f:id:Network_engineer:20210202005624p:plain

 

4.Spyder

Jupyter Notebookと同じく、Python統合開発環境です。

ソースコードの入力画面と、実行結果が出力される画面を同時に開くことができます。

Spyderは変数の現在値をリアルタイムで観察することができるので、統計解析を含む科学技術全般のプログラミングでよく利用されています。

アプリの開発においてはJupyter NotebookよりのSpyderのほうが適しています。

 

f:id:Network_engineer:20210202010151p:plain

 

5. anacondaインストール

anacondaについて知ったところで、実際に利用できる環境を構築しましょう。

利用方法は簡単で、無料のアプリをダウンロードしてインストールするだけです。

 

①ダウンロード

anaconda公式ページにアクセスし、anacondaをダウンロードします。

 ※https://www.anaconda.com/products/individual

f:id:Network_engineer:20210202011557p:plain

f:id:Network_engineer:20210202011613p:plain

 

②インストール

ダウンロードしたanacondaのexeファイルを開き、画面の指示に従いインストールします。

f:id:Network_engineer:20210202011632p:plain

f:id:Network_engineer:20210202011644p:plain

f:id:Network_engineer:20210202012021p:plain

 

6. 仮想環境を作成しよう

anacondaのインストールが完了したら、今度は作業用の仮想環境を作成しましょう。

anacondaの標準ツールは仮想環境上で動作するように設計されています。

そのため、目的によって仮想環境を作成することで利用用途ごとにスムーズな動作で開発に専念することができます。

 

①仮想環境を作成する

anacondaを開き、「enviroment」をクリックします。

次に「create」を押し、好きな名前を入力します。

 

f:id:Network_engineer:20210202013557p:plain

f:id:Network_engineer:20210202013608p:plain

 

②ライブラリをインストールする

ホーム画面から作成した仮想環境を選択します。

インストールしたいライブラリを選択し、「install」でインストールします。

「Jupyter Notebook」と「Spyder」はインストールことをお勧めします。

 

f:id:Network_engineer:20210202014754p:plain

f:id:Network_engineer:20210202014508p:plain
 

以上で開発環境の作成は完了です。

次回からはコードの作成に入ります。

まずは基本の型を勉強し、そのあとAIの開発に進みましょう。

 

ここまで読んでいただきありがとうございました。

 

PythonでAIをつくろう!~環境準備編 Part1~

プログラミング言語を学びたいけど、敷居が高くてなかなか手を出せない人は多いのではないでしょうか。

スクールに通うにはお金がかかりすぎるし、独学でやるには不安があると思います。

確かに、プログラミングは簡単に習得できるものではありません。

苦労はありますし、必ず一度は挫折を経験すると思います。

 

しかし、だからと言ってあきらめる必要はありません。

プログラミングを習得するには、自分でシステムを実際に作ってみればいいのです。

完全に理解しなくても、見よう見まねで構いません。

正解を真似してみることで、大まかなプログラミングの流れを学ぶことができます。

また、自分で作ったものが動いたときはそれが自信につながります。

 

今回はプログラミング言語の中でもpythonを学んでいこうと思います。

pythonディープラーニングを学び、AI(人工知能)を作成をしてみましょう。

 

 

1. AI(人工知能)とは

人口知能とは、「学習・推論・判断といった人間の知能のもつ機能を備えたコンピューターシステム」と定義されています。

あたかも感情を持っているかのような振る舞いをしますが、構造は単純です。

「膨大なデータを分析する仕組み」「分析したデータから適切なデータを取り出す仕組み」の2つが合わさってできています。(超ざっくり)

 

例えば、「怒り=1、悲しい=2、楽しい=3」と定義します。

そして、[楽しい時、悲しい時、楽しい時]のデータをたくさん用意します。

Q:楽しみにしていたケーキが売り切れていた。

「楽しみにしていた:売り切れていた」の文字列から該当するデータとの整合性を確認し、その時の気持ちを類推して表示します。(内部的には数値の2になる)

 

ここからが人口知能の注目するところで、今回の文章もデータをして新しく残し再度分析をし直します。

これらを繰り返すことにより、より精度の高い情報を返答するようになるのです。

 

2. Pythonとは

pythonプログラミング言語のひとつで、汎用性が高い言語です。

PC上のアプリケーションから、テレビゲームまで様々な分野で利用されています。

身近な例でいうと、Instagrampythonで開発されています。

 

pythonインタープリター型言語で、書いたコードをすぐに実行することが可能です。

また、言語体系がシンプルで非常にわかりやすいです。

 

例えば「こんにちは」と表示するとします。

print('こんにちは')

これだけのコードで実行することができます。

 

pythonは最近周流になりつつあるオブジェクト指向型の言語です。

pythonを学習することで様々なプログラムの開発ができるようになり、プログラミングの基礎を学ぶことができるのです。

 

3. pythonをダウンロードしよう

pythonを利用するためにはPCにpythonをインストールする必要があります。

 

①ダウンロード

python公式ページにアクセスし、pythonをダウンロードします。

 ※https://www.python.org/download

f:id:Network_engineer:20210130223137p:plain

 

②インストール

ダウンロードしたファイルを実行し、パソコンにインストールします。

f:id:Network_engineer:20210130223208p:plain

 

以上の2ステップで、pythonの利用環境は完成です。

次は実際にpythonを利用してみましょう。

 

4. pythonを使ってみよう

インストールができたら実際に利用してみましょう。

実行方法は簡単です。

 

コマンドプロンプトを開く

画面下の検索欄より「コマンドプロント」と入力する。

f:id:Network_engineer:20210130224353p:plain

 

windowsキー+R:「cmd」でも可

f:id:Network_engineer:20210130224409p:plain

 

②起動する

コマンドプロンプトで「python」と入力する。

f:id:Network_engineer:20210130225105p:plain

起動したらコマンドを入力してみましょう。

1 + 1」で、足し算ができます。

print('〇〇〇')で、「〇〇〇」と表示できます。

※バージョンが3.8.0ですが、最新版を利用していただければ大丈夫です。

 

windowsキー+R:「python」でも可

f:id:Network_engineer:20210130225227p:plain

 

 

5. Atomをダウンロードしよう

pythonが利用できるようになったら、テキストエディターをダウンロードしましょう。

テキストエディタとは文字入力用のソフトウェアです。

一般的にはメモ帳を利用していると思いますが、プログラミングに適したテキストエディタというものが存在します。

言語ごとにコードを途中補完してくれたり、色分けしてくれたりと非常に使いやすいのでぜひ入れておきましょう。

おすすめは「Atom」です。

 

①ダウンロード

Atom公式ページにアクセスし、Atomをダウンロードします。

 ※https://atom.io

f:id:Network_engineer:20210130231739p:plain

 

②セットアップする

ダウンロードしたAtomを開き、日本語にセットアップします。

「install package」をクリックし、「japanese-menu」と入力します。

「install」をクリックしたらセットアップ完成です。

f:id:Network_engineer:20210130231830p:plain

f:id:Network_engineer:20210130232010p:plain

 

セットアップが完了したら実際に利用してみましょう。

テキスト画面を開き、右下の「Plain Text」をクリックします。

検索画面が出てくるので「python」と入力し、選択します。

python以外のプログラミング言語も対応しています

f:id:Network_engineer:20210130231958p:plain

f:id:Network_engineer:20210130232206p:plain

 

実際にコードを入力してみましょう。

今回はコーヒーの好みをデータの中から繰り返すプログラムを入力してみます。

 

names = ['無糖','微糖','加糖']

for name in names:

      print('コーヒーは' + name + 'が一番')

f:id:Network_engineer:20210130232334p:plain

 

このように、勝手に色分けしてくれるのでわかりやすいです。

ちなみに、こちらのプログラムを実行した結果がこちらです。

f:id:Network_engineer:20210130232455p:plain

 

いかがでしょうか。

テキストエディタを利用することでコードを入力が非常に便利になり、間違いを減らすことができます。

是非利用してみてください。

 

6. pythonをインストールしたら

 

今回はpythonを利用できる環境を整えました。

実際に思い付くまま色々と遊んでみてください。

 

次回は開発環境について説明します。

開発環境とはプログラムを効率的に作成するための環境です。

AIを作成するのに必須の環境になるので、ぜひ参考にしてください。

 

ここまで読んでいただきありがとうございました。