pandas、spark计算相关性系数速度对比

相关性计算有三种算法:pearson、spearman,kenall。

在pandas库中,对一个Dataframe,可以直接计算这三个算法的相关系数correlation,方法为:data.corr()

底层是依赖scipy库的算法。

为了提升计算速度,使用spark平台来加速执行。

比较了pandas,spark并发scipy算法,spark mllib库的计算速度。

总体来说,spark mllib速度最快,其次是spark并发,pandas速度最慢。

corr执行速度测试结果

时间单位:秒

数据大小 corr算法 pandas spark + scipy spark mllib 备注
1000*3600 pearsonr 203 170 37 pyspark
1000*3600 pearsonr 203 50 没有计算 spark scipy计算一半
1000*3600 pearsonr 203 125 37 client模式
1000*3600 pearsonr 202 157 38 client模式
1000*3600 spearmanr 1386 6418 37 client模式
1000*3600 spearmanr 1327 6392 38 client模式
1000*3600 kendall 4326 398 无此算法 client模式
1000*3600 kendall 4239 346 无此算法 client模式
1000*1000 spearmanr 127 294 12 client 模式
1000*1000 spearmanr 98 513 5.55 client 模式
1000*360 spearmanr 13 150 没有计算 160秒,列表推导式 res = [st.spearmanr(data.iloc[:, i], data.iloc[:, j])[0] for i in range(N) for j in range(N)]
1000*360 kendall 40 45 无此算法 116秒,列表推导式 res = [st.kendall(data.iloc[:, i], data.iloc[:, j])[0] for i in range(N) for j in range(N)]

说明:spearmanr 算法在spark scipy组合下执行速度较慢,需要再对比分析,感觉存在问题的。


三种算法脚本如下:

pandas 脚本


import numpy as np
import pandas as pd
import time C = 1000
N = 3600 data = pd.DataFrame(np.random.randn(C * N).reshape(C, -1)) print("============================ {}".format(data.shape))
print("start pandas corr ---{} ".format(time.time()))
start = time.time()
# {'pearson', 'kendall', 'spearman'}
res = data.corr(method='pearson')
end_1 = time.time() res = data.corr(method='spearman')
end_2 = time.time() res = data.corr(method='kendall')
end_3 = time.time() print("pandas pearson count {} total cost : {}".format(len(res), end_1 - start))
print("pandas spearman count {} total cost : {}".format(len(res), end_2 - end_1))
print("pandas kendall count {} total cost : {}".format(len(res), end_3 - end_2))

spark scipy脚本

from pyspark import SparkContext
sc = SparkContext()
import numpy as np
import pandas as pd
from scipy import stats as st
import time # t1 = st.kendalltau(x, y)
# t2 = st.spearmanr(x, y)
# t3 = st.pearsonr(x, y) C = 1000
N = 3600 data = pd.DataFrame(np.random.randn(C * N).reshape(C, -1)) def pearsonr(n):
x = data.iloc[:, n]
res = [st.pearsonr(x, data.iloc[:, i])[0] for i in range(data.shape[1])]
return res def spearmanr(n):
x = data.iloc[:, n]
res = [st.spearmanr(x, data.iloc[:, i])[0] for i in range(data.shape[1])]
return res def kendalltau(n):
x = data.iloc[:, n]
res = [st.kendalltau(x, data.iloc[:, i])[0] for i in range(data.shape[1])]
return res start = time.time()
res = sc.parallelize(np.arange(N)).map(lambda x: pearsonr(x)).collect()
# res = sc.parallelize(np.arange(N)).map(lambda x: spearmanr(x)).collect()
# res = sc.parallelize(np.arange(N)).map(lambda x: kendalltau(x)).collect()
end = time.time() print("pearsonr count {} total cost : {}".format(len(res), end - start))
print("spearmanr count {} total cost : {}".format(len(res), end - start))
print("kendalltau count {} total cost : {}".format(len(res), end - start)) # 纯python算法
s = time.time()
res = [st.spearmanr(data.iloc[:, i], data.iloc[:, j])[0] for i in range(N) for j in range(N)]
end = time.time()
print(end-s) start = time.time()
dd = sc.parallelize(res).map(lambda x: st.spearmanr(data.iloc[:, x[0]], data.iloc[:, x[1]])).collect()
end = time.time()
print(end-start) start = time.time()
dd = sc.parallelize(res).map(lambda x: st.kendalltau(data.iloc[:, x[0]], data.iloc[:, x[1]])).collect()
end = time.time()
print(end-start)

spark mllib脚本

from pyspark import SparkContext
sc = SparkContext()
from pyspark.mllib.stat import Statistics
import time
import numpy as np L = 1000
N = 3600
t = [np.random.randn(N) for i in range(L)] data = sc.parallelize(t) start = time.time()
res = Statistics.corr(data, method="pearson") # spearman pearson
end = time.time()
print("pearson : ", end-start) start = time.time()
res = Statistics.corr(data, method="spearman") # spearman pearson
end = time.time()
print("spearman: ", end-start)

pandas、spark计算相关性系数速度对比的更多相关文章

  1. 相关性系数及其python实现

    参考文献: 1.python 皮尔森相关系数 https://www.cnblogs.com/lxnz/p/7098954.html 2.统计学之三大相关性系数(pearson.spearman.ke ...

  2. 统计学三大相关性系数:pearson,spearman,kendall

    目录 person correlation coefficient(皮尔森相关性系数-r) spearman correlation coefficient(斯皮尔曼相关性系数-p) kendall ...

  3. Spark计算模型

    [TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...

  4. spark计算两个DataFrame的差集、交集、合集

    spark 计算两个dataframe 的差集.交集.合集,只选择某一列来对比比较好.新建两个 dataframe : import org.apache.spark.{SparkConf, Spar ...

  5. 【原创 Hadoop&Spark 动手实践 7】Spark 计算引擎剖析与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark计算引擎剖析与动手实践 目标: 1. 理解Spark计算引擎的理论知识 2. 动手实践更深入的理解Spark计算引擎的细节 3. 通过 ...

  6. 【Spark深入学习 -13】Spark计算引擎剖析

    ----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark ...

  7. Java进行spark计算

    首先在Linux环境安装spark: 可以从如下地址下载最新版本的spark: https://spark.apache.org/downloads.html 这个下载下来后是个tgz的压缩包,解压后 ...

  8. 【Python学习笔记】使用Python计算皮尔逊相关系数

    源代码不记得是哪里获取的了,侵删.此处博客仅作为自己笔记学习. def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] ...

  9. Pandas统计计算和描述

    Pandas统计计算和描述 示例代码: import numpy as np import pandas as pd df_obj = pd.DataFrame(np.random.randn(5,4 ...

  10. 相关性系数缺点与证明 k阶矩

    相关性系数 https://baike.baidu.com/item/相关系数/3109424?fr=aladdin 缺点 需要指出的是,相关系数有一个明显的缺点,即它接近于1的程度与数据组数n相关, ...

随机推荐

  1. 【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤

    简介: 以测试集群版本为例(EMR-4.4.1)-- Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1.以测试集群版本 ...

  2. 当Java遇上机密计算,又一段奇幻之旅开始了!

    ​简介: 汪少军:如何为Java业务提供机密计算保护? ​ 写在前面 在信息世界里,数据存在三种状态: 存储态.传输态和计算态.存储在数据库或磁盘中的数据属于存储状态,在网络中传输的数据属于传输状态, ...

  3. vue中使用vue-b2wordcloud创建词云

    安装使用 安装:使用npm install vue-b2wordcloud --save或者直接在vue ui中添加vue-b2wordcloud运行依赖 使用:在main.js中导入使用 impor ...

  4. STM32【HAL库】使用外部SRAM程序

    #include <board.h> #ifdef BSP_USING_SRAM #include <drv_common.h> #include <rtthread.h ...

  5. ESP32 I2C 总线主模式通信程序

    一.概述 这里主要是记录 ESP32 中进行 I2C 通行的基本程序,也可以说是 I2C 总线驱动程序,当然这里只是作为主模式,从模式我还没需要这个需求,以后有机会贴上.此笔记的主要目的是防止以后写 ...

  6. 通过虚拟机镜像部署zabbix

    前言 由于基础镜像的缘故,zabbix部署过程中很可能出现各种缺少依赖包的情况,如果环境中又无法连接互联网,系统部署会非常麻烦.为此zabbix官方提供了虚拟机镜像,导入后可以直接在平台上拉起虚拟机, ...

  7. 书生浦语大模型全链路开源体系-书生浦语大模型实战营学习笔记1&大语言模型2

    大语言模型-2.书生浦语大模型全链路开源体系 书生浦语大模型实战营学习笔记-1.认识书生浦语大模型全链路开源体系 本系列随笔学习搬运第二期书生浦语大模型实战营的相关内容,通过使用InternLM的一套 ...

  8. Linux(二):Linux的灵魂

    上次说Linux的前世今生的时候,提了一句,就像学习java一样,我们有一个核心的准则 "万物皆对象" ,学习Linux,同样有基本准则,这也是Linux的最基本的特点,那就是&q ...

  9. Vue3 echarts 组件化使用 resizeObserver

    点击查看代码 const resizeObserver = ref(null); //进行初始化和监听窗口变化 onMounted(async () => { await nextTick(() ...

  10. Azure Service Principals ----- Azure 上最好保守的秘密的服务

    一,引言 Azure Service Principals 是 Azure Active Directory (AAD) 中的一种标识,代表应用程序,服务,自动化流程.Service Principa ...