In parole povere, come applicare la normalizzazione quantile su un grande dataframe di Pandas (probabilmente 2.000.000 di righe) in Python?normalizzazione quantile su pandas dataframe
PS. So che c'è un pacchetto di nome rpy2 che potrebbe correre R in sottoprocesso, utilizzando normalizzare quantile in R. Ma la verità è che R non può calcolare il risultato corretto quando uso il set di dati, come di seguito:
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
Edit :
Quello che voglio:
Visti i dati sopra esposti, come applicare la normalizzazione quantile seguenti passi in https://en.wikipedia.org/wiki/Quantile_normalization.
ho trovato un pezzo di codice in Python dichiarando che potrebbe calcolare la normalizzazione quantile:
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)
Il codice funziona bene con i dati di esempio utilizzati nel codice, tuttavia quando provo con i dati forniti sopra il risultato è andato storto.
Poiché ryp2 fornisce un'interfaccia per eseguire R nel sottoprocesso di Python, lo provo di nuovo in R direttamente e il risultato era ancora sbagliato. Di conseguenza, penso che la ragione sia che il metodo in R è sbagliato.
ho rimosso il tag "R" poiché tu (1) non stai usando R e (2) non vuoi R nella risposta. Ma se dici "R non può calcolare il risultato corretto", suona come se tu stessi denigrando R (a che scopo?) O vuoi che qualcuno corregga il tuo codice non pubblicato. Ad ogni modo, forse sto fraintendendo quello che vuoi: la normalizzazione quantile ha bisogno di una distribuzione di origine e di destinazione e non sono certo che tu stia fornendo qui. Puoi chiarire, per favore? – r2evans
@ r2evans Grazie per il tuo commento e ho già modificato la domanda. Cordiali saluti, il codice che ho cercato su google come sottoprocesso di Python. Dopo aver eseguito R direttamente ho scoperto che il risultato era sbagliato. Inoltre, non sono sicuro di cosa intendi per "distribuzione target". Secondo Wiki, il calcolo della normalizzazione quantile non implica quel termine. La domanda, spero di averlo chiarito, è di applicare la normalizzazione quantile sui dati che ho dato. –
Hai ragione, il mio termine di "bersaglio" non è molto buono. I riferimenti wiki * "rendendo due distribuzioni identiche" *, quindi mi chiedevo quali fossero le tue due distribuzioni. Ora che hai fornito codice aggiuntivo (e dati, definiti come 'matrix'), sono confuso su quali siano i tuoi dati effettivi a livello di quantizzazione. (Forse una domanda stupida, ma è possibile che la matrice sia trasposta rispetto a ciò di cui hai effettivamente bisogno?) – r2evans