18 #ifndef __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
19 #define __DATA_SOURCE_MODIFIERS_CSV_DEFAULT_MODIFIERS_H__
21 #include "services/daal_shared_ptr.h"
22 #include "services/internal/collection.h"
24 #include "data_management/features/defines.h"
25 #include "data_management/data_source/modifiers/csv/modifier.h"
29 namespace data_management
42 class FeatureModifierPrimitive :
public Base
45 virtual void initialize(Config &context,
size_t index) { }
46 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) = 0;
47 virtual void finalize(Config &context,
size_t index) { }
54 class DefaultFeatureModifierPrimitive :
public FeatureModifierPrimitive
57 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
59 return (DAAL_DATA_TYPE)0;
67 class ContinuousFeatureModifierPrimitive :
public FeatureModifierPrimitive
70 virtual void initialize(Config &config,
size_t index) DAAL_C11_OVERRIDE
72 config.setOutputFeatureType(index, features::DAAL_CONTINUOUS);
75 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
77 return context.getTokenAs<DAAL_DATA_TYPE>(index);
85 class CategoricalFeatureModifierPrimitive :
public FeatureModifierPrimitive
88 CategoricalFeatureModifierPrimitive() :
89 _catDict(
new CategoricalFeatureDictionary()) { }
91 virtual void initialize(Config &config,
size_t index) DAAL_C11_OVERRIDE
93 config.setOutputFeatureType(index, features::DAAL_CATEGORICAL);
96 virtual DAAL_DATA_TYPE apply(Context &context,
size_t index) DAAL_C11_OVERRIDE
98 const services::StringView token = context.getToken(index);
99 const std::string sToken(token.begin(), token.end());
100 const CategoricalFeatureDictionary::iterator it = _catDict->find(sToken);
102 if (it != _catDict->end())
105 return (DAAL_DATA_TYPE)it->second.first;
109 const int itemIndex = (int)(_catDict->size());
110 const std::pair<int, int> indexPair(itemIndex, 1);
111 (*_catDict)[sToken] = indexPair;
112 return (DAAL_DATA_TYPE)itemIndex;
116 virtual void finalize(Config &config,
size_t index) DAAL_C11_OVERRIDE
118 const size_t numberOfCategories = _catDict->size();
119 config.setNumberOfCategories(index, numberOfCategories);
120 config.setCategoricalDictionary(index, _catDict);
124 CategoricalFeatureDictionaryPtr _catDict;
131 class ContinuousFeatureModifier :
public FeatureModifier
134 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
136 FeatureModifier::initialize(config);
138 const size_t numberOfFeatures = config.getNumberOfInputFeatures();
139 for (
size_t i = 0; i < numberOfFeatures; i++)
141 config.setOutputFeatureType(i, features::DAAL_CONTINUOUS);
145 virtual void apply(Context &context) DAAL_C11_OVERRIDE
147 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
148 for (
size_t i = 0; i < outputBuffer.size(); i++)
150 outputBuffer[i] = context.getTokenAs<DAAL_DATA_TYPE>(i);
159 class CategoricalFeatureModifier :
public FeatureModifier
162 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
164 FeatureModifier::initialize(config);
166 const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
167 _primitives = services::Collection<CategoricalFeatureModifierPrimitive>(numberOfInputFeatures);
168 if ( !_primitives.data() )
170 services::throwIfPossible(services::ErrorMemoryAllocationFailed);
174 for (
size_t i = 0; i < numberOfInputFeatures; i++)
176 _primitives[i].initialize(config, i);
180 virtual void apply(Context &context) DAAL_C11_OVERRIDE
182 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
183 for (
size_t i = 0; i < outputBuffer.size(); i++)
185 outputBuffer[i] = _primitives[i].apply(context, i);
189 virtual void finalize(Config &config) DAAL_C11_OVERRIDE
191 FeatureModifier::finalize(config);
193 const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
194 for (
size_t i = 0; i < numberOfOutputFeatures; i++)
196 _primitives[i].finalize(config, i);
201 services::Collection<CategoricalFeatureModifierPrimitive> _primitives;
208 class AutomaticFeatureModifier :
public FeatureModifier
211 virtual void initialize(Config &config) DAAL_C11_OVERRIDE
213 FeatureModifier::initialize(config);
215 const size_t numberOfInputFeatures = config.getNumberOfInputFeatures();
216 for (
size_t i = 0; i < numberOfInputFeatures; i++)
218 FeatureModifierPrimitive *primitive =
219 createPrimitive(config.getInputFeatureDetectedType(i));
221 if ( !_primitives.push_back(primitive) )
223 services::throwIfPossible(services::ErrorMemoryAllocationFailed);
227 primitive->initialize(config, i);
231 virtual void apply(Context &context) DAAL_C11_OVERRIDE
233 services::BufferView<DAAL_DATA_TYPE> outputBuffer = context.getOutputBuffer();
234 for (
size_t i = 0; i < outputBuffer.size(); i++)
236 outputBuffer[i] = _primitives[i].apply(context, i);
240 virtual void finalize(Config &config) DAAL_C11_OVERRIDE
242 FeatureModifier::finalize(config);
244 const size_t numberOfOutputFeatures = config.getNumberOfInputFeatures();
245 for (
size_t i = 0; i < numberOfOutputFeatures; i++)
247 _primitives[i].finalize(config, i);
252 FeatureModifierPrimitive *createPrimitive(features::FeatureType featureType)
256 case features::DAAL_CONTINUOUS:
257 return new ContinuousFeatureModifierPrimitive();
259 case features::DAAL_ORDINAL:
260 case features::DAAL_CATEGORICAL:
261 return new CategoricalFeatureModifierPrimitive();
263 return new DefaultFeatureModifierPrimitive();
267 services::internal::ObjectPtrCollection<FeatureModifierPrimitive> _primitives;
269 typedef services::SharedPtr<AutomaticFeatureModifier> AutomaticFeatureModifierPtr;
daal::services::internal::ObjectPtrCollection
Class that implements functionality of collection container and holds pointers to objects of specifie...
Definition: internal/collection.h:39
daal::Base
Base class for Intel(R) Data Analytics Acceleration Library objects
Definition: base.h:41
daal::data_management::modifiers::csv::internal::DefaultFeatureModifierPrimitive
Default implementation of primitive feature modifier.
Definition: csv/internal/default_modifiers.h:54
daal::data_management::modifiers::csv::internal::ContinuousFeatureModifierPrimitive
Primitive feature modifier that parses tokens as continuous features.
Definition: csv/internal/default_modifiers.h:67
daal::data_management::modifiers::csv::internal::CategoricalFeatureModifier
Feature modifier that parses tokens as categorical features.
Definition: csv/internal/default_modifiers.h:159
daal::data_management::modifiers::csv::internal::ContinuousFeatureModifier
Feature modifier that parses tokens as continuous features.
Definition: csv/internal/default_modifiers.h:131
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:150
daal::data_management::modifiers::csv::internal::FeatureModifierPrimitive
Primitive modifier that applicable to a single column.
Definition: csv/internal/default_modifiers.h:42
daal::data_management::modifiers::csv::internal::AutomaticFeatureModifier
Feature modifier that determines suitable feature type and parses tokens according to determined type...
Definition: csv/internal/default_modifiers.h:208
daal::data_management::modifiers::csv::internal::CategoricalFeatureModifierPrimitive
Primitive feature modifier that parses tokens as categorical features.
Definition: csv/internal/default_modifiers.h:85