狠狠撸

狠狠撸Share a Scribd company logo
データサイエンス概論第二+演習第一「
Pythonによるプログラミング」
(5月22日)
九州大学 大学院システム情報科学研究院 情報知能工学部門
システム情報科学研究院
備瀬 竜馬, Diego Thomas, 末廣 大貴
データサイエンスに必要なスキル
2
データ解析スキル
検定、クラスタリング、回帰、
主成分分析、???
概論一で学習
プログラミングスキル
解析のための具体的なデータ加工処理を
コンピュータに指示
データを集めて後、実際にこれらの分析を行うには?
概論二?演習一
で学習
前回の復習
Data types
3
まずはここに注目
(コンソールと呼ばれる部分)
4
大事な「おまじない」
●今後,spyder を起動したらまずはじめに
必ずやること!
●from __future__ import division
と打って enter キーを押す
●import numpy as np
と打って enter キーを押す
5
文字を表示してみよう!
?コンソールのところで
?好きな言葉を“ ”に入れて表示させよう
Print “ ” と入力
?return キーを押す(実行)
6
こんどはこっち(エディタ)
7
命令集を書く!
エディタの使い方(実行)
③ 開いているファイルの命令文を全部実行
8
editor_ex.py を参照
練習0:BMI
●自分の BMI を計算してみよう
ヒント:BMI は 体重 ÷ (身長×身長)
●変数を使ってBMIを計算するコードを書いてみよう
9
※体重は kg, 身長は m
if
10
比較(1)
11
a b
5 3
a b<
a が b より小さい?
True
(正しい)
False
(正しくない)
or
比較(2)
12
演算子 例 意味 出力
== a==b a と b が等しい? True
(正しい)
または
False
(正しくない)
!= a!=b a と b が異なる?
> a>b a が b より大きい?
>= a>=b a が b 以上?
< a<b a が b より小さい?
<= a<=b a が b 以下?
例
「a=b」は、aにbの中身を入
れるという意味だったので、
混同しないように比較は、
「==」
「かつ」と「または」(1)
●例:あなたの結婚の条件は?
25歳以上かつ身長180cm以上!
age= 30
height=1.68
age>=25 and height>=1.80
13
「かつ」と「または」(2)
演算子 例 意味 出力
and a and b
a かつ b が
両方 正しい ?
True
(正しい)
または
False
(正しくない)
or a or b
a または b の
どちらかが
正しい ?
14
if, elif, else
●条件文で分岐をつくる
●例:20歳以上は”Adult”, 13歳以上20歳未満
なら “Young”, それ以外は“Child”
age=30
if age>=20:
print “Adult”
elif age>=10:
print “Young”
else:
print “Child”
15
#もし20歳以上なら???
#20歳以上でない.でももし10歳以上なら???
#20歳以上でも10歳以上でもないなら???
ところで???
「コロン」と「インデント」
if age>=20:
print “OK”
else:
print “NG”
●コロン「:」で「次の行に続きますよ」
●インデント「空白4つ」で「続いてますよ」
16
練習1: if
●BMIを入力として与えて、以下のように表示するプログラムを作ろう!
●18.5未満の場合、「やせ型」と表示
●18.5以上25未満の場合、「標準」と表示
●25以上の場合、「肥満気味」と表示
●以下の3人のBMIを計算し、上のプログラムで動かそう
●A君:1.7m, 52kg
●B君:1.6m, 75kg
●C君:1.8m, 73kg
17
list
18
list
●数字のリスト:[]の中に数字をコンマ区切りで記載
●例:
19
list
●リストの要素の呼び出し
例:
20
0番目の要素を出力
4番目の要素を出力
※)pythonでは、0から数える
list
●リストの初期化と要素追加
例:
21
初期化
Listの要素に“1”を追加
※)list.append(x)で、listの最後にxが追加される
Listの要素に“2”を追加
練習2: list
22
●以下の3人のBMIを計算し、BMIsという名前のリストに下記の順で
入れてみよう
●A君:1.7m, 52kg
●B君:1.6m, 75kg
●C君:1.8m, 73kg
●ヒント)listの初期化が必要:BMIs=[]
listに要素の追加 :BMIs.append(xx)
●リストBMIsの1番目(B君)の値を表示してみよう
for
23
for(1)
●同じ計算を繰り返す
●例:
for i in [0,1,2]:
print i
24
1回目は、i に0を代入して、
print i
2回目は、i に1を代入して、
print i
3回目は、i に2を代入して、
print i
リストの中身がなくなるまで繰り返す
for(2)
●リストの中身を増やすと?
for i in [0,1,2,3,4]:
print i
25
100回繰り返したい場合は、
リストの中に、100個書く?
for(3)
for i in range(5):
print i
26
range()
リストを作る関数
for i in [0,1,2,3,4]:
print i
同じ
for(4)
●同じ計算を繰り返す
●例:xに1を3回足す
x=1
for i in range(3):
x = x + 1
print x
27
繰り返しの中で、
毎回 print x が実行
for(5)
●インデントによる違い
●例:xに1を3回足す
x=1
for i in range(3):
x = x +1
print x
28
繰り返しの中で、x=x+1 のみが実行され、
print x は、最後に1回のみ実行される
練習3: for
●練習2で計算したA君、B君、C君のBMIのリストをfor文を使って、
順に呼び出してprint文で表示してみよう
●それぞれの身長、体重
●A君:1.7m, 52kg
●B君:1.6m, 75kg
●C君:1.8m, 73kg
29
データの種類
Data types
30
Python のデータタイプ
●様々なデータタイプがある
●年齢は、数値で表現
●住所は文字列で表現
●他にも5つの代表的なデータタイプがある:
●Numbers/ Strings / List / Tuple /
Dictionary
31
Numbers(数値)
●数値データ(numeric values).
●変数に数値を代入したときに、number オブジェクトが作成される
●4つの異なる数値タイプがある:
●Integer (整数、大きさに制限) (…, -2, -1, 0, 1, 2, …)
●Long (整数、大きさに制限なし) (51924361L)
●Float (実数) (0.0, 3.2, 2.5e2 = 2.5 x 10^2 = 250.0)
●Complex (虚数:a + bJ) (1.2 + 5.4j)
32
変数エクスプローラー
Integers(整数型)
●整数
●例)21, 4, 0, -50 are integers
●9.75, , は整数でない
●Pythonにおける integer は、大きさに制限があるから注意
●Pythonでは、大きな値の整数を変数に入れると自動的に
Long型に変わる。
34
Floats(実数)
●Floating-point numbers (float) :実数
●0.1, 10.5, 236.7777 …
35
文字列
●Str:文字列
●quotes (’ or ")で囲めばstr型となる:
●文字列の中のxx番目の文字を取り出せる:
※)pythonは、0から始まる
36
文字列
●改行: “?n”
●文字同士をつなげたり、繰り返したりできる:
●+ (つなげる)
●* (繰り返す)
37
文字列
●文字列 と 数字はそのままは結合できない
●% を使って出力する
●%d: int型の変数の値を代入
●%f: float型の変数の値を代入
38
文字列: example
39
int型の変数
Int型の変数の代入
代入するという印改行
練習4: 文字列+数字の表示
●練習2で計算したA君、B君、C君のBMIをそれぞれプリント文を使って、次のように
表示してみよう。まずはforなしで書いてみて、できた人はfor文で書いてみよう
●A君のBMIは xxx です
●B君のBMIは xxx です
●C君のBMIは xxx です
●ヒント)
●それぞれの身長と体重
●A君:1.7m, 52kg
●B君:1.6m, 75kg
●C君:1.8m, 73kg
40
外部データの読み込み
CSV file
41
CSV file format
●CSV = comma separated values
●File format specifications:
●項目ごとにコンマ “,” で区切られたデータ
●1行が一まとめのデータで、改行で行を識別
●Example:
Name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170
???
42
CSV file with Excel
●Excel file
43
CSV file with Excel (input)
●テーブルにデータを入力
44
CSV file with Excel (export)
●CSV fileとして保存
45
Click “名前を付けて保存”
フォルダの選択
Click “file format”
Click “Commat
Separated Values (.csv)”
CSV file with Excel (save)
●Save the file
46
ファイルの名前を入力
Click to
save the file
Edit a .csv file with Excel
●Exelで csvファイルを開く
47
右クリック
“プログラムから開
く”をクリック
Microsoft Excelを
クリック
ExelでCSVファイルを作ってみよう!
●Exelを開いて、次の内容を自分で書いてみよう!
●Bob, Taroに加えて、1行分、適当に自分で、データを書
いて、CSVファイルとしてsaveしてみよう!
Name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170
(ここに好きなデータを記載)
48
PythonによるCSVファイルの読み込み
●CSVファイル読み込み用の道具をPython上で呼
び出す
49
CSVファイルの読み込み(1/3)
●CSVファイルを呼び出すおまじない
50
CSVファイルを操作するた
めの変数(後で実際に値
を読むときにこれを利用)
読み込むCSVファイルの名前
読み込むファイルのタイプ
データを読むだけのときは、’rb’とつけ
ると覚えよう!
r = read
以下を事前に行うことを忘れないように!
(1) import csv
(2) “some.csv” をコードと同じフォルダに置く
CSVファイルの読み込み(2/3)
●読み込むために、readerオブジェクトを作成 (csv.reader)
●ファイル内の文字を行ごとに読み取り
51
CSVファイルの読み込み(3/3)
●最後にファイルを閉じる
52
CSVファイルの書き込み(1/3)
●“書き込み” モードでファイルを開く
53
import csv を書くのを忘れずに!
“test.csv”が既にあると、上書きされてしまうので注意!
CSVファイルを操作するため
の変数(後で実際に値を書
き込むときにこれを利用)
書き込む先の
CSVファイルの名前
書き込み用のファイルタイプ
データを書き込むときは、’wb’とつける
と覚えよう!
w = write
CSVファイルの書き込み(2/3)
●読み込むために、writerオブジェクトを作成 (csv.writer)
●1行ずつファイルへ書き込み
54
Writing CSV files (2/3)
●Use the writer function (writer) to generate a
writer object
●Write rows (in the list format) into the file
55
CSVファイルの書き込み(3/3)
●ファイルを閉じる
●作成したCSVファイルを見てみよう!
56
練習5: CSVファイルの読み込み
●“height_weight.csv”ファイルを読み込んで、
データの内容を各行に順番に表示してみよう
●CSVファイルをExelで開いてあっているか確認して
みよう
57
乱数
random
58
乱数(1)
●乱数:次に何がでるかわからない数字
例)サイコロ
1から6の整数をランダムに出す乱数
59
#乱数を作る道具の準備
import random
#1から6の整数をランダムに発生
random.randint(1,6)
実行するたびに違う値
乱数(2)
●1~20の目を出すサイコロを作ろう!
60
#乱数を作る道具の準備
import random
#1から20の整数をランダムに発生
random.randint(1,20)
乱数(3)
random.random() # 0 以上 1 未満の実数値を返す
random.uniform(1.0, 10.0) # 1 以上 10以下の実数値を返す
61
break
●繰り返しを強制的に終了させる
●例:くじ引き(当りが出たら終わり)
当選確率 は 1/10
for i in range(5):
number = random.randint(1, 10)
if number == 1:
print “atari !”
break
else:
print “hazure”
62
練習6: くじ引き
●当選確率が1/5のくじ引きを作ろう
●ヒント)random.randint(1,5)
63
演習資料
Playing with the Body-mass index
64
演習1: 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文で出力してみよう
65
66
Answer
演習2: CSVの読み込み?書き込み+for
67
●“height_weight.csv”ファイルを読み込んで、各行のBMIを
計算して、BMIをリストに追加しよう
●“BMI.csv”というファイルを作成して、以下の情報を書き込もう
(height_weight.csvの項目を1つ追加した情報の書き込み)
●[‘’,’Sex’,’Ht’,’Wt’,’BMI’]
●ヒント1)1行目は項目名が入っているので、if文を使ってrow
の1つ目の要素に値が入っている場合のみ実行しよう。if
len(row[0])>0:
●ヒント2)読み込んだ段階では文字列として読み込んでいるの
で、float型に変換しよう。float()
●ヒント3)身長は㎝単位になっているので、m単位に変換しよ
う。float(row[2])/100
●ヒント4)listへの要素の追加は、list.append()
68
Answer
演習3: CSVの読み込み+for+if
69
●“height_weight.csv”ファイルを読み込んで、各
行のBMIを計算して、BMIの値に応じて次のように
表示するプログラムを作成しよう
●18.5未満の場合、「やせ型」と表示
●18.5以上25未満の場合、「標準」と表示
●25以上の場合、「肥満気味」と表示
アドバンス1
(進みが早い人用)
A simple game in Python (the random game)
70
演習2:宝くじ
●宝くじって儲かるの!?調べてみよう!
71
等 当選金額 確率
1等 5億円 1/1000万
2等 1億円 2/1000万
3等 1000万円 4/1000万
4等 10万円 1/10万
5等 3000円 1/100
6等 300円 1/10
※ 実際の宝くじとは異なります
演習:宝くじ
●takarakuji.py を開く
●大体いくらくらいになるか調べてみよう
●1等が出るまで引き続けるまで引いてみよう
●持ち金を変えてやってみよう
●1円でも儲かったらやめる!
72
アドバンス2
(進みが早い人用)
A simple game in Python (the random game)
73
For で遊ぼうバトル10回
●ユーザが0と1を入力して、ランダムの値を当てること
ができたら(同じ値になったら)HPが増えるゲーム
hp = 0
for 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を表示
74
減ることもある
●ユーザが0と1を入力して、ランダムの値を当てることができたら
(同じ値になったら)HPが増え、間違うと減るゲーム
hp = 0
for 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を表示
75
増減量もランダム
●ユーザが0と1を入力して、ランダムの値を当てることができたら、ラン
ダムな量HPが増え、間違うとランダムに減るゲーム
hp = 0
for 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を表示
76
HPがマイナスになったらゲームオーバー
●同じルールで、HPがマイナスになったらゲームオーバー
hp = 0
for 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 # 繰り返しを終了
77
おまけ:興味ある人はバトルを作ってみよう
●HPを敵(コンピュータ)、自分と2人分設定して、
●自分のターンでは、敵のHPをランダムに減らし、
●コンピュータのターンでは、自分のHPをランダムに減らす
●どちらかのHPがなくなるまで続ける
78
おまけ:興味ある人はバトルを作ってみよう
応用
●防御力、攻撃力等のパラメータを振ってその値によって、HPの減らし
方を変える。
●例1)a=自分の攻撃力3、d=敵の防御力2
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を減らしやすい
79

More Related Content

DS Exercise Course 2