Numpy np.quantile和np.percentile
Numpy是Python科学计算中重要的第三方包之一。它提供了大量的科学计算和数据分析功能,是数据科学家经常使用的工具之一。其中,np.quantile和np.percentile是两个常用的函数,可以用于计算数据的分位数。
阅读更多:Numpy 教程
1. numpy.percentile函数
numpy.percentile函数可以用来计算一个数组中指定分位数的值。其函数原型为:
参数说明:
– a:数组;
– q:可以是一个值 or 1-D数组,分别表示指定的分位数,范围在0到100之间;
– axis:默认为none,表示在整个数组上进行操作。如果为0,则表示在每一列上进行操作,如果为1,则表示在每一行上进行操作。
例如,我们要计算数组a的第30个百分位数:
输出结果为:
在这个例子中,数组a的第30个百分位数是24。也就是说,如果将数组a按从小到大排序后,排在第30%的数是24。
除了指定单个分位数之外,我们还可以同时计算多个分位数。例如,计算数组a的第30个、第50个和第70个百分位数:
输出结果为:
在这个例子中,数组a的第30个、第50个和第70个百分位数分别是24、35和46。
2. numpy.quantile函数
numpy.quantile函数是numpy.percentile函数的一种通用性更好的替代品。它的函数原型为:
参数说明:
– a:数组;
– q:可以是一个值 or 1-D数组,分别表示指定的分位数,范围在0到1之间;
– axis:默认为none,表示在整个数组上进行操作。如果为0,则表示在每一列上进行操作,如果为1,则表示在每一行上进行操作;
– out:输出结果的数组;
– overwrite_input:默认为False,表示不重写输入数组;
– interpolation:表示插值方式;
– keepdims:表示是否保持计算结果的数组维度,即是否保持输入数组的维度数目。
例如,我们要计算数组a的第30个分位数:
输出结果为:
在这个例子中,数组a的第30个分位数是24。也就是说,如果将数组a按从小到大排序后,排在第30%的数是24。
同样地,我们可以计算多个分位数。例如,计算数组a的第30个、第50个和第70个分位数:
输出结果为:
在这个例子中,数组a的第30个、第50个和第70个百分位数分别是24、35和46。
3. np.percentile和np.quantile的区别
np.percentile和np.quantile函数的参数意义相同,其主要的区别在于参数的范围不同。np.percentile的q参数是分位数百分比,而np.quantile的q参数是分位数在0到1之间的比例。因此,如果想要计算数组a的第p个分位数,可以使用下面的公式:
- np.percentile(a, p * 100)
- np.quantile(a, p)
例如,计算数组a的第60%个分位数,可以使用以下方式:
输出结果为:
4. 示例
为了更好地理解和使用np.percentile和np.quantile函数,下面给出两个示例。
示例1:计算最大值的p分位数
有时候需要计算某个数据集的最大值的p分位数。这个问题可以使用np.percentile函数轻松解决。例如,假设我们有一个有500个数字的数组,并且要计算其最大值的95%分位数。可以这样做:
输出结果为:
在这个例子中,我们首先生成一个随机数组a,它包含500个数字。然后,我们计算出a的最大值,并使用np.percentile函数计算a的95%分位数。最后,我们将分位数除以最大值,以获得最大值的95%分位数。
示例2:计算金融业的分位数
在金融业中,常常需要计算某个证券的分位数(比如收益率的分位数)。例如,假设我们有一个从csv文件中读取的收益率数据集,我们想要计算该收益率数据集的第25个、第50个和第75个分位数,可以这样做:
在这个例子中,我们首先使用pandas从csv文件中读取收益率数据集,然后将其转换为numpy.ndarray类型。接着,我们使用np.quantile函数计算returns数据集的第25个、第50个和第75个分位数,并将结果存储在quantiles变量中。最后,我们输出quantiles。
总结
np.percentile和np.quantile是numpy中常用的两个函数,用于计算数组的分位数。两者的区别在于参数q的范围不同,其中np.percentile的q参数是分位数百分比,而np.quantile的q参数是分位数在0到1之间的比例。在实际应用中,选择合适的函数要根据数据的具体情况来决定。