悠悠楠杉
网站页面
在数据分析中,分位点(又称百分位数)是衡量数据分布的关键指标。例如,我们常说的“中位数”就是第50百分位数。Python凭借强大的库支持(如NumPy和Pandas),可以轻松实现分位点计算。本文将手把手教你如何用Python完成这一任务。
分位点是将数据按比例划分的数值点。比如第25百分位数(Q1)表示有25%的数据小于或等于该值。常见的四分位数(Q1、Q2、Q3)就是分位点的典型应用。
NumPy提供了quantile()函数,支持一维或多维数组的分位点计算。
import numpy as np
data = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90])
q1 = np.quantile(data, 0.25) # 计算第25百分位数
median = np.quantile(data, 0.5) # 中位数
q3 = np.quantile(data, 0.75) # 计算第75百分位数
print(f"Q1: {q1}, Median: {median}, Q3: {q3}")
输出结果:Q1: 30.0, Median: 50.0, Q3: 70.0
Pandas的quantile()方法更适合表格数据。假设我们有一个销售数据的DataFrame:
import pandas as pd
df = pd.DataFrame({
'销售额': [120, 150, 80, 200, 95, 180, 160]
})
# 计算多个分位点
quantiles = df['销售额'].quantile([0.25, 0.5, 0.75])
print(quantiles)
输出结果:0.25 120.0
0.50 150.0
0.75 180.0
当数据点不恰好落在分位位置时,Python默认使用线性插值。以下是手动实现的逻辑:
def custom_quantile(data, q):
sorted_data = sorted(data)
n = len(data)
index = (n - 1) * q
lower = int(index)
fraction = index - lower
return sorted_data[lower] + fraction * (sorted_data[lower + 1] - sorted_data[lower])
data = [10, 20, 30, 40, 50]
print(custom_quantile(data, 0.3)) # 输出第30百分位数
输出结果:17.0
通过分位点可以快速识别异常值。例如,定义超过Q3 + 1.5×IQR(四分位距)的数据为异常值:
q1 = df['销售额'].quantile(0.25)
q3 = df['销售额'].quantile(0.75)
iqr = q3 - q1
upper_bound = q3 + 1.5 * iqr
outliers = df[df['销售额'] > upper_bound]
print("异常值:\n", outliers)
Pandas时,建议先调用dropna()。掌握分位点计算,能让你在数据分析中更高效地理解数据分布、检测异常或制定策略。无论是学术研究还是商业分析,这一技能都至关重要。