狠狠撸

狠狠撸Share a Scribd company logo
「Python プログラミング基礎その1」
九州大学 大学院システム情報科学研究院 情報知能工学部門
システム情報科学研究院
備瀬 竜馬, Diego Thomas, 末廣 大貴
データサイエンスに必要なスキル
2
データ解析スキル
検定、クラスタリング、回帰、
主成分分析、???
概論一で学習
プログラミングスキル
解析のための具体的なデータ加工処理を
コンピュータに指示
データを集めて後、実際にこれらの分析を行うには?
概論二?演習一
で学習
if
3
比較(1)
4
a b
5 3
a b<
a が b より小さい?
True
(正しい)
False
(正しくない)
or
比較(2)
5
演算子 例 意味 出力
== 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
6
「かつ」と「または」(2)
演算子 例 意味 出力
and a and b
a かつ b が
両方 正しい ?
True
(正しい)
または
False
(正しくない)
or a or b
a または b の
どちらかが
正しい ?
7
if, elif, else
●条件文で分岐をつくる
●例:20歳以上は”Adult”, 13歳以上20歳未満
なら “Young”, それ以外は“Child”
age=30
if age>=20:
print( “Adult” )
Elif age>=10:
print( “Young” )
Else:
print( “Child” )
8
#もし20歳以上なら???
#20歳以上でない.でももし10歳以上なら???
#20歳以上でも10歳以上でもないなら???
ところで???
「コロン」と「インデント」
if age>=20:
print( “OK” )
else:
print( “NG” )
●コロン「:」で「次の行に続きますよ」
●インデント「空白4つ」で「続いてますよ」
9
練習1: if
●BMIを入力として与えて、以下のように表示するプログラムを作ろう!
●18.5未満の場合、「やせ型」と表示
●18.5以上25未満の場合、「標準」と表示
●25以上の場合、「肥満気味」と表示
●以下の3人のBMIを計算し、上のプログラムで動かそう
●A君:1.7m, 52kg
●B君:1.6m, 75kg
●C君:1.8m, 73kg
10
list
11
list
●数字のリスト:[]の中に数字をコンマ区切りで記載
●例:
12
( )
( )
list
●リストの要素の呼び出し
例:
13
0番目の要素を出力
4番目の要素を出力
※)pythonでは、0から数える
( )
( )
list
●リストの初期化と要素追加
例:
14
初期化
Listの要素に“1”を追加
※)list.append(x)で、listの最後にxが追加される
Listの要素に“2”を追加
( )
練習2: list
15
●以下の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
16
for(1)
●同じ計算を繰り返す
●例:
for i in [0,1,2]:
print( i )
17
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 )
18
100回繰り返したい場合は、
リストの中に、100個書く?
( )
for(3)
for i in range(5):
print( i )
19
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 )
20
繰り返しの中で、
毎回 print( x ) が実行
( )
for(5)
●インデントによる違い
●例:xに1を3回足す
x=1
for i in range(3):
x = x +1
Print( x )
21
繰り返しの中で、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
22
データの種類
Data types
23
Python のデータタイプ
●様々なデータタイプがある
●年齢は、数値で表現
●住所は文字列で表現
●他にも5つの代表的なデータタイプがある:
●Numbers/ Strings / List / Tuple /
Dictionary
24
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)
25
変数エクスプローラー
Integers(整数型)
●整数
●例)21, 4, 0, -50 are integers
●9.75, , は整数でない
●Pythonにおける integer は、大きさに制限があるから注意
●Pythonでは、大きな値の整数を変数に入れると自動的に
Long型に変わる。
27
Floats(実数)
●Floating-point numbers (float) :実数
●0.1, 10.5, 236.7777 …
28
文字列
●Str:文字列
●quotes (’ or ")で囲めばstr型となる:
●文字列の中のxx番目の文字を取り出せる:
※)pythonは、0から始まる
29
文字列
●改行: “n”
●文字同士をつなげたり、繰り返したりできる:
●+ (つなげる)
●* (繰り返す)
30
( )
( )
( )
( )
文字列
●文字列 と 数字はそのままは結合できない
●{} .format を使って出力する
●Print(“a={}”.format(a))
31
文字列
●書式指定出力の例
32
print(“{} + {} = {}”.format(i, j, k))
変数の値が
表示される.j
32
k
182
j
150
文字列: example
33
文字列: example2
34
●組あわせも可能
練習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
35
外部データの読み込み
CSV file
36
CSV file format
●CSV = comma separated values
●File format specifications:
●項目ごとにコンマ “,” で区切られたデータ
●1行が一まとめのデータで、改行で行を識別
●Example:
Name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170
???
37
CSV file with Excel
●Excel file
38
CSV file with Excel (input)
●テーブルにデータを入力
39
CSV file with Excel (export)
●CSV fileとして保存
40
Click “名前を付けて保存”
フォルダの選択
Click “file format”
Click “Commat
Separated Values (.csv)”
CSV file with Excel (save)
●Save the file
41
ファイルの名前を入力
Click to
save the file
Edit a .csv file with Excel
●Exelで csvファイルを開く
42
右クリック
“プログラムから開
く”をクリック
Microsoft Excelを
クリック
ExelでCSVファイルを作ってみよう!
●Exelを開いて、次の内容を自分で書いてみよう!
●Bob, Taroに加えて、1行分、適当に自分で、データを書
いて、CSVファイルとしてsaveしてみよう!
Name, age, weight, height
Bob, 40, 80, 175
Taro, 35, 65, 170
(ここに好きなデータを記載)
43
PythonによるCSVファイルの読み込み
●CSVファイル読み込み用の道具をPython上で呼
び出す
44
import pandas as pd
CSVファイルの読み込み
●CSVファイルを呼び出すおまじない
45
CSVファイルの中身の
データが格納
読み込むCSVファイルの名前
読み込むCSVファイルのパス
以下を事前に行うことを忘れないように!
(1) import pandas as pd
(2) “some.csv” をコードと同じフォルダに置く
データの見方1
●好きな行を見る
●好きな列を見る
46
↑0,1,2行目をみる
↑0,1,2,3列目をみる
データの見方2
●pandasデータの構造
●Indexを確認
47
index
Name
項目名
ID
データ(value)
データの見方2
●項目(index)を指定してみる
●項目を指定して好きな行を見る
48
↓項目を指定
行を指定して項目を指定 項目を指定して行を指定
どちらでもO.K.
データを見る3
●ファイル内の文字を行ごとに読み取り
●行数を取得 : len(data)
●列数を取得:len(data.columns)
●行数?列数を取得:data.shape
49
行ラベル
列ラベル データ(value)
データ(value)
データを編集する1
50
●行を追加
●行ラベル,列ラベル,データを指定したSeriesを作成
● appendで追加
列ラベルを指定 行ラベルを指定データを指定
データを編集する2
51
●列を追加
●列ラベル,データを指定して追加
データを指定列ラベルを指定
データを編集する3
52
●行?列を指定して値を変更
データを指定行?列を指定
CSVファイルの書き込み(1/3)
●“書き込み” モードでファイルを開く
53
import pandas を書くのを忘れずに!
“test.csv”が既にあると、上書きされてしまうので注意!
CSVファイルのデータが格納
された変数
書き込む先の
CSVファイルの名前
練習5: CSVファイルの読み込み
●“height_weight.csv”ファイルを読み込んで、身
長データを各行に順番に表示してみよう
●Height : xxx というように表示してみよう。
ヒント)print(“{}”.format)を利用しよう
身長はHtという項目に入っています
●CSVファイルをExelで開いてあっているか確認して
みよう
54
乱数
random
55
乱数(1)
●乱数:次に何がでるかわからない数字
例)サイコロ
1から6の整数をランダムに出す乱数
56
#乱数を作る道具の準備
import random
#1から6の整数をランダムに発生
random.randint(1,6)
実行するたびに違う値
乱数(2)
●1~20の目を出すサイコロを作ろう!
57
#乱数を作る道具の準備
import random
#1から20の整数をランダムに発生
random.randint(1,20)
乱数(3)
random.random() # 0 以上 1 未満の実数値を返す
random.uniform(1.0, 10.0) # 1 以上 10以下の実数値を返す
58
break
●繰り返しを強制的に終了させる
●例:くじ引き(当りが出たら終わり)
当選確率 は 1/10
for i in range(5):
number = random.randint(1, 10)
if number == 1:
print “atari !”
break
else:
print “hazure”
59
練習6: くじ引き
●当選確率が1/5のくじ引きを作ろう
●ヒント)random.randint(1,5)
60
演習資料
Playing with the Body-mass index
61
演習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文で出力してみよう
62
63
Answer
演習2: CSVの読み込み?書き込み+for
64
●“height_weight_small.csv”ファイルを読み込んで、各行の
BMIを計算して、BMIを表示しよう。(BMIは四捨五入)
●行番号:BMI:xxx
●ヒント1)身長は㎝単位になっているので、m単位に変換し
よう。100で割る
●ヒント2)四捨五入はround()を利用
●進みが早い人用
●BMIを列に追加して、CSVファイルへ書き込もう。
●“height_weight_small2.csv”というファイル名にしよう。
65
Answer
演習3: CSVの読み込み+for+if
66
●“height_weight_small.csv”ファイルを読み込
んで、各行のBMIを計算して、BMIの値に応じて次
のように表示するプログラムを作成しよう
●18.5未満の場合、「やせ型(slender)」と表示
●18.5以上25未満の場合、「標準(normal)」と表示
●25以上の場合、「肥満気味(fat)」と表示
●進みが早い人用
●“BodyShape”を列に追加して、CSVファイルへ書き込も
う。(データ追加には、英文字を利用)
アドバンス1
(進みが早い人用)
A simple game in Python (the random game)
67
演習2:宝くじ
●宝くじって儲かるの!?調べてみよう!
68
等 当選金額 確率
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円でも儲かったらやめる!
69
アドバンス2
(進みが早い人用)
A simple game in Python (the random game)
70
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を表示
71
減ることもある
●ユーザが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を表示
72
増減量もランダム
●ユーザが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を表示
73
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 # 繰り返しを終了
74
おまけ:興味ある人はバトルを作ってみよう
●HPを敵(コンピュータ)、自分と2人分設定して、
●自分のターンでは、敵のHPをランダムに減らし、
●コンピュータのターンでは、自分のHPをランダムに減らす
●どちらかのHPがなくなるまで続ける
75
おまけ:興味ある人はバトルを作ってみよう
応用
●防御力、攻撃力等のパラメータを振ってその値によって、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を減らしやすい
76

More Related Content

笔测迟丑辞苍基础その1