簡單地說,如何在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