public DataView(IHostEnvironment env, ArrayDataViewBuilder builder, int rowCount) { Contracts.AssertValue(env, "env"); _host = env.Register("ArrayDataView"); _host.AssertValue(builder); _host.Assert(rowCount >= 0); _host.Assert(builder._names.Count == builder._columns.Count); _columns = builder._columns.ToArray(); var schemaBuilder = new DataViewSchema.Builder(); for (int i = 0; i < _columns.Length; i++) { var meta = new DataViewSchema.Metadata.Builder(); if (builder._getSlotNames.TryGetValue(builder._names[i], out var slotNamesGetter)) { meta.AddSlotNames(_columns[i].Type.GetVectorSize(), slotNamesGetter); } if (builder._getKeyValues.TryGetValue(builder._names[i], out var keyValueGetter)) { meta.AddKeyValues(_columns[i].Type.GetKeyCountAsInt32(_host), TextDataViewType.Instance, keyValueGetter); } schemaBuilder.AddColumn(builder._names[i], _columns[i].Type, meta.ToMetadata()); } _schema = schemaBuilder.ToSchema(); _rowCount = rowCount; }
/// <summary> /// This is very similar to <see cref="Create(DataViewType, string, string)"/> but adds one extra metadata field to the only score column. /// </summary> /// <param name="scoreType">Output element's type of quantile regressor. Note that a quantile regressor can produce an array of <see cref="PrimitiveDataViewType"/>.</param> /// <param name="quantiles">Quantiles used in quantile regressor.</param> /// <returns><see cref="DataViewSchema"/> of quantile regressor's output.</returns> public static DataViewSchema CreateQuantileRegressionSchema(DataViewType scoreType, double[] quantiles) { Contracts.CheckValue(scoreType, nameof(scoreType)); Contracts.CheckValue(scoreType as PrimitiveDataViewType, nameof(scoreType)); Contracts.AssertValue(quantiles); // Create a schema using standard function. The produced schema will be modified by adding one metadata column. var partialSchema = Create(new VectorType(scoreType as PrimitiveDataViewType, quantiles.Length), MetadataUtils.Const.ScoreColumnKind.QuantileRegression); var metadataBuilder = new DataViewSchema.Metadata.Builder(); // Add the extra metadata. metadataBuilder.AddSlotNames(quantiles.Length, (ref VBuffer <ReadOnlyMemory <char> > value) => { var bufferEditor = VBufferEditor.Create(ref value, quantiles.Length); for (int i = 0; i < quantiles.Length; ++i) { bufferEditor.Values[i] = string.Format("Quantile-{0}", quantiles[i]).AsMemory(); } value = bufferEditor.Commit(); }); // Copy default metadata from the partial schema. metadataBuilder.Add(partialSchema[0].Metadata, (string kind) => true); // Build a schema consisting of a single column. Comparing with partial schema, the only difference is a metadata field. var schemaBuilder = new DataViewSchema.Builder(); schemaBuilder.AddColumn(partialSchema[0].Name, partialSchema[0].Type, metadataBuilder.ToMetadata()); return(schemaBuilder.ToSchema()); }
public DataViewSchema.DetachedColumn[] GetOutputColumns() { var meta = new DataViewSchema.Metadata.Builder(); meta.AddSlotNames(_parent.OutputLength, GetSlotNames); var info = new DataViewSchema.DetachedColumn[1]; info[0] = new DataViewSchema.DetachedColumn(_parent.OutputColumnName, new VectorType(NumberDataViewType.Double, _parent.OutputLength), meta.ToMetadata()); return(info); }
public RowMapper(IHostEnvironment env, BindableMapper parent, RoleMappedSchema schema) { Contracts.AssertValue(env); _env = env; _env.AssertValue(schema); _env.AssertValue(parent); _env.Assert(schema.Feature.HasValue); _parent = parent; InputRoleMappedSchema = schema; var genericMapper = parent.GenericMapper.Bind(_env, schema); _genericRowMapper = genericMapper as ISchemaBoundRowMapper; var featureSize = FeatureColumn.Type.GetVectorSize(); if (parent.Stringify) { var builder = new DataViewSchema.Builder(); builder.AddColumn(DefaultColumnNames.FeatureContributions, TextDataViewType.Instance, null); _outputSchema = builder.ToSchema(); if (FeatureColumn.HasSlotNames(featureSize)) { FeatureColumn.Metadata.GetValue(MetadataUtils.Kinds.SlotNames, ref _slotNames); } else { _slotNames = VBufferUtils.CreateEmpty <ReadOnlyMemory <char> >(featureSize); } } else { var metadataBuilder = new DataViewSchema.Metadata.Builder(); if (InputSchema[FeatureColumn.Index].HasSlotNames(featureSize)) { metadataBuilder.AddSlotNames(featureSize, (ref VBuffer <ReadOnlyMemory <char> > value) => FeatureColumn.Metadata.GetValue(MetadataUtils.Kinds.SlotNames, ref value)); } var schemaBuilder = new DataViewSchema.Builder(); var featureContributionType = new VectorType(NumberDataViewType.Single, FeatureColumn.Type as VectorType); schemaBuilder.AddColumn(DefaultColumnNames.FeatureContributions, featureContributionType, metadataBuilder.ToMetadata()); _outputSchema = schemaBuilder.ToSchema(); } _outputGenericSchema = _genericRowMapper.OutputSchema; OutputSchema = new ZipBinding(new DataViewSchema[] { _outputGenericSchema, _outputSchema, }).OutputSchema; }
private protected override DataViewSchema.DetachedColumn[] GetOutputColumnsCore() { var infos = new DataViewSchema.DetachedColumn[3]; infos[ClusterIdCol] = new DataViewSchema.DetachedColumn(ClusterId, _types[ClusterIdCol], null); var slotNamesType = new VectorType(TextDataViewType.Instance, _numClusters); var sortedClusters = new DataViewSchema.Metadata.Builder(); int vectorSize = slotNamesType.GetVectorSize(); sortedClusters.AddSlotNames(vectorSize, CreateSlotNamesGetter(_numClusters, "Cluster")); var builder = new DataViewSchema.Metadata.Builder(); builder.AddSlotNames(vectorSize, CreateSlotNamesGetter(_numClusters, "Score")); infos[SortedClusterCol] = new DataViewSchema.DetachedColumn(SortedClusters, _types[SortedClusterCol], sortedClusters.ToMetadata()); infos[SortedClusterScoreCol] = new DataViewSchema.DetachedColumn(SortedClusterScores, _types[SortedClusterScoreCol], builder.ToMetadata()); return(infos); }