python – pandas数据帧上的分位数规范化
作者:互联网
简单来说,如何在Python中对大型Pandas数据帧(可能是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.032201237953351358e-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中的方法是错误的.
解决方法:
使用Wikipedia article中的示例数据集:
df = pd.DataFrame({'C1': {'A': 5, 'B': 2, 'C': 3, 'D': 4},
'C2': {'A': 4, 'B': 1, 'C': 4, 'D': 2},
'C3': {'A': 3, 'B': 4, 'C': 6, 'D': 8}})
df
Out:
C1 C2 C3
A 5 4 3
B 2 1 4
C 3 4 6
D 4 2 8
对于每个等级,可以使用以下方法计算平均值:
rank_mean = df.stack().groupby(df.rank(method='first').stack().astype(int)).mean()
rank_mean
Out:
1 2.000000
2 3.000000
3 4.666667
4 5.666667
dtype: float64
然后,生成的Series,rank_mean可以用作排名的映射以获得规范化结果:
df.rank(method='min').stack().astype(int).map(rank_mean).unstack()
Out:
C1 C2 C3
A 5.666667 4.666667 2.000000
B 2.000000 2.000000 3.000000
C 3.000000 4.666667 4.666667
D 4.666667 3.000000 5.666667
标签:python,data-science,deep-learning 来源: https://codeday.me/bug/20190930/1835982.html