Python for Data Analysis 
Chap.4, 5 
かわの まこと
今日のお話 
4章 Numpyの基礎 
5章 Pandasとはじめよう 
2
4章 NumPyの基礎
Numerical Python:特徴 
ndarray: ものすごく便利な配列 
基本的な計算をループなしにやってくれる(すべての要素に) 
ディスクに読み書き,メモリ上で計算してくれる 
線形代数,乱数生成,フーリエ変換が出来る 
C,C++,Fortranのソースコードとごちゃまぜに出来る 
4
データ分析における着目点 
高速なベクトル演算 
• データマンジング,整理,部分集合か,フィルタリング,変換など 
有名な配列アルゴリズム 
• ソート,ユニーク発見,セットなど 
効率的な記述統計学,データの集計統計 
データの結合・追加をよしなにやってくれる 
if-elif-elseの代わりに配列表記で表現してくれる 
集計加工もよしなにやってくれる 
5
N-dimensional array object (ndarray) 
高速で,柔軟な入れ物らしい 
• とにかくスカラー計算と同じようにまとめてやってくれる 
shape 
- 行,列の大きさを教えてくれる 
dtype 
- 配列のデータタイプ 
6
Creating ndarrays 
最も簡単な配列生成:array関数 
• 入れ子にすれば,多次元配列を生成 
• 基本的によしなにデータタイプを選んでくれる 
その他の配列生成:引数一つ→ベクトル,引数タプル→行列 
• zeros関数:要素全部0 
• ones関数:要素全部1 
• empty関数:とりあえず空っぽだけど枠は作る感じ 
• arange関数:python組み込み関数と一緒 
7
配列生成関数一覧表 
8 
関数 
array リスト・タプルなどを配列にする.型などは自動推論してくれる.入力はコピー. 
asarray 配列に変換してくれる.でも入力が既に配列ならコピーしない. 
arange 組み込み関数のrangeと一緒.但しリストではなく配列で返す. 
ones, ones_like 与えられたshapeとdtypeで要素全部1の配列生成./ _likeは別の行列生成. 
zeros, zeros_like 与えられたshapeとdtypeで要素全部0の配列生成./ _likeは別の行列生成. 
empty, empty_like 与えられたshapeとdtypeの配列のメモリを割り当てる.でも値はない. 
eye, identity n次正方単位行列を作成
Data Types 
メモリチャンクを解釈する必要があるため 
• データのバイナリを読み書きしたり,CやFORTRANのコード 
とコネクトするため 
• intやfloatがいっぱいあるけど覚えなくていいよ 
9
配列とスカラー 
配列を使えば,ループ使わないでバッチ処理できる! 
• ”vectorization”っていうらしい 
• 同じサイズの行列なら演算できる 
• スカラー +/-/×/÷ 行列も各要素にできる 
• 異なるサイズの行列の場合はbroadcastingっていうらしい 
10
インデックスとスライスの基礎 
1次元配列の場合:Pythonと同じようにできる 
• 配列のスライスはあくまでも実値=コピーではない 
• 巨大なデータになった時にコピーしてたらメモリやばいから 
多次元配列の場合: 
• 2次元ならarr[0][2] = arr[0, 2] 
• 更に高次元でもOK 
11
Boolean Indexing 
名前配列から,’Bob’見つけたりしたい 
- 多分ユーザごとの調査に適用できるとかだと思われる 
• boolean indexingで選ばれたデータはコピーされる 
• 便利な使い方 data[data < 0] = 0 
12
Fancy Indexing 
integer配列を使ったインデックス 
• 配列で指定した順番に出てくる 
• 結構ややこしい 
13
転置 
array.Tで転置する 
numpy.ndarray.transpose(tuple) 
• tuple =(2, 1, 0) -> 0軸が2軸に,1軸が1軸に,2軸が0軸に 
14
便利な関数たち 
ufunc: sqrt, exp 
unary: add, maximum 
一般的ではないけど,便利なの:modf 
• pythonxのdivmod -> 商と余りを出してくれるx 
15
便利な関数一覧 
16 
Function Description 
abs, fabs 絶対値計算.複素数じゃないなら高速なfabs使うべき. 
sqrt 2乗根計算=arr ** 0.5 
square 2乗計算=arr**2 
exp 自然対数e^xの計算 
log, log10, log2, log1p 対数計算.底がそれぞれe, 10, 2, 1+x 
sign 符号関数 1 / 0 / -1を返す 
ceil 小数点繰り上げ 
floor 小数点繰り下げ 
rint 整数値に丸める(<-謎) 
modf 商と余り両方を返してくれる 
isnan NaN(Not a Number)かどうかを判断してくれる 
isfinite, isinf 有限か無限か判断してくれる 
cos, cosh, sin, 
三角関数 
sinh,tan, tanh arccos, arccosh, 
逆三角関数 
arcsin, arcsinh, 
logical_not 数値であるかないか確認
バイナリーで便利な関数一覧 
17 
Function Description 
add 各要素を足す 
subtract 各要素を引く 
multiply 各要素をかける 
divide, floor_divide 各要素を割る 
power 累乗 
maximum, fmax 要素ごとの最大値.fmaxはNaNを無視. 
minimum, fmin 要素ごとの最小値.fminはNaNを無視. 
mod 余り 
copysign 符号関数の結果を2つ目の配列にコピー 
greater, greater_equal, less, 
less_equal, equal, not_equal 各要素で比較.>, >=, <, <=, ==, != 
logical_and, logical_or, 
logical_Xor 各要素で比較.&, |, ^
配列を使ったデータ処理 
何度も言うようだけど,ループ使わないで出来る 
• 詳しくは12章でやる 
18
配列演算としての条件論理 
numpy.where(condition, x, y) 
• x if condition else y(x, yは配列である必要はない) 
• python的な書き方は, 
[(x if c else y) for x, y, c in zip(xarr, yarr, condition)] 
• 計算が遅くなるし,1次元配列でしか通用しない 
• 複雑なのも結構いけちゃう 
19 
result = [] 
for i in range(n): 
if cond1[i] and cond2[i]: 
result.append(0) 
elif cond1[i]: 
result.append(1) 
elif cond2[i]: 
result.append(2) 
else: 
result.append(3) 
np.where(cond1 & cond2, 0, 
np.where(cond1, 1, 
np.where(cond2, 2, 3))) 
result = 1 * cond1 + 2 * cond2 + 3 * (cond1 | cond2)
数学的で統計学的な手法 
合計,平均,標準偏差とか:軸に沿っても出来る 
20 
Function Description 
sum 配列全て/軸に沿っての合計.長さが0の配列の合計は0 
mean 配列全て/軸に沿っての平均.長さが0の配列の平均はNaN. 
std, var 標準偏差と分散 
min, max 最小値と最大値 
argmin, argmax 最小,最大要素のインデックス 
cumsum 累計的な足し算 
cumprod 類型的な掛け算
Boolean配列 
1(True)と0(False)だからsum使えばTrueを数えられる 
• (arr > 0).sum() 
anyとall関数 
• any: 一つでもTrueがあるかどうか 
• all: 全部がTrueかどうか 
21
ソート 
組み込み関数と同じくソート関数ある 
• np.ndarray.sort()は書き換え 
• np.sort()はコピー 
• 詳しいことは12章 
22
固有とか論理演算 
1次配列には基本的な集合演算がある 
• np.unique (Pythonでやるならsorted(set(names))) 
23 
Method Description 
unique(x) xから固有の要素をみつけてソート 
intersect1d(x, y) xとyで共通の要素をみつけてソート 
union1d(x, y) xとyの和集合 
in1d(x, y) xの要素がyにあるか見て,boolean配列を返す 
setdiff1d(x, y) yにないxの要素を返す 
setxor1d(x, y) xとyどちらかにしかない要素を返す
ファイル入出力 
テキストかバイナリでディスクに保存できる 
• np.saveとnp.load -> 拡張子は.npy 
• np.savezにすればzipで保存できる->拡張子は.npz 
• np.loadtxtを使えばcsvとかも読み込める(pandasの方が良) 
24
線形代数 
行列積,行列分解,行列式などの行列計算は重要 
• x.dot(y) = np.dot(x, y) = XY ≠ YX 
numpy.linalg: 逆行列と行列式が扱える 
25
numpy.linalg関数一覧 
26 
Function Description 
diag 行列の対角要素を1次配列で返すか,一次配列を対角要素にした行列を返す 
dot 行列積 
trace 行列の対角要素の合計 
det 行列式 
eig 固有値,固有ベクトル 
inv 逆行列 
pinv ムーアペンロース擬似逆行列 
qr QR分解 
svd 特異値分解 
solve 線形方程式を解く 
lstsq 最小二乗法
乱数生成 
Pythonの組み込みrandomをよしなに配列で使えるようにする 
• %timeit samples = [normalvariate(0, 1) for _ in xrange(N)] 
• 1 loops, best of 3: 1.33s/1 loop 
• %timeit np.random.normal(size=N) 
• 10 loops, best of 3: 57.7ms/1 loop 
27
numpy.random関数一覧 
28 
Function Description 
seed 乱数のシードを生成 
permutation 連続した数値のランダム順列を返す 
shuffle まぜる 
rand 一様分布からサンプリングする 
randint low-highの範囲から整数をランダムで返す 
randn 正規分布からサンプリング(平均は0,標準偏差は1) 
binomial 二項分布からサンプリング 
normal 正規(ガウシアン)分布からサンプリング 
beta ベータ分布からサンプリング 
chisquare カイ二乗分布からサンプリング 
gamma ガンマ分布からサンプリング 
uniform 一様分布[0, 1)からサンプリング
具体例:ランダムウォーク 
pythonのコードとnumpyを使ったコードの比較 
複数のランダムウォークを動かす 
29
5章 pandasとはじめよう
pandasのありがたい話 
pythonで高速かつ簡単にデータ構造・操作を扱えるツール 
• NumPyで実装されてる 
どうやら筆者が作ったらしい.そのコンセプトは: 
• データ構造をよしなに扱いたい 
• 時系列も扱えるようになりたい 
• 算術演算とか 
• 欠損値とか 
• SQLとかと同じように扱いたい 
31
pandasで大事なデータ構造:Series 
1次元配列ライクな構造+データラベルの連想配列(index) 
左側にindex,右側にValueがある 
• indexは指定がなければ0からN-1番が振られる 
numpyと同じように色々できる 
辞書からもSeriesは簡単 
欠損値について(軽く) 
• pd.isnull(), pd.notnull(), obj.isnull() 
簡単に算術演算も出来る 
Series自体とindexにはname属性がある 
32
pandasで大事なデータ構造:DataFrame 
表やスプレッドシートライクなデータ構造 
• 各列は別のValue Typeでよい(数字,文字など) 
• 行・列それぞれにindexがある 
33
DataFrameコンストラクタの入力値 
34 
Type Notes 
2D ndarray 行列データ,(オプション)行・列のラベル 
dict of arrays, lists, or tuples 各Sequenceが列になる.Sequenceは全部同じ長さマスト 
NumPy structured/record array dict of arraysと同様の扱い 
dict of Series 各値が列になる.indexは合体して行のindexになる. 
dict of dicts 各辞書が列になる.キーはdict of Seriesと同様の扱い. 
list of dicts or Series 各アイテムが行になる.キーor indexは列のラベルになる 
list of lists or tuples 2D ndarrayと同様の扱い 
Another DataFrame 基本的にそのまま 
NumPy MaskedArray masked valueがNA/missingになってそれ以外は2D ndarray
Index Object 
軸のラベルやメタデータ(軸の名前とか)を保持する 
• indexは不変→データを共有するときに安全 
35 
Class Description 
Index 最も一般的.NumPyオブジェクトとして表現 
Int64Index 整数値のための特別なindex 
MultiIndex 階層的なindex.タプルの配列のような感じ 
DatetimeIndex ナノ秒のタイムスタンプ 
PeriodIndex 期間を示すindex
Indexオブジェクトのメソッドとプロパティ一覧 
36 
Method Description 
append indexオブジェクトを連結して新しいindexを生成 
diff 集合の差分をindexとして計算する 
intersection 集合の積集合を計算する 
union 和集合を計算する 
isin 各Valueがpassed collectionに含まれているかの二値配列を生成 
delete i番目のindexを削除して新しいindexを生成 
drop passed valueを消して新しいindexを生成 
insert i番目にindexを挿入して新しいindexを生成 
is_monotonic 前のvalue<=次のvalueってなってるか 
is_unique かぶっているindexがないか(なければTrue) 
unique indexのなかの固有の値だけのindexを生成
大事な機能性: Reindex 
新しいindexにデータを適合させること 
• reindex option 
• reindex function 
37 
Argument Description 
ffill or pad Fill(or carry) values forward 
bfill or backfill Fill(or carry) values backward 
Argument Description 
index indexとして扱うデータ.コピーせずに使われる 
method 補完手法 
fill_value 欠損していた時に埋める値 
limit forward- or backfillingのときの最大ギャップ 
level multiindexのレベルを合わせる(謎) 
copy 旧indexと一緒の場合はコピーしない(デフォルトTrue)
軸をそのまま削除 
drop関数 
• SeriesでもDataFrameでもどちらでもいける 
38
インデックス,選択,フィルタリング 
Seriesのインデックスは普通のNumPy配列と一緒 
Special Indexing Field:ix 
• DataFrameからNumPy+軸ラベルで行・列の部分集合を取得 
39
インデックスオプション 
40 
Type Notes 
obj[val] DataFrameから1つ以上の列を取り出す 
obj.ix[val] DataFrameから1つの行を取り出す 
obj.ix[:, val] DataFrameから1つの列を取り出す 
obj.ix[val1, val2] 行と列両方を選ぶ 
reindex method 1つ以上の軸で新しいindexをつくる 
xs method ラベルから1つの行か列をSeriesとして取り出す 
icol, irow method 数字から1つの行か列をSeriesとして取り出す 
get_value, set_value method 行と列のラベルから値を一つ取り出す
データの算術と整理 
よしなに計算してくれる(欠損値もNaNで扱う) 
• もし片方に同じindexがなかったらNaNになってしまう 
補完しつつ計算したい 
• fill_valueを入れれば良い 
DataFrameとSeriesで計算 
• Broadcastingに似てる 
41 
Method Descirption 
add 足し算 
sub 引き算 
div 掛け算 
mul 割り算
Function Application and Mapping 
NumPyのufuncsが使える 
• DataFrame.applyが秀逸(sumとかmeanはpandasにある) 
• Element-wiseなpythonの関数も使える 
42
ソートと順位付け 
辞書的にソートしたい→sort_index() 
値でソートしたい→order() 
43 
Method Description 
‘average' デフォルト.同値の場合は平均順位 
‘max' できるだけ悪い順位 
‘min’ できるだけ良い順位 
‘first’ 同値の場合は先に出てきたほうが先
重複した数値の扱い 
ラベルはユニークである必要はない! 
• 普通にそのまんま扱える 
44
記述統計学の集計と計算 
今までのは削減,集約する統計学だった(平均とか1つの値) 
直接的な統計学的ではないメソッドもある(idxmaxとか) 
上2つに当てはまらないメソッドもある(describeとか) 
45 
Method Description 
axis 処理する方向.0は行,1は列に減らす 
skipna 欠損値を除外するかどうか.デフォルトはTrue 
level multiindexのときに削減する
要約したり描写したりするメソッドたち 
46 
Method Description 
count NA以外カウント 
describe 統計情報 
min, max 最小値,最大値 
argmin, argmax 最小値,最大値のindex location 
idxmin, idxmax 最小値,最大値のindex value 
quantile 分位点(0~1の範囲) 
sum 値の合計 
mean 値の平均 
median 値の中央値 
mad 平均絶対偏差 
var 分散 
std 標準偏差 
skew 歪み,歪度 
kurt 尖度 
cumsum 累積和 
cummin, cummax 累積最小値,累積最大値 
cumprod 累乗 
diff 差(時間差とかで便利) 
pct_change 変化率
相関・共分散 
Yahoo!経済から株価と株式を使ってみる→API切れ 
• corr: 相関 
• cov: 共分散 
47
固有な値,値カウント,メンバーシップ 
一つのSeriesに含まれている情報を抜き出す 
48 
Method Description 
isin Seriesに任意の値があるかどうかの二値Seriesを返す 
unique ユニークな値のSeriesを返す 
value_counts ユニークな値をindex,その頻度を値にしたSeriesを返す
欠損値の処理 
欠損値は合って当たり前.pandasは可能な限りよしなに扱う 
• 欠損値はNaNとして扱う 
• pythonのNoneもNaNとして扱う 
49 
Argument Description 
dropna 欠損値をどれだけ無視するか閾値と共に扱う 
fillna ffillやbfillのように欠損値を別の値で補完する 
isnull 欠損値の場合True,それ以外はFalseで同じ型で返す 
notnull isnullの否定
fillnaの引数一覧 
50 
Argument Description 
value 欠損値の補完に数値もしくは辞書を入れる 
method デフォルトはffillで,改ざんする 
axis デフォルトはaxis=0で,補完 
inplace コピーを作らずに直接いじる 
limit forward-, backward fillで補完する最大の回数
階層的なインデックス 
結構便利. 
• from pandas import MultiIndexでもいけるらしい 
足し算とかも結構イケてる 
51
その他のpandas 
52

More Related Content

PDF
Pythonデータ分析 第4回勉強会資料 12章
PDF
Pythonデータ分析 第3回勉強会資料 8章
PDF
Introduction to NumPy & SciPy
PDF
NumPy闇入門
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
Intoroduction of Pandas with Python
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
数式をnumpyに落としこむコツ
Pythonデータ分析 第4回勉強会資料 12章
Pythonデータ分析 第3回勉強会資料 8章
Introduction to NumPy & SciPy
NumPy闇入門
Python 機械学習プログラミング データ分析ライブラリー解説編
Intoroduction of Pandas with Python
2013.07.15 はじパタlt scikit-learnで始める機械学習
数式をnumpyに落としこむコツ

What's hot (20)

PDF
R-hpc-1 TokyoR#11
PPTX
for関数を使った繰り返し処理によるヒストグラムの一括出力
PDF
Chainerの使い方と自然言語処理への応用
PDF
研究生のためのC++ no.4
PDF
研究生のためのC++ no.2
PDF
科学技術計算関連Pythonパッケージの概要
PDF
Gensim
PDF
Rにおける大規模データ解析(第10回TokyoWebMining)
PDF
Rのデータ構造とメモリ管理
PDF
機械学習を用いた予測モデル構築・評価
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
programming camp 2008, introduction of programming, algorithm
PDF
111015 tokyo scipy2_ディスカッション
PDF
Pythonによる機械学習の最前線
PDF
研究生のためのC++ no.7
PDF
データサイエンスワールドからC++を眺めてみる
PDF
研究生のためのC++ no.3
PDF
[第2版]Python機械学習プログラミング 第8章
PDF
CuPy解説
PDF
R3.0.0 is relased
R-hpc-1 TokyoR#11
for関数を使った繰り返し処理によるヒストグラムの一括出力
Chainerの使い方と自然言語処理への応用
研究生のためのC++ no.4
研究生のためのC++ no.2
科学技術計算関連Pythonパッケージの概要
Gensim
Rにおける大規模データ解析(第10回TokyoWebMining)
Rのデータ構造とメモリ管理
機械学習を用いた予測モデル構築・評価
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
programming camp 2008, introduction of programming, algorithm
111015 tokyo scipy2_ディスカッション
Pythonによる機械学習の最前線
研究生のためのC++ no.7
データサイエンスワールドからC++を眺めてみる
研究生のためのC++ no.3
[第2版]Python機械学習プログラミング 第8章
CuPy解説
R3.0.0 is relased
Ad

Similar to Python for Data Anaysis第2回勉強会4,5章 (20)

PPTX
東大生向けデータ解析講座 第2回 2017/12/29
PDF
多次元配列の効率的利用法の検討
PDF
R language definition3.1_3.2
PDF
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PPT
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
ODP
第2回R勉強会1
PDF
第1回R勉強会@東京
PDF
第8回 大規模データを用いたデータフレーム操作実習(2)
PDF
200319 eash python_shareslide_functions
PPTX
Python による 「スクレイピング & 自然言語処理」入門
PDF
Ruby科学データ処理ツールの開発 NArrayとPwrake
PDF
DATUM STUDIO PyCon2016 Turorial
PDF
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
PDF
ウェーブレット木の世界
PPTX
Data frameあれこれ
PDF
RのffでGLMしてみたけど...
PDF
PFI Christmas seminar 2009
PPTX
Python for Data Analysis: Chapter 2
東大生向けデータ解析講座 第2回 2017/12/29
多次元配列の効率的利用法の検討
R language definition3.1_3.2
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
第2回R勉強会1
第1回R勉強会@東京
第8回 大規模データを用いたデータフレーム操作実習(2)
200319 eash python_shareslide_functions
Python による 「スクレイピング & 自然言語処理」入門
Ruby科学データ処理ツールの開発 NArrayとPwrake
DATUM STUDIO PyCon2016 Turorial
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
ウェーブレット木の世界
Data frameあれこれ
RのffでGLMしてみたけど...
PFI Christmas seminar 2009
Python for Data Analysis: Chapter 2
Ad

More from Makoto Kawano (9)

PDF
情報科学若手の会発表資料「Node-REDフローの分散処理化による次世代の都市システム」
PDF
Road Marking Blur Detection with Drive Recorder
PDF
DLhacks paperreading_20150902
PDF
Dl hacks paperreading_20150527
PDF
Pythonデータ分析 第4回勉強会資料 10章
PDF
Pythonデータ分析 第3回勉強会資料 7章
PDF
Python for Data Analysis第1回勉強会(+git入門)
PDF
NTT研究所インターン 感想
PDF
情報科学若手の会発表資料「Node-REDフローの分散処理化による次世代の都市システム」
Road Marking Blur Detection with Drive Recorder
DLhacks paperreading_20150902
Dl hacks paperreading_20150527
Pythonデータ分析 第4回勉強会資料 10章
Pythonデータ分析 第3回勉強会資料 7章
Python for Data Analysis第1回勉強会(+git入門)
NTT研究所インターン 感想

Python for Data Anaysis第2回勉強会4,5章