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-数据探索的更多相关文章

  1. postgresql-分页重复数据探索

    # postgresql-分页重复数据探索 ## 问题背景 许多开发和测试人员都可能遇到过列表的数据翻下一页的时候显示了上一页的数据,也就是翻页会有重复的数据. ### 如何处理? 这个问题出现的原因 ...

  2. python数据探索

    数据质量分析 脏数据包括:缺失值:异常值:不一致的值:重复数据及含有特殊符号的数据: 1.缺失值处理 统计缺失率,缺失数 2.异常值处理 (1)简单统计量分析 (2)3Q原则 正态分布情况下,小概率事 ...

  3. 数据挖掘(二)用python实现数据探索:汇总统计和可视化

    今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...

  4. Kaggle:Home Credit Default Risk 数据探索及可视化(1)

    最近博主在做个 kaggle 竞赛,有个 Kernel 的数据探索分析非常值得借鉴,博主也学习了一波操作,搬运过来借鉴,原链接如下: https://www.kaggle.com/willkoehrs ...

  5. 利用python进行泰坦尼克生存预测——数据探索分析

    最近一直断断续续的做这个泰坦尼克生存预测模型的练习,这个kaggle的竞赛题,网上有很多人都分享过,而且都很成熟,也有些写的非常详细,我主要是在牛人们的基础上,按照数据挖掘流程梳理思路,然后通过练习每 ...

  6. Python机器学习之数据探索可视化库yellowbrick

    # 背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plot ...

  7. Python机器学习之数据探索可视化库yellowbrick-tutorial

    背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly ...

  8. python数据挖掘之数据探索第一篇

    目录 数据质量分析   当我们得到数据后,接下来就是要考虑样本数据集的数据和质量是否满足建模的要求?是否出现不想要的数据?能不能直接看出一些规律或趋势?每个因素之间的关系是什么?   通过检验数据集的 ...

  9. python数据探索与数据与清洗概述

    数据探索的核心: 1.数据质量分析(跟数据清洗密切联系,缺失值.异常值等) 2.数据特征分析(分布.对比.周期性.相关性.常见统计量等) 数据清洗的步骤: 1.缺失值处理(通过describe与len ...

  10. python数据处理(七)之数据探索和分析

    1.探索数据 1.1 安装agate库 1.2 导入数据 1.3 探索表函数 a.排序 b.最值,均值 c.清除缺失值 d.过滤 e.百分比 1.4 连结多个数据集 a.捕捉异常 b.去重 c.缺失数 ...

随机推荐

  1. 191017 虚拟机centos修改IP

    1. 虚拟机设置 1.1 编辑-->虚拟机网络编辑器-->VMnet8-->更改设置-->DHCP设置取消打勾 -->选择NAT模式,查看网关IP 2. 本地网络设置 更 ...

  2. mysqlbinlog 恢复数据到任意时间点

    创建表,插入数据. ``` mysql> create database binlog; mysql> create table bt(id int); mysql> insert ...

  3. Pthon魔术方法(Magic Methods)-可视化

    Pthon魔术方法(Magic Methods)-可视化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关于可视化的魔术方法简介 __str__: str()函数,format ...

  4. es6 字符串模板拼接和传统字符串拼接

    字符串拼接是在日常开发中必不可少的一个环节. 注意:字符串可以用单引号'',或者""双引号,出于方便大家理解,文章以下内容统一使用单引号''! 如果只是一个字符串和一个变量拼接,使 ...

  5. oracle plsql 实现apriori算法

    对apriori关联关系算法研究了一段时间,网上能搜到的例子,大部分是python写的,数据集长得像下面这样: [[I1,I2,I5],[I2,I4],[I2,I3],[I1,I2,I4],[I1,I ...

  6. Dynamics CRM 数据数量限制更改

    1.在CRM2016中如果想要导出超过10000记录数据,更新 MaxRecordsForExportToExcel  这个字段的值. SELECT MaxRecordsForExportToExce ...

  7. include指令 include动作

  8. 03-Flutter移动电商实战-底部导航栏制作

    1.cupertino_IOS风格介绍 在Flutter里是有两种内置风格的: material风格: Material Design 是由 Google 推出的全新设计语言,这种设计语言是为手机.平 ...

  9. Windows 2008R2 安装PostgreSQL 11.6

    前些天在CentOS 7.5 下安装了PostgreSQL 11.6.除了在无外网环境下需要另外配置之外,其他没有什么差别.今天主要写一下在Windows下面安装PostgreSQL的问题. 在官网看 ...

  10. HTTP协议(待写)

    先来了解了解 TCP/IP TCP/IP(Transmission Control Protocol / Internet Protocol)是计算机通讯必须遵守的规则,是不同的通信协议的大集合,其里 ...