La définition du percentile que je vois habituellement attend comme résultat la valeur de la liste fournie en dessous de laquelle se trouvent P pour cent des valeurs... ce qui signifie que le résultat doit provenir de l'ensemble, et non d'une interpolation entre les éléments de l'ensemble. Pour obtenir cela, vous pouvez utiliser une fonction plus simple.
def percentile(N, P):
"""
Find the percentile of a list of values
@parameter N - A list of values. N must be sorted.
@parameter P - A float value from 0.0 to 1.0
@return - The percentile of the values.
"""
n = int(round(P * len(N) + 0.5))
return N[n-1]
# A = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# B = (15, 20, 35, 40, 50)
#
# print percentile(A, P=0.3)
# 4
# print percentile(A, P=0.8)
# 9
# print percentile(B, P=0.3)
# 20
# print percentile(B, P=0.8)
# 50
Si vous préférez obtenir la valeur de la liste fournie à laquelle ou en dessous de laquelle P pour cent des valeurs sont trouvées, utilisez cette simple modification :
def percentile(N, P):
n = int(round(P * len(N) + 0.5))
if n > 1:
return N[n-2]
else:
return N[0]
Ou avec la simplification suggérée par @ijustlovemath :
def percentile(N, P):
n = max(int(round(P * len(N) + 0.5)), 2)
return N[n-2]
0 votes
Une question connexe sur le calcul des percentiles à partir des fréquences : stackoverflow.com/questions/25070086/