Python入門
0
バージョン管理
バージョン管理 | 作成者 | 内容 |
Ver.1.00 | ウメ | 資料作成 |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
1
目的・狙い / 想定読者
目的・狙い
これから機械学習・データ分析を学んでいくにあたり
①最低限必要なPythonの基礎を理解する
②簡単なプログラムを書ける状態になっている
③機械学習に必要であるライブラリ「Numpy」「Pandas」「scikit-learn」などを
ある程度動かせるようにする
想定読者
①初めて「Python」を学ぶ人
②これから「Python」を使って機械学習・データ分析を活用していく人
③ある程度やっているけど、「なんとなく」基礎を理解している人(復習用)
2
前提
3
【前提】Pythonとは?
Pythonとは?
Python = 「初心者でも扱いやすい言語」(人気PG言語)
①コードの記述がシンプル(初心者でも習得しやすい)
②計算や統計処理、機械学習で必要となるツールがあらかじめ揃っている
Pythonができることは?
◆WEBサービスの開発
もともと1990年に開発された言語で、長い間WEBサービスの開発に使われてきた。
WEBアプリ開発に特化したフレームワークやライブラリもあるため、それらを用いることで誰でも開発を可能にする。
例)YouTube / Instagram / Dropbox
◆データ分析の効率化
ビッグデータ(大量の画像、Webページ、テーブルデータなど)を処理するためのフレームワークが用意されている。
データ分析のための「クローリング(WEB上を巡回して情報を収集)」「スクレイピング(抽出したデータを分析、
格納可能なデータに変換」「データの前処理(収集したデータを扱いやすいように整理)」を行える。
◆人工知能の開発
上述したフレームワークやライブラリが豊富なため、Pythonは人工知能開発に欠かせなくなっている。
4
【前提】学習するうえでの実行環境
Pythonを動かす環境
当資料においては、最低限インターネットに繋がる環境があればPythonを動かせることから
「GoogleColaboratory」というサービスを使って学習 / Pythonを動かしていく。
①GoogleDriveへ
Googleアカウントを持っていれば、最初の15GBは無料で利用できる。
まずはGoogleアカウントを作成して、GoogleDriveを開きましょう。
②GoogleColaboratoryアプリを追加
GoogleDriveを開いたら「マイドライブ」上で新規>その他>アプリ追加を押して検索窓に「Colab」と入力
すると「GoogleColaboratory」アプリが開けるようになる。
③GoogleColaboratoryを起動する
新規>その他>GoogleColaboratoryを選んで押す。
細かい使い方は以下リンク先を参照。
5
Pythonを学習していく
JavaScriptとは?
Python学習
6
Hello World
print関数
まずprint関数を覚えましょう。
- プログラムの実行結果を画面に表示する為のコード
- print(XXX)のように使い、「XXX」のところに表示したいものを記述
実際やってみよう
コードの行のところに「print(“Hello World” )」と打ち込んでみましょう。
※print()の「()」は半角 / 「Hello World」のような文字は両端に「” or ‘」を付ける
※Enterキーを押しても処理されず改行のみ / Shift + Enterで実行される
関数という概念
- 何気なく使っているprintも関数と呼ばれるものにあたる
- 関数は「何かを入れると何かを返してくれる」など、決まった動作を実行してくれる
- 必ず「関数名(XXX)」で表現する 例:print(“Hello World”)
- XXXのところに記述したものを引数(プログラムや関数に渡す値のこと)と呼ぶ
7
Hello World
print関数の四則演算
Python上で四則演算を行う場合には以下のとおりとなる。
四則演算 実演①
Python上ではどう書くだろうか?
Print関数を使って、下記問題の答えを出してみよう。
① 3 × 3 + 6 ÷ 2
② (3 + 1)2 – 4
③ (-3/2) × (-8)
④ 1.7 × 6.3
演算 | 数式 | Python上 | コード例 |
足し算 | A + B | A + B | print(1 + 2) |
引き算 | A – B | A – B | print(3 – 4) |
掛け算 | A × B | A * B | print(5 * 6) |
割り算 | A ÷ B | A / B | print(8 / 2) |
累乗 | AB | A ** B | Print(2 ** 3) |
8
コメントアウト
コメントアウトとは
プログラムを書いていると、処理の内容やコードの書き方について、メモ書きを残したいことがある。
そのような場合には「#」を使うことで、その行について#以降の記述をメモ書きとして扱うことができる。
これを「コメントアウト」と呼ぶ。
例)
また、コーディング中に試行錯誤して、その過程のコードを消さずに残しておきたい場合などにも
コメントアウトで無効化して残すことができる。
例)
9
変数とデータ型
変数とは?
プログラミング言語における「値を入れたり取り出したりできる箱」。数学で使う変数(xとかyとか)と意味は同じ。
例)
変数の命名規則
変数には自由に名前を付けることができる。ただし、一部、命名不可能なものがある。
命名可能 | 命名不可能 |
・a – z の アルファベット(大文字も可) ・0 – 9の数字 ・_(アンダーバー) ・日本語(ただし非推奨) | ・先頭文字が数字 ・予約後(プログラムが事前に用意している 言葉(例)if / importなど) |
10
変数の作成 / 計算
変数を作成してみる
(1)1000という値を持つ変数depositを作成してみよう
(2)print関数で、変数depositに1000が代入されているか出力して確かめてみましょう。
(答え)
変数の計算を行う
(1)年利1.1を表す変数annual_interestを作りましょう
(2)先程の変数depositと変数annual_interestを用いて、7年後の貯蓄合計金額を
変数resultに代入してみましょう。年利の計算は累乗で計算してください。
変数resultはprint関数で出力してみてください。
11
変数のデータ型【1/2】
変数のデータ型
変数はデータ型と呼ばれる型があり、Pythonでは代入された値によって自動的にデータ型が決まる。
データ型の代表的な例は以下がある。
int型(整数型) | 整数を表すデータ型。例)0 / 1 / 100 / 1000 / 99999 / -1 |
float型(少数型) | 少数を表すデータ型。例)1.1 / 5.5555 / 99.99999 / -999.9 |
str型(文字列型) | 文字列を表すデータ型。文字列を表す場合は「‘」「“」を用いる。例)’fruits’ / “it’s”など |
bool型(論理型) | 論理値を表すデータ型。True または Falseの値を取る。 |
変数のデータ型を調べる
データ型によって扱える処理や計算が変わることもあるため、変数のデータ型が何なのかを把握することは重要。
その時には「type関数」を用いる。実際に以下の変数を作成して、type関数でデータ型を確認しましょう。
(1) a = 0
(2) b = 1.111
(3) c = “it’s a small world!”
(4) d = True
12
変数のデータ型【2/4】
データ型の変換
異なるデータ型で計算する際は注意が必要。一般的に数値型(int型やfloat型)と文字列型(str型)の計算において、int型とstr型の乗算以外は認められていない。
また、bool型では「1+True」や「1+False」の場合、True=1、False=0といった数値で扱われる。
数値型と同様、bool型とstr型の計算は乗算だけが認められている。
(1) print関数を使って「1 + ‘ichi’」がエラーになることを確認してみよう
(2) print関数を使って「‘ichi’ * 3」が「ichiichiichi」になることを確認してみよう
(3) print関数を使って「1 + True + False」を計算して「2」になることを確認してみよう
キャストを行う
ある変数を別のデータ型に変換することをキャストと言う。具体的には変数の前に「int」「float」「str」を付ける。
(1) a = 1.1 これをint型に直してみよう
(2) b = 1 これをfloat型に直してみよう
(3) c = “1” これをint型に直してみよう
(4) d = 1 これをstr型に直してみよう
13
文字列操作【1/4】
文字列とは?
「‘」「”」内に表現されたものを文字列と呼ぶ
文字列の連結・分割
連結 | 分割 |
|
|
| |
14
文字列操作【2/4】
文字列の連結・分割練習
(1)文字列’Data_’ / ‘Science_’ / ‘Training’の3つの文字を使い、文字列
「Data_Science_Training」を生成し、変数s1に代入して、print関数で出力してみよう。
(2)split関数を使って、変数s1を「_」で区切って分割し、変数s2に代入しましょう。
(3)リストとなった変数s2をjoin関数を使って、区切り文字にカンマ(,)を指定した文字列s3を作成してみよう。
文字列の切り出し・スライス
文字列は特定の順番で文字が連なったものとみなすこともできる。文字が連なったものが文字列。
下の画像のよう上段のようにインデックスと呼ばれる数字を用いて順序付けがされている。 ※最初は0
画像内の上段のようなインデックスを上手く使うことで、部分的な文字列を取り出すことが出来る。
これをスライスと呼ぶ。スライスによって切り出せる文字はstart以上end未満。
Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
文字列 | U | M | E | M | O | T | O |
15
文字列操作【3/4】
文字列の切り出し・スライス練習
(1)変数sに‘私はデータサイエンティスト見習いです。’という文字列を代入して、インデックスを指定し、
文字列sから'私'の文字のみを取り出し、出力しましょう。
(2)スライスを利用し、'データサイエンティスト見習いです。'を取り出し、出力しましょう。
(3)スライスを利用し、'データサイエンティスト'を取り出し、出力しましょう。
文字列の置換
文字列中の文字は好きな文字に置き換えることができる。これを置換といい、replace関数を使う。
文字列.replace(置換前の文字列, 置換後の文字列, 置換回数)
例)
好きなように置換してみてください。
16
文字列操作【4/4】
文字列の削除
必要のない文字の削除について、文字列の両端と左端・右端のそれぞれに対して行う事ができる。
具体的にはstrip関数を利用します。文字列.strip(削除したい文字の集合)
※両端から順に削除したい文字の集合、文字を確認し、削除したい文字以外の文字が出てくるまで削除し続ける。
右側のみの文字列削除であれば「rstrip関数」、左側のみの文字列削除であれば「lstrip関数」を利用する。
これ以外にも「文字列の操作」には「検索(find関数やcount関数)」、「長さの特定(len関数)」
「文字列が数字だけを含むか否かを調べる(isdecimal関数)」など多彩な文字列操作がある。
17
データ構造
データ構造とは?
データを効果的に扱うために、一定の決まりで体系立てて格納する形式のこと。
プログラム処理の流れ(アルゴリズム)に大きく影響するため、アルゴリズムに適したデータ構造を使用する必要がある。
代表的なデータ構造
タプル
リスト
辞書
複数の値を1つにまとめることができる。
1つにまとめることでデータを扱い易くする。
例)山田太郎、168、65、A型を1つの
値にまとめたい場合
Yamada = (‘山田太郎’,168,65,’A型‘)
※要素と要素の間に「,(カンマ)」を
入れて、「()丸括弧」で閉じる。
※文字データは’か”で囲む
※タプルは、一度作った場合、値を
追加・削除・変更を行えない。
複数の値を1つにまとめることができる。
1つにまとめることでデータを扱い易くする。
例)山田太郎、168、65、A型を1つの
値にまとめたい場合
Yamada = [‘山田太郎’,168,65,’A型‘]
※要素と要素の間に「,(カンマ)」を
入れて、「[]角括弧」で閉じる。
※文字データは’か”で囲む
※リストは、タプルと違って、値を追加・
削除・変更を行える。
複数の値を1つにまとめることができる。
1つにまとめることでデータを扱い易くする。
例)山田太郎、168を1つの値に
まとめたい場合
Yamada = {“名前”:”山田太郎”,”身長”:168}
※辞書型は{Key:Value}がペアになる
※Keyは1つしか使えず重複できない。
Valueは重複できる。
※リストと同じく用の追加・削除・変更を
行える。
18
データ構造:タプル
タプルを作成してみよう
下記表のケーキ一覧をタプル化してみよう。
(1)上の表を参照し、ケーキの"商品名"と"金額"と"点数"のそれぞれの値を、変数cake_tupleに代入しましょう。
(2)変数cake_tupleのデータ型を確認しましょう。
(3)変数cake_tupleの内容を出力してみましょう。
(4)要素を追加する「append関数」を使って、本当にタプルに要素を追加できないか確認してみましょう。
append関数は「変数名.append(追加したい要素)で処理します。
今回は金額:300円と点数:3を掛け算した「合計金額:900」を追加しようとしてみましょう。
商品名 | 金額 | 点数 |
ケーキ | 300 | 3 |
パスタ | 600 | 5 |
ステーキ | 1000 | 2 |
リストとタプルの違い
◆タプルはイミュータブル(変更不可能) / 絶対に要素をいじれないようにする場合などの変数に使用する
◆リストと比較して使用するメモリが小さくコンピュータに対する負荷が少ない。 / 処理速度が早い。
19
データ構造:リスト【1/4】
リストを作成してみよう
下記表のケーキ一覧をタプル化してみよう。
(1)上の表を参照し、パスタの"商品名"と"金額"と"点数"のそれぞれの値を、変数pasta_listに代入しましょう。
(2)変数pasta_listのデータ型を確認しましょう。
(3)変数pasta_listの内容を出力してみましょう。
(4)要素を追加する「append関数」を使って、リストに要素を追加できるか確認してみましょう。
append関数は「変数名.append(追加したい要素)で処理します。
今回は金額:600円と点数:5を掛け算した「合計金額:3000」を追加してみましょう。
商品名 | 金額 | 点数 |
ケーキ | 300 | 3 |
パスタ | 600 | 5 |
ステーキ | 1000 | 2 |
20
データ構造:リスト【2/4】
リストから値を取り出す
データ分析ではリスト内の指定した値だけを取り出して処理を行うことがある。
リストの要素にはインデックスがあり、番号を指定すると指定した位置の要素を取り出すことができる。
番号は一番左からスタートして0から、1,2と進んでいく。
例)list = [“Yamada Taro”,170,65,”A型”]
list[0] ⇒ Yamada Taro と出力される。
(1)先程の変数「pasta_list」から金額の値を取り出して、変数pasta_priceに代入してみましょう。
リスト内の計算
取り出したリストの値を使って計算してみましょう。
データ分析では複数のリストの指定した値を計算することがある。
例) list1 = [10,20,30,40]
list2 = [50,60,70,80]
list3 = list1[0] + list2[0] ⇒ 60 ※list1 + list2 を行うと要素が結合される
21
データ構造:リスト【3/4】
リストから新しいリストを作る
データ分析を行う際に複数のデータを取り出して分析することが多くある。
リストから複数のデータを取り出して新しいリストを作っていく。
リスト内に多くの要素が含まれていて、一部の値だけのリストを作りたいときによく行われる。
例)Yamada = [“山田太郎”, 168, 78, “A型”, “男性”, “理系”, “東京大学”, “エンジニア”]
Yamada_kiso = [Yamada[0], Yamada[1], Yamada[2],Yamada[4]]
(1)変数steak_listに「“ステーキ”,1000,2」の要素をリストとして作成し、そのうえで変数「new_steak」を
作成してステーキのリストから「商品名」と「点数」の値を代入して新しいリストを作成してみましょう。
リストのリストを作る
リストを要素にもつリストのリストを作っていく。
例) list1 = [“国語”,”5時限目”,”山田先生”]
list2 = [“算数”,”3時限目”,”田中先生”]
timetable = [list1,list2]
(1)実際にタイムテーブルを作ってみましょう。昔の時間割を思い出してみてください。
22
データ構造:リスト【4/4】
リストのリスト内の値を操作
リストのリスト内の値を操作をしてみましょう。
先程作成したリストを使って、先生の要素だけを取り出して先生リストを作成してみましょう。
例)teachers = [timetable[0][2], timetable[1][2], timetable[2][2]]
このようにリストのリスト内の何番目のリストの何番目の値かを指定することで、リストのリストの値の操作
を行うことができる。
23
データ構造:辞書
辞書を作る
辞書型を作ってみましょう。辞書型も複数の値を1つにまとめることができる。
リストと同じ用に、要素の追加・削除・変更を行える。
例)英語の点数100点、数学の点数90点、国語の点数80点の3つのデータを辞書型で登録してみる。
辞書名 = {“英語”: 100, “数学”: 90, “国語”: 50} となる。
このように辞書型は{key:value}でペアとなっているリストのことを指す。
辞書型の大きな特徴はkeyを各値で管理していることです。辞書型はリストと違ってインデックス番号は存在しない。
辞書型の場合、keyを指定して値を呼び出すことができる。
例)辞書名[“英語] ⇒ 100 と出力される。
商品名 | 金額 | 点数 |
ケーキ | 300 | 3 |
パスタ | 600 | 5 |
ステーキ | 1000 | 2 |
(1)左の表のケーキ、パスタ、ステーキの3つの商品名をkeyとし、
金額をvalueとする辞書を作り、変数eat_dictに代入しましょう。
(2)作成した変数eat_dictのデータ構造の型を出力してみましょう。
(3)変数eat_dictからパスタの金額を取り出し、出力してみましょう。
24
データ構造
データ構造の型を変換
データ構造をタプル、リスト、辞書型に変換することができる。
Tuple関数で変換
tuple()関数を使って、別の型のオブジェクトをタプルに変換できる。
list_sample = [“山田太郎”,180,70,”A型”] をタプル型にしたい場合
list_sample2 = tuple(list_sample)
辞書型を変換する場合
list_sample3 = [“名前”:“山田太郎”,”身長”:180,”体重”:70,”血液型”:”A型”] をタプル型にしたい
list_sample4 = tuple(list_sample3.keys()) / tuple(list_sample3.values)) / tuple(list_sample3.items())
リスト化したい場合はlist関数を、辞書型の場合はdict関数を使う。
※この中では細かく説明する時間がないため、下記のリンク先を参照してください。
25
リストの操作【1/8】
リストと文字列操作
前スライド文字列操作で学んだ関数や考え方はリストにも適応することができる。
リストについては前述したとおり、文字列と同様にインデックスによる順序付けがなされているために、スライスやin、
count関数等を用いてリスト内の要素を操作することができる。
◆リスト名[start:end]:インデックスがstart以上、end未満の値をスライスして取り出せる
◆要素名 in リスト名 :ある要素がリストの値として含まれているかどうかを判定。
含まれていればTrue、含まれていなければFalseを返す。
◆リスト名.index(要素名):引数に指定した要素と同じ値がリストに含まれる場合、そのインデックスを返す。
複数見つかった場合、最初の要素のインデックスを返す。1つも含まれていない場合はエラーとなる。
◆リスト名.count(要素名) :引数に指定した要素と同じ値がリストに含まれる場合、その数を返す。見つからない場合は0を返す。
store_list = ['年齢','性別','来店人数','来店時間','注文数','合計金額','品質レベル',''接客レベル','清潔度’]
(1)上記、変数store_listを作成して、'性別'から'合計金額'までをスライスし、出力しましょう。
(2)'注文数'のインデックス番号を、index関数を使って出力しましょう。
(3)リスト中の要素'注文数'の個数を、count関数を使って出力しましょう。
26
リストの操作【2/8】
リストの要素の追加
新しく得た情報をもともと存在しているリストに付け加える事がある。�ここでは、append()とinsert()を使って、リストにおける要素の追加操作を行う。
◆リスト.append(追加要素)
◆リスト.insert(インデックス、追加要素)
append関数は引数の値をリストの右端に要素として追加する。一方、insert関数はインデックスを指定し追加する。
region_list1 = ["北海道","東北","関東","中部","近畿","中国","四国"]�region_list2 = ["北海道","東北","中部","近畿","中国","四国","九州沖縄"]
(1)変数region_list1を作成し、append関数を用いてリストの右端に“九州沖縄”の要素を追加しましょう。
(2)変数region_list2を作成し、insert関数を用いて"東北"と"中部"の間に"関東"の要素を追加しましょう。
27
リストの操作【3/8】
リストの結合
複数の配列(リスト)を結合することができる。
◆演算子を用いる場合
a = [1, 2, 3, 4] / b = [4, 5, 6]
print(a + b)
print(len(a + b))
◆append関数を用いる場合
a = [1, 2, 3, 4] / b = [4, 5, 6]
a.append(b)
print(a)
print(len(a))
28
リストの操作【4/8】
リストの要素の変更
リストでは要素の内容を後から変更する機能もある。
例えば、作ったリストの中の値に不正な値が入っていたことが確認できた時、その値を変更したい場合は、
該当位置に別の値を上書きすることで要素の変換を行うこともできる。
例)x = [100,500,300,400]
x[1] = 200
x ⇒ [100,200,300,400]
region_list = ["北海道","東北","東京","中部","近畿","中国","四国","九州沖縄"]
(1)上記変数region_list を作成して、変数region_listの"東京"の部分を"関東"に変更し、出力しましょう。
29
リストの操作【5/8】
リストの要素の削除(del)
リストでは要素の内容を削除する機能もある。
例えば、作ったリストの中の値に不正な値が入っていたことが確認できた時、その値を削除したい場合は、
該当位置を指定して削除を行うこともできる。
例) x = [100,200,500,300]
del x[2]
x ⇒ [100,200,300]
Deleteは指定した位置だけでなく指定した範囲(x[0:2]など)で削除を行える。
範囲を指定するときは[開始位置 : 終了する位置]を指定する事で、開始位置から終了する位置の1つ前の
位置まで削除することができる。
(1)先程の変数region_list を使って、変数region_listの"関東"から"四国"の部分を削除したリストを
作成し、出力しましょう。
30
リストの操作【6/8】
リストの要素の削除(remove)
リストではremoveという要素を削除する機能もある。
Delはインデックスの位置を指定して削除していたが、removeは値の中身を指定して削除を行う。
例) x = [100,200,500,300]
x.remove(500)
x ⇒ [100,200,300]
(1)region_listを再度作成して、変数region_listの"関東"部分をremove関数を使って削除し、
その後に出力しましょう。
※再作成するには、先程作成した「region_list」を再度、処理すれば元に戻ります。
31
リストの操作【7/8】
リストの要素の並び替え(昇順)
リストでは要素の内容を並び替える機能もある。
例えば、作ったリストの中の値を昇順に整理し見やすくしたい時には、sort関数を使うと並び替える事ができる。
例)x = [100,500,700,400,200,800]
x.sort()
x ⇒ [100,200,400,500,700,800]
※ 文字列の場合も同様に昇順に並び替えられる。
region_list = ["Hokkaido","Tohoku","Kanto","Chubu","Kansai","Chugoku","Shikoku","Kyushu"]
(1)上記、変数region_listを作成して、変数region_listを昇順にsort関数で並べ替えて、
出力し直してみましょう。
32
リストの操作【8/8】
リストの要素の並び替え(降順)
リストでは要素の内容を降順に並び替えたい場合、sort関数の引数に「reverse = True」を指定することで、
降順にソートすることができる。
例)x = [100,500,700,400,200,800]
x.sort(reverse=True)
x ⇒ [800,700,500,400,200,100]
※ 文字列の場合も同様に降順に並び替えられる。
(1)先程の変数region_listをを降順にsort関数で並べ替えて、出力し直してみましょう。
33
論理演算と条件分岐【1/7】
プログラムにける比較演算子
比較演算子 | 内容 |
x == y | xはyと等しい |
x != y | xはyと等しくない |
x > y | xはyよりも大きい |
x < y | xはyよりも小さい |
x >= y | xはyより大きいか等しい |
x <= y | xはyより小さいか等しい |
x in y | x という要素がyに存在する |
x not in y | xという要素がyに存在しない |
34
論理演算と条件分岐【2/7】
比較演算子(1)
2つの値を比較するときに使用する比較演算子が用意されている。�例えば、2つの値や変数が等しいかどうかを判定するには==を使う。�これは「代入」を表す=と区別するためにこのように表される。�等しくないことを判断するには「!=」を用いる。
比較した結果、正しければTrue、間違っていればFalseとなる。
例) (1 + 1) == 2 ⇒ True / (1 + 1) == 3 ⇒ False
‘hello’ == ‘hello’ ⇒ True / ‘hello’ != ‘python’ ⇒ True
比較演算子(2)
値の大小は「>(大なり)」と「<(小なり)」を使って表すことができる。�また、これらは等号を付け加えて「>=(以上)」「<=(以下)」と表すこともできる。�「<=」は正しい文法ですが、「=<」は間違っていることに注意しましょう。
例)(1 + 1) <= 2 ⇒ True / (2 * 3) <= 5 ⇒ False
‘alpha’ <= ‘beta’ ⇒ True / ‘beta’ >= ‘gamma’ ⇒ False
※文字列の比較では、アルファベット順に基づいて大小関係が決定される。
35
論理演算と条件分岐【3/7】
論理算子(1)
論理演算子and(かつ)、or(または)、not(否定)を使って論理演算を行うことができる。
先程の比較演算子と論理演算子を組み合わせることで、より高度な論理式を書くことができる。
実際にやってみよう。
my_score = 44.0
your_score = 31.0 と変数を定義して、以下を作成してみよう。Print関数で出力してください。
(1)my_scoreは40より大きく、かつ44より小さい。
(2)my_scoreは31より小さい、または41より大きい。
(3)my_scoreの2倍はyour_scoreの3倍より小さい。
36
論理演算と条件分岐【4/7】
論理算子(2)
もう少し風雑な論理演算子を見てみましょう。
下記のスクリプトを実行してみましょう。実行する前にTrueかFalseどちらが出力されるか予想してみてください。
x = 5
y = 10
print((not(x == 5) or x < 3) and not(y < 8 or y > 9))
※括弧の内側から真偽値を確認しみる。
※notはandやorよりも優先的に実行される。
37
論理演算と条件分岐【5/7】
if文
if文はプログラミングの基本的な考え方の1つ。
ある条件に当てはまる時だけ処理を実行することができる。
if文の基本的な書き方は
if a == b:
print(a)
というように、if 条件:(コロン)の後に改行して、条件に合致した時の処理を書く。
条件に合致した時の処理はタブスペース(インデント)で必ず空ける。
(1)点数が60点以上の場合に、‘よくできました’と表示されるようにif文を書いてみましょう。
if文の条件式を記載する前に、変数 math_point = 80を設定しましょう。
38
論理演算と条件分岐【6/7】
if文 elseの追加
else文を使うと、if文の条件がFalseだった場合の処理を記述することができる。
例えば、else文は下のように記述することができる。
if a == b:
print(a)
else:
print(b)
if文に対応するように「else:」を記述することで、それ以外のときの処理を記述することができる。
上の例では、aとbの値が一致しているときはaの値が表示され、それ以外のときはbの値が表示される
(1)前述の問題に点数が60点未満の場合に、‘頑張りましょう’と表示されるようにif文を書いてみましょう。
if文の条件式を記載する前に、変数 math_point = 50を設定しましょう。
39
論理演算と条件分岐【7/7】
if文 elifの追加
更にelif文を使うと、より複雑な条件分けをして処理を記述することができる。
例えば、elif文は下のように記述することができる。
if a == b:
print(a)
elif a > b:
print(b)
else:
print(‘other’)
if文に対応するように「elif文 条件式:」を記述することで、更に条件分岐を記述することができる。
上の例では、aとbの値が一致しているときはaの値が表示され、aの方がbよりも大きい場合はbの値が表示され、
そのどちらでもない場合は「other」という文字が出力されるようになる。
(1)前述の問題を改良して、80点以上の場合「よくできた」、60点以上の場合「まぁまぁかな」、それ未満の場合
に「頑張りましょう」と表示されるようにif文を書いてみましょう。
if文の条件式を記載する前に、変数 math_point = 70を設定しましょう。
40
反復処理【1/5】
While文
同様の処理を指定した分だけ繰り返すことができる。使いこなせれば非常に効率的に処理を完遂することができる。
反復処理の中でもwhile文の基本的な書き方は、if文とほとんど同じ。
While 条件文: (コロン)の後にインデントして処理内容を記述する。
if文と記述方法は似ているが、while文では条件文がTrueである限り処理が繰り返し実行される。
例) step = 1
while step <4 :
step += 1
print(step)
上記の場合、while文内の条件文ではstepが4より小さいかどうかを判断し、条件文がTrue(stepが4より小さい)ならば処理内容が実行される。処理内容ではstepが1ずつ増える。増えたstepを再び条件文で確認し、
Trueならば繰り返し処理が行われる。もしもFalseならばwhile文は終了となりprint(step)のコマンドに移る。
(1)変数stepが4以上となった時にFalseとなるような条件文を付けましょう。
次にwhile文の中の処理として、stepの値をappend関数を用いてリストの変数answer_listに
追加しましょう。最後にanswer_listを出力し、リストの値が[0,1,2,3]となっているか確認しましょう。
41
反復処理【2/5】
for文
While文の他にfor文という反復処理もある。for文の基本的な書き方は
for 要素 in リスト(オブジェクト): の後に改行し、インデントの後に処理内容を記述する。
例)以下wordsという変数があるとして、変数の配列の要素を出力したい場合
words = [‘Japanese’, ‘English’, ‘French’]
for w in words:
print(w)
(1)for文を使って、数学の点数のリストが代入された変数scores_mathからそれぞれの点数を出力しましょう。
またそれぞれの点数を変数totalに足し、合計を計算しましょう。
変数scores_math = [43,55,78,39,84],変数total = 0とします。
42
反復処理【3/5】
indexの取得
for文では対象のリストにenumerate関数を用いる事で、リストの要素だけでなくその要素のインデックスを
同時に取得することができる。
for インデックス, 要素 in enumerate(リスト):
処理
例)前スライドのwordを例にすると・・・
(1)前スライドの数学の点数のリストが代入された変数scores_mathから、enumerate関数を使い、
それぞれのインデックスと点数を出力しましょう。
インデックスと要素を組み合わせた文章を「student ID No.[index] : [要素]というフォーマットで
出力しましょう。
変数scores_math = [43,55,78,39,84] とします。
43
反復処理【4/5】
range関数
for文内の処理を指定した回数分だけ繰り返したい時はrange関数を用いる。
for i in range(数値):
処理
例)while文で使用したstepを4まで出力したい場合
(1)前スライドの数学の点数のリストが代入された変数scores_mathから、range関数を使い、
それぞれのインデックスと点数を出力しましょう。
インデックスと要素を組み合わせた文章を「student ID No.[index] : [要素]というフォーマットで
出力しましょう。※student IDはNo1から始まるようにindexの計算を工夫してください。
変数scores_math = [43,55,78,39,84] とします。
※range関数の使い方は記載以外にも沢山あるため、調べてみてください。
44
反復処理【5/5】
breakについて
for文内の処理を繰り返し行っている時に、途中でやめたい場合も発生してくる。
その時は for文でbreakというものを使っていく。
例)while文で使用したstepを3で止めたい場合
(1)前スライドの数学の点数のリストが代入された変数scores_mathから、break処理を使い、
student No:3までのインデックスと点数を出力しましょう。
インデックスと要素を組み合わせた文章を「student ID No.[index] : [要素]というフォーマットで
出力しましょう。※student IDはNo1から始まるようにindexの計算を工夫してください。
変数scores_math = [43,55,78,39,84] とします。
45
内包表記(紹介レベル)
内包表記について
内包表記とは、前述で学んだif文やfor文の処理を1行の中で表記する方法であり、
下記のように表現することができる
例)for文で[0,1,2,3,4]のリストを作成したい場合
num = [] #空リストを用意する
通常だと・・・
for i in range(5):
num.append(i)
となるが、これを内包表記で書くと・・・
num = [i for i in range(5) と表記することができる。
このように内包表記を使うと、
普通に記述すると複数行で書かなければいけないものを1行で書くことができ、
なおかつ処理速度を早めることができる。
If文やfor文の書き方に慣れてきたら、内包表記の使い方を調べて使ってみよう。
46
ライブラリ【1/5】
ライブラリとは
前スライドまでにいくつかの組み込み関数(print関数やrange関数など)を使ってきた。
Pythonでは、その他にも用途に合わせてモジュールやライブラリを取り込み、既成の関数を使う場面が多く存在する。
モジュールとは関数やプログラムをまとめたpythonコードのファイルを言う。
それらファイルをまとめたものがライブラリとなる。
つまりライブラリを使うとは、ライブラリ内に既に用意された便利な関数を使うということ。
データ分析・機械学習において、ライブラリに関しては次のような一例が存在する。
・Numpy : ベクトルや数値計算を行うライブラリ
・Matplotlib : グラフを描画するためのライブラリ
・Pandas : 表計算など統計解析用のライブラリ
・Scikit-learn:機械学習のアルゴリズム(サポートベクターマシンやランダムフォレストなど)が備えられたライブラリ
47
ライブラリ【2/5】
ライブラリのimport
ライブラリを使うには事前に「import」を用いて、ライブラリの読み込みを行う必要がある。
具体的には以下のようにimportの後にライブラリ名を指定するとライブラリが使えるようになる。
import ライブラリ名
例)mathというライブラリを使って説明。Mathは数学に関する関数が含まれている。
mathというライブラリをimportすることによって、powというべき乗の関数を行える。
import math
num = math.pow(2,3)
num
(1)mathというライブラリをimportして、numという変数に関数powを使って3の4乗を求めて出力しましょう。
48
ライブラリ【3/5】
名前をつけてライブラリをimport
ライブラリをimportする際に、asを使うことでライブラリに名前を付けられる。
名前をつけることで、名前が長いライブラリや読みにくい名前の関数を短く分かりやすい名前にすることができ、
楽に呼び出すことができる。
例)先程のmathというライブラリを例にすると、Mという名前でインポートしてみる。
import math as M
ライブラリの関数を呼び出す際は以下のとおりになる。
num = M.pow(2,3)
(1)今回はmathライブラリをsuugakuという名でインポートしましょう。
(2)pow関数を使って変数numに5の2乗を代入して出力しましょう。
49
ライブラリ【4/5】
使用する関数だけのimport
fromとimportを使うことで、ライブラリから指定した関数だけを使用することができる。
from ライブラリ名 import 関数名
例)先程のmathというライブラリでpow関数だけをインポートする場合は以下のとおりになる。
from math import pow
変数numに2の3乗を代入する場合を例に使用する時は以下のようになる。
(1)mathのライブラリから関数powだけをインポートしましょう。
(2)pow関数を使って7の3乗を変数numに入れて出力しましょう。
50
ライブラリ【5/5】
import応用
ここまで学んだことを活用すると、以下の様にライブラリから指定した関数だけを指定した名前でインポートできる。
from ライブラリ名 import 関数名 as 名前
使用するときは以下の様に使う。例は変数numに2の3乗を代入するとき。
例)from math import pow as P
num = P(2,3)
num
(1)mathライブラリの関数powをbekijyouという名でインポートしましょう。
(2)bekijyouを使って4の2乗を変数numに代入して出力しましょう。
51
Pandasライブラリでファイルの入出力【1/2】
ファイルの読み込み
データ分析・機械学習をしていると、データが格納されたファイルを読み込んで処理を行ったり、処理した結果を
ファイルに書き込んで保存したいことが頻繁にある。
ファイルを開いて中身を読み込む方法、およびファイルを保存する方法を学んでいく。
pandasのライブラリの機能にcsv形式のデータを読み書きする機能が提供されているため、紹介していく。
例)csv形式のデータを呼び込む際には、以下のとおりに実施する。
imort pandas as pd # pandasやnumpy、matplotlibの省略語は形式的に決まっている
data = pd.read_csv(‘ファイル名’)
※1:ファイル名と記載しているが、実際はファイルの保管場所のパス・ファイル名を指定
※2:使用するデータにheaderがない場合は以下のとおりにする
data = pd.read_csv('data/src/sample.csv', header=None)
※3:read_csvの引数にはいくつか利用可能なものがある。
右記を参考に:
52
Pandasライブラリでファイルの入出力【2/2】
ファイルの書き込み
例)データを書き込む方法は以下の通り。
data.to_csv(‘ファイル名’)
※1:ファイル名と記載しているが、実際はファイルの保管場所のパス・ファイル名を指定
※2:headerを付けずに保存する場合は、引数にheader = Falseと指定する
※3:同様にindexを付けずに保存する場合も、引数にindex = Falseと指定する
53
終わりに
長時間お疲れ様でした。
以上の内容で、ひとまずデータ分析や機械学習をpythonで実施していくための基礎は身につけられたと思います。
今回、記載した内容は基礎中の基礎のため、あとはこれをもとに自分でプログラミングをしていって、
どんどんpythonの構文や関数、ライブラリの使い方を覚えていってください。
54