Po prostu, jak zastosować normalizację kwantyli na dużej ramce danych Pandy (prawdopodobnie 2 000 000 wierszy) w Pythonie?Normalizacja kwantyli na pandach DataFame
PS. Wiem, że jest to pakiet o nazwie rpy2 który może uruchomić R w podproces, używając kwantyli normalize w R. Ale prawda jest taka, że R nie można obliczyć prawidłowy wynik podczas korzystania z zestawu danych jak poniżej:
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
Edycja :
Czego chcę: pokazane powyżej
Biorąc pod uwagę dane, jak stosować kwantyli normalizacja następujących etapów https://en.wikipedia.org/wiki/Quantile_normalization.
znalazłem kawałek kodu w Pythonie deklarując, że może obliczyć kwantylem normalizację:
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)
Kod działa poprawnie z przykładowych danych używanych w kodzie, jednak kiedy go przetestować z uwagi na dane powyżej wynik był zły.
Ponieważ ryp2 zapewnia interfejs do uruchamiania R w podprocesie Pythona, testuję go ponownie bezpośrednio w R, a wynik nadal jest nieprawidłowy. W rezultacie myślę, że powodem jest to, że metoda w R jest błędna.
usunąłem "R" tag ponieważ ty (1) nie używasz R i (2) nie chcesz R w odpowiedzi. Ale jeśli powiesz "R nie może obliczyć poprawnego wyniku", brzmi to tak, jakbyś dyskredytował R (do jakiego końca?) Lub chciałbyś, aby ktoś poprawił twój nieopublikowany kod. Tak czy siak, być może nie rozumiem tego, czego chcesz: normalizacja kwantylowa potrzebuje dystrybucji źródłowej i docelowej i nie jestem pewien, co tu robisz. Czy możesz wyjaśnić, proszę? – r2evans
@ r2evans Dzięki za komentarz i już zredagowałem pytanie. FYI, kod, którego używałem, uruchamia R jako podproces Pythona. Po uruchomieniu R bezpośrednio stwierdziłem, że wynik był nieprawidłowy. Poza tym nie jestem pewien, co masz na myśli przez "dystrybucję celu". Zgodnie z Wiki, obliczenia normalizacji kwantyli nie obejmują tego terminu. Pytanie, mam nadzieję, że wyjaśniłem, polega na zastosowaniu normalizacji kwantyli na danych, które przekazałem. –
Masz rację, mój termin "cel" nie jest naprawdę dobry. Odwołania do wiki * "co dwie identyczne dystrybucje" *, więc zastanawiałem się, jakie były twoje dwie dystrybucje. Teraz, gdy dostarczyłeś dodatkowy kod (i dane, zdefiniowane jako "macierz"), jestem zdezorientowany, jeśli chodzi o faktyczne dane, które mają być kwantyfikowane. (Być może głupie pytanie, ale czy to możliwe, że matryca jest transponowana w porównaniu z tym, czego naprawdę potrzebujesz?) – r2evans