2017-10-21 3 views
-1

Ich versuche zu verstehen, die folgenden: 1) wie die Perzentile berechnet werden. 2) Warum gab Python nicht die Werte in einer sortierten Reihenfolge (was meine Erwartung war) als Ausgabe zurück 3) Meine Anforderung ist es, den tatsächlichen Wert zu wissen, unter dem x% der Bevölkerung liegt. Wie geht das? dieser WertUnderstanding Perzentil = Berechnung in beschreibt() von Python

Dank

Python-2

new=pd.DataFrame({'a':range(10),'b':[60510,60053,54968,62269,91107,29812,45503,6460,62521,37128]}) 
print new.describe(percentiles=[ 0,0.1 ,0.2,0.3,0.4, 0.50, 0.6,0.7,0.8 ,0.90,1 ]) 

Antwort

0

1), wie die Perzentile

90% Perzentil/Quantil berechnet bedeutet 10% der Daten größer als , 90% der Daten fallen unter diesen Wert. Standardmäßig basiert es auf einer linearen Interpolation. Aus diesem Grund werden in der Spalte a die Werte um 0.9 anstelle der ursprünglichen Datenwerte von [0, 1, 2 ...] erhöht. Wenn Sie die nächsten Werte anstelle der Interpolation verwenden möchten, können Sie den quantile method anstelle des Interpolationsparameters verwenden.

2) Warum Python zurückgeben mir nicht die Werte in einer sortierten Reihenfolge (was meine Erwartung war) als Ausgang

Ihre Frage ist hier unklar. Es gibt Werte in einer sortierten Reihenfolge zurück, die basierend auf der Ausgabe der .describe-Methode indiziert wird: count, mean, std, min, Quantiles von low nach high, max. Wenn Sie nur Quantile und nicht die anderen Statistiken möchten, können Sie stattdessen die Quantil-Methode verwenden.

3) Meine Anforderung besteht darin, den tatsächlichen Wert zu kennen, unter dem x% der Bevölkerung liegt. Wie geht das?

Nichts ist falsch mit dem Ausgang. Diese Quantile sind korrekt, obwohl sie nicht sehr aussagekräftig sind, wenn Ihre Daten nur 10 Beobachtungen enthalten.

Edit: Es war mir ursprünglich nicht klar, dass Sie versucht haben, Statistiken auf einer Häufigkeitstabelle zu tun. Ich kenne keine direkte Lösung in Pandas, bei denen es nicht darum geht, Ihre Daten in ein Array zu überführen. Du könntest mit numpy.repeat eine rohe Liste von Beobachtungen erhalten, um sie wieder in Pandas zu verwandeln und beschreibende Statistiken zu erstellen.

vals = np.array(new.a) 
freqs = np.array(new.b) 
observations = np.repeat(vals, freqs)