Converts batch transform panel to use pd.Panel dictionary arg.

Based on @twiecki's work in batch_to_pandas branch.
This commit is contained in:
Eddie Hebert
2013-02-08 00:01:41 -05:00
parent 79f7fe69ef
commit 699a47fe3d
+11 -20
View File
@@ -396,7 +396,12 @@ class BatchTransform(EventWindow):
# sid keys.
event = Event()
event.dt = max(dts)
event.data = data
event.data = {k: v.__dict__ for k, v in data.iteritems()
# Need to check if data has a 'length' to filter
# out sids without trade data available.
# TODO: expose more of 'no trade available'
# functionality to zipline
if len(v)}
# append data frame to window. update() will call handle_add() and
# handle_remove() appropriately
@@ -410,7 +415,7 @@ class BatchTransform(EventWindow):
# every sid has the same fields.
sid_keys = []
for sid in event.data.itervalues():
keys = set([name for name, value in sid.__dict__.items()
keys = set([name for name, value in sid.items()
if (isinstance(value, (int, float)))])
sid_keys.append(keys)
@@ -457,25 +462,11 @@ class BatchTransform(EventWindow):
"""
# This Panel data structure ultimately gets passed to the
# user-overloaded get_value() method.
data_dict = {tick['dt']: tick['data'] for tick in self.ticks}
data = pd.Panel(data_dict, major_axis=self.field_names,
minor_axis=self.sids)
# If sids are set, use those. Otherwise extract.
if self.sids is not None:
sids = self.sids
else:
sids = set.union(*[set(tick.data.keys()) for tick in self.ticks])
dts = [tick.dt for tick in self.ticks]
data = pd.Panel(items=self.field_names, major_axis=dts,
minor_axis=sids)
# Fill data panel
for tick in self.ticks:
dt = tick.dt
for sid in sids:
fields = tick.data[sid]
for field_name in self.field_names:
data[field_name][sid].ix[dt] = fields.__dict__[field_name]
data = data.swapaxes(0, 1)
if self.clean_nans:
# Fills in gaps of missing data during transform