简单地说,如何在Python中对大熊猫数据框(可能是2,000,000行)应用分位数规范化?关于熊猫数据框的分位数规范
PS。我知道有一个包名为rpy2可能在子跑R,使用R.位数正常化,但事实是,当我用数据设置如下R可以不计算正确的结果:
5.690386092696389541e-05,2.051450375415418849e-05,1.963190184049079707e-05,1.258362869906251862e-04,1.503352476021528139e-04,6.881341586355676286e-06
8.535579139044583634e-05,5.128625938538547123e-06,1.635991820040899643e-05,6.291814349531259308e-05,3.006704952043056075e-05,6.881341586355676286e-06
5.690386092696389541e-05,2.051450375415418849e-05,1.963190184049079707e-05,1.258362869906251862e-04,1.503352476021528139e-04,6.881341586355676286e-06
2.845193046348194770e-05,1.538587781561563968e-05,2.944785276073619561e-05,4.194542899687506431e-05,6.013409904086112150e-05,1.0322e-05
编辑:
我想要什么:上面显示
给出的数据,如何申请位数标准化按照https://en.wikipedia.org/wiki/Quantile_normalization步骤。
我发现一段代码在Python宣称它可以计算位数归一化:
import rpy2.robjects as robjects
import numpy as np
from rpy2.robjects.packages import importr
preprocessCore = importr('preprocessCore')
matrix = [ [1,2,3,4,5], [1,3,5,7,9], [2,4,6,8,10] ]
v = robjects.FloatVector([ element for col in matrix for element in col ])
m = robjects.r['matrix'](v, ncol = len(matrix), byrow=False)
Rnormalized_matrix = preprocessCore.normalize_quantiles(m)
normalized_matrix = np.array(Rnormalized_matrix)
的代码正常工作与在代码中使用的样本数据,但是当我测试它与数据定结果出错了。
由于ryp2提供了一个在python子进程中运行R的接口,我直接在R中再次测试它,结果仍然是错误的。因此我认为原因在于R中的方法是错误的。
我删除了 “R” 标签因为你(1)没有使用R和(2)不想在答案中使用R.但是如果你说“R无法计算正确的结果”,这听起来像是要么贬低R(为了什么目的?),要么让某人纠正你未发布的代码。无论哪种方式,也许我误解你想要的东西:分位数标准化需要源和目标分布,我不确定你在这里提供什么。你能澄清一下吗? – r2evans
@ r2evans感谢您的评论,我已经编辑了这个问题。仅供参考,我使用的代码将R作为Python的子进程运行。直接运行R后,我发现结果是错误的。另外,我不确定'目标分布是什么意思。根据Wiki,分位数归一化的计算不涉及该词。希望我明确表达的问题是对我给出的数据应用分位数标准化。 –
你说得对,我的“目标”一词并不是很好。维基参考文献*“使两个分布相同”*,所以我想知道你的两个分布是什么。现在你提供了额外的代码(和数据,定义为矩阵),我很困惑你的实际数据是定量的。 (也许是一个愚蠢的问题,但是矩阵是否可能与你实际需要的相比进行转置?) – r2evans