【问题标题】:create number of requests for a day having Poission arrival on an hourly basis in python在python中每小时创建一天的请求数量,泊松到达
【发布时间】:2017-11-19 09:58:25
【问题描述】:

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

 monday = [hour_range, number_of_clients_in_that_hour]

最后,我们将拥有这 7 个以 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())

【问题讨论】:

    标签: python statistics poisson


    【解决方案1】:

    阻力最小的路径是使用来自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 评估的平均值。

    最后,无论您使用哪种发电机,您都需要知道费率。记住泊松是鱼的法语单词,概率和统计中最糟糕的笑话之一就是“泊松标度”语句。这意味着小时费率可以通过简单地乘以一天中的小时数 24 转换为日费率。例如,如果您平均每小时有 3 个,那么您将平均每天有 72 个。

    【讨论】:

      【解决方案2】:

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

      以下是如何使用著名的 Python 库计算泊松过程每小时的计数。请注意,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
      

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

      【讨论】:

        猜你喜欢
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多