Top Banner
かわの まこと Python for Data Analysis
20

Pythonデータ分析 第4回勉強会資料 12章

Jul 20, 2015

Download

Engineering

Makoto Kawano
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Pythonデータ分析 第4回勉強会資料 12章

かわの まこと

Python for Data Analysis

Page 2: Pythonデータ分析 第4回勉強会資料 12章

12章のお話Advanced NumPy• ndarrayの構成

- ポインタ

- データタイプ

- 配列の型(タプル)

- 各次元において次の要素に移動するのに必要なバイト数

2

Page 3: Pythonデータ分析 第4回勉強会資料 12章

dtypeのヒエラルキーfloat16からfloat128まであったりする• 小数なのか整数なのか確認はだるい

- 親クラス:np.floatingやnp.integerを使う

- 親クラスの確認:np.mro()

3

Page 4: Pythonデータ分析 第4回勉強会資料 12章

配列の作り直しreshape• コピーせずに作り直せる

• 1次元でも多次元でもOK

ravel• reshapeの逆

• コピーしない

flatten• reshapeの逆

• コピーを返す4

Page 5: Pythonデータ分析 第4回勉強会資料 12章

C v.s. Fortran NumPyはメモリ上においてRやMATLABより扱いやすい

• row / column major order - メモリに置く時,行(列)でひとかたまりにする

• C言語は行

• Fortran言語は列

5

Page 6: Pythonデータ分析 第4回勉強会資料 12章

配列の連結と分割

r_, c_も便利

6

Function Description

concatenate 最も一般的な関数,配列を連結する

vstack, row_stack 行で連結する

hstack 列で連結する

column_stack 1次配列を2次配列にしてから列で連結する

dstack 深さで連結する

split 分割する

hsplit / vsplit / dsplit 行,列,深さで分割する

Page 7: Pythonデータ分析 第4回勉強会資料 12章

要素の繰り返しNumPyにはbroadcastingがあるからあまり使われない

• repeat - 要素を繰り返す

• tile - 配列を繰り返す

7

Page 8: Pythonデータ分析 第4回勉強会資料 12章

Fancy Indexing:take and puttakeとput

8

Page 9: Pythonデータ分析 第4回勉強会資料 12章

Broadcasting異なる型の配列で算術計算ができる

9

Page 10: Pythonデータ分析 第4回勉強会資料 12章

Broadcastingの応用わざわざ軸のことを考えるのはだるい• np.newaxis

魔法の言葉

10

Page 11: Pythonデータ分析 第4回勉強会資料 12章

universal function

11

Method Description

reduce(x) 次元圧縮しながら要素ごとに計算

accumulate(x) reduceの計算過程みたい

reduceat(x, bins) bins毎に計算してくれる

outer(x, y) 直積とおなじような感じ

Page 12: Pythonデータ分析 第4回勉強会資料 12章

universal functionのカスタムnumpy.frompyfunc• pythonオブジェクトを返すけど,不便

numpy.vectorize• 型推論の面で優秀

でもNumPyの関数を使ったほうが速い

12

Page 13: Pythonデータ分析 第4回勉強会資料 12章

構造体の配列C言語の構造体のように型が違うものをまとめられる• 辞書のようにも扱える

• SQLのカラムのようにも扱える

pandasのDataFrameとかに比べて

• Low-levelだから高速で効率よく読み書き出来たりする

• CやC++と同じように読み書きする

• numpy.lib.recfunctionsを使えばそれなりに色々できる13

Page 14: Pythonデータ分析 第4回勉強会資料 12章

ソートnumpy.ndarray.sortは書き換え

numpy.sortはコピー

[::-1]を使えば降順になる

14

Page 15: Pythonデータ分析 第4回勉強会資料 12章

いろいろなものでソートindirect sort• 例:生徒の名前を苗字じゃなくて名前でソートしたい

• argsort - ソートした時のインデックスを返す

• lexsort - 辞書的にソートしてくれる

15

Page 16: Pythonデータ分析 第4回勉強会資料 12章

ソートアルゴリズム

16

kind Speed Stable Work Space Worst-case

‘quicksort' 1 No 0 O(n2)

‘mergesort’ 2 Yes n / 2 O(nlogn)

‘heapsort’ 3 No 0 O(nlogn)

Page 17: Pythonデータ分析 第4回勉強会資料 12章

ソートした配列内検索numpy.searchsorted• ソートした配列内でどこに配置されるか教えてくれる

• もし値が等しい場合は左側(先)にくる

ヒストグラムにするときに便利• np.digitizeでできちゃったりもする

17

Page 18: Pythonデータ分析 第4回勉強会資料 12章

NumPyの行列MATLABやJulia, GAUSSに比べて文法は少し冗長的

• numpy.dotを使う必要がある

- yTXy = np.dot(y.T, np.dot(X, y) • NumPyのインデックスはちょっと特殊

numpy.matrixを使えばMATLABっぽく使える• でもオススメはしない(めったに使われないから)

• numpy.matrixを使ったらnumpy.asarrayに変換するべき18

Page 19: Pythonデータ分析 第4回勉強会資料 12章

配列の入出力Memory-mapped Files• 巨大なファイルを分割して読み込める

• memmap:インメモリー配列

• flushを使えば書き込みもできる

HDF5(PyTables / h5py)

• numpyと親和性が高い

• HDF(hierarchical data format)フォーマットで保存

• 数百GB,TBでもいける19

Page 20: Pythonデータ分析 第4回勉強会資料 12章

パフォーマンス向上ループと条件分岐を配列演算や2値配列演算に変える

可能な限りbroadcastingをつかう

スライスを使ったデータのコピーを避ける

ufuncsとufuncs methodsを活用

もしやり尽くしてもパフォーマンス向上しないなら,CかFortranかCythonを使う

20