在python中每小时创建一天的请求数

2024-05-08 09:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个服务,其中有#个请求,我们每小时添加这些请求,比如从12-11-2等。所以我想做的是生成这些数量的请求,这些请求跟随泊松到达,然后将其添加到表示一周中某一天的字典中

 monday = [hour_range, number_of_clients_in_that_hour]

最后,我们将有7个字典命名为from Mon to Sunday,在这些字典上,可以使用一些线性回归来预测某一天下一个小时的客户数量。你知道吗

所以基本上,当我用python模拟这个场景时,我需要做一个表示这种场景的到达。我有下面的代码,使用它我使用均匀分布生成# of clients in an hour。对于泊松到达或任何其他真正代表这种情况的到达,我怎么做呢?我的代码如下

day_names = ['mon','tue','wed','thurs','fri','sat','sun']

time_values = np.linspace(1,23,23,dtype='int') # print from 1,2...23

for day_iterator in range(1,7+1): 

     number_of_clients = [] # create empty list that will hold number of clients
        for i in range(1,24,1): #  lets create no. of clients for a day on an hourly basis in this for loop
            rand_value =  random.randint(1,20) # generate number of clients

            number_of_clients.append(rand_value)  # append the number of clients to this list

        # a single day data is generated after this for
        locals() [day_names[day_iterator-1]] = dict(zip(time_values,number_of_clients)) # create dict for each day of a week


    # print each day
    print "monday = %s"%mon
    print "tuesday = %s"%tue
    print "wed = %s"%wed
    print "thurs = %s"%thurs
    print "fri = %s"%fri
    print "sat = %s"%sat
    print "sun = %s"%sun

    plt.plot(mon.keys(),mon.values())

Tags: ofinnumberfor字典rangesatclients
2条回答

阻力最小的途径是使用来自numpy的内置泊松发生器。 但是,如果您想自己动手,下面的代码就可以了:

import math
import random

def poisson(rate):
    x = 0
    product = random.random()
    threshold = math.exp(-rate)
    while product >= threshold:
        product *= random.random()
        x += 1

    return x

这是基于泊松事件具有指数分布的到达时间间隔这一事实,因此可以generate exponentials直到它们的总和超过指定的速率。这个实现稍微聪明一点,尽管通过对求和/阈值关系的两侧进行指数化,对数求值的和变成简单的乘法,并且结果可以与预先计算的指数化阈值进行比较。这在代数上与指数随机变量之和相同,但它执行单个指数运算和lambda乘法的平均值,而不是lambda log求值的平均值求和。你知道吗

最后,无论你使用哪种发电机,你都需要知道它的速率。记住poisson是鱼的法语单词,prob&stats中最糟糕的笑话之一是“poisson标度”。这意味着小时费率可以通过简单地乘以24(一天中的小时数)转换为每日费率。例如,如果平均每小时3次,则平均每天72次。你知道吗

泊松过程的到达间隔时间(在通常的简化假设下)是指数分布的。在这种建模工作中,通常使用的是到达时间,而不是父进程。你知道吗

下面是如何使用著名的Python库获得Poisson进程每小时的计数。注意,scale是泊松参数的倒数。你知道吗

>>> def hourly_arrivals(scale=1):
...     count = 0
...     while expon.rvs(scale=scale, size=1) < 1:
...         count += 1
...     return count
... 
>>> hourly_arrivals()
0
>>> hourly_arrivals()
8
>>> hourly_arrivals()
0
>>> hourly_arrivals()
1
>>> hourly_arrivals()
4
>>> hourly_arrivals()
0
>>> hourly_arrivals()
2

你也问过“任何其他真正代表这种情况的到来”。这是一个经验问题。我想说的是,为你正在研究的系统收集尽可能多的稳态到达时间,并尝试对它们拟合一个累积分布函数。如果你想讨论这个问题,请再提一个问题。你知道吗

相关问题 更多 >

    热门问题