Функция 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]