アルバイト募集2018-09-7Pandasでデータ間の差分をとるpct_change関数、diff関数の使い方Tweetpct_change関数APIドキュメントparams:returns:引数periodsについて基本的な使い方periodsを変更する欠損値の穴埋めをするdiff関数APIドキュメントparams:returns:行間の差分を取る列間の差分を取るperiodsを変えて差分を取る距離を変更するSeriesへの適用shift関数を使った再現numpyのdiff関数との比較まとめ参考Pandasにはデータ間の差分をとる関数が実装されています。1つは単純な差をとったdiff関数で、もう1つは変化の比率をとったpct_changeです。この関数を知っていると売上高の変化や、株価の変化率を簡単に取得することができます。diff関数はNumPyでも実装されていますが、挙動が若干異なりますのでその辺りも解説していきます。pct_change関数まずは変化の比率を計算するpct_change関数です。APIドキュメントAPIドキュメントは以下の通りです。(省略可能)初期値1差分の比率を取るデータの間隔を指定します。(省略可能)初期値’pad’NaN値が現れた時にどのように穴埋めをするかを指定します。(省略可能)初期値NoneNaN値を穴埋めする時、前後の値を何回まで繰り返して良いかを指定します。デフォルトでは特に制限は設けられていません。(省略可能)初期値NoneTimeSeriesデータにおいてどれくらいの間隔で値の差分の比率を取るかを指定します。returns:差分をとったDataFrameかSeriesが返されます。引数periodsについて引数periodsが少しとっつきにくいと感じたので簡単に図にして説明してみます。periodsは、以下の図のように参照している要素からの間隔のことです。差分をとるときにどれだけの間隔かを指定することができます。以下の図はperiods=1でdiffを適用した場合です。このように、参照しているデータを引くのが基本となります。引かれる値の所に計算結果が代入されることになります。そのため、引く相手のいない値については欠損値となり、NaN値扱いとなります。引数を指定しない場合は隣同士のデータ間で差分の比率を計算します。float640が要素に含まれていたので無限を表すinfの値が出てしまいました。periodsを変更する引数periodsの扱いはperiods=1なら1つ先の値との差分の比率でperiods=-1の時は1つ前の値との差分の比率をとることになります。float64欠損値の穴埋めをする差分を計算する前に欠損値が含まれている場合は直前の値を自動的に取るようになっていますが、変えることもできます。fill_method引数を色々変更してみましょう。float64limitを使って穴埋めする回数の制限が可能です。回数の制限をすることで穴埋めされない箇所が1つあると2つ分の欠損値が発生します。float64diff関数APIドキュメントdiff関数のAPIドキュメントは以下の通りです。Seriesにも同じ関数があり、違いとしてはaxis引数があるかどうかにあります。(省略可能)初期値1現在のデータからどれだけ進んだデータとの差分を取るかを指定します(負の値の場合は後ろの値との差分をさします)。(省略可能)初期値0行間(axis=0or’index’)の差分を取るか列間(axis=1or’columns’)の差分を取るかを指定します。returns:差分をとったデータを格納しているDataFrameが返されます。引数はシンプルに2つのみです。単純に差分を取るだけで、差分を取る対象がどこにあるのかがポイントとなります。参照しているデータ自体をどの値から引くかを指定するかと考えると分かりやすいかもしれません。行間の差分を取る行間の差分を取るときは特にaxis引数を指定する必要がないです。単純な1つ隣の値を引いていきます。-27.0このとき、一番最初の値は1つ後ろの値が存在しないためNaN値となります。列間の差分を取るaxis=1またはaxis='columns'とすれば良いです。2.0periodsを変えて差分を取る距離を変更する今度はperiods引数を変更して差分を取る距離を変えてみます。デフォルトではperiods=1となっており、1つ後ろの値を引く値をとっていましたが、periods=2にすれば2つ先になります。逆にperiods=-1とすれば1つ前の値をとります。NaNSeriesへの適用Seriesへも適用可能です。float64shift関数を使った再現shift関数を使ってdiff関数の挙動を再現することができます。float64numpyのdiff関数との比較diff関数ですと欠損値が出ず、データが減ったぶんだけ配列の長さが変化します。差分の取り方が若干違っており、後ろ向きに取るやり方は実装されておらず前向きの差分の取り方のみ実装されています。NumPyでは数値微分をするための機能が搭載されているためn階微分の数値微分を行うことが可能です。NumPyのdiff関数の詳しい解説は以下の記事でしています。-27.0また、NumPyは型にかなりうるさいため、int型で渡された値はきっちりとint型で返されます。Pandasではint型として渡したものもfloat型として処理されます。まとめ今回はデータ間の差分を取る関数について解説しました。変化の割合を見るということでpct_change関数などは株価の変動の分析などでも使う場面があるかと思います。Pandasですと手軽の求めることができるのでぜひ使ってみましょう。pct_change関数でfreq引数についてまだ解説していませんが、時系列データについてはまた別途解説していく予定です。documentationTweetDeepAgeではAIに関する厳選した内容を記事にしてお届けします。