У меня есть дата-фрейм цен на акции, и я пытаюсь выполнить тест стационарности Дикки для каждой акции, используя from statsmodels.tsa.stattools import adfuller
, затем я хотел бы создать список, состоящий из акций, которые проходят эту стационарность.тестовое задание.Ниже приведен код, который я использую для выполнения теста:
X = prices.values
X = log(X)
result = adfuller(X)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
Этот код приводит к выводу, подобному следующему, например:
ADF Statistic: -2.440780
p-value: 0.130556
1%: -3.437
5%: -2.864
10%: -2.568
Хотя печать result
дает нам более подробную информацию(-2.441777051823896, 0.13029053843698696, 21, 978, {'1%': -3.437054035425408, '5%': -2.8644997864059363, '10%': -2.5683459429326576}, -7710.868442126897)
Вы можете видеть, что в середине результатов находится словарь, для того, чтобы акция была стационарной, первое число (result[0]
) должно быть ниже, чем 3 значения в словаре.Итак, что я хочу сделать, это перебрать и сказать, если result[0]
ниже, чем значения для ключей '1%'
, '5%'
и '10%'
в словаре, составляющем result[4]
, вернуть мне акцииимя, и я бы тогда хотел поместить его в отдельный список.Однако раньше я не встречал словарь в списке, поэтому я немного озадачен.Я, как правило, вполне доволен циклами и добавлением элементов в словари / списки, и если бы мы могли на секунду представить, что result[4]
- это простое число, а не словарь, мой попытанный код будет выглядеть примерно так:
stationary_stocks = []
for stock in stocks:
if result[0] < result[4]
stationary_stocks.append(stock)
Однако, как мы видим выше, result[4]
на самом деле словарь, и я не уверен, как попасть внутрь него, так сказать.
Итак, в заключение я хочу создать список, содержащий акции, где result[0]
ниже всех значений, составляющих словарь в result[4]
.Любая помощь будет принята с благодарностью.Приветствия