Нахождение квантильных и децильных рангов столбца Pandas DataFrame
Квантиль - это то, где образец делится на смежные подгруппы равного размера.
Медиана - это квантиль; медиана помещается в распределение вероятностей так, чтобы ровно половина данных была ниже медианы, а половина данных была выше медианы. Медиана делит распределение на две равные области, поэтому его иногда называют 2-квантилем.
Квартили также являются квантилями; они делят распределение на четыре равные части.
Процентили - это квантили, которые делят распределение на 100 равных частей, а децили - это квантили, которые делят распределение на 10 равных частей.
Мы можем использовать следующую формулу для оценки i- го наблюдения:
i- е наблюдение = q (n + 1)
где q - квантиль, пропорция ниже i- го значения, которое вы ищете.
n - количество элементов в наборе данных.
Таким образом, для определения ранга квантиля q должно быть 0,25, поскольку мы хотим разделить наш набор данных на 4 равные части и ранжировать значения от 0 до 3 в зависимости от того, на какой квартиль они попадают.
Точно так же для ранга децилей q должно быть 0,1, поскольку мы хотим, чтобы наш набор данных был разделен на 10 равных частей.
Прежде чем перейти к Pandas, давайте попробуем описанную выше концепцию на примере, чтобы понять, как рассчитываются наши квантильные и децильные ранги.
Пример вопроса: найдите число в следующем наборе данных, где 25 процентов значений находятся ниже его, а 75 процентов - выше.
Данные: 32, 47, 55, 62, 74, 77, 86
Шаг 1. Упорядочьте данные от наименьшего к наибольшему. Данные в вопросе уже отсортированы по возрастанию.
Шаг 2: Подсчитайте, сколько наблюдений у вас есть в вашем наборе данных. этот конкретный набор данных состоит из 7 элементов.
Шаг 3: Преобразуйте любой процент в десятичное число для «q». Мы ищем число, в котором 25 процентов значений попадают ниже его, поэтому преобразуем его в 0,25.
Шаг 4: Вставьте свои значения в формулу:
Отвечать:
i- е наблюдение = q (n + 1)
i- е наблюдение = 0,25 (7 + 1) = 2
I- е наблюдение - 2. 2- е число в наборе - 47, это число, при котором 25 процентов значений попадают ниже него. А затем мы можем начать ранжировать наши числа от 0 до 3, так как мы находим Quantile Rank. Аналогичный подход для определения децильного ранга, в этом случае значение q будет равно 0,1.
Теперь давайте посмотрим на Pandas, как мы можем быстро добиться того же.
Code for Creating a DataFrame:
# Import pandas import pandas as pd # Create a DataFramedf1 = {"Name":["George", "Andrea", "John", "Helen", "Ravi", "Julia", "Justin"], "EnglishScore":[62, 47, 55, 74, 32, 77, 86]} df1 = pd.DataFrame(df1, columns = ["Name", ""]) # Sorting the DataFrame in Ascending Order of English Scoredf1.sort_values(by =["EnglishScore"], inplace = True) |
Если мы напечатаем вышеуказанный фрейм данных, мы получим следующий результат:

Фрейм данных
Now we can find the Quantile Rank using the pandas function qcut() by passing the column name which is to be considered for the Rank, the value for parameter q which signifies the Number of quantiles. 10 for deciles, 4 for quartiles, etc. and labels = False to return the bins as Integers.
Following is code for Quantile Rank
# codedf1["QuantileRank"]= pd.qcut(df1["EnglishScore"], q = 4, labels = False) |
А теперь, если мы распечатаем фрейм данных, мы увидим новый столбец QauntileRank, ранжирующий наши данные на основе столбца EnglishScore.

Квантильный ранг
Similarly to calculate Decile Rank we set q = 10
# codedf1["DecileRank"]= pd.qcut(df1["EnglishScore"], q = 10, labels = False) |
Теперь, если мы распечатаем наш DataFrame, мы получим следующий результат.

DecileRank
That is how we can use the Pandas qcut() method to calculate the various Quantiles on a column.
The entire code for the above example is given below.
# codeimport pandas as pd # Create a DataFramedf1 = {"Name":["George", "Andrea", "John", "Helen", "Ravi", "Julia", "Justin"], "EnglishScore":[62, 47, 55, 74, 32, 77, 86]} df1 = pd.DataFrame(df1, columns =["Name", "EnglishScore"]) # Sorting the DataFrame in Ascending Order of English Score# Sorting just for the purpose of better data readibility.df1.sort_values(by =["EnglishScore"], inplace = True) # Calculating Quantile Rankdf1["QuantileRank"]= pd.qcut(df1["EnglishScore"], q = 4, labels = False) # Calculating Decile Rankdf1["DecileRank"] = pd.qcut(df1["EnglishScore"], q = 10, labels = False) # printing the datafarameprint(df1) |
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.