Spark2-数据探索
- freqItems
- sampleBy
- cov
- crosstab
- approxQuantitle
- boolmFilter 布隆选择器
- corr 皮尔逊相关系数
- countMinSketch
Spark2为DataSet/DataFrame提供了一个stat方法,会返回一个DataFrameStatFunctins对象,可以调用其方法来实现数据的探索功能。
- df.stat.freqIterms(Seq("age"))
1 freqItems
包含了4个重载方法:
- freqItems(cols:Seq[string]):DataFrame
- freqItems(cols:Seq[string],support:Double):DataFrame
- freqItems(cols:Array[String]):DataFrame
- freqItems(cols:Array[String],support:Double):DataFrame
查看字段中的频繁元素集合,返回每个字段保安一个数组,包含了所有去重后的元素。support表示最小的频繁项阀值,默认为1%,如果元素的频繁数小于1%那么就会被忽略
- val rows = Seq.tabulate() { i =>
- if (i % == ) (, -1.0) else (i, i * -1.0)
- }
- val df = spark.createDataFrame(rows).toDF("a", "b")
- // find the items with a frequency greater than 0.4 (observed 40% of the time) for columns
- // "a" and "b"
- val freqSingles = df.stat.freqItems(Array("a", "b"), 0.4)
- freqSingles.show()
- +-----------+-------------+
- |a_freqItems| b_freqItems|
- +-----------+-------------+
- | [, ]|[-1.0, -99.0]|
- +-----------+-------------+
- // find the pair of items with a frequency greater than 0.1 in columns "a" and "b"
- val pairDf = df.select(struct("a", "b").as("a-b"))
- val freqPairs = pairDf.stat.freqItems(Array("a-b"), 0.1)
- freqPairs.select(explode($"a-b_freqItems").as("freq_ab")).show()
- +----------+
- | freq_ab|
- +----------+
- | [,-1.0]|
- | ... |
- +----------+
2 sampleBy
包含了两个重载方法:
- sampleBy[T](col:String,fractions:Map[T,Double],seed:Long):DataFrame
- sampleBy[T](col:String,fractions:Map[T,Double],seed:Long):DataFrame
根据某个字段进行分层抽样,根据给定的分层百分比返回不经过替换的分层样本。fractions如果不指定,会使用0.
- val df = spark.createDataFrame(Seq((, ), (, ), (, ), (, ), (, ), (, ),
- (, ))).toDF("key", "value")
- val fractions = Map( -> 1.0, -> 0.5)
- df.stat.sampleBy("key", fractions, 36L).show()
- +---+-----+
- |key|value|
- +---+-----+
- | | |
- | | |
- | | |
- +---+-----+
3 cov
- cov(col1:String,col2:String):String
计算两个字段之间的协方差。
- val df = sc.parallelize( until ).toDF("id").withColumn("rand1", rand(seed=))
- .withColumn("rand2", rand(seed=))
- df.stat.cov("rand1", "rand2")
- res1: Double = 0.065...
4 crosstab
- crosstab(col1:Stirng,col2:String):DataFrame
交叉列表为一组变量提供了频率分布表,在统计学中被经常用到。例如在对租车行业的数据进行分析时,需要分析每个客户(name)租用不同品牌车辆(brand)的次数。此时,就可以直接调用crosstab函数。如果同时按几个变量或特征,把数据分类列表时,这样的统计表叫作交叉分类汇总表,其主要用来检验两个变量之间是否存在关系,或者说是否独立。
计算给定列的分组频数表,也称为相关表。每一列的去重值的个数应该小于1e4.最多返回1e6个非零对.每一行的第一列会是col1的去重值,列名称是col2的去重值。第一列的名称是$col1_$col2. 没有出现的配对将以零作为计数。DataFrame.crosstab() and DataFrameStatFunctions.crosstab()类似。
参数:● col1 – 第一列的名称. 去重项作为每行的第一项。
● col2 – 第二列的名称. 去重项作为DataFrame的列名称。
- val df = spark.createDataFrame(Seq((, ), (, ), (, ), (, ), (, ), (, ), (, )))
- .toDF("key", "value")
- val ct = df.stat.crosstab("key", "value")
- ct.show()
- +---------+---+---+---+
- |key_value| | | |
- +---------+---+---+---+
- | | | | |
- | | | | |
- | | | | |
- +---------+---+---+---+
5 approxQuantitle
- approxQuantile(cols:Array[String],probabilities:Array[Double],relativeError:Double):Array[Array[Double]]
- approxQuantile(col:String,probailities:Array[Double],relativeError:Double):Array[Double]
计算近似分位数,其中null和NaN将会在计算之前被忽略掉,如果该列为空,或者只包含null、NaN,那么将会返回一个空Array,也就是Nil
- cols:需要计算分位数的Columns。
- probabilities:分位数的位置,要求[0,1]之间,0是最小值,0.5是中位数,1是最大值。
- relativeError:相对误差,数字越小,结果越准确,但是计算代价也越大。
6 boolmFilter 布隆选择器
比较经典的判断元素是否存在的方法,牺牲精确度换空间的方法。4个重载方法:
- bloomFilter(col:Column,expecteNumItems:Long,numBits:Long):BloomFilter
- bloomFilter(colName:String,expectedNumIterms:Long,numBits:Long):BloomFilter
- bloomFilter(col:Column,expectedNumItems:Long,fpp:Double):BloomFilter
- bloomFilter(colName:String,expectedNumItems:Long,fpp:Double):BoolmFilter
colName/col:需要进行构建布隆选择器的列
expectedNumItems:预计将要被放入布隆选择器中的元素数量;
numBits:布隆选择器的预期位数,也就是Bits的长度
fpp:过滤器的错误概率,假阳性概率,该值越大,那么被错误判断不存在的值被判断为存在的概率越大
资料1:http://lxw1234.com/archives/2015/12/580.htm
资料2:https://www.jianshu.com/p/b0c0edf7686e
7 corr 皮尔逊相关系数
两个重载方法:
- corr(col1:String,col2:String):Double
- corr(col1:String,col2:String,method:String):Double
- val df = sc.parallelize( until ).toDF("id").withColumn("rand1", rand(seed=))
- .withColumn("rand2", rand(seed=))
- df.stat.corr("rand1", "rand2", "pearson")
- res1: Double = 0.613...
8 countMinSketch
用于统计大数据情况中的非精确数据频次。使用哈希原理,牺牲精确度换空间与实践,结果估算偏大,但是不会偏小,只需要固定大小的内存和计算实践,和需要统计的元素多少没有关系,对于低频次的元素,估算的相对误差可能比较大。
- countMinSketch(col:Column,eps:Double,confidence:Double,seed:Int):CountMinSketch
- countMinSketch(col:Column,depth:Int,width:Int,seed:Int):CountMinSketch
- countMinSketch(colName:String,eps:Double,confidence:Double,seed:Int):CountMinSketch
- countMinSketch(colName:String,depth:Int,width:Int,seed:Int):CountMinSketch
col:需要计算sketch的列
depth:sketch的深度
width:sketch的宽度
seed:随机种子
eps:相对误差
confidence:置信度?不确定
Spark2-数据探索的更多相关文章
- postgresql-分页重复数据探索
# postgresql-分页重复数据探索 ## 问题背景 许多开发和测试人员都可能遇到过列表的数据翻下一页的时候显示了上一页的数据,也就是翻页会有重复的数据. ### 如何处理? 这个问题出现的原因 ...
- python数据探索
数据质量分析 脏数据包括:缺失值:异常值:不一致的值:重复数据及含有特殊符号的数据: 1.缺失值处理 统计缺失率,缺失数 2.异常值处理 (1)简单统计量分析 (2)3Q原则 正态分布情况下,小概率事 ...
- 数据挖掘(二)用python实现数据探索:汇总统计和可视化
今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...
- Kaggle:Home Credit Default Risk 数据探索及可视化(1)
最近博主在做个 kaggle 竞赛,有个 Kernel 的数据探索分析非常值得借鉴,博主也学习了一波操作,搬运过来借鉴,原链接如下: https://www.kaggle.com/willkoehrs ...
- 利用python进行泰坦尼克生存预测——数据探索分析
最近一直断断续续的做这个泰坦尼克生存预测模型的练习,这个kaggle的竞赛题,网上有很多人都分享过,而且都很成熟,也有些写的非常详细,我主要是在牛人们的基础上,按照数据挖掘流程梳理思路,然后通过练习每 ...
- Python机器学习之数据探索可视化库yellowbrick
# 背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plot ...
- Python机器学习之数据探索可视化库yellowbrick-tutorial
背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly ...
- python数据挖掘之数据探索第一篇
目录 数据质量分析 当我们得到数据后,接下来就是要考虑样本数据集的数据和质量是否满足建模的要求?是否出现不想要的数据?能不能直接看出一些规律或趋势?每个因素之间的关系是什么? 通过检验数据集的 ...
- python数据探索与数据与清洗概述
数据探索的核心: 1.数据质量分析(跟数据清洗密切联系,缺失值.异常值等) 2.数据特征分析(分布.对比.周期性.相关性.常见统计量等) 数据清洗的步骤: 1.缺失值处理(通过describe与len ...
- python数据处理(七)之数据探索和分析
1.探索数据 1.1 安装agate库 1.2 导入数据 1.3 探索表函数 a.排序 b.最值,均值 c.清除缺失值 d.过滤 e.百分比 1.4 连结多个数据集 a.捕捉异常 b.去重 c.缺失数 ...
随机推荐
- UDS诊断学习笔记
定义介绍: UDS(Unified Diagnostic Service)诊断的诊断服务.诊断协议是面向整车所有ECU(电控单元)的一种诊断通信协议,是诊断服务的规范化标准. UDS本质上是一系列服务 ...
- Andrew Ng机器学习 一: Linear Regression
一:单变量线性回归(Linear regression with one variable) 背景:在某城市开办饭馆,我们有这样的数据集ex1data1.txt,第一列代表某个城市的人口,第二列代表在 ...
- 【项目管理工具】—— Microsoft Office Project 介绍
Project是由微软开发的项目管理软件.设计的目的在于协助项目经理发展计划,为任务分配资源.跟踪计划.管理预算和分析工作量. 对于我们之前的项目来说,之前的整体计划和WBS任务分解都是通过Excel ...
- tensorflow API _ 4 (优化器配置)
"""Configures the optimizer used for training. Args: learning_rate: A scalar or `Tens ...
- 关于原生js的节点兼容性
关于节点的兼容性: 1:获取元素的子节点 a: childNodes:获取元素的子节点,空文本,非空文本,注释,获取的比较全面, 如果只是想获取元素的子节点,请用(children) b: c ...
- python - django 实现文件下载功能
使用 Django 搭建的网站中添加一个可以从服务器中下载文件的功能 (此处演示一个从网站中下载API文档的例子供参考) # 一.url urlpatterns = [ # 下载 API 接口文档 ...
- Python爬虫进阶 | 多线程
一.简介 为了提高爬虫程序效率,由于python解释器GIL,导致同一进程中即使有多个线程,实际上也只会有一个线程在运行,但通过request.get发送请求获取响应时有阻塞,所以采用了多线程依然可以 ...
- Windows本机调试内部组件
将详细分析Windows调试的本机接口.希望读者对C和通用NT内核体系结构和语义有一些基本的了解.此外,这并不是介绍什么是调试或如何编写调试器.它可以作为经验丰富的调试器编写人员或好奇的安全专家的参考 ...
- Codeforces 526C.Om Nom and Candies
题目描述 一个只有两个物品的背包问题,但是范围都是1e9,需要考虑根号或者log的复杂度. 如果这两个物品中的某一个花费超过了根号C,那么我们可以直接枚举这件物品的数量,另一件物品的数量可以计算得出. ...
- Programming a robot
题目链接:Gym - 101492H 自己的纯暴力做法: /* */ # include <iostream> # include <cstdio> # include < ...