Home > Enterprise >  Percentage distribution of values in a python list
Percentage distribution of values in a python list

Time:05-21

Let's say we have following list. This list contains response times of a REST server in a traffic run.

[1, 2, 3, 3, 4, 5, 6, 7, 9, 1]

I need following output

Percentage of the requests served within a certain time (ms)

50% 3

60% 4

70% 5

80% 6

90% 7

100% 9

How can we get it done in python? This is apache bench kind of output. So basically lets say at 50%, we need to find point in list below which 50% of the list elements are present and so on.

CodePudding user response:

You can try something like this:

responseTimes = [1, 2, 3, 3, 4, 5, 6, 7, 9, 1]
for time in range(3,10):
    percentage = len([x for x in responseTimes if x <= time])/(len(responseTimes))
    print(f'{percentage*100}%')

"So basically lets say at 50%, we need to find point in list below which 50% of the list elements are present and so on"

responseTimes = [1, 2, 3, 3, 4, 5, 6, 7, 9, 1]
percentage = 0
time = 0
while(percentage <= 0.5):
    percentage = len([x for x in responseTimes if x <= time])/(len(responseTimes))
    time =1

print(f'Every time under {time}(ms) occurrs lower than 50% of the time')

CodePudding user response:

You basically need to compute the cumulative ratio of the sorted response times.

from collections import Counter

values = [1, 2, 3, 3, 4, 5, 6, 7, 9, 1]
frequency = Counter(values) # {1: 2, 2: 1, 3: 2, ...}
total = 0
n = len(values)

for time in sorted(frequency):
    total  = frequency[time]
    print(time, f'{100*total/n}%')

This will print all times with the corresponding ratios.

1 20.0%
2 30.0%
3 50.0%
4 60.0%
5 70.0%
6 80.0%
7 90.0%
9 100.0%
  • Related