Функция Pandas Series.quantile()
Часто используемые функции Pandas
Series.quantile()Это функция в Pandas, используемая для вычисления квантилей Series. Квантили — это значения, которые делят упорядоченные данные на несколько равных частей; распространённые из них включают квартили (25%, 50%, 75%), медиану (50%) и т. д.
Квантили — важные показатели для описания распределения данных. Они помогают понять форму распределения и выявить выбросы. Они широко используются в статистическом анализе, ранжировании оценок, анализе доходов и других сценариях.
Базовый синтаксис и параметры
quantile()Это функция-член объекта Series, вызываемая напрямую с помощью оператора-точки.
Формат синтаксиса
Series.quantile(q=0.5, interpolation='linear', numeric_only=True, closed='both')
Описание параметра
| Параметр | Type | Описание | Значение по умолчанию |
|---|---|---|---|
| q | float или array-like | Значение(я) квантиля в диапазоне от 0 до 1. Может быть одним значением или списком из нескольких значений. | 0.5 |
| interpolation | str | Метод интерполяции, используемый, когда квантиль находится между двумя значениями. Возможные значения: 'linear', 'lower', 'higher', 'nearest', 'midpoint'. | 'linear' |
| numeric_only | bool | Если True, вычисляются только числовые данные. | True |
| closed | str | Используется в DataFrame для определения замкнутости интервала. Обычно не используется в Series. | 'both' |
Возвращаемое значение
- Тип возвращаемого значения:
floatилиSeries - ОписаниеВозвращает значение в указанном квантиле. Если q — одиночное значение, возвращает float; если q — список, возвращает Series.
Примеры
Давайте подробно разберём на серии примеров от простого к сложному,Series.quantile()использование Series.quantile().
Пример 1: Базовое использование — вычисление медианы
Медиана — это 50%-й квантиль, и это наиболее часто используемый квантиль.
Пример
# Создайте Series, содержащий баллы студентов
scores = pd.Series([65, 70, 72, 75, 78, 80, 82, 85, 88, 90, 92, 95])
print("Баллы студентов:")
print(scores)
print()
# Вычислите медиану (50%-й квантиль)
median_score = scores.quantile(0.5)
print(f"Медиана: {median_score}")
print(f"Использование функции median(): {scores.median()}")
print()
print("Анализ: 50% баллов студентов меньше или равны 80.")
Вывод:
学生成绩: 0 65 1 70 2 72 3 75 4 75 5 80 6 80 7 85 8 88 9 90 10 92 11 95 dtype: int64 中位数:80.0 中位数(使用 median() 函数):80.0
Пояснение к коду:
quantile(0.5)Эквивалентноmedian()。- Медиана делит данные на две половины; 50% данных меньше или равны медиане.
Пример 2: Вычисление квартилей
Квартили делят данные на четыре равные части: 25%, 50%, 75%.
Пример
# Создать Series, содержащий доход сотрудников
income = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 5000, 5500, 6000, 8000, 15000])
print("Данные о ежемесячном доходе сотрудников (yuan):")
print(income)
print()
# Вычислить три квартиля
q1 = income.quantile(0.25) # Первый квартиль (25%)
q2 = income.quantile(0.50) # Второй квартиль / медиана (50%)
q3 = income.quantile(0.75) # Третий квартиль (75%)
print(f"Первый квартиль Q1 (25%): {q1} yuan")
print(f"Второй квартиль Q2 (50%): {q2} yuan")
print(f"Третий квартиль Q3 (75%): {q3} yuan")
print()
# Вычислить межквартильный размах (IQR)
iqr = q3 - q1
print(f"Межквартильный размах IQR: {iqr} yuan")
print()
print("Анализ:")
print("- 25% сотрудников получают не более 4000 yuan")
print("- 50% сотрудников получают не более 5000 yuan")
print("- 75% сотрудников получают не более 6000 yuan")
print("- Чем больше IQR, тем больше разброс данных")
Вывод:
员工月收入数据(元): 1 3000 2 低于 3800 3 4000 4 4200 5 4500 6 5000 7 5500 8 6000 9 8000 10 15000 dtype: int64 Q1(25% 分位):4000.0 元 Q2(50% 分位):5000.0 元 Q3(75% 分位):6000.0 元 四分位距 IQR = 6000 - 4000 = 2000 元
Пример 3: Вычисление нескольких квантилей одновременно
Можно вычислить несколько квантилей одновременно.
Пример
# Создание данных
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
print("Данные:")
print(data)
print()
# Вычислить несколько квантилей
percentiles = data.quantile([0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0])
print("Квантили:")
print(percentiles)
print()
# Квантиль также можно задать в виде строки с процентом (только одно значение)
print(f"Использование строки '50%': {data.quantile('50%')}")
print(f"Использование строки '0.5': {data.quantile(0.5)}")
Вывод:
数据: 0 10 1 20 2 30 3 40 4 50 量值:60 5 70 6 80 7 90 8 100 dtype: int 参数 多个分位数: 0.00 10.0 0.10 19.0 0.25 32.5 0.50 50.0 0.75 67.5 0.90 81.0 1.00 100.0 dtype: float64
Пример 4: Роль параметра interpolation
Когда квантиль находится между двумя значениями, разные методы интерполяции дают разные результаты.
Пример
# Создать Series с 6 элементами
data = pd.Series([10, 20, 30, 40, 50, 60])
print("Данные:", data.values)
print()
# Вычислить 30%-й квантиль (между 20 и 30)
# позиция = (n-1) * q = 5 * 0.3 = 1.5
print("30%-й квантиль с использованием разных методов интерполяции:")
linear = data.quantile(0.3, interpolation='linear')
print(f"linear (линейная интерполяция, по умолчанию): {linear}")
lower = data.quantile(0.3, interpolation='lower')
print(f"lower (взять меньшее значение): {lower}")
higher = data.quantile(0.3, interpolation='higher')
print(f"higher (взять большее значение): {higher}")
nearest = data.quantile(0.3, interpolation='nearest')
print(f"nearest (взять ближайшее значение): {nearest}")
midpoint = data.quantile(0.3, interpolation='midpoint')
print(f"midpoint (взять среднюю точку): {midpoint}")
Вывод:
数据:[10, 20, 30, 40, 50, 60] 位置计算:(n-1) * q = 5 * 0.3 = 1.5,表示在 20 和 30 之间 不同插值方法的结果: - linear(线性插值,默认):23.0 - lower(向下取整):20.0 - higher(向上取整):30.0 - nearest(最近邻):20.0 - midpoint(中间值):25.0
Пояснение к коду:
interpolation='linear'Выполняет линейную интерполяцию между двумя значениями, 20 + (30-20)*0.5 = 23.interpolation='lower'Берёт значение с меньшим индексом, то есть 20.interpolation='higher'Выбирает значение с большим индексом, т. е. 30.interpolation='nearest'Выбирает значение, ближайшее к позиции квантиля.interpolation='midpoint'Выбирает середину двух значений, т. е. (20+30)/2 = 25.
Пример 5: Использование квантилей для выявления выбросов
Межквартильный размах (IQR) часто используется для выявления выбросов в данных.
Пример
# Создать данные, содержащие несколько выбросов
data = pd.Series([12, 15, 18, 20, 22, 25, 28, 30, 32, 150])
print("Данные (с выбросами):")
print(data)
print()
# Вычислить квартили
q1 = data.quantile(0.25)
q3 = data.quantile(0.75)
iqr = q3 - q1
# Вычислить границы выбросов
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
print(f"Q1(25%):{q1}")
print(f"Q3(75%):{q3}")
print(f"Межквартильный размах:{iqr}")
print()
print(f"Нижняя граница нормальных значений: {lower_bound}")
print(f"Верхняя граница нормальных значений: {upper_bound}")
print()
# Выявление выбросов
outliers = data[(data upper_bound)]
print(f"Выбросы: {outliers.values}")
print()
print("Анализ: 150 — очевидный выброс, превышающий верхнюю границу.")
Вывод:
数据(含异常值): 3 150 4 22 5 25 6 28 7 30 8 32 9 150 dtype: int64 Q1(25%):18.75 Q3(75%):30.25 IQR = 11.5 正常值下界:1.5 正常值上界:47.5 异常值:150 分析:150 明显超出了正常范围,是一个异常值。
Примечания
- Значение квантиля находится в диапазоне от 0 до 1.
- По умолчанию для вычисления квантилей используется метод линейной интерполяции.
- Когда q — список, возвращаемое значение — Series, а не одно значение.
- Квантили можно использовать для выявления выбросов в данных; распространённый метод — правило IQR (1.5 межквартильного размаха).
- Для больших наборов данных вычисление квантилей очень эффективно.
Итог
Series.quantile()Это важная функция для анализа распределения данных. Её основные возможности включают:
- Поддерживает вычисление любого квантиля (от 0 до 1).
- Может вычислять несколько квантилей одновременно.
- Предоставляет несколько методов интерполяции для удовлетворения различных потребностей.
- Очень полезно для выявления выбросов.
В практическом анализе данных квантили часто используются для понимания формы распределения данных, сравнения различных наборов данных, выявления выбросов и т. д. В сочетании с ящичными диаграммами они позволяют более наглядно отображать распределение данных.
Другие расширения