狠狠撸

狠狠撸Share a Scribd company logo
データサイエンス概論第二+演習第一「
Pythonによるプログラミング」
(5月22日)
九州大学 大学院システム情報科学研究院 情報知能工学部門
システム情報科学研究院
備瀬 竜馬, Diego Thomas, 末廣 大貴
関数による数値計算
Functions in Python
2
「材料」と「道具」(1)
3
材料(変数) 道具(関数)
切る
皮をむく
煮る
print や
+や-も
道具の一種
関数による数値計算
●関数は、入力に対して決まった処理をする。
●関数内部での計算結果を出力することもできる
●用意されている関数だけでなく、自分で好きな関数を作れる
4
入力 関数
出力
Pythonでの関数定義
def double(x):
y = x*2
return y
5
def :関数を定義する
というおまじない
定義する関
数の名前
関数への
入力
●Xを入力したらその値を2倍した数を出力する関数
字下げしてているところ
までが、この関数の処
理のひとまとまり
Yを関数の処理結果とし
て出力するという意味
●コンソールへ入力
●“return” を2回押す
関数の定義(コンソール)
6
“tab” ボタンで字下げするのを忘れずに!
関数の利用
●入力として数字を入れて、実行
●関数の出力を変数に格納
7
●Enter the file editor
●新しくファイルを作成して、コードを書いて保存
関数の定義(エディタ)
8
This is the
file editor
新規ファイ
ル
関数を定義
ctrl+s
関数の利用
●定義したライブラリを呼び出し
●定義したライブラリ中の特定の関数を呼び出し
●関数の出力を変数に格納
9
定義した関数の利用
●“import” することで、定義した関数を利用できる
●DoubleFuncという関数を呼び出し
●注)“working directory” に
“DoubleFunc.py”が置いてあるかを確認
11
関数の利用:練習
●数字を3倍にする関数tripleを定義してみよう!
12
入力と出力
●Pythonでは, 入力 と 出力 は型をもったオブジェクト
●数値だけでなく、文字列や他のデータ構造もO.K.
●入力も複数の変数を入力できる
●数値:0, 1, 5.5 …
●文字列:“Hello World”
●データ構造:Array, list, dictionaries …
13
関数の利用:練習
●2つの文字を間に空白を入れてつなげる関数
●関数の呼び出し
14
関数の利用:練習
●2つのリストをつなげる関数
●関数の呼び出し
15
help 関数
●予め関数の説明を‘’‘xxxx’‘’で囲って記載
●help(double):
16
この部分が
表示される
定義した関数の利用(2)
●DoubleFuncの中から利用する関数だけ、使える
ように呼び出す
●Pythonであらかじめ用意されている関数と同じ名
前は避けよう!
17
練習1:関数定義と呼び出し
●入力xを10倍する関数tentimesを定義しよう
●tentimesを呼び出して、入力に5を与えて計算しよう
ベクトル表現と
ベクトル演算の関数化
19
ベクトル
●list は 数字の組,つまりベクトル!
●例:x=[62, 173]
●ベクトルで表現すると,
●データ間の「距離」
●類似度
などが計算できました
20
復習:list
●数字のリスト:[]の中に数字をコンマ区切りで記載
?ベクトルとして扱うことができる
●例:
21
ベクトルの演算:和
●ベクトルの和(要素同士の和を取る)
22
??1
??2
??1
??2
?? ??
??1 + ??1
??2 + ??2
#リストの初期化
リストへ要素を追加
関数の呼び出し
ベクトルの演算:差
●ベクトルの差(要素同士の差を取る)
23
??1
??2
??1
??2
?? ??
??1 ? ??1
??2 ? ??2
#リストの初期化
リストへ要素を追加
関数の呼び出し
ベクトルの演算:積
●ベクトルと数値の積
24
??1
??2
??
?? × ??1
?? × ??2
?? ×
関数の呼び出し関数の定義
練習2:2つのベクトル間の和と積を
「プログラムで」計算させよう
25
?? =
3
5
, ?? =
6
1
のとき ??+?? , ?? ? ??は?
?? =
3
5
2
, ?? =
6
1
2
のとき ??+?? , ?? ? ??は?
※)できた人は和や差を求める関数を定義して、関数を使って計算してみよう!
ベクトルのリスト
●ベクトルのリスト:複数のベクトルをリストで表現
26
List型のvlist に複数のlist型の変数a, b, 肠を代入
複数のベクトルの和
●ベクトルのリストを順に足していく(各要素ごとに足す)
27
+
vectors
vectors[0] vectors[1] vectors[2] vectors[3]
1つ目のベクトルを代入
2つ目以降のベクトルを逐次代入
resultに一つずつベクトルを足していく
複数のベクトルの平均値
●N個のベクトルの場合、要素ごとに全て足して、Nで割る
28
内積
●覚えてますか?
●要するに,「要素どおしの積をとって,全部足す」
●その原理で,何次元ベクトルでも計算可能
?? =
3
5
, ?? =
6
1
の内積 → ?? ? ?? = 3 × 6 + 5 × 1 = 23
内積の書き方4種(どれも同じ)
?? ? ??
??, ??
??, ??
????
??
3
5
と
6
1
の内積
3
5
2
と
6
1
2
の内積
3
5
6
1
3
5
2
6
1
2
×
×
×
×
×
= 18
= 5
= 18
= 5
= 4
18 + 5 = 23
18 + 5 + 4 = 27
※この調子で,4次元でも,100万次元でも可能
内積
●内積
30
練習3:2つのデータ間の内積を
「プログラムで」計算させよう
31
?? =
3
5
, ?? =
6
1
のとき ?? ? ?? は?
?? =
3
5
2
, ?? =
6
1
2
のとき ?? ? ?? は?
※)できた人は内積を求める関数を定義して、関数を使って計算してみよう!
ベクトル間の距離
32
ユークリッド距離 (1)
●地図上の2点 ?? =
??1
??2
, ?? =
??1
??2
??1
??2
??2
??1
??
??
この間の距離は?
?? ? ?? と記載
ユークリッド距離 (2)
●2次元の場合
●3次元の場合
??と ??の距離の二乗
??1
??2
??1
??2
要素の差の二乗
要素の差の二乗
??1
??2
??3
??1
??2
??3
??と ??の距離の二乗
要素の差の二乗
要素の差の二乗
要素の差の二乗
?? ??
?? ??
ユークリッド距離 (3)
● ??次元の場合
??1
?
????
??1
?
????
??と ??の距離の二乗
要素の差の二乗
要素の差の二乗
?? ??
?
というわけで,何次元ベクトルでも距離は計算可能
もちろん1次元ベクトル(数値)間の距離も計算可能
??1 ? ??1
2
Sum of square:要素の2乗和
●要素の2乗和
●同じベクトルa 同士の内積 <a, a>は、aの二乗
和と同じ
36
mathライブラリの呼び出し
ベクトル間の距離
●距離は要素の2乗和の平方根
37
練習4:2つのデータ間のユークリッド距離を「プログラ
ムで」求めよう
38
?? = 3, ?? = 6のとき ユークリッド距離 ?? ? ?? は?
?? =
3
5
, ?? =
6
1
のとき ?? ? ?? は?
?? =
3
5
2
, ?? =
6
1
2
のとき ?? ? ?? は?
※)できた人はユークリッド距離を求める関数を定義して、関数を使って計算してみよう!
numpy を使えば簡単
●ユークリッド距離
●内積
●コサイン
39
import numpy
を忘れずに!
ベクトルと可視化
数字の組
身長と体重= (180, 75)
40
データの可視化(プロット)
●プロットには色んな方法があります
●折れ線グラフ
●ヒストグラム
●散布図
●etc.
41
はじめに
●今回はサンプルとして次の2つのデータを
使ってみます
●那覇,福岡,札幌の気温データ
→ temperature_data.csv
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php
●体重身長データ(オーストラリア国立スポーツ
研究所の男女202人のアスリートのデータ)
→ height_weight.csv
http://www.statsci.org/data/oz/ais.html
42
おまじないと準備
●import pandas as pd
●import matplotlib.pyplot as plt
●データの読み込み
43
ファイルの場所は各自置いた場所を
指定しよう
読み込んだデータの中身
44
? 「データフレーム」という
形式で保存
? 行列(縦が行,横が列)
? 気温データは
? 縦が時間
? 横が地方
? 身長体重データは
? 縦が人(サンプル)
? 横が項目(性別,身長,体重)
データの見方
●好きな行をみる
●好きな列をみる
45
↑0,1,2行目をみる
↑1,2列目をみる
簡単な統計値を出す
●平均値
●分散
●標準偏差
46
折れ線グラフ
●折れ線グラフ
47
グラフの横軸が行の番号(index)でわかりにくい
折れ線グラフ
●折れ線グラフ
48
indexを date に変更
折れ線グラフ
●折れ線グラフ
49
右クリックすれば
保存もできます
ヒストグラム
●ヒストグラム
●那覇の気温の分布を見てみる
50
ヒストグラム(発展)
●那覇,福岡,札幌の分布を比較したい
51
binsは棒の数,alpha は透明度
練習5:データの可視化
●他の地方の分布も見てみよう
●福岡、札幌、那覇それぞれのヒストグラムを作成
●bins と alpha を変えて3地点の分布を比較して
みよう
●身長体重データでの統計値も見てみよう
52
散布図
53
●身長と体重はどんな関係があるかな?
散布図
54
●身長と体重はどんな関係があるかな?
●性別でどんな違いがあるかな?
欠損値について
●csv の中に空白(欠損)があると,
NaN (Not a Number)というものが入る
●サンプルファイルを読み込んでみてみよう
55
欠損値について
●csv の中に空白(欠損)があると,
NaN (Not a Number)というものが入る
●欠損値のあるデータ(行)を取り除く
56
辞書
57
データベースの作成
●まずは dictionaryの初期化
●データのKeyと値(value)を入力
58
key
New value: [height, weight]
データベースの作成
●異なるKeyで、値を入力し、辞書を作成
●keyを用いて値を呼び出せる
59
演習資料
Playing with the Body-mass index
60
演習1
●BMIを計算する関数を定義しよう!
●辞書のデータを読み込んで、[height, weight]に加えて、
3番目の要素として、BMIを追加
● [height, weight, BMI]
●ヒント:
●辞書からKeyとvalueを繰り返し読み込む方法
●辞書にvalueを追加する方法
61
62
Answer
演習2
●演習1で作成したBMI付きの辞書を可視化しよう
●まずそれぞれの項目ごとにリストを作ろう
?Height_values, Weight_values, BMI_values
?BMIをプロットしよう
?ヒント)from matplotlib import pyplot as plt
plt.plot
?身長、体重をそれぞれ棒グラフで可視化しよう
?ヒント) plt.bar
63
64
Answer
演習資料
(進みが早い人用)
A simple game in Python (the random game)
65
スロットマシーン
●スロットマシーンを作ってみよう
●準備:
●レバー表示用のアスキーアート
●スロットマシーンをランダムに回すための関数
●結果の表示部分
66
ユーザーインターフェース
●We need two functions:
●“arm up”:レバーをあげる
●“arm down”:レバーをひく
●ユーザーがボタンを押したら、“arm down”が起動
67
レバーの表示関数
68
””” を使うと複数行の文字を簡単に囲える
main 関数
●main 関数: “Play”
●ステップ1:“arm up”状態を表示
●ステップ2:ユーザがplayするかの入力まち
●ステップ3:ユーザがキーを押すと”arm down”
され、スロット開始
69
スロット
●1から7の3つの数字をランダムに表示
●処理手順:
●Import random
●Random作成の初期化
●1~7の3つの値をランダムに発生
70
ランダムな数字の表示
●random ライブラリの呼び出し
●Random発生関数の初期化
●1~7の3つの数字をランダムに発生:
71
結果の表示(1/3)
●結果の表示
72
結果の表示(2/3)
●勝ったとき、負けた時に表示する用の関数を準備:
73
Exercise
●ゲームの勝ち?負けをチェックする関数を作成
●勝ち?負けの判断基準:
●3つの数が全て同じときは“win”を表示
●異なるときは“loose”を表示
74
Let’s play (1/2)
●コードの実行
●コンソールで “Play()” と書いてenter
75
Let’s play (2/2)
●何かボタンを押すとスロットが始まり、結果が表示
76
問題
●1回レバーを引いたときに勝つ確率は?
●たくさんゲームをして、勝った割合を調べて、確認し
よう!
77
What you need to do
●自動的にゲームをプレイするようにコードを書き換え
●1000回プレイするようにする
●Winの数を数える
●“nb_wins”:winとなった場合に1増やしていく
●Winとなった割合(%)を調べる
78
自動スロットマシーン
●結果は、なしで機械の中でかってにゲームして、最
終的な勝ち数だけ教えてくれるゲーム(恐ろし
い???)
(思い出そう!)
●条件を満たしたらTrueを返す条件文
79
何回勝つかカウント
●1000 回 AutoPlayを実行, AutoPlayがTrue
を返したら、勝ったということなので、カウントを1増
やす
80
初期化
1000回繰り返し
AutoPlayを実行し、Trueだったら以下を実行
Tureの場合、1増やす
Result
●勝った割合(%)を計算し、表示
●理論的には勝つ確率は?
81
ギャンブルはやめましょう???

More Related Content

DS Exercise Course 3