Frage

Das eigentliche Ziel hier ist es, die Quantil Mittel (oder Summen oder Median, etc.) zu finden in Python. Da ich kein Power-User von Python bin haben aber R für eine Weile benutzt, ist meine gewählte Route über RPY. Aber ich lief in das Problem, dass die zurückgegebenen Liste der Mittel ist nicht Korrespondent der Reihenfolge der Quantile. Insbesondere habe ich die folgenden in R:

> a = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> b = c(2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000)
> prob = seq(0,5)/5
> br = quantile(a,prob)
> rcut = cut(a, br, include.lowest = TRUE)
> quintile_means = tapply(b, rcut, mean)
> quintile_means
[1,2.8] (2.8,4.6] (4.6,6.4] (6.4,8.2]  (8.2,10] 
      3        30       300      3000     30000 

, die alle sehr gut. Allerdings, wenn ich den Code in Rpy übersetzen, ich habe

>>> import rpy
>>> from rpy import r
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = [2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000]
>>> prob = [ x / 5.0 for x in range(6)]
>>> br = r.quantile(a, prob)
>>> rcut = r.cut(a, br, include_lowest=r.TRUE)
>>> quintile_means = r.tapply(b, rcut, r.mean)
>>> print quintile_means
[30.0, 300.0, 3000.0, 30000.0, 3.0]

Beachten Sie die endgültige Liste ist falsch bestellt (wir sie kennen, weil a und b sind beide in diesem Fall zu bestellen). Im Allgemeinen, ich habe nur keine Möglichkeit, die richtige Reihenfolge von den niedrigsten bis zur höchsten Quantil in Rpy zu erholen. Irgendwelche Vorschläge?

Zusätzlich (nicht in Substitution, wie Ich mag würde die Antwort auf die obige Frage wissen), wenn Sie einen Weg vorschlagen können, um direkt die Analyse in Python durchführt, die auch groß sein werden. (Ich habe keine numpy oder SciPy installiert.) Thx!

Bearbeiten : Um zu klären, a und b ist Gekoppelte , aber nicht unbedingt bestellt . Zum Beispiel ist a die Größe der Augen und b ist die Größe der Nase. Ich versuche, dass in den verschiedenen quantiles von a, um herauszufinden, was die Mittel des Korrespondenten bs sind. Danke.

War es hilfreich?

Lösung

Wenn Sie keine Etiketten benötigen (z: (8.2,10]) dann könnte man cut mit labels=FALSE nennen. Dies sollte Ordnung halten (und Ihren Code kostenlos beschleunigen).

Andere Tipps

Versuchen rpy2.

Mit rpy2> = 2.1.0, könnte dies sein:

from rpy2.robjects.vectors import IntVector
from rpy2.robjects.packages import importr
base = importr('base')
stats = importr('stats')

a = IntVector((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
b = IntVector((2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000))
prob = base.seq(0,5).ro / 5
br = stats.quantile(a,prob)
rcut = base.cut(a, br, include_lowest = True)
quintile_means = base.tapply(b, rcut, stats.mean)
print(quintile_means)
  

Ich habe nur keine Möglichkeit, das erholen   richtige Reihenfolge von der niedrigsten bis   höchster Quantil in Rpy

Wenn die Sortierung der Liste von der tiefsten bis zu den höchsten Ihr Problem löst, versuchen sorted(quintile_means).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top