Как рассчитать среднее значение, режим, дисперсию, стандартное отклонение и т. д. вывода в python?

У меня есть простая игра, основанная на вероятностях, каждый день мы подбрасываем монету, и если выпадает орел, то мы выигрываем и получаем 20 долларов, а если мы подбрасываем монету и выпадает решка, то мы теряем 19 долларов в конце месяца. (28 дней) мы видим, сколько мы потеряли или заработали.

def coin_tossing_game():
    random_numbers = [random.randint(0, 1) for x in range(500)] #generate 500 random numbers
    for x in random_numbers:
        if x == 0: #if we get heads
            return 20 #we win $20
        elif x == 1: #if we get tails
            return -19 #we lose $19


for a in range(1, 28): #for each day of the month
    print(coin_tossing_game())

Это возвращает вывод 20 20 -19 -19 -19 -19 -19 20 -19 20 -19 20 -19 20 20 -19 -19 20 20 -19 -19 -19 20 20 20 -19 -19 -19 20 20

Этот результат именно то, что я ожидал. Я хочу найти сумму выходных данных и другие описательные статистические данные, такие как среднее значение, мода, медиана, стандартное отклонение, доверительные интервалы и т. д. Мне пришлось скопировать и вставить эти данные, чтобы преуспеть в этом анализе данных. Я надеялся, что есть способ быстро сделать это на питоне.


person Tupilwe Sinyangwe    schedule 11.02.2017    source источник
comment
pandas — это библиотека Python, которая делает многие вещи, которые делает Excel. .   -  person AChampion    schedule 11.02.2017
comment
Возможно, проверьте модуль статистики scipy. docs.scipy.org/doc/scipy/reference/stats.html   -  person wrdeman    schedule 11.02.2017
comment
в качестве отправной точки вы можете вывести список из функции, а затем использовать некоторые функции, которые вычисляют статистику (например, среднее значение, стандартное отклонение и т. д.) по предоставленному списку чисел. Его базовый код на Python (цикл, базовая математика), вам действительно не нужна библиотека, чтобы начать работу с такой базовой статистикой.   -  person Preet Kukreti    schedule 11.02.2017
comment
Начиная с Python 3.4, в него встроен модуль статистики.   -  person Peter Wood    schedule 11.02.2017


Ответы (3)


Вы спрашиваете как. Самый доступный из них — встроенный в Python в виде библиотеки statistics. Но опять же, вы, кажется, хотите знать, как это сделать. В следующем коде показаны основы, в которых я не чувствовал необходимости в течение почти 50 лет.

Во-первых, измените свой код, чтобы он захватывал выборку в векторе. В моем коде это называется sample.

Первая часть кода просто использует библиотеку Python. Там нет пота.

Вторая часть кода показывает, как накапливать сумму значений в выборке и сумму квадратов их отклонений от среднего. Я оставляю вам решать, как рассчитать выборочную дисперсию, выборочное стандартное отклонение и доверительные интервалы при обычных предположениях на основе этих статистических данных. Отсортировав и переименовав выборку, я вычисляю максимальное и минимальное значения (полезно для оценки некоторых распределений). Наконец, я вычисляю медиану из отсортированной выборки. Я оставляю расчет медианы вам.

import random

def coin_tossing_game():
    random_numbers = [random.randint(0, 1) for x in range(500)] #generate 500 random numbers
    for x in random_numbers:
        if x == 0: #if we get heads
            return 20 #we win $20
        elif x == 1: #if we get tails
            return -19 #we lose $19

sample = []
for a in range(1, 28): #for each day of the month
    #~ print(coin_tossing_game())
    sample.append(coin_tossing_game())

## the easy way

import statistics

print (statistics.mean(sample))
print (statistics.median(sample))
print (statistics.mode(sample))
print (statistics.stdev(sample))
print (statistics.variance(sample))

## the hard way

sample.sort()
orderedSample = sample
N = len(sample)
minSample = orderedSample[0]
maxSample = orderedSample[-1]
sumX = 0
for x in sample:
    sumX += x
mean = sumX / N

sumDeviates2 = 0
for x in sample:
    sumDeviates2 += ( x-mean )**2

k = N//2
if N%2==0:
    mode = 0.5* (orderedSample[k]+orderedSample[k-1])
else:
    mode = orderedSample[k]
person Bill Bell    schedule 11.02.2017
comment
Привет, Билл, я просто хотел найти время, чтобы сказать большое спасибо за вашу помощь. Большое спасибо за то, что дали мне оба метода, на самом деле я просто искал простой метод, но вы дали мне оба. Спасибо - person Tupilwe Sinyangwe; 11.02.2017

Да, есть: установите numpy и scipy. Используйте функции numpy.mean, numpy.std, numpy.median, scipy.stats.mode.

Scipy также содержит модуль scipy.stats, который предоставляет различные общие тесты значимости.

person blue_note    schedule 11.02.2017

Используйте модуль статистики scipy и используйте modal для режима, используйте scipy.stats.mstats.median_cihs для медианы и используйте trim_mean для среднего значения. Вы также можете использовать модуль статистики и использовать функции mean(), median() и mode().

person Anonymoose    schedule 11.02.2017