pythonデータ分析 第3回勉強会資料 7章

21

Click here to load reader

Upload: makoto-kawano

Post on 23-Jul-2015

233 views

Category:

Documents


0 download

TRANSCRIPT

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

Python for Data Analysisかわの まこと

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

Combining and Merging DataSetsデータを結合する方法:• pandas.merge

- 1つ以上のキーを元に行を結合する⇒SQL joinと似てる

• pandas.concat - 軸にそって結合する

• combine_first - 欠損値を埋めるように重複データを結合する

2

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

DB-styleなpandas.mergeMerge, Join: リレーショナルデータベースでよく使われる方法

• df1: 複数の”a”,”b”ラベリングがある

• df2: 単一のラベリング

列を指定しなければ,重複列をkeyとして使う

基本的には’inner’ join

• それ以外: ‘left’, ‘right’, ‘outer’3

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

merge function arguments

4

Argument Description

left 左側から結合するDataFrameright 右側から結合するDataFrame

how inner’, ‘outer’, ‘left’ or ‘right’のどれをつかうか tukauno on 結合する列の名前.両方のDataFrameにないとだめ.

left_on 左のDataFrameの結合キーright_on 右のDataFrameの結合キー

left_index インデックスを左の結合キーとして扱うright_index インデックスを右の結合キーとして扱う

sort結合キーで辞書的にソートする.基本True.巨大なデータセットなどではFalse推奨

suffixes 重複してる時に加える文字列.デフォルトは(‘_x’, ‘_y’) -> ‘data_x’, ‘data_y’

copy Falseにするとコピーしなくなる

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

Merge on Indexインデックスに結合キーがあるときある• left_index=True or right_index=True (or 両方)

mergeよりjoinっていうインスタンスメソッド使ったほうが◯

5

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

Concatenating Along as Axisnumpy.concatenateと同様なことが出来るpandas.concat

6

Argument Descriptionobjs 結合するpandasオブジェクトのリストかdictaxis 結合する方向.デフォルトaxis=0join inner’,’outer’のどちらか.デフォルト’outer’

join_axes 特定のインデックスで結合する場合keys 階層的インデックスを作るlevels 特定のインデックスを階層的インデックスに使うnames 階層的インデックスに名前をつける

verify_integrity 新しい軸が重複してないかチェックしてあったらエラー(デフォルトFalse)ignore_index インデックスを無視して,新しいインデックスを振り直す

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

Combining Data with Overlapmerge, concatenationでも出来ないデータ結合

combine_first• よく欠損値に当てたりする

7

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

Reshaping and Pivoting階層的インデックスで便利• stack: 列を分解して行にする

• unstack: 行を分解して列にする

8

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

Pivoting "long" to "wide" FormatDBやCSVの時系列データを扱う

pandas.DataFrame.pivot• ldata.pivot(‘data’, ‘item’)

= ldata.set_index([‘date’, ‘item’]).unstack(‘item’)

9

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

Data TransformationRemoving Duplicates• pandas.DataFrame.duplicated • pandas.DataFrame.drop_duplicates

Transforming Data Using a Function or Mapping

10

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

Data TransformationTransforming Data Using a Function or Mapping • 配列にある値で変換したい時あるよね

• pandas.DataFrame.map()

11

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

Data TransformationReplacing Values

欠損値を埋めるfillnaあるけど,replaceも便利

12

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

Data TransformationRenaming Axis Indexes• インデックスの名前を編集したいとき

• pandas.DataFrame.rename

13

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

Data TransformationDiscretization and Binning

離散データを扱いたいときある

pandas.cut()

14

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

Data TransformationDetecting and Filtering Outliers• 外れ値の扱い

15

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

Data TransformationPermutation and Random Sampling• Permuting: ランダム再整列

• takeを駆使するといい

16

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

Date TransformationComputing Indicator / Dummy Variables• 統計学モデリングもしくは機械学習のための変換

- 分類別の変数を’dummy’か’indicator’行列にする

- k種類の列があった場合1か0で出来たk列の行列,DataFrame

17

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

String Manipulation > String Object Methods

18

Argument Descriptioncount 重複してない出現回数

endswith, startswith 引数で終わって(から始まって)たらTruejoin String同士をくっつける

index 文字が最初に見つかった位置を返す.見つからなければErrorを返す.find indexと同じ.見つからなければ-1を返す.rfind 文字が最後に見つかった位置を返す.見つからなければ-1を返す.

replace 置換strip, rstrip, lstrip 空白と改行をなくす(= x.strip)

split 文字列を区切り文字で切ってリストを返す.lower, upper 文字を全部小文字,大文字に変換する.

ljust, rjust, center 引数を与えた数だけ空白を加える

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

正規表現組み込み関数:reモジュール• パターンマッチング,置換,分割

• re.compileでregex object生成推奨(CPU節約)

19

Argument Description

findall, finditerパターンマッチングしてる文字列を全部返す.

-allはリストで,-iterはイテレータで返す.

match 最初からパターンマッチングあればオブジェクトを,無ければNone

search 途中でもパターンマッチングがあればオブジェクトを返す

split パターンが出るたびに分割する

sub, subn 全部を置換するか,最初のn個だけ置換する

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

Vectorized string functions in pandasdata.map + lambdaで正規表現適用できるけど,NAで死ぬ

20

Method Descriptioncat 要素ごとに文字列を連結する

contains パターン,正規表現にマッチするかboolean配列を返すcount パターンの出現頻度

endswith, startswith x.endswithやx.startswithと一緒findall パターン,正規表現の全検索

get i番目の要素を取り出すjoin Seriesの各要素に文字列を追加するlen 各要素の文字数

lower, upper x.lower(), x.upper()と一緒match 各要素にre.matchで比較する

pad 空白を片側,もしくは両方追加center pad(side=‘both’)と一緒repeat 値を繰り返す.str.repeat(3) = x * 3replace パターンが一致した箇所を置換

slice Series内の文字列をスライスするsplit 区切り文字,パターンで分割

strip, rstrip, lstrip 空白をなくす

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

Example: USDA Food Database

21