سؤال

الهدف الحقيقي هنا هو العثور على الوسائل الكمية (أو المبالغ ، أو الوسيط ، وما إلى ذلك) في بيثون. نظرًا لأنني لست مستخدمًا قويًا لـ Python ولكنك استخدمت R لفترة من الوقت ، فإن طريقي المختار هو عبر RPY. ومع ذلك ، واجهت مشكلة أن قائمة الوسائل التي تم إرجاعها ليست مراسلة لترتيب الكميات. على وجه الخصوص ، لدي المتابعة في 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 

كل شئ على ما يرام. ومع ذلك ، إذا قمت بترجمة الكود إلى RPY ، حصلت

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

لاحظ أن القائمة النهائية سوء الطلب (نحن نعرفها بسبب a و b كلاهما أمر في هذه الحالة). بشكل عام ، ليس لدي أي طريقة لاستعادة الترتيب الصحيح من أدنى إلى أعلى كمية في RPY. أي اقتراحات؟

بالإضافة إلى ذلك (ليس في الاستبدال ، كما أود أن أعرف الإجابة على السؤال أعلاه) ، إذا كان بإمكانك اقتراح طريقة لإجراء التحليل مباشرة في بيثون ، فسيكون ذلك رائعًا أيضًا. (ليس لدي Numpy أو Scipy مثبتة.) thx!

تعديل: للتوضيح، a و b نكون يقترن ولكن ليس بالضرورة أمر. فمثلا، a هو حجم العيون و b هو حجم الأنف. أحاول معرفة ذلك في مختلف الكميات a, ، ما هي وسائل المراسل bس. شكرًا.

هل كانت مفيدة؟

المحلول

إذا كنت لا تحتاج إلى ملصقات (على سبيل المثال: (8.2,10]) ثم يمكنك الاتصال cut مع labels=FALSE. هذا يجب أن يحافظ على الطلب (وتسريع الكود الخاص بك مجانًا).

نصائح أخرى

جرب RPY2.

مع RPY2> = 2.1.0 ، قد يكون هذا:

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)

ليس لدي أي طريقة لاستعادة الترتيب الصحيح من أدنى إلى أعلى كمية في RPY

إذا كان فرز القائمة من أدنى إلى أعلى مستوى يحل مشكلتك ، فحاول sorted(quintile_means).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top