「Python プログラミング基礎その１」

九州大学 大学院システム情報科学研究院
情報知能工学部門
データサイエンス実践特別講座
備瀬 竜馬， 末廣 大貴, Diego Thomas

復習2

Google Colaboratory

自分のGoogleアカウントでログインファイルをセーブできるようになる

3

Jupyter notebookを使う
Jupyter notebook: Pythonの開発環境の一つファイルをクリック
Python3の新しいノートブックをクリック※）数字はPythonのバージョン

4

Cell

Cell
プログラムの入力フィールド
Cellの単位で実行される

5

list

6

list
●数字のリスト：[]の中に数字をコンマ区切りで記載
●例：

()

()

7

list
●数字以外でも、好きなものをリストにできます●例１：文字列のリスト●例２：文字列と数字のリスト
名前、体重、身長をリストにする●例３：リストのリスト
リストのリストlist●リストの要素の呼び出し

例：0番目の要素を出力()() 4番目の要素を出力※）pythonでは、0から数える

9list●リストのリストにも次のようにすれば呼び出せる

1番目の要素（リスト）の1番目の要素を出力

list●リストの初期化と要素追加

例：

初期化
Listの要素に“1”を追加
Listの要素に“2”を追加()※）list.append(x)で、listの最後にxが追加される

11list●リストのリストにも次のようにすれば追加できる例：

e の 0 番目のリストに27を追加

練習１: list
●以下の3人のリストを作ろう●A君：1.7m, 52kg
●B君：1.6m, 75kg

●C君：1.8m, 73kg

ヒント）[[名前、体重、身長], […], […]]●BMIを計算し、BMIsという名前のリストに下記の順で入れてみようヒント）listの初期化が必要：BMIs=[]
listに要素の追加 ：BMIs.append(xx)●リストBMIsの1番目（B君）の値を表示してみよう

13if14

比較（１）
5ab<a3ba が b より小さい？

True
(正しい)

orFalse(正しくない)15

比較（２）
演算子
==
!=>
>=
<

例
a==ba!=ba>ba>=ba<b

意味
a と b が等しい？
a と b が異なる？
a が b より大きい？
a が b 以上？
a が b より小さい？

<=

a<=ba が b 以下？

出力
True
(正しい)
または
False
(正しくない)例16「a=b」は、aにbの中身を入れると比較（２）いう意味だったので、演算子
==
!=>>=
<

例
a==ba!=ba>ba>=ba<b<=a<=b

混同しないように比較は、「==」意味
出力a と b が等しい？
True
(正しい)
a と b が異なる？
a が b より大きい？
またはa が b 以上？
a が b より小さい？
False(正しくない)a が b 以下？

例
17

「かつ」と「または」(1)●例：あなたの結婚の条件は？

25歳以上かつ身長180cm以上！
age= 30
height=1.68
age>=25 and height>=1.80

18

「かつ」と「または」(2)演算子

例anda and bor

a or b意味a かつ b が両方 正しい ?
a または b のどちらかが正しい ?

出力
True
(正しい)
または
False
(正しくない)19

if, elif, else
●条件文で分岐をつくる●例：20歳以上は”Adult”, 13歳以上20歳未満

なら “Young”, 13未満は“Child”

age=30if age>=20:
print( “Adult” ) ＃もし20歳以上なら・・・
elif age>=13:
print( “Young” ) ＃20歳以上でない．でももし13歳以上なら・・・
else:print( “Child” ) ＃20歳以上でも13歳以上でもないなら・・・
20ところで・・・「コロン」と「インデント」
if age>=20:
print( “OK” )else:print( “NG” )●コロン「:」で「次の行に続きますよ」●インデント「空白４つ」で「続いてますよ」

21

練習２: if
●BMIを入力として与えて、以下のように表示するプログラムを作ろう！
●18.5未満の場合、「やせ型」と表示●18.5以上25未満の場合、「標準」と表示●25以上の場合、「肥満気味」と表示●以下の3人のBMIを計算し、上のプログラムで動かそう●A君：1.7m, 52kg
●B君：1.6m, 75kg

●C君：1.8m, 73kg

22

for23

for（１）●同じ計算を繰り返す●例：

リストの中身がなくなるまで繰り返す

for i in [0,1,2]:
print( i )()1回目は、i に0を代入して、print i
2回目は、i に1を代入して、print i
3回目は、i に2を代入して、print i24

for（２）●リストの中身を増やすと？

for i in [0,1,2,3,4]:
print( i )()100回繰り返したい場合は、リストの中に、100個書く？
25

for（３）for i in range(5):print( i )range()
整数のリストを作る関数
0～5未満の整数のリスト

同じ

for i in [0,1,2,3,4]:
print( i )26

for（4）●同じ計算を繰り返す●例：xに1を3回足す

x=1
for i in range(3):x=x+1
print( x )()繰り返しの中で、毎回 print( x ) が実行
27

for（5）●インデントによる違い●例：xに1を3回足す

x=1for i in range(3):x = x +1
print( x )()繰り返しの中で、x=x+1 のみが実行され、print( x ) は、最後に1回のみ実行される
28

for（6）●もちろんリストの中は数字でなくても OK

for i in [“A”, 52, 1.7]:
print( i )練習3: for●練習２で計算したA君、B君、C君のBMIのリストをfor文を使って、順に呼び出してprint文で表示してみよう●それぞれの身長、体重●A君：1.7m, 52kg
●B君：1.6m, 75kg

●C君：1.8m, 73kg

30

外部データの読み込み

CSV file31

CSV file format●CSV = comma separated values●File format specifications:●項目ごとにコンマ “,” で区切られたデータ●1行が一まとめのデータで、改行で行を識別●Example:name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170
・・・
32

Excel で csv ファイル
●Excel33

Excel で csv ファイル

列行34

Excel で csv ファイル
●CSV fileとして保存
ファイル → “名前を付けて保存”

フォルダの選択

ファイルフォーマットの選択

csv（カンマ区切り）

適当に名前をつけて終了

35

ExelでCSVファイルを作ってみよう！
●Exelを開いて、次の内容を自分で書いてみよう！

●Bob, Taroに加えて、1行分、適当に自分で、データを書いて、CSVファイルとしてsaveしてみよう！

name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170（ここに好きなデータを記載）

36

Fileのアップロード

クリック

Contentの下にファイルやデータを置くFileのアップロード

Content の下にフォルダを作れる

Folderの右をクリックするとファイルをアップロードできるFileのアップロード

アップロードを押すとブラウザが開いて、ファイルを選択してアップロードできる

ファイルが増える

Fileのアップロード

複数選択すればまとめてアップロードできる
ファイルが一気に増える

Fileのアップロード: コマンド
from google.colab import files
files.upload() クリック

ファイルを選択41

PythonによるCSVファイルの読み込み●CSVファイル読み込み用の道具をPython上で呼び出す

import pandas as pd42

CSVファイルの読み込み●CSVファイルを呼び出すおまじない
CSVファイルの中身のデータが格納読み込むCSVファイルのパス読み込むCSVファイルの名前以下を事前に行うことを忘れないように！
(1) import pandas as pd(2) “some.csv” をコードと同じフォルダに置く
43データの見方1●好きな行を見る↑0,1行目をみる●好きな列を見る↑０,1,2列目をみる
44

データの見方２●pandasデータの構造

列ラベル

データ（value）

行ラベル●Indexを確認

45

データの見方2●項目(index)を指定してみる↓項目を指定●項目を指定して好きな行を見る
どちらでもO.K.

行を指定して項目を指定

項目を指定して行を指定
46

データの見方３●ファイル内の文字を行ごとに読み取り●行数を取得 : len(data)●列数を取得：len(data.columns)●行数・列数を取得：data.shape

列ラベル

データ（value）

行ラベル
データ（value）
47

データを編集する１●行を追加●行ラベル,列ラベル,データを指定したSeriesを作成● appendで追加
データを指定列ラベルを指定48

データを編集する２●列を追加●列ラベル,データを指定して追加

列ラベルを指定

データを指定49

データを編集する3●行・列を指定して値を変更

行・列を指定データを指定50

CSVファイルの書き込み●“書き込み” モードでファイルを開く

CSVファイルのデータが格納された変数

書き込む先のCSVファイルの名前

import pandas を書くのを忘れずに！
“test.csv”が既にあると、上書きされてしまうので注意！
51

練習４: CSVファイルの読み込み●“height_weight_small.csv”ファイルを読み込

んで、身長データを各行に順番に表示してみよう●Height : xxx というように表示してみよう。
ヒント）print(“{}”.format)を利用しよう
身長はHtという項目に入っています●CSVファイルをExelで開いてあっているか確認してみよう

52

乱数

random53

乱数（１）●乱数：次に何がでるかわからない数字例）サイコロ
1から6の整数をランダムに出す乱数#乱数を作る道具の準備
import random

実行するたびに違う値#1から6の整数をランダムに発生
random.randint(1,6)
54乱数（２）●1~20の目を出すサイコロを作ろう！

#乱数を作る道具の準備

import random#1から20の整数をランダムに発生

random.randint(1,20)55

乱数（３）
random.random() # 0 以上 1 未満の実数値を返す

random.uniform(1.0, 10.0) # 1 以上 10以下の実数値を返す

56

break●繰り返しを強制的に終了させる●例：くじ引き（当りが出たら終わり）

当選確率 は 1/10
for i in range(5):number = random.randint(1, 10)if number == 1:
print “atari !”
break
else:
print “hazure”

57

練習5: くじ引き
●当選確率が1/5のくじ引きを作ろう●ヒント）random.randint(1,5)

58

関数による数値計算

Functions in Python
59

「材料」と「道具」(1)
材料（変数）

道具（関数）
切る

print や+や－も
道具の一種

皮をむく

煮る

60

関数による数値計算●関数は、入力に対して決まった処理をする。
●関数内部での計算結果を出力することもできる●用意されている関数だけでなく、自分で好きな関数を作れる

入力

関数出力
61

Pythonでの関数定義●Xを入力したらその値を2倍した数を出力する関数
def :関数を定義するというおまじない

定義する関数の名前

def double(x):関数への入力y = x*2
return y
字下げしてているところ
までが、この関数の処理のひとまとまりYを関数の処理結果として出力するという意味
62

関数の定義(コンソール)●セルへ入力“tab” ボタンで字下げするのを忘れずに！

63

関数の利用●入力として数字を入れて、実行●関数の出力を変数に格納()

64

関数の利用：練習●数字を3倍にする関数tripleを定義してみよう！

65

入力と出力●Pythonでは, 入力 と 出力 は型をもったオブジェクト●数値だけでなく、文字列や他のデータ構造もO.K.
●入力も複数の変数を入力できる●数値：0, 1, 5.5 …
●文字列：“Hello World”●データ構造：Array, list, dictionaries …
66

関数の利用：練習●2つの文字を間に空白を入れてつなげる関数●関数の呼び出し()67

関数の利用：練習●2つのリストをつなげる関数●関数の呼び出し()68help 関数
●予め関数の説明を‘’‘xxxx’‘’で囲って記載●help(double):

この部分が表示される69定義した関数の利用(2)●DoubleFuncの中から利用する関数だけ、使えるように呼び出す●Pythonであらかじめ用意されている関数と同じ名前は避けよう！

70

練習６：関数定義と呼び出し●入力xを10倍する関数tentimesを定義しよう●tentimesを呼び出して、入力に5を与えて計算しよう

演習資料

Playing with the Body-mass index
72

演習１: for●1から10まで順に足して行くプログラムをforを使って書いてみよう。また、それぞれの計算結果をprint文で出力してみようヒント）0+1, 1+2, 1+2+3,…,
1+2+3+4+5+6+7+8+9+10●上記の問題で最後の1～10まで全部足した結果だけをprint文で出力してみよう

73Answer74

演習２: CSVの読み込み・書き込み＋for●“height_weight_small.csv”ファイルを読み込んで、各行のBMIを計算して、BMIを表示しよう。（BMIは四捨五入）●行番号：BMI：xxx●ヒント１）身長は㎝単位になっているので、m単位に変換しよう（100で割る）。
●ヒント２）四捨五入はround()を利用●進みが早い人用●BMIを列に追加して、CSVファイルへ書き込もう。

•ヒント）data2=data
data[‘BMI’]=0 ← 新しい列を追加●“height_weight_small2.csv”というファイル名にしよう。
75

Answer76

演習3: CSVの読み込み＋for+if●“height_weight_small.csv”ファイルを読み込んで、各行のBMIを計算して、BMIの値に応じて次のように表示するプログラムを作成しよう●18.5未満の場合、「やせ型(slender)」と表示●18.5以上25未満の場合、「標準(normal)」と表示●25以上の場合、「肥満気味(fat)」と表示●進みが早い人用●“BodyShape”を列に追加して、CSVファイルへ書き込もう。(データ追加には、英文字を利用)

77

演習４
●BMIを計算する関数を定義しよう！

●定義した関数を用いて演習３の内容を実現するプログラムを作成しよう

78

アドバンス１（進みが早い人用）

A simple game in Python (the random game)79

演習5：宝くじ●宝くじって儲かるの！？調べてみよう！
等
1等
2等
3等
4等
5等
6等

当選金額
5億円
1億円
1000万円
10万円
3000円
300円

確率1/1000万
2/1000万
4/1000万1/10万
1/1001/10※ 実際の宝くじとは異なります80

演習：宝くじ●takarakuji.py を開く●大体いくらくらいになるか調べてみよう●1等が出るまで引き続けるまで引いてみよう●持ち金を変えてやってみよう●1円でも儲かったらやめる！

81

アドバンス２（進みが早い人用）

A simple game in Python (the random game)82

For で遊ぼうバトル10回●ユーザが0と1を入力して、ランダムの値を当てることができたら(同じ値になったら)HPが増えるゲーム

hp = 0for i in range(10): #以下を10回繰り返し
rand = random.randint(0, 1) #0か1をランダムで生成
print(“please input 0 or 1”)
inp = int(input()) # ユーザの入力を読み込み
if inp==rand: #ユーザの入力とランダム値が一致していたら、
hp = hp + 1 #hpを1増やす
print(“Your HP = ” + str(hp)) #現在のhpを表示
83

減ることもある●ユーザが0と1を入力して、ランダムの値を当てることができたら(同じ値になったら)HPが増え、間違うと減るゲーム

hp = 0for i in range(10): # 10回繰り返し
rand = random.randint(0, 1) #ランダムで0か1を生成
print( "please input 0 or 1“ )inp = int(input()) #ユーザの入力の読み込み
if inp==rand:#ユーザの入力とランダム値が一致していたら、
hp = hp + 1 #hpを1増やす
else #間違ったら
hp = hp – 1 #hpを1減らす
print( “Your HP = ” + str(hp) ) #現在のhpを表示

84

増減量もランダム●ユーザが0と1を入力して、ランダムの値を当てることができたら、ランダムな量HPが増え、間違うとランダムに減るゲーム

hp = 0for i in range(10): # 10回繰り返し
rand = random.randint(0, 1) #ランダムで0か1を生成
print("please input 0 or 1“)
inp = int(input()) #ユーザの入力の読み込み
if inp==rand:#ユーザの入力とランダム値が一致していたら、
hp = hp + random.randint(0, 9) #hpを0~9ランダムに増やす
else #間違ったら
hp = hp – random.randint(0, 9) #hpをランダムに減らす
print(“Your HP = ” + str(hp)) #現在のhpを表示

85

HPがマイナスになったらゲームオーバー●同じルールで、HPがマイナスになったらゲームオーバー

hp = 0for i in range(10): # 10回繰り返し
rand = random.randint(0, 1) #ランダムで0か1を生成
print( "please input 0 or 1“ )inp = int(input()) #ユーザの入力の読み込み
if inp==rand:#ユーザの入力とランダム値が一致していたら、
hp = hp + random.randint(0, 9) #hpを0~9ランダムに増やす
else #間違ったら
hp = hp – random.randint(0, 9) #hpをランダムに減らす
print( “Your HP = ” + str(hp) ) #現在のhpを表示
if hp < 0: #HPが0以下になったらprint( “Game Over!” ) #ゲームオーバーと表示して、
break # 繰り返しを終了
86

おまけ：興味ある人はバトルを作ってみよう●HPを敵(コンピュータ)、自分と2人分設定して、●自分のターンでは、敵のHPをランダムに減らし、●コンピュータのターンでは、自分のHPをランダムに減らす●どちらかのHPがなくなるまで続ける87おまけ：興味ある人はバトルを作ってみよう
応用●防御力、攻撃力等のパラメータを振ってその値によって、HPの減らし方を変える。
●例1）a=自分の攻撃力３、d=敵の防御力２
hp = hp – random.randint(0+a-b, 9+a-b)⇒ hp = hp – random.randint(1, 10)●例2）a=自分の攻撃力5、d=敵の防御力1

hp = hp – random.randint(0+a-b, 9+a-b)⇒ hp = hp – random.randint(4, 13)
攻撃力が敵の防御力より高いとより多くのHPを減らしやすい88