Как обрабатывать данные, возвращаемые функцией (Python 3.7) - PullRequest
0 голосов
/ 01 октября 2019

Предыстория: мой вопрос должен быть относительно простым, однако я не могу понять его. Я написал функцию, касающуюся теории очередей, и она будет использоваться для планирования службы скорой помощи. Например, сколько звонков для обслуживания я могу ожидать в данный период времени. Функция принимает два параметра;начальное значение количества машин скорой помощи в моей системе, начиная с 0 и заканчивая 100 машинами скорой помощи. Это покажет вероятность отсутствия вызовов для обслуживания, одного вызова для обслуживания, трех вызовов для обслуживания ... до 100 вызовов для обслуживания. Второй параметр - это число прибытий, которое является историческим прошлым прибытием в моей системе. Функция запускается и выводит результат на мой экран. Я проверил математику, и она кажется правильной.

Это Python 3.7 с дистрибутивом Anaconda.

У меня такой вопрос: я хотел бы обработать эти данные еще дальше, но я не знаю, как их собрать и сделать больше математики. Например, я хотел бы взять этот список и накапливать значения вероятности. При пятикратном количестве поступлений существует кумулятивная вероятность 61,56% как минимум из пяти обращений за обслуживанием и т. Д.

Второй пример того, как я хотел бы обработать эти данные, - это отформатировать их в процентах изапишите текстовый файл

Третий пример - обработка кумулятивных вероятностей и исключение любых значений, превышающих кумулятивное значение 99% (потому что они исчезают в чрезвычайно малых числах).

Четвертым примером было бы создание гистограммы, показывающей вероятность n обращений за обслуживанием.

Это некоторые из вещей, которые я хочу сделать с вычислениями теории очередей. И еще много всего. Я планирую написать приложение большего размера. Но я застрял в этой точке. Функция записывает вывод в мою консоль Python 3.7. Как «захватить» этот вывод как объект или что-то еще и выполнить другую обработку данных?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
import csv

def probability_x(start_value = 0, arrival_rate = 0):
    probability_arrivals = []
    while start_value  <= 100:
        probability_arrivals = [start_value, math.pow(arrival_rate, start_value) * math.pow(math.e, -arrival_rate) / math.factorial(start_value)]
        print(probability_arrivals)
        start_value = start_value + 1
    return probability_arrivals

#probability_x(arrival_rate = 5, x = 5)

#The code written above prints to the console, but my goal is to take the returned values and make other calculations. 
#How do I 'capture' this data for further processing is where I need help (for example, bar plots, cumulative frequency, etc )

#failure. TypeError: writerows() argument must be iterable. 
with open('ExpectedProbability.csv', 'w') as writeFile:
    writer = csv.writer(writeFile)
    for value in probability_x(arrival_rate = 5):
        writer.writerows(value)
writeFile.close()

#Failure. Why does it return 2. Yes there are two columns but I was expecting 101 as the length because that is the end of my loop.
print(len(probability_x(arrival_rate = 5)))

1 Ответ

1 голос
/ 02 октября 2019

Проблема в том, что когда вы пишете

probability_arrivals = [start_value, math.pow(arrival_rate, start_value) * math.pow(math.e, -arrival_rate) / math.factorial(start_value)]

Вы перезаписываете предыдущее содержимое probability_arrivals. Все, что было ранее, потеряно.

Вместо использования = для переназначения probability_arrivals вы хотите append другую запись в списке:

probability_arrivals.append([start_value, math.pow(arrival_rate, start_value) * math.pow(math.e, -arrival_rate) / math.factorial(start_value)])

Также отмечу, что ваш while цикл может быть улучшен. В основном вы просто зацикливаетесь на start_value, пока оно не достигнет определенного значения. Цикл for был бы более уместным:

for s in range(start_value, 101):  # The end value is exclusive, so it's 101 not 100
    probability_arrivals = [s, math.pow(arrival_rate, s) * math.pow(math.e, -arrival_rate) / math.factorial(s)]
    print(probability_arrivals)

Теперь вам не нужно вручную беспокоиться об увеличении счетчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...