Автор оригинала: Andrea Ridolfi.
В этой статье рассматриваются расчет процентов. Проценты являются статистическими показателями, которые используются для описания специфических порций образца популяции. Следующие разделы объяснят, какие проценты являются, для чего они используются и как их рассчитать, используя Python. Как вы увидите, Python позволяет решить эту проблему несколькими способами, либо путем определения функции вручную или эксплуатации Numpy Отказ
Что такое проценты?
Проценты являются статистическими показателями, которые часто используются для определения определенной части образца населения. Точнее, мы используем процентиль, чтобы указать значение (рассматриваемое переменной) ниже, в котором конкретный процент выборочного населения падает. Например, если мы рассмотрим распределение высоты всех английских людей, живущих в Великобритании; говоря, что значение высоты 180 см Определяет 65 TH процентиль, это означает, что 65% всех английских людей, живущих в Великобритании, короче 180 см Отказ Как вы можете себе представить, процентиль обычно используются во многих статистических исследованиях, а также при отчетности о результатах опросов или измерений на большие группы населения.
Как рассчитать процентили?
Предположим, чтобы собрать высоту N люди; Чтобы оценить проценты, упомянутые к этому распределению, первый шаг – сортировать все значения в порядке возрастания. На данный момент предположим, что нас просят рассчитать 75 TH процентиль распределения; Мы рассчитаем так называемое ранг K/100 Отказ В этом случае k/100.75. Отказ Теперь мы должны умножить ранг для общего количества образцов в распределении (n, в этом случае 58); Отсюда мы получаем k x.75 x.5 Отказ Поскольку результат не является целым числом, мы приблизили значение ближайшего целого числа (44 в этом случае). Следующий шаг состоит в том, чтобы найти значение высоты, соответствующую на 44 TH положение в раздаче образца; Это значение соответствует 75 TH процентиль. В случае результата k x n это целое число, мы продолжаем дальше, непосредственно находя соответствующую стоимость в распределении образца; Это уже наш процентиль.
Рассчитать проценты в Python
Теперь, когда мы знаем, какие проценты и как их можно рассчитать, мы увидим, как Python Делает эту задачу очень легко и быстро. В первой части мы решим проблему, определяя функцию, которая выполняет все шаги, показанные в предыдущем разделе, в то время как во второй части мы будем использовать Numpy Встроенная функция .percentile. () Отказ
Импорт соответствующих библиотек
Мы начинаем наш скрипт, импортируя библиотеки, которые будут использоваться на протяжении всего примера.
Нам нужно импортировать
-
Математика
для того, чтобы быть в состоянии круглая плавающие числа до ближайшего целого числа, - Numpy Для функции
.percentile. ()
, и - Матплотлиб Для окончательной части, в которой мы будем построить значения процентилей на распределение.
import numpy as np import math import matplotlib.pyplot as plt
Написание функции Python для расчета процентов
В этом первом разделе мы увидим, как создать функцию для расчета процентов. Целью этого раздела является чисто дидактикой, как вы увидите позже, Python Предлагает встроенные библиотеки, которые решают задачу автоматически. Тем не менее, всегда важно понимать, как проблема решена, и как работает определенная функция Python.
def my_percentile(data, percentile): n = len(data) p = n * percentile / 100 if p.is_integer(): return sorted(data)[int(p)] else: return sorted(data)[int(math.ceil(p)) - 1]
Мы начинаем, позвонив на нашу функцию my_percentile
, он потребуется в качестве входных параметров. Распределение образца и процентиль, который мы хотим рассчитать. Как описано выше, первый шаг – оценить размер нашего распределения (N); Затем мы вычисляем продукт «P» размера выборки и ранга Отказ
На данный момент мы должны создавать экземпляр Если заявление , чтобы отделить дело, в котором k x n это целое число от случая, в котором нет. Мы используем Python Метод .is_integer ()
оценить ли P
это целое число; Этот метод возвращает Правда
в положительном случае.
Если p.is_integer ()
Возвращает Правда
Мы должны искать P-TH Значения в нашем распределении (отсортировано в порядке возрастания). Чтобы сортировать распределение в порядке возрастания, мы использовали функцию отсортировано () и пропустите в качестве входного параметра самого распределения. Важно помнить, чтобы преобразовать P от поплавка (поскольку это происходит от математической операции, выполненной в предыдущей строке) к целому числу; В противном случае вы получите ошибку, в котором говорится, что значение индекса списка должно быть целым числом.
Мы заключаем, поднимая остальное заявление который охватывает случай, когда значение P
не целое число; В этом случае, используя функцию .ceil. ()
(из Math
Библиотека) , Мы приблизительно стоимость P
до ближайшего более высокого целого числа.
Затем мы преобразуем это число на целое число и вычитайте 1, чтобы соответствовать индексации, используемую в списках. Следующие строки кода вы можете найти все шаги, объясненные до сих пор, в этом разделе.
Вычисление процентов с использованием нашей функции
Чтобы проверить, хорошо ли работает наша функция, мы сначала должны определить распределение значений; Для этого мы можем использовать Numpy функция .RANDOM.RANDN ()
, который рисует случайные значения из обычного распределения, нам просто нужно пройти в качестве входного параметра размером массива. Мы выбираем создание массива 10000 значений.
dist = np.random.randn(10000)
Давайте теперь попробуем рассчитать значения 5 TH С 25 TH , 50 TH 75 TH и 95 TH Проценты. Мы можем построить список, называемый « Perc_func
», который содержит все эти проценты, оцениваемые через нашу функцию. Прежде чем делать это, мы определяем Список называется « index
», который содержит значения процентов, которые нас интересуют. После этого мы эксплуатируем Понимание списка , чтобы вызвать функцию my_percentile ()
Для каждого процентиля, определенного в списке « index
».
index = [5, 25, 50, 75, 95] perc_func = [my_percentile(dist, i) for i in index]
На данный момент список « Perc_func
» должен содержать значения, соответствующие всем процентам, перечисленным в списке « index
».
Вычисление процентов с использованием Numpy.Percentle ()
Теперь, когда мы знаем, как рассчитать процентили распределения, мы также можем эксплуатировать Numpy Встроенная функция, чтобы сделать это быстрее и эффективно.
.percentile ()
Функция принимает в качестве входных параметров. Распределение образца и процентиль, который мы заинтересованы в. Это также позволяет нам решить, какой метод следует использовать в случае, если продукт n x k не целое число; Действительно, есть не просто один правильный способ сделать это, ранее мы решили приблизиться к ценности до ближайшего целого числа; Однако мы также могли бы выбрать приблизиться к этому максимум более высоким/нижним целым числом или принимать среднее значение между нижним и более высоким целееми целых чисел.
Все эти параметры могут быть выбраны, выбирая среди этих ключевых слов для опции « Интерполяция
» [«Линейный», «ниже», «выше», «средняя точка», «ближайший»].
Вы можете найти полную документацию на Отказ
процентиль () функция здесь Отказ
Различные варианты могут привести к слегка разным результатам, мы выбираем опцию « Ближайший
», чтобы соответствовать методу, используемому в функции « my_percentile
». Аналогичным образом, к тому, что мы сделали в предыдущем разделе, мы создаем список под названием « Perc_numpy
», в котором мы храним значения 5 господство 25 TH , 50 TH 75 TH и 95 TH Проценты, оцениваются с использованием Numpy Отказ Следующие строки кода описывают только что объясненные процедуры.
# Using numpy for calculating percentiles perc_numpy = [np.percentile(dist, i, interpolation='nearest') for i in index]
Теперь мы можем распечатать два списка и проверять, являются ли полученные результаты равны.
print(perc_func) print(perc_numpy)
Построение процентилей на распределении
В начале статьи мы определили, какие процентили представляют собой.
Поскольку статистические определения могут быть довольно сложными для понимания, мы можем отобразить наше распределение значений и посмотреть, где рассчитанные проценты расположены в распределении.
Сделать это, мы эксплуатируем Matplotlib. и функция .axaxvline. ()
, который позволяет построить вертикальные линии на участке. Мы размещаем функцию AXVLINE ()
в для петли Чтобы создать вертикальную линию для каждого процентиля, содержащегося в списке « perc_func
». Чтобы лучше выделить процентильные линии, мы используем красный цвет.
# Plotting plt.hist(dist, 50) for i in range(len(index)): plt.axvline(perc_func[i], color='r') plt.show()
Окончательный результат отображается в Рисунок 1 ; Как видите, 50 TH Процент расположен прямо в середине распределения, а 95 TH Процент – это последняя строка и соответствует значению, ниже которого мы можем найти 95% населения образца.
Рисунок 1: Представление нормального распределения, используемого в примере, с вертикальными красными линиями, соответствующими (слева направо) до 5 господство 25 TH , 50 TH 75 TH и 95 TH Проценты.
Выводы
В этой статье мы узнали о Проценты То, что они представляют, и как их можно использовать для описания части распределения образца. Из их статистического определения мы разработали функцию Python для расчета проценты распределения образца.
После этого мы исследовали Numpy Функция .percentile ()
который позволяет вычислять процентили распределения образца в супер-быстрой и эффективном способе.
Затем мы сравнили результаты двух методов и проверили, что они были идентичны.
В конце концов, мы также показали графически проценты, которые мы ранее рассчитали на распределение образца, чтобы лучше понять их фактическое значение.