欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DataVec/概要

程序员文章站 2022-03-18 23:49:53
...

为什么要使用概要?

     现实中的不幸是数据是脏的。当为了深度学习而试图向量化一个数据集时,很少能找到没有错的文件。在使用神经网络训练神经网络之前,概要对于维护数据的意义是很重要的。

 

使用概要

     概要基本上用于程序设计变换。在正确执行转换过程之前,需要传递正在转换的数据的概要。一个用于商家记录的概要的例子看起来如下:

 

Schema inputDataSchema = new Schema.Builder()
    .addColumnsString("DateTimeString", "CustomerID", "MerchantID")
    .addColumnInteger("NumItemsInTransaction")
    .addColumnCategorical("MerchantCountryCode", Arrays.asList("USA","CAN","FR","MX"))
    .addColumnDouble("TransactionAmountUSD",0.0,null,false,false)   //$0.0 or more, no maximum limit, no NaN and no Infinite values
    .addColumnCategorical("FraudLabel", Arrays.asList("Fraud","Legit"))
    .build();

概要连接 

如果你有两个你想要合并的不同的数据集,数据向理提供一个Join连接类,它有不同的连接策略,例如 Inner内连和RightOuter右外连

Schema customerInfoSchema = new Schema.Builder()
    .addColumnLong("customerID")
    .addColumnString("customerName")
    .addColumnCategorical("customerCountry", Arrays.asList("USA","France","Japan","UK"))
    .build();

Schema customerPurchasesSchema = new Schema.Builder()
    .addColumnLong("customerID")
    .addColumnTime("purchaseTimestamp", DateTimeZone.UTC)
    .addColumnLong("productID")
    .addColumnInteger("purchaseQty")
    .addColumnDouble("unitPriceUSD")
    .build();

Join join = new Join.Builder(Join.JoinType.Inner)
    .setJoinColumns("customerID")
    .setSchemas(customerInfoSchema, customerPurchasesSchema)
    .build();

一旦你已经定义了你的连接并且你已经加载了数据到数据向量,你必须使用一个Executor执行器来完成连接。

Classes and utilities 类和实用工具

数据向量为2D和序列类型数据提供一些概要类和帮助工具。


Join 连接

[源码]

 

连接类:用于指定一个连接(类似SQL的连接)

 

setSchemas 设置概要 
public Builder setSchemas(Schema left, Schema right) 

连接类型

内连:返回连接列值同时出现的实例。

 

左外连:返回从左边来的所有实例,不管是否有与右边的值匹配。(如果不匹配:右边的值将会以NullWritable来替代)

 

右外连:返回从右边来的所有实例,不管是否有与左边的值匹配。(如果不匹配:左边的值将会以NullWritable来替代)

全外连:返回左右所有实例,不管两边的数据是否匹配。(如果不匹配:值会以NullWritable来替代)

 

 

setKeyColumns 设置关键列
public Builder setKeyColumns(String... keyColumnNames) 
  • 弃用的 {- link #setJoinColumns(String…)}
setKeyColumnsLeft 设置关键列左边
public Builder setKeyColumnsLeft(String... keyColumnNames) 
  • 弃用的 {- link #setJoinColumnsLeft(String…)}
setKeyColumnsRight 设置关键列右边
public Builder setKeyColumnsRight(String... keyColumnNames) 
  • 弃用的 {- link #setJoinColumnsRight(String…)}
setJoinColumnsLeft 设置连接列左边 
public Builder setJoinColumnsLeft(String... joinColumnNames) 

为左边的数据指定连接的列名)思路:为所有i连接firstDataValues(joinColumNamesLeft[i]) == secondDataValues(joinColumnNamesRight[i])的实例

  • 参数joinColumnNames 为连接的列名(用于左边的数据)
setJoinColumnsRight
public Builder setJoinColumnsRight(String... joinColumnNames) 

 

为右边的连接指定列名)思路:为所有的i连接firstDataValues(joinColumNamesLeft[i]) == secondDataValues(joinColumnNamesRight[i]) 的实例。

 

  • 参数joinColumnNames为连接的列名(用于右边的数据)

InferredSchema 推断概要 

[源码]

如果传入一个包括一个头和单行数据的CSV文件,它将返回一个概要。只有Double, Integer, Long, 和 String类型才被支持。如果不能推断出数字类型,字段类型将成为默认类型。需要注意的是如果你的列实际上是分类的,但表示为一个数字,则需要进行额外的转换。同时,如果你的样例字段为blank/null,则它也将成为默认类型。


Schema 概要

[源码]

概要定义表格数据的布局。特别的,它抱括了每个列的名称,类型明细 (Integer, String, Long, Double, 等).每个列的类型数据也可以可选地包括为每个列指定允许的数据约束。

 

sameTypes 名称类型
public boolean sameTypes(Schema schema) 

基于给定的元数据创建一个概要

  • 参数columnMetaData为创建概要的元数据
newSchema 创建概要 
public Schema newSchema(List<ColumnMetaData> columnMetaData) 

计算在  ColumnMetaData中这个概要与传入的概要的不同。在org.datavec.api.transform.TransformProcess识别什么过程将会作用于一个给定的概要的过程中,这是很重要的。

  • 参数schema是计算不同点的概要 
  • 返回在该概要与其他概要之间不同的(按顺序)的元数据。
numColumns 
public int numColumns() 

返回此概要的列或字段的数目

  • 返回此概要的列或字段的数目
getName
public String getName(int column) 

返回在指定索引处给定列的名称。

  • 参数column为获取名称的列的索引
  • 返回在指定索引处给定列的名称。
getType
public ColumnType getType(int column) 

在指定的索引处返回列的类型 

  • 参数column是用于获取列的索引 
  • 返回指定索引处的列的类型 
getType
public ColumnType getType(String columnName) 

在指定的列名称处返回列的类型

  • 参数columnName是用于获取列的名称
  • 返回指定名称处的列的类型
getMetaData
public ColumnMetaData getMetaData(int column) 

返回指定索引处的列元数据

  • par参数column是用于获取列的索引
  • 返回指定索引处的列的元数据
getMetaData
public ColumnMetaData getMetaData(String column) 

返回指定名称处的列元数据

  • 参数column是用于获取列的名称
  • 返回指定名称处的列的元数据
getIndexOfColumn
public int getIndexOfColumn(String columnName) 

返回指定列名的索引

  • 返回指定的列名的索引
hasColumn
public boolean hasColumn(String columnName)  

返回是否有这个列名的列 

  • 参数columnNames是需要索引的列名  
  • 返回是否有这个列名的列的布尔值
toJson
public String toJson() 

系列化这个概要到json

  • 返回一个此概要的json形式
toYaml
public String toYaml() 

把这个概要系列化为yaml

  • 返回这个概要的yaml形式
fromJson
public static Schema fromJson(String json) 

从一个给定的json字符串创建一个概要

  • 参数json是概要要从哪个JSON字符串中创建
  • 返回一个基于json创建的概要
fromYaml
public static Schema fromYaml(String yaml) 

从一个给定的yaml字符串中创建概要 

  • 参数yaml是概要要从哪个yaml字符串中创建
  • 返回一个基于yaml创建的概要
addColumnFloat
public Builder addColumnFloat(String name) 

添加浮点数据列,对允许值没有限制,除了不允许NAN/无限大值。

 

  • 参数name是列的名称
addColumnFloat
public Builder addColumnFloat(String name, Float minAllowedValue, Float maxAllowedValue) 

添加一个浮点数据列并指定约束(不允许NAN/无限值)

  • 参数name 是指列的名称 
  • 参数minAllowedValue是允许的最小值,如果为空就没有约束。
  • 参数maxAllowedValue是允许的最大值,如果为空就没有约束。
  • return
addColumnFloat
public Builder addColumnFloat(String name, Float minAllowedValue, Float maxAllowedValue, boolean allowNaN,
                                       boolean allowInfinite) 

 添加一个浮点数据列,指定约束

  • 参数name 是指列的名称
  • 参数minAllowedValue是允许的最小值,如果为空就没有约束。
  • 参数maxAllowedValue是允许的最大值,如果为空就没有约束。
  • 参数allowNaN 如果为false 则不允许为空值,如果为true则允许。
  • 参数allowInfinite如果为false则不允许为无限,如果为true则允许。
addColumnsFloat
public Builder addColumnsFloat(String... columnNames) 

添加多个浮点数据列,对列的允许值没有限制(除了不允许NAN/无限)

 

  • 参数columnNames是指要添加的列的名称
addColumnsFloat
public Builder addColumnsFloat(String pattern, int minIdxInclusive, int maxIdxInclusive) 

一个方便的方法,用于添加多个浮点类型的列。例如,添加这些列“myFloatCol_0”, “myFloatCol_1”, “myFloatCol_2”,使用{- code addColumnsFloat(“myFloatCol_%d”,0,2)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
addColumnsFloat
public Builder addColumnsFloat(String pattern, int minIdxInclusive, int maxIdxInclusive,
                                        Float minAllowedValue, Float maxAllowedValue, boolean allowNaN, boolean allowInfinite) 

一个方便的方法,用于添加多个浮点类型的列,带有额外的约束可以应用于所有的列。例如,添加这些列“myFloatCol_0”, “myFloatCol_1”, “myFloatCol_2”, 可以使用 {- code addColumnsFloat(“myFloatCol_%d”,0,2,null,null,false,false)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
  • 参数minAllowedValue是指允许的最小列值。如果为空,则没有限制。
  • 参数maxAllowedValue是指允许的最大列值,如果为空,则没有限制。
  • 参数allowNaN如果是false则不允许空值。如果是true则允许。
  • 参数allowInfinite如果是false则不允许无限大。如果是true则允许。
addColumnDouble
public Builder addColumnDouble(String name) 

添加双精度数据列,对允许值没有限制,除了不允许NAN/无限大值。

  • 参数name是列的名称
addColumnDouble
public Builder addColumnDouble(String name, Double minAllowedValue, Double maxAllowedValue) 
    添加双精度数据列,带有限制,并且不允许NAN/无限大值。
  • 参数name是指列的名称
  • 参数minAllowedValue是指允许的最小值,如果空,则没有限制
  • 参数maxAllowedValue是指允午的最大值,如果空,则没有限制
  • return
addColumnDouble
public Builder addColumnDouble(String name, Double minAllowedValue, Double maxAllowedValue, boolean allowNaN,
                        boolean allowInfinite) 
    添加双精度数据列,带有指定的限制
  • 参数name是指列的名称
  • 参数minAllowedValue是指允许的最小值,如果空,则没有限制
  • 参数maxAllowedValue是指允午的最大值,如果空,则没有限制
  • 参数allowNaN如果是false则不允许空值。如果是true则允许。
  • 参数allowInfinite如果是false则不允许无限大。如果是true则允许。
addColumnsDouble
public Builder addColumnsDouble(String... columnNames) 

添加多个双精度数据列,对列的允许值没有限制(除了不允许NAN/无限)

 

  • 参数columnNames是指要被添加的那些列名
addColumnsDouble
public Builder addColumnsDouble(String pattern, int minIdxInclusive, int maxIdxInclusive) 

一个方便的方法,用于添加多个双精度数据列。例如,添加这些列“myDoubleCol_0”, “myDoubleCol_1”, “myDoubleCol_2”, 可以使用 {- code addColumnsDouble(“myDoubleCol_%d”,0,2)}

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
addColumnsDouble
public Builder addColumnsDouble(String pattern, int minIdxInclusive, int maxIdxInclusive,
                        Double minAllowedValue, Double maxAllowedValue, boolean allowNaN, boolean allowInfinite) 

一个方便的方法,用于添加多个双精度数据列,带有额外的约束可以应用于所有的列。例如,添加这些列“myDoubleCol_0”, “myDoubleCol_1”, “myDoubleCol_2”, 使用 {- code addColumnsDouble(“myDoubleCol_%d”,0,2,null,null,false,false)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
  • 参数minAllowedValue是指允许的最小列值。如果为空,则没有限制。
  • 参数maxAllowedValue是指允许的最大列值,如果为空,则没有限制。
  • 参数allowNaN如果是false则不允许空值。如果是true则允许。
  • 参数allowInfinite如果是false则不允许无限大。如果是true则允许。
addColumnInteger
public Builder addColumnInteger(String name) 

添加一个整型数据列,在允许的值上不带限制

  • 参数name是指列的名称
addColumnInteger
public Builder addColumnInteger(String name, Integer minAllowedValue, Integer maxAllowedValue) 

添加一个整型数据列,带有指定的允午的最小值和最大值

  • 参数name是列名
  • 参数minAllowedValue是允许的最小值,如果是空,则没有限制
  • 参数maxAllowedValue是允许的最大值,如果是空,则没有限制
addColumnsInteger
public Builder addColumnsInteger(String... names) 

添加多个整型数据列,在允许的值上不带限制

 

  • 参数names是指要添加的那些整数列的列名
addColumnsInteger
public Builder addColumnsInteger(String pattern, int minIdxInclusive, int maxIdxInclusive) 

一个方便的方法,用于添加多个整数列。例如,添加这些列 “myIntegerCol_0”, “myIntegerCol_1”, “myIntegerCol_2”, 可以使用 {- code addColumnsInteger(“myIntegerCol_%d”,0,2)}

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
addColumnsInteger
public Builder addColumnsInteger(String pattern, int minIdxInclusive, int maxIdxInclusive,
                        Integer minAllowedValue, Integer maxAllowedValue) 

一个方便的方法,用来添加多个整型数据列。例如,添加这些列“myIntegerCol_0”, “myIntegerCol_1”, “myIntegerCol_2”, 可以使用 {- code addColumnsInteger(“myIntegerCol_%d”,0,2,1,100)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
  • 参数minAllowedValue是指允许的最小列值。如果为空,则没有限制。
  • 参数maxAllowedValue是指允许的最大列值,如果为空,则没有限制。
addColumnCategorical
public Builder addColumnCategorical(String name, String... stateNames) 

添加一个分类的列,带有指定的状态名

  • 参数name是指列的名称
  • 参数stateNames是指这个分类列允许的状态值
addColumnCategorical
public Builder addColumnCategorical(String name, List<String> stateNames) 

添加一个分类的列,带有指定的状态名

  • name是指列的名称
  • 参数stateNames是指这个分类列允许的状态值
addColumnLong
public Builder addColumnLong(String name) 

添加一个长整型数据列,在最小值和最大值上没有限制

  • 参数name是指列的名称
addColumnLong
public Builder addColumnLong(String name, Long minAllowedValue, Long maxAllowedValue) 

添加一个长整型数据列,带有指定的最小值和最大值

  • 参数name是指列的名称
  • 参数minAllowedValue是指允许的最小列值。如果为空,则没有限制。
  • 参数maxAllowedValue是指允许的最大列值,如果为空,则没有限制。

 

 

addColumnsLong
public Builder addColumnsLong(String... names) 

添加多个长整型数据列,在允许的值上不带有限制

  • 参数names是指你要添加的那些列的列名
addColumnsLong
public Builder addColumnsLong(String pattern, int minIdxInclusive, int maxIdxInclusive) 

一个方便的方法,用于添加多个长整型数据列。例如,添加这些列“myLongCol_0”, “myLongCol_1”, “myLongCol_2”, 可使用 {- code addColumnsLong(“myLongCol_%d”,0,2)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引

 

addColumnsLong
public Builder addColumnsLong(String pattern, int minIdxInclusive, int maxIdxInclusive, Long minAllowedValue,
                        Long maxAllowedValue) 

一个方便的方法,用于添加多个长整型数据列。例如,添加这些列“myLongCol_0”, “myLongCol_1”, “myLongCol_2”, 可使用 {- code addColumnsLong(“myLongCol_%d”,0,2,1,100)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
  • 参数minAllowedValue是指允许的最小列值。如果为空,则没有限制。
  • 参数maxAllowedValue是指允许的最大列值,如果为空,则没有限制。

 

 

 

addColumn
public Builder addColumn(ColumnMetaData metaData) 

添加一个列

  • 参数metaData是指这个列的元数据
addColumnString
public Builder addColumnString(String name) 

 添加一个字符列,在允许的值上不带有限制。

  •  参数name是指列的名称
addColumnsString
public Builder addColumnsString(String... columnNames) 

添加多个字符列,在允许的值上不带有限制。

  • 参数columnNames是指那些要被添加的列名
addColumnString
public Builder addColumnString(String name, String regex, Integer minAllowableLength,
                        Integer maxAllowableLength) 

添加一个例,带有指定的约束

  • 参数name是指列的名称
  • 参数regex是字符必须匹配的正则表大式,以便于被认为是有效的。如果是空,则没有正则限制。
  • 参数minAllowableLength是指被认为有效的最短的字符长度
  • 参数maxAllowableLength是指被认为有效的最长的字符长度
addColumnsString
public Builder addColumnsString(String pattern, int minIdxInclusive, int maxIdxInclusive) 

一个方便的方法,用于添加多个字符列。例如,添加这些列“myStringCol_0”, “myStringCol_1”, “myStringCol_2”, 可以使用 {- code addColumnsString(“myStringCol_%d”,0,2)}

  •  参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
addColumnsString
public Builder addColumnsString(String pattern, int minIdxInclusive, int maxIdxInclusive, String regex,
                        Integer minAllowedLength, Integer maxAllowedLength) 

 

一个方便的方法,用于添加多个字符列。例如,添加这些列“myStringCol_0”, “myStringCol_1”, “myStringCol_2”, 可以使用  {- code addColumnsString(“myStringCol_%d”,0,2,null,3,7)}

 

  • 参数pattern是使用的模式(通过String.format)。“%d”会被列号替换。
  • 参数minIdxInclusive是指最小的列索引
  • 参数maxIdxInclusive是指最大的列索引
  • 参数regex是字符必须匹配的正则表大式,以便于被认为是有效的。如果是空,则没有正则限制。
  • 参数minAllowableLength是指被认为有效的最短的字符长度
  • 参数maxAllowableLength是指被认为有效的最长的字符长度
addColumnTime
public Builder addColumnTime(String columnName, TimeZone timeZone) 

 

添加一个时间列,在允许的最大和最小时间上不带约束。注意:时间列是用长整型的值代替的。为了让时间值变成人可读的格式,使用列+ StringToTimeTransform

 

  • 参数columnName 是添加要列名
  • 参数timeZone是时间列的时区
addColumnTime
public Builder addColumnTime(String columnName, DateTimeZone timeZone) 

 

添加一个时间列,在允许的最大和最小时间上不带约束。注意:时间列是用长整型的值代替的。为了让时间值变成人可读的格式,使用列+ StringToTimeTransform

  • 参数columnName 是添加要列名
  • 参数timeZone是时间列的时区
addColumnTime
public Builder addColumnTime(String columnName, DateTimeZone timeZone, Long minValidValue, Long maxValidValue) 

 

添加一个时间列,带有指定的约束。注意:时间列是用长整型的值代替的。为了让时间值变成人可读的格式,使用列+ StringToTimeTransform

 

  •  参数columnName是要添加的列名
  • 参数timeZone是时间列的时区
  • 参数minValidValue是允许的最小时间,可以为空
  • 参数maxValidValue是允许的最大时间,可以为空
addColumnNDArray
public Builder addColumnNDArray(String columnName, long[] shape) 

添加一个NDArray列 

  • 参数columnName是指列的名称
  • 参数shape是指这个NDArray列的形状。在条目中使用-1指定该维度中的“可变长度”
build
public Schema build() 

创建概要

 

inferMultiple
public static Schema inferMultiple(List<List<Writable>> record)  

推断基于记录的概要。列名基于索引。

  • 参数record是指从哪个记录进行推断
  • 返回推断的概要

infer

public static Schema infer(List<Writable> record) 

推断基于记录的概要。列名基于索引。

  • 参数record是指从哪个记录进行推断
  • 返回推断的概要

SequenceSchema

[源码]

inferSequenceMulti
public static SequenceSchema inferSequenceMulti(List<List<List<Writable>>> record) 

 基于记录推断一个序列概要

  • 参数record是概要基于的需要推断的记录
  • 返回被推断的序列概要
inferSequence
public static SequenceSchema inferSequence(List<List<Writable>> record) 

基于记录推断一个序列概要

  • 参数record是概要基于的需要推断的记录
  • 返回被推断的序列概要

 

有任何问题请联系微信 

DataVec/概要
            
    
    博客分类: dl4j dl4jdeeplearning4jjava机器学习 

如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!

DataVec/概要
            
    
    博客分类: dl4j dl4jdeeplearning4jjava机器学习