Функция eventprofiler в QSTK не отображается должным образом

Используя QSTK для курса Coursera Computational Investing от Georgia Tech, функция eventprofiler в конце examples/EventProfiler/tutorial.py не выводит график, показанный на видео. (См. Изображение ниже.)

Другие PDF-файлы, подготовленные для упражнений на 4-й неделе, идентичны пустым, за исключением номеров событий, которые являются правильными. Создание PDF-файлов кажется пустой тратой, поскольку эти цифры могли быть просто выведены на терминал.

Я посмотрел на вывод ошибок для index.py:2204, показанного на изображении, но исправление не очевидно. (Некоторые другие следы аналогичных (но не идентичных) проблем, связанных с ошибками github, связанными с пандами, помещают index.py в центр работоспособного стека вызовов.)

нет графика на участке

Если бы у меня было время, я мог бы углубиться в код eventprofiler, но я решил сначала спросить. Переполнение стека почти ничего не имеет в QSTK и ничего в пандах, которые, казалось бы, были актуальны в быстром 5-минутном поиске.

Примечание. Я установил VirtualBox, Ubuntu и QSTK в соответствии с инструкциями в вики-программном обеспечении для курса Georgia Tech Coursera по вычислительному инвестированию. До сих пор я успешно выполнил все задания, поэтому я думаю, что мои настройки должны быть в порядке.

2 ответа

Решение

Проблема заключается в EventProfiler.
Какой для Ubuntu установлен по умолчанию в /usr/local/lib/python2.7/dist-packages/QSTK-0.2.8-py2.7.egg/QSTK/qstkstudy/EventProfiler.py

В этом блоке кода:

if b_market_neutral == True:
    df_rets = df_rets - df_rets[s_market_sym]
    del df_rets[s_market_sym]
    del df_events[s_market_sym]

Проблема в вычитании. df_rets заканчивается заполнен NaNs. Не уверен почему, что-то должно было измениться в базовой системе, вызвав это.
Это можно исправить, сделав вычитание для каждого символа в цикле for следующим образом:

if b_market_neutral == True:
    for sym in df_events.columns:
        df_rets[sym] = df_rets[sym] - df_rets[s_market_sym]
    del df_rets[s_market_sym]
    del df_events[s_market_sym]

Вы можете скачать файл EventProfiler.py с исправлением отсюда. Переименуйте оригинал в вашей установке и замените его на этот.
Следуя предложению Endeavour, который также входит в упомянутый вами курс, я также изменил альфа шкал ошибок с 0,1 до 0,6, чтобы сделать их более заметными:

if b_errorbars == True:
    plt.errorbar(li_time[i_lookback:], na_mean[i_lookback:],
                yerr=na_std[i_lookback:], ecolor='#AAAAFF',
                alpha=0.6) #Changed alpha from 0.1 to 0.6 (Jose A Dura)

Я могу подтвердить, что проблема здесь в qstkstudy/EventProfiler.py

if b_market_neutral == True:
    df_rets = df_rets - df_rets[s_market_sym] # it fails here
    del df_rets[s_market_sym]
    del df_events[s_market_sym]

я решил это так:

if b_market_neutral == True:
        df_rets = df_rets.sub(df_rets[s_market_sym].values, axis=0)
        del df_rets[s_market_sym]
        del df_events[s_market_sym]
Другие вопросы по тегам