ENH: add actual value column to estimates dataset.

This commit is contained in:
Maya Tydykov
2016-04-19 17:06:57 -04:00
parent 2826226431
commit bd58140b97
5 changed files with 37 additions and 3 deletions
+19 -1
View File
@@ -7,6 +7,7 @@ import pandas as pd
from six import iteritems
from zipline.pipeline.common import (
ACTUAL_VALUE_FIELD_NAME,
COUNT_FIELD_NAME,
FISCAL_QUARTER_FIELD_NAME,
FISCAL_YEAR_FIELD_NAME,
@@ -20,6 +21,7 @@ from zipline.pipeline.common import (
NEXT_LOW,
NEXT_RELEASE_DATE,
NEXT_STANDARD_DEVIATION,
PREVIOUS_ACTUAL_VALUE,
PREVIOUS_COUNT,
PREVIOUS_FISCAL_QUARTER,
PREVIOUS_FISCAL_YEAR,
@@ -47,6 +49,7 @@ from zipline.testing.fixtures import (
consensus_estimates_cases = [
# K1--K2--A1--A2.
pd.DataFrame({
ACTUAL_VALUE_FIELD_NAME: (100, 200),
STANDARD_DEVIATION_FIELD_NAME: (.5, .6),
COUNT_FIELD_NAME: (1, 2),
FISCAL_QUARTER_FIELD_NAME: (1, 1),
@@ -57,6 +60,7 @@ consensus_estimates_cases = [
}),
# K1--K2--A2--A1.
pd.DataFrame({
ACTUAL_VALUE_FIELD_NAME: (200, 300),
STANDARD_DEVIATION_FIELD_NAME: (.6, .7),
COUNT_FIELD_NAME: (2, 3),
FISCAL_QUARTER_FIELD_NAME: (1, 1),
@@ -67,6 +71,7 @@ consensus_estimates_cases = [
}),
# K1--A1--K2--A2.
pd.DataFrame({
ACTUAL_VALUE_FIELD_NAME: (300, 400),
STANDARD_DEVIATION_FIELD_NAME: (.7, .8),
COUNT_FIELD_NAME: (3, 4),
FISCAL_QUARTER_FIELD_NAME: (1, 1),
@@ -77,6 +82,7 @@ consensus_estimates_cases = [
}),
# K1 == K2.
pd.DataFrame({
ACTUAL_VALUE_FIELD_NAME: (400, 500),
STANDARD_DEVIATION_FIELD_NAME: (.8, .9),
COUNT_FIELD_NAME: (4, 5),
FISCAL_QUARTER_FIELD_NAME: (1, 1),
@@ -86,7 +92,8 @@ consensus_estimates_cases = [
LOW_FIELD_NAME: (.08, .09),
}),
pd.DataFrame(
columns=[STANDARD_DEVIATION_FIELD_NAME,
columns=[ACTUAL_VALUE_FIELD_NAME,
STANDARD_DEVIATION_FIELD_NAME,
COUNT_FIELD_NAME,
FISCAL_QUARTER_FIELD_NAME,
HIGH_FIELD_NAME,
@@ -97,6 +104,14 @@ consensus_estimates_cases = [
),
]
prev_actual_value = [
['NaN', 100, 200],
['NaN', 300, 200],
['NaN', 300, 400],
['NaN', 400, 500],
['NaN']
]
next_standard_deviation = [
['NaN', .5, .6, 'NaN'],
['NaN', .6, .7, .6, 'NaN'],
@@ -210,6 +225,7 @@ prev_low = [
]
field_name_to_expected_col = {
PREVIOUS_ACTUAL_VALUE: prev_actual_value,
PREVIOUS_STANDARD_DEVIATION: prev_standard_deviation,
NEXT_STANDARD_DEVIATION: next_standard_deviation,
PREVIOUS_COUNT: prev_count,
@@ -233,6 +249,8 @@ class ConsensusEstimatesLoaderTestCase(WithNextAndPreviousEventDataLoader,
Tests for loading the consensus estimates data.
"""
pipeline_columns = {
PREVIOUS_ACTUAL_VALUE:
ConsensusEstimates.previous_actual_value.latest,
NEXT_RELEASE_DATE:
ConsensusEstimates.next_release_date.latest,
PREVIOUS_RELEASE_DATE:
+2
View File
@@ -1,6 +1,7 @@
"""
Common constants for Pipeline.
"""
ACTUAL_VALUE_FIELD_NAME = 'actual_value'
AD_FIELD_NAME = 'asof_date'
ANNOUNCEMENT_FIELD_NAME = 'announcement_date'
CASH_FIELD_NAME = 'cash'
@@ -31,6 +32,7 @@ NEXT_PAY_DATE = 'next_pay_date'
NEXT_RELEASE_DATE = 'next_release_date'
NEXT_STANDARD_DEVIATION = 'next_standard_deviation'
PAY_DATE_FIELD_NAME = 'pay_date'
PREVIOUS_ACTUAL_VALUE = 'previous_actual_value'
PREVIOUS_AMOUNT = 'previous_amount'
PREVIOUS_ANNOUNCEMENT = 'previous_announcement'
PREVIOUS_BUYBACK_ANNOUNCEMENT = 'previous_buyback_announcement'
@@ -26,3 +26,4 @@ class ConsensusEstimates(DataSet):
next_fiscal_year = Column(float64_dtype)
previous_low = Column(float64_dtype)
next_low = Column(float64_dtype)
previous_actual_value = Column(float64_dtype)
@@ -9,6 +9,7 @@ from zipline.pipeline.common import (
SID_FIELD_NAME,
STANDARD_DEVIATION_FIELD_NAME,
TS_FIELD_NAME,
ACTUAL_VALUE_FIELD_NAME
)
from zipline.pipeline.data import ConsensusEstimates
from zipline.pipeline.loaders import ConsensusEstimatesLoader
@@ -50,6 +51,7 @@ class BlazeConsensusEstimatesLoader(BlazeEventsLoader):
{MEAN_FIELD_NAME}: ?float64,
{FISCAL_YEAR_FIELD_NAME}: ?float64,
{LOW_FIELD_NAME}: ?float64,
{ACTUAL_VALUE_FIELD_NAME}: ?float64
}}
Where each row of the table is a record including the sid to identify the
@@ -72,6 +74,7 @@ class BlazeConsensusEstimatesLoader(BlazeEventsLoader):
MEAN_FIELD_NAME=MEAN_FIELD_NAME,
FISCAL_YEAR_FIELD_NAME=FISCAL_YEAR_FIELD_NAME,
LOW_FIELD_NAME=LOW_FIELD_NAME,
ACTUAL_VALUE_FIELD_NAME=ACTUAL_VALUE_FIELD_NAME
)
_expected_fields = frozenset({
@@ -85,6 +88,7 @@ class BlazeConsensusEstimatesLoader(BlazeEventsLoader):
MEAN_FIELD_NAME,
FISCAL_YEAR_FIELD_NAME,
LOW_FIELD_NAME,
ACTUAL_VALUE_FIELD_NAME
})
concrete_loader = ConsensusEstimatesLoader
@@ -13,7 +13,7 @@ from zipline.pipeline.common import (
MEAN_FIELD_NAME,
RELEASE_DATE_FIELD_NAME,
STANDARD_DEVIATION_FIELD_NAME,
)
ACTUAL_VALUE_FIELD_NAME)
from zipline.utils.memoize import lazyval
@@ -26,7 +26,8 @@ class ConsensusEstimatesLoader(EventsLoader):
HIGH_FIELD_NAME,
MEAN_FIELD_NAME,
FISCAL_YEAR_FIELD_NAME,
LOW_FIELD_NAME])
LOW_FIELD_NAME,
ACTUAL_VALUE_FIELD_NAME])
def __init__(self, all_dates, events_by_sid,
infer_timestamps=False,
@@ -160,3 +161,11 @@ class ConsensusEstimatesLoader(EventsLoader):
RELEASE_DATE_FIELD_NAME,
LOW_FIELD_NAME,
)
@lazyval
def previous_actual_value_loader(self):
return self._previous_event_value_loader(
self.dataset.previous_actual_value,
RELEASE_DATE_FIELD_NAME,
ACTUAL_VALUE_FIELD_NAME,
)