`
bewithme
  • 浏览: 423281 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DataVec/概要

    博客分类:
  • dl4j
阅读更多

为什么要使用概要?

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

 

使用概要

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

 

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是概要基于的需要推断的记录
  • 返回被推断的序列概要

 

有任何问题请联系微信 

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

   

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics