Question

Le véritable objectif ici est de trouver les moyens de quantile (ou des sommes ou médianes, etc.) en Python. Depuis que je ne suis pas un utilisateur de puissance de Python, mais ont utilisé R pendant un certain temps, mon itinéraire choisi est par Rpy. Cependant, je suis tombé sur le problème que la liste retournée des moyens correspondant ne sont pas à l'ordre des quantiles. J'ai en particulier, les points suivants dans 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 

qui est très bon. Cependant, si je traduis le code dans Rpy, je suis

>>> 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]

Notez la liste finale est mal ordonnée (nous le savons parce que a et b sont tous deux commandés dans ce cas). En général, je n'ai aucun moyen de récupérer l'ordre du plus bas au plus haut quantile à Rpy. Toutes les suggestions?

En plus (non en substitution, comme je voudrais connaître la réponse à la question ci-dessus), si vous pouvez suggérer une façon directement effectuer l'analyse en python, qui sera grand aussi. (Je n'ai pas numpy ou scipy installé.) Thx!

EDIT : Pour clarifier, a et b sont apparié mais pas nécessairement a ordonné . Par exemple, a est la taille des yeux et b est la taille du nez. Je suis en train de découvrir que dans les différents quantiles de a, quels sont les moyens des bs correspondants. Merci.

Était-ce utile?

La solution

Si vous n'avez pas besoin d'étiquettes (par exemple: (8.2,10]), vous pouvez alors appeler cut avec labels=FALSE. Cela devrait maintenir l'ordre (et accélérer votre code gratuitement).

Autres conseils

Essayez rpy2.

Avec rpy2> = 2.1.0, cela pourrait être:

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)
  

Je n'ai aucun moyen de récupérer la   ordre de la plus basse à   le plus quantile dans Rpy

Si le tri de la liste du plus bas au plus haut permet de résoudre votre problème, essayez sorted(quintile_means).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top