3

データ フレーム内の 2 つの列間のローリング ランク相関を計算したいと思います。ただし、現在rolling_corrの pandas はランク相関をサポートしていません。でローリング ランク相関を実装しようとしましrolling_applyたが、成功しませんでした。rolling_apply入力引数として 1 つの配列しかとらないように見えますが、相関には 2 つの配列が必要です。rolling_applyまたは他の方法でローリングランク相関を実装する賢い方法はありますか? rolling_corr可能であれば、ランクの相関関係が追加されると便利です。

4

1 に答える 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 に答える