質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

pythonによるデータ分析入門(オライリー)の本(p389~)についての質問

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 968

yutakao

score 8

お世話になります。
pythonによるデータ分析入門(オライリー)の本で
11.2グループの変換と分析の11.2.2分位分析(P389~)について質問です。

spyデータの入手
ーーーーーーーーーーーーーーー

data=web.DataReader("SPY","iex","2016-01-01")


使用しやすいデータに変える
ーーーーーーーーーーーーーーー

px=data["close"]
returns=px.pct_change()


関数製作?
ーーーーーーーーーーーーーーー

def to_index(rets):
    index=(1+rets).cumprod()
    first_loc=max(index.notnull().argmax()-1,0)
    index.values[first_loc]=1
    return index
def trend_signal(rets,lookback,lag):
    signal=rets.rolling(lookback,min_periods=lookback-5).sum()
    return signal.shift(lag)


この関数を使用して、毎週金曜日のモメンタム指標を使った取引をする投資戦略の作成とテストを行うことができます。
ーーーーーーーーーーーーーーー

signal=trend_signal(returns,100,3)
trade_friday=signal.resample("W-FRI").mean().resample("B").ffill()
trade_rets=trade_friday.shift(1)*returns
to_index(trade_rets).plot()


とするとエラーがでる。

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

TypeError                                 Traceback (most recent call last)
<ipython-input-56-21cb90a97e71> in <module>()
2 signal=trend_signal(returns,100,3)
3 #signal.index=pd.to_datetime(signal.index)
----> 4 trade_friday=signal.resample("W-FRI").mean().resample("B").ffill()#.mean()の記載はないが記載しないと将来使えないよと注意が出る。
5 trade_rets=trade_friday.shift(1)*returns
6 #trade_rets.index=pd.to_object(trade_tets.index)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in resample(self, rule, how, axis, fill_method, closed, label, convention, kind, loffset, limit, base, on, level)
5520                      axis=axis, kind=kind, loffset=loffset,
5521                      convention=convention,
-> 5522                      base=base, key=on, level=level)
5523         return _maybe_process_deprecations(r,
5524                                            how=how,

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\resample.py in resample(obj, kind, kwds) 997     """ create a TimeGrouper and return our resampler """ 998     tg = TimeGrouper(kwds)
--> 999     return tg._get_resampler(obj, kind=kind)
1000 
1001 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\resample.py in _get_resampler(self, obj, kind)
1114         raise TypeError("Only valid with DatetimeIndex, "
1115                         "TimedeltaIndex or PeriodIndex, "
-> 1116                         "but got an instance of %r" % type(ax).name)
1117 
1118     def _get_grouper(self, obj, validate=True):

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

インデックスがobjectだからダメなのかと思い。

signal=trend_signal(returns,100,3)
signal.index=pd.to_datetime(signal.index)#追加
trade_friday=signal.resample("W-FRI").mean().resample("B").ffill()
trade_rets=trade_friday.shift(1)*returns
to_index(trade_rets).plot()


とするとエラーがでる。

ValueError: Cannot add integral value to Timestamp without freq.

ValueError                                Traceback (most recent call last)
<ipython-input-57-eb0ae3dff6b9> in <module>()

8 #次に、この戦略のリターンをリターンインデックスに変換して、グラフを描きます。
----> 9 to_index(trade_rets).plot()
10 
11 #分からないのでstop!

<ipython-input-49-03cae7f6c268> in to_index(rets)
5 def to_index(rets):
6     index=(1+rets).cumprod()
----> 7     first_loc=max(index.notnull().idxmax()-1,0)
8     index.values[first_loc]=1
9     return index

pandas/_libs/tslib.pyx in pandas._libs.tslib._Timestamp.sub()

pandas/_libs/tslib.pyx in pandas._libs.tslib._Timestamp.add()

ValueError: Cannot add integral value to Timestamp without freq.

まだまだ勉強不測で対処方が全く対処が分からないです。
分かる方がいらっしゃいましたら御教示いただきたく宜しくお願いたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • ikedas

    2018/10/28 16:43

    出力されたエラーの全文を提示して下さい。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る