Как рассчитать процентили в Python (с примерами)
N -й процентиль набора данных — это значение, которое отсекает первые n процентов значений данных, когда все значения отсортированы от наименьшего к наибольшему.
Например, 90-й процентиль набора данных — это значение, которое отсекает нижние 90 % значений данных от верхних 10 % значений данных.
Мы можем быстро вычислить процентили в Python, используя функцию numpy.percentile() , которая использует следующий синтаксис:
numpy.percentile (а, д)
- а: Массив значений
- q: Процентили или последовательность процентилей для вычисления, которые должны быть в диапазоне от 0 до 100 включительно.
В этом руководстве объясняется, как использовать эту функцию для расчета процентилей в Python.
Как найти процентили массива
Следующий код иллюстрирует, как найти различные процентили для заданного массива в Python:
import numpy as np #make this example reproducible np.random.seed (0) #create array of 100 random integers distributed between 0 and 500 data = np.random.randint (0, 500, 100) #find the 37th percentile of the array np.percentile (data, 37) 173.26 #Find the quartiles (25th, 50th, and 75th percentiles) of the array np.percentile (data, [25, 50, 75]) array([116.5, 243.5, 371.5])
Как найти процентили столбца DataFrame
В следующем коде показано, как найти значение 95-го процентиля для одного столбца pandas DataFrame:
import numpy as np import pandas as pd #create DataFrame df = pd.DataFrame() #find 90th percentile of var1 column np.percentile (df.var1 , 95) 34.1
Как найти процентили нескольких столбцов DataFrame
В следующем коде показано, как найти значение 95-го процентиля для нескольких столбцов в кадре данных pandas:
import numpy as np import pandas as pd #create DataFrame df = pd.DataFrame() #find 95th percentile of each column df.quantile (.95) var1 34.10 var2 14.55 var3 14.65 #find 95th percentile of just columns var1 and var2 df[['var1', 'var2']]. quantile (.95) var1 34.10 var2 14.55
Обратите внимание, что мы смогли использовать функцию pandas quantile() в приведенных выше примерах для вычисления процентилей.
Как рассчитать сложные проценты в Python (3 примера)
Мы можем использовать следующую формулу сложных процентов, чтобы найти конечную стоимость некоторых инвестиций через определенный промежуток времени:
A = P(1 + r/n) нт
- A: Окончательная сумма
- P: Начальный основной
- r: Годовая процентная ставка
- n: количество периодов начисления сложных процентов в год.
- т: количество лет
Мы можем использовать следующую формулу для расчета конечной стоимости некоторых инвестиций в Python:
P \* ( pow ((1 + r / n), n \* t))
И мы можем использовать следующую функцию для отображения конечной стоимости некоторых инвестиций в конце каждого периода:
def each_year(P, r, n, t): for period in range(t): amount = P \* ( pow ((1 + r / n), n \* (period+ 1 ))) print('Period:', period + 1, amount) return amount
В следующих примерах показано, как использовать эти формулы в Python для расчета конечной стоимости инвестиций в различных сценариях.
Пример 1: Формула сложных процентов с годовым начислением сложных процентов
Предположим, мы инвестируем 5000 долларов в инвестиции, которые составляют 6% годовых.
Следующий код показывает, как рассчитать конечную стоимость этих инвестиций через 10 лет:
#define principal, interest rate, compounding periods per year, and total years P = 5000 r = .06 n = 1 t = 10 #calculate final amount P \* ( pow ((1 + r / n), n \* t)) 8954.238482714272
Эта инвестиция будет стоить 8 954,24 доллара через 10 лет.
Мы можем использовать функцию, которую мы определили ранее, для отображения конечных инвестиций после каждого года в течение 10-летнего периода:
#display ending investment after each year during 10-year period each_year(P, r, n, t) Period: 1 5300.0 Period: 2 5618.000000000001 Period: 3 5955.08 Period: 4 6312.384800000002 Period: 5 6691.127888000002 Period: 6 7092.595561280002 Period: 7 7518.151294956803 Period: 8 7969.240372654212 Period: 9 8447.394795013464 Period: 10 8954.238482714272
Это говорит нам:
- Конечная стоимость после первого года составила 5300 долларов .
- Конечная стоимость после 2-го года составила 5618 долларов .
- Конечная стоимость после 3-го года составила 5 955,08 долларов США .
Пример 2: Формула сложных процентов с ежемесячным начислением сложных процентов
Предположим, мы инвестируем 1000 долларов в инвестиции, которые составляют 6% годовых и начисляются ежемесячно (12 раз в год).
Следующий код показывает, как рассчитать конечную стоимость этих инвестиций через 5 лет:
#define principal, interest rate, compounding periods per year, and total years P = 1000 r = .06 n = 12 t = 5 #calculate final amount P \* ( pow ((1 + r / n), n \* t)) 1348.8501525493075
Эта инвестиция будет стоить 1348,85 долларов США через 5 лет.
Пример 3: Формула сложных процентов с ежедневным начислением сложных процентов
Предположим, мы инвестируем 5000 долларов в инвестиции, которые начисляются по ставке 8% годовых и начисляются ежедневно (365 раз в год).
Следующий код показывает, как рассчитать конечную стоимость этих инвестиций через 15 лет:
#define principal, interest rate, compounding periods per year, and total years P = 5000 r = .08 n = 365 t = 15 #calculate final amount P \* ( pow ((1 + r / n), n \* t)) 16598.40198554521
Эта инвестиция будет стоить 16 598,40 долларов США через 15 лет.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в Python:
Как посчитать процент в питоне
Пусть у нас выполняется следующее выражение:
number = 3 + 4 * 5 ** 2 + 7 print(number) # 110
Здесь начале выполняется возведение в степень (5 ** 2) как операция с большим приоритетом, далее результат умножается на 4 (25 * 4), затем происходит сложение (3 + 100) и далее опять идет сложение (103 + 7).
Чтобы переопределить порядок операций, можно использовать скобки:
number = (3 + 4) * (5 ** 2 + 7) print(number) # 224
Следует отметить, что в арифметических операциях могут принимать участие как целые, так и дробные числа. Если в одной операции участвует целое число (int) и число с плавающей точкой (float), то целое число приводится к типу float.
Арифметические операции с присвоением
Ряд специальных операций позволяют использовать присвоить результат операции первому операнду:
- += Присвоение результата сложения
- -= Присвоение результата вычитания
- *= Присвоение результата умножения
- /= Присвоение результата от деления
- //= Присвоение результата целочисленного деления
- **= Присвоение степени числа
- %= Присвоение остатка от деления
number = 10 number += 5 print(number) # 15 number -= 3 print(number) # 12 number *= 4 print(number) # 48
Округление и функция round
При операциях с числами типа float надо учитывать, что результат операций с ними может быть не совсем точным. Например:
first_number = 2.0001 second_number = 5 third_number = first_number / second_number print(third_number) # 0.40002000000000004
В данном случае мы ожидаем получить число 0.40002, однако в конце через ряд нулей появляется еще какая-то четверка. Или еще одно выражение:
print(2.0001 + 0.1) # 2.1001000000000003
В случае выше для округления результата мы можем использовать встроенную функцию round() :
first_number = 2.0001 second_number = 0.1 third_number = first_number + second_number print(round(third_number)) # 2
В функцию round() передается число, которое надо округлить. Если в функцию передается одно число, как в примере выше, то оно округляется до целого.
Функция round() также может принимать второе число, которое указывает, сколько знаков после запятой должно содержать получаемое число:
first_number = 2.0001 second_number = 0.1 third_number = first_number + second_number print(round(third_number, 4)) # 2.1001
В данном случае число third_number округляется до 4 знаков после запятой.
Если в функцию передается только одно значение — только округляемое число, оно округляется то ближайшего целого
# округление до целого числа print(round(2.49)) # 2 - округление до ближайшего целого 2 print(round(2.51)) # 3
Однако если округляемая часть равна одинаково удалена от двух целых чисел, то округление идет к ближайшему четному:
print(round(2.5)) # 2 - ближайшее четное print(round(3.5)) # 4 - ближайшее четное
Округление производится до ближайшего кратного 10 в степени минус округляемая часть:
# округление до двух знаков после запятой print(round(2.554, 2)) # 2.55 print(round(2.5551, 2)) # 2.56 print(round(2.554999, 2)) # 2.55 print(round(2.499, 2)) # 2.5
Однако следует учитывать, что функция round() не идеальный инструмент. Например, выше при округление до целых чисел применяется правило, согласно которому, если округляемая часть одинаково удалена от двух значений, то округление производится до ближайшего четного значения. В Python в связи с тем, что десятичная часть числа не может быть точно представлена в виде числа float, то это может приводить к некоторым не совсем ожидаемым результатам. Например:
# округление до двух знаков после запятой print(round(2.545, 2)) # 2.54 print(round(2.555, 2)) # 2.56 - округление до четного print(round(2.565, 2)) # 2.56 print(round(2.575, 2)) # 2.58 print(round(2.655, 2)) # 2.65 - округление не до четного print(round(2.665, 2)) # 2.67 print(round(2.675, 2)) # 2.67
Подобно о проблеме можно почитать к документации.
как рассчитать процент в питоне
Хотя он работает так, как вы это делали, он не выглядит очень pythonic. Кроме того, что произойдет, если вам нужно добавить новую тему? Вам нужно будет добавить другую переменную, использовать другой вход и т.д. Я думаю, вы хотите получить среднее значение по всем маркам, так что вам также придется изменять количество предметов каждый раз, когда вы добавляете новый! Кажется беспорядок.
Я брошу кусок кода, где единственное, что вам нужно сделать, это добавить имя нового объекта в список. Если вы попытаетесь понять этот простой фрагмент кода, ваши навыки программирования на Python будут экспериментировать с небольшим ударом.
#!/usr/local/bin/python2.7 marks = <> #a dictionary, it a list of (key : value) pairs (eg. "Maths" : 34) subjects = ["Tamil","English","Maths","Science","Social"] # this is a list #here we populate the dictionary with the marks for every subject for subject in subjects: marks[subject] = input("Enter the " + subject + " marks: ") #and finally the calculation of the total and the average total = sum(marks.itervalues()) average = float(total) / len(marks) print ("The total is " + str(total) + " and the average is " + str(average))
Здесь вы можете протестировать код и поэкспериментировать с ним.