狠狠撸

狠狠撸Share a Scribd company logo
「Python プログラミング基礎その2」
九州大学 大学院システム情報科学研究院 情報知能工学部門
システム情報科学研究院
備瀬 竜馬, 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
? ×
関数の呼び出し関数の定義
s: scalar’’’
練習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
●データの読み込み
43
ファイルの場所は各自置いた場所を
指定しよう
読み込んだデータの中身
44
? 「データフレーム」という
形式で保存
? 行列(縦が行,横が列)
? 気温データは
? 縦が時間
? 横が地方
? 身長体重データは
? 縦が人(サンプル)
? 横が項目(性別,身長,体重)
データの見方
●好きな行をみる
●好きな列をみる
45
↑0,1,2行目をみる
↑1,2列目をみる
簡単な統計値を出す
●平均値
●分散
●標準偏差
46
折れ線グラフ
●折れ線グラフ
47
グラフの横軸が行の番号(index)でわかりにくい
折れ線グラフ
●折れ線グラフ
48
indexを date に変更
折れ線グラフ
●折れ線グラフ
49
右クリックすれば
保存もできます
ヒストグラム
●ヒストグラム
●那覇の気温の分布を見てみる
50
ヒストグラム(発展)
●那覇,福岡,札幌の分布を比較したい
51
binsは棒の数,alpha は透明度
Matplotlibを使った可視化
52
●import matplotlib.pyplot as plt
リストもしくは
numpyのarray型
を入力
Numpy array への変換
53
Pandas の values を使うと
numpy の array型として
抽出できる
練習5:データの可視化
●他の地方の分布も見てみよう
●福岡、札幌、那覇それぞれのヒストグラムを作成
●bins と alpha を変えて3地点の分布を比較して
みよう
●身長体重データでの統計値も見てみよう
54
散布図
55
●身長と体重はどんな関係がある?
散布図
56
●身長と体重はどんな関係があるかな?
●性別でどんな違いがあるかな?
欠損値について
●csv の中に空白(欠損)があると,
NaN (Not a Number)というものが入る
●サンプルファイルを読み込んでみてみよう
57
欠損値について
●csv の中に空白(欠損)があると,
NaN (Not a Number)というものが入る
●欠損値のあるデータ(行)を取り除く
58
辞書
59
データベースの作成
●まずは dictionaryの初期化
●データのKeyと値(value)を入力
60
key
New value: [height, weight]
データベースの作成
●異なるKeyで、値を入力し、辞書を作成
●keyを用いて値を呼び出せる
61
演習資料
Playing with the Body-mass index
62
演習1
●BMIを計算する関数を定義しよう!
●辞書のデータを読み込んで、[height, weight]に加えて、
3番目の要素として、BMIを追加
● [height, weight, BMI]
●ヒント:
●辞書からKeyとvalueを繰り返し読み込む方法
●辞書にvalueを追加する方法
63
64
Answer
演習2
●演習1で作成したBMI付きの辞書を可視化しよう
●まずそれぞれの項目ごとにリストを作ろう
?Height_values, Weight_values, BMI_values
?BMIをプロットしよう
?ヒント)from matplotlib import pyplot as plt
plt.plot
?身長、体重をそれぞれ棒グラフで可視化しよう
?ヒント) plt.bar
65
66
Answer

More Related Content

笔测迟丑辞苍基础その2