データ フレーム内の 2 つの列間のローリング ランク相関を計算したいと思います。ただし、現在rolling_corr
の pandas はランク相関をサポートしていません。でローリング ランク相関を実装しようとしましrolling_apply
たが、成功しませんでした。rolling_apply
入力引数として 1 つの配列しかとらないように見えますが、相関には 2 つの配列が必要です。rolling_apply
または他の方法でローリングランク相関を実装する賢い方法はありますか? rolling_corr
可能であれば、ランクの相関関係が追加されると便利です。
1904 次
1 に答える
3
rolling_apply
データフレームを 1 次元配列に分割しているように見えるため、ローリング相関を行うために使用できるとは思いません。これを行うためのより良い方法があるかもしれませんが、1 つの解決策は、ジェネレーターを作成して各ウィンドウのスライスを自分で生成することです。
def window(length, size=2, start=0):
while start + size <= length:
yield slice(start, start + size)
start += 1
そしてそれをループします..
In [144]: from pandas import DataFrame
...: import numpy as np
...:
...: df = DataFrame(np.arange(10).reshape(2,5).T, columns=['a','b'])
...:
...: df.iloc[0,1] = -1 #still perfect with ranked correlation, but not with pearson's r
...:
...: for w in window(len(df), size=3):
...: df_win = df.iloc[w,:]
...: spearman = df_win['a'].rank().corr(df_win['b'].rank())
...: pearson = df_win['a'].corr(df_win['b'])
...: print w.start, spearman, pearson
...:
0 1.0 0.917662935482
1 1.0 1.0
2 1.0 1.0
于 2013-08-02T23:19:27.990 に答える