数据1:kaggle-旧金山犯罪分类数据
格式如下:
Dates,Category,Descript,DayOfWeek,PdDistrict,Resolution,Address,X,Y
-- ::,WARRANTS,WARRANT ARREST,Wednesday,NORTHERN,"ARREST, BOOKED",OAK ST / LAGUNA ST,-122.425891675136,37.7745985956747
-- ::,OTHER OFFENSES,TRAFFIC VIOLATION ARREST,Wednesday,NORTHERN,"ARREST, BOOKED",OAK ST / LAGUNA ST,-122.425891675136,37.7745985956747
-- ::,OTHER OFFENSES,TRAFFIC VIOLATION ARREST,Wednesday,NORTHERN,"ARREST, BOOKED",VANNESS AV / GREENWICH ST,-122.42436302145,37.8004143219856
-- ::,LARCENY/THEFT,GRAND THEFT FROM LOCKED AUTO,Wednesday,NORTHERN,NONE, Block of LOMBARD ST,-122.42699532676599,37.80087263276921
-- ::,LARCENY/THEFT,GRAND THEFT FROM LOCKED AUTO,Wednesday,PARK,NONE, Block of BRODERICK ST,-122.438737622757,37.771541172057795
-- ::,LARCENY/THEFT,GRAND THEFT FROM UNLOCKED AUTO,Wednesday,INGLESIDE,NONE, Block of TEDDY AV,-122.40325236121201,37.713430704116
-- ::,VEHICLE THEFT,STOLEN AUTOMOBILE,Wednesday,INGLESIDE,NONE,AVALON AV / PERU AV,-122.423326976668,37.7251380403778
-- ::,VEHICLE THEFT,STOLEN AUTOMOBILE,Wednesday,BAYVIEW,NONE,KIRKWOOD AV / DONAHUE ST,-122.371274317441,37.7275640719518
-- ::,LARCENY/THEFT,GRAND THEFT FROM LOCKED AUTO,Wednesday,RICHMOND,NONE, Block of 47TH AV,-122.508194031117,37.776601260681204 测试代码: public static void main(String[] args) { SparkSession spark = SparkSession.builder().enableHiveSupport()
.getOrCreate();
Dataset<Row> dataset = spark
.read()
.format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
.option("header", true)
.option("inferSchema", true)
.option("delimiter", ",")
.load("file:///E:/git/bigdata_sparkIDE/spark-ide/workspace/test/SparkMLTest/SanFranciscoCrime/document/kaggle-旧金山犯罪分类/train-new.csv")
.persist(); DataPreProcess(dataset); } //此函数包含StringIndexer,OneHotEncoder,VectorAssembler,VectorIndexer数据转换方法
public static Dataset<Row> DataPreProcess(Dataset<Row> data) { //Dataset<Row> df = data.selectExpr("cast(Dates as String) ,DayOfWeek,PdDistrict,Category".split(",")); Dataset<Row> df = data.select(data.col("Dates").cast("String").alias("Dates"),data.col("DayOfWeek").alias("DayOfWeek"),data.col("PdDistrict"),data.col("Category"));
df.printSchema();
// 重新索引标签值 SparkLog.info(data.select("Category").distinct().count()); //将非数字类型标签转换成数字类型,按照标签去重的个数n,编号0~n,相同标签的多行记录转换后的数字标签编号相同
//这个适合所有非数字且不连续的有限类别数据编号,不仅仅是只能编号标签
StringIndexerModel labelIndexer = new StringIndexer()
.setInputCol("Category").setOutputCol("label").fit(df); StringIndexerModel DateIndexer = new StringIndexer()
.setInputCol("Dates").setOutputCol("DatesNum").fit(df); StringIndexerModel DayOfWeekIndexer = new StringIndexer()
.setInputCol("DayOfWeek").setOutputCol("dfNum").fit(df); StringIndexerModel PdDistrictIndexer = new StringIndexer()
.setInputCol("PdDistrict").setOutputCol("pdNum").fit(df); /*独热编码将类别特征(离散的,已经转换为数字编号形式(这个是必须的,否则会报错),
映射成独热编码,生成的是一个稀疏向量
比如字符串"abcab"的映射规则:去重后的特征个数n即为稀疏向量的维数,而数字编号代
表该特征对应的向量中非0值的下标,最后生成0-1编码的向量
a 1 0 0
b 0 1 0
c 0 0 1
a 1 0 0
b 0 1 0
*/ //OneHotEncoder不需要fit
OneHotEncoder encoder = new OneHotEncoder().setInputCol("dfNum")
.setOutputCol("dfvec")
.setDropLast(false); // 设置最后一个是否包含 OneHotEncoder encoder1 = new OneHotEncoder().setInputCol("pdNum")
.setOutputCol("pdvec")
.setDropLast(false);// 设置最后一个是否包含 OneHotEncoder encoder2 = new OneHotEncoder().setInputCol("DatesNum")
.setOutputCol("Datesvec")
.setDropLast(false);// 设置最后一个是否包含 //将多个列拼接成一个向量,列的类型可以是向量
VectorAssembler assembler = new VectorAssembler().setInputCols(
"Datesvec,dfvec,pdvec".split(",")).setOutputCol("features"); // Dataset<Row> assembledFeatures = assembler.transform(df); Pipeline pipeline = new Pipeline().setStages(new PipelineStage[] {
DateIndexer, DayOfWeekIndexer, PdDistrictIndexer, encoder,
encoder1, encoder2, labelIndexer, assembler }); // Train model. This also runs the indexers.
PipelineModel model = pipeline.fit(df); // Make predictions.
Dataset<Row> predictions = model.transform(df);
predictions.describe("label").show();
predictions.show(, false); return predictions; } +-------------------+---------+----------+--------------+--------+-----+-----+-------------+--------------+-----------------------+-----+---------------------------------------------+
|Dates |DayOfWeek|PdDistrict|Category |DatesNum|dfNum|pdNum|dfvec |pdvec |Datesvec |label|features |
+-------------------+---------+----------+--------------+--------+-----+-----+-------------+--------------+-----------------------+-----+---------------------------------------------+
|-- ::|Wednesday|NORTHERN |WARRANTS |172231.0|1.0 |2.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0])|7.0 |(,[,,],[1.0,1.0,1.0])|
|-- ::|Wednesday|NORTHERN |OTHER OFFENSES|172231.0|1.0 |2.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0])|1.0 |(,[,,],[1.0,1.0,1.0])|
|-- ::|Wednesday|BAYVIEW |LARCENY/THEFT |330092.0|1.0 |3.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0])|0.0 |(,[,,],[1.0,1.0,1.0])|
|-- ::|Wednesday|MISSION |OTHER OFFENSES|387792.0|1.0 |1.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0])|1.0 |(,[,,],[1.0,1.0,1.0])|
|-- ::|Wednesday|SOUTHERN |BURGLARY |32607.0 |1.0 |0.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0]) |8.0 |(,[,,],[1.0,1.0,1.0]) |
|-- ::|Wednesday|BAYVIEW |LARCENY/THEFT |32607.0 |1.0 |3.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0]) |0.0 |(,[,,],[1.0,1.0,1.0]) |
|-- ::|Wednesday|PARK |LARCENY/THEFT |32607.0 |1.0 |8.0 |(,[],[1.0])|(,[],[1.0])|(,[],[1.0]) |0.0 |(,[,,],[1.0,1.0,1.0]) |
+-------------------+---------+----------+--------------+--------+-----+-----+-------------+--------------+-----------------------+-----+---------------------------------------------+
only showing top rows
*******************************************************************************************************************

数据2:

id,name,age,sex,rate
,lyy,,F,0.6
,rdd,,M,0.4
,nyc,,M,0.55
,mzy,,M,0.21
 //Binarizer二值化: 将该列数据二值化,大于阈值的为1.0,否则为0.0  spark源码:udf { in: Double => if (in > td) 1.0 else 0.0 }

 Dataset<Row> result = new Binarizer()
.setInputCol("rate")
.setOutputCol("flag")
.setThreshold(0.5).transform(data); result.show(, false);
+---+----+---+---+----+----+
|id |name|age|sex|rate|flag|
+---+----+---+---+----+----+
| |lyy | |F |0.6 |1.0 |
| |rdd | |M |0.4 |0.0 |
| |nyc | |M |0.55|1.0 |
| |mzy | |M |0.21|0.0 |
+---+----+---+---+----+----+
 //IndexToString将stringindexder转换的数据转回到原始的数据

  StringIndexer labelIndexer = new StringIndexer()
.setInputCol("sex")
.setOutputCol("label"); IndexToString IndexToSex = new IndexToString()
.setInputCol("label")
.setOutputCol("orisex"); Pipeline pipeline = new Pipeline().setStages(new PipelineStage[] { labelIndexer, IndexToSex});
PipelineModel model = pipeline.fit(data); // Make predictions.
Dataset<Row> result = model.transform(data); result.show(, false);

                 //Bucketizer 分箱(分段处理):将连续数值转换为离散类别
//比如特征是年龄,是一个连续数值,需要将其转换为离散类别(未成年人、青年人、中年人、老年人),就要用到Bucketizer了
//如age > 55 老年人
double[] splits={,,,,Double.POSITIVE_INFINITY};//[0,18),[18,35),[35,55),[55,正无穷)
Dataset<Row> result=new Bucketizer()
.setInputCol("age")
.setOutputCol("bucketCategory")
.setSplits(splits)//设置分段标准
.transform(data); result.show(, false);

												

sparkML原始数据转换成label-features方法的更多相关文章

  1. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;

    ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口:       2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...

  2. [数据库] SQL查询语句表行列转换及一行数据转换成两列

    原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...

  3. ASP.Net中实现上传过程中将文本文件转换成PDF的方法

    iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...

  4. 【转】C#中将JSon数据转换成实体类,将实体类转换成Json

    http://wo13145219.iteye.com/blog/2022667 http://json2csharp.chahuo.com/ using System; using System.C ...

  5. OC中如何把数组中字典的数据转换成URL?

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

  6. 利用JAVA反射机制将JSON数据转换成JAVA对象

    net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转 ...

  7. 用JavaScript将Canvas内容转化成图片的方法

    上周我们花了半天时间开发下一个准备放进Mozilla Marketplace的应用.有一个应用现在非常的火热,那就是Instagram,Facebook花了100万美元收购了它.我们也想有100万美元 ...

  8. 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据

    第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...

  9. 将undefault和null的数据转换成bool类型的数据 使用!!

    <script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...

随机推荐

  1. “->”和“.”运算符

    1.指向结构变量的指针. 2.定义:struct stu *pstu, 赋值是把结构变量的首地址赋给指针,不能把结构名给该指针:如, pstu = &boy; 3. 访问结构变量的成员 (*结 ...

  2. unittest单元测试框架之unittest 框架的总结(七)

    1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...

  3. Drbd双机环境安装配置

    一.环境准备 1) 操作系统:ubuntu-14.04.1 x64 2) Ubuntu1 192.168.5.179 /dev/sdb1 主节点 Ubuntu2 192.168.5.178 /dev/ ...

  4. Mybatis Mapper动态代理方式 typeAliases 别名的使用

    目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...

  5. Swiper2和Swiper3区别详解与兼容IE8/IE9

    最近项目一些网站项目想到用Swiper3来制作响应式,但是发现IE9都不兼容, 而swiper2版本又少一个breakpoints参数 做响应式脚本非常不方便,于是想到新版的浏览器用3  ,iE9和以 ...

  6. mysql alter 增加修改表结构及约束

    1) 加索引,添加时若未指定索引名,默认为字段名   mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]); 例子: mysql> alt ...

  7. Java 序列化与反序列化(Serialization)

    一.什么是?为什么需要? 序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,反序列化则为其逆过程. 内存的易失性:传输需要:一些应用场景中需要将对象持久化下来, ...

  8. 06JavaScript变量

    JavaScript 变量 变量是用于存储信息的"容器". var x=5; var y=6; var z=x+y; 就像代数那样 x=5 y=6 z=x+y 在代数中,我们使用字 ...

  9. wso2 ei 6.4.0安装笔记

    目的:将最新版(6.4.0)部署在linux服务器,与Api Manager部署在同一环境 环境: Centos 7.3 Jdk 8 Mysql 5.7 问题一: 将H2替换为Mysql5.7数据库时 ...

  10. PHP 中根据 IP 获取地址

    这里使用的是淘宝 IP 地址库提供的 API 接口. 淘宝 IP 地址库:http://ip.taobao.com/instructions.html API 文档说明:  使用事例: /** * 调 ...