python - Spearman scipy 状态,关于大数据
问题描述
我在将大数据帧转换为 nd.array时问了一个类似的问题 ,做 spearman corr 但这个有点不同:我正在尝试将一列与大数据集(30k)进行比较。这次我试图获得除了 Rho 值之外的“pvalue”。可以通过以下方式完成:
stats.spearmanr(df,df['col'])
但是这个对于我的电脑来说太大了(内存错误)
df= df[df.columns].apply(lambda x: x.corr(df['col'],method = 'spearman'))
此代码仅给出 Rho 值
如何以“更轻松”的方式使用 stats.spearmanr?(目前在 12GB 内存上运行)
[rho = 0.4853049 , pval = 0.923423..] 等等
解决方案
更新
这使技巧更加紧凑且同样出色:
import numpy as np
import pandas as pd
from scipy.stats import spearmanr
idx = np.linspace(1, 100, 1000000)
# some random dataframe
df = pd.DataFrame(data=dict(x=np.sin(idx),
y=np.tan(idx)**3,
z=np.cos(idx)),
index=idx)
corrs = df.apply(lambda x: pd.Series(spearmanr(x, df.x)._asdict()))
- - - - - - 旧答案 - - - - - - -
我想如果你不计算完整的相关矩阵可能会有所帮助,而只是你感兴趣的值......(毕竟你得到的矩阵是对称的并且1
在对角线上,所以额外的信息可以忽略不计...)
这是我的 16Gb ram 笔记本电脑上的 1(甚至 10M)条目的数据帧没有问题的一些代码......
import numpy as np
import pandas as pd
from scipy.stats import spearmanr
idx = np.linspace(1, 100, 1000000)
# some random dataframe
df = pd.DataFrame(data=dict(x=np.sin(idx),
y=np.tan(idx)**3,
z=np.cos(idx)),
index=idx)
def corr_with_col(df, var='x'):
corrs = dict()
for key, val in df.items():
if key != var:
corrs[f'{key}_{var}'] = spearmanr(df[var], df[key])
return corrs
corrs = corr_with_col(df, 'x')
print('\n'.join([f'{key}: {val.correlation} ({val.pvalue})'
for key, val in corrs.items()]))
>>> y_x: -0.004591765709253266 (4.394727211467625e-06)
>>> z_x: -0.0036273289997811407 (0.0002863601059399195)
推荐阅读
- python - 在数据混合的csv中分离两列的正确方法是什么?
- python - Pandas.DataFrame:查找给定列中值最接近(但低于)指定值的行的索引
- javascript - 正则表达式字符串替换,同时保留原始换行符
- sql-server-2008-r2 - 如何从 mdf 恢复 SQL Server 数据库?
- .net - .Net 如何按计数获取列表中的常见元素
- javascript - 赛普拉斯表单提交到相同的网址
- clang - 修改 Clang/LLVM 编译器执行的优化
- angular - Angular 9 SSR - 在哪里设置全局['window'](使用多米诺骨牌)?
- mysql - 我在 Wordpress 中工作,在这种情况下我有一个疑问
- c# - 我为 A 和 B 打印了哈希码,我得到了相同的地址。两个对象在内存中并排创建。但是怎么会有相同的地址呢?