有没有一种方便的方法来计算序列或单维numpy数组的百分位数?
我正在寻找类似于Excel的百分位函数的东西.
我查看了NumPy的统计参考,但是找不到这个.我能找到的只是中位数(第50百分位数),但不是更具体的东西.
我正在寻找一种算法来确定实时数据捕获的百分位数.
例如,考虑开发服务器应用程序.
服务器的响应时间可能如下:17 ms 33 ms 52 ms 60 ms 55 ms等.
报告第90百分位响应时间,第80百分位响应时间等是有用的.
朴素算法是将每个响应时间插入列表中.请求统计信息时,对列表进行排序并将值放在适当的位置.
内存使用量与请求数量呈线性关系.
是否有一种算法可以在内存使用量有限的情况下产生"近似"百分位数统计量?例如,假设我想以一种处理数百万个请求的方式来解决这个问题,但只想使用一千字节的内存进行百分位跟踪(丢弃旧请求的跟踪不是一个选项,因为百分位数应该是满足所有要求).
还要求不存在分布的先验知识.例如,我不希望提前指定任何范围的存储桶.
我有一个DataFrame叫做data列的大熊猫ms.我想消除data.ms高于95%百分位数的所有行.现在,我这样做:
limit = data.ms.describe(90)['95%']
valid_data = data[data['ms'] < limit]
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我想把它推广到任何百分位数.最好的方法是什么?
一个快速的,最亲爱的R大师:
我正在做一项任务,在本练习中,我被要求从infert数据集中获取基本统计数据(它是内置的),特别是其中一列infert$age.
对于不熟悉数据集的人:
> table_ages # Which is just subset(infert, select=c("age"));
age
1 26
2 42
3 39
4 34
5 35
6 36
7 23
8 32
9 21
10 28
11 29
...
246 35
247 29
248 23
Run Code Online (Sandbox Code Playgroud)
我必须找到列的中值,方差,偏度,标准偏差都可以,直到我被要求找到列"百分位数".
到目前为止,我还没有找到任何东西,也许我从希腊语中错误地翻译了它,这是作业的语言.这是"ποσοστημόρια",谷歌翻译指出英文术语是"百分位数".
找到那些"百分位数"的任何教程或想法infert$age?
在算法中,每当我添加一个值时,我都必须计算数据集的第75个百分位数.现在我这样做:
xx在后面插入已排序的数组x,直到数组排序array[array.size * 3/4]点3是O(n),其余是O(1),但这仍然很慢,特别是如果阵列变大.有没有办法优化这个?
UPDATE
谢谢尼基塔!由于我使用的是C++,因此这是最容易实现的解决方案.这是代码:
template<class T>
class IterativePercentile {
public:
/// Percentile has to be in range [0, 1(
IterativePercentile(double percentile)
: _percentile(percentile)
{ }
// Adds a number in O(log(n))
void add(const T& x) {
if (_lower.empty() || x <= _lower.front()) {
_lower.push_back(x);
std::push_heap(_lower.begin(), _lower.end(), std::less<T>());
} else {
_upper.push_back(x);
std::push_heap(_upper.begin(), _upper.end(), std::greater<T>());
}
unsigned size_lower = (unsigned)((_lower.size() + _upper.size()) * _percentile) + 1;
if (_lower.size() …Run Code Online (Sandbox Code Playgroud) 我正在绘制各种测试的一些数据.有时在测试中我碰巧有一个异常值(比如说0.1),而所有其他值都小三个数量级.
使用matplotlib,我会对范围进行绘图 [0, max_data_value]
我怎样才能放大我的数据而不显示异常值,这会弄乱我的情节中的x轴?
我应该简单地采用95%并且[0, 95_percentile] 在x轴上具有范围吗?
我想在C#(或在某些伪代码中)模仿Excel等效PERCENTILE函数.我怎样才能做到这一点?该函数应该采用两个参数,其中第一个是值列表,第二个是函数应该计算的百分位数.
坦克!
编辑:我很抱歉,如果我的问题发生了,就像我没有尝试过我自己.我只是无法理解excel函数是如何工作的(是的,我首先尝试了wikipedia和wolfram)并且我认为如果有人在代码中提出它我会更好理解.@CodeInChaos给出了一个似乎就是我追求的答案.
我想创建一个函数,它将(有序)列表作为其参数,并输出一个包含每个元素的相应百分位数的列表.
例如,fn([1,2,3,4,17])退货[0.0, 0.25, 0.50, 0.75, 1.00].
任何人都可以请:
我目前的代码:
def median(mylist):
length = len(mylist)
if not length % 2:
return (mylist[length / 2] + mylist[length / 2 - 1]) / 2.0
return mylist[length / 2]
###############################################################################
# PERCENTILE FUNCTION
###############################################################################
def percentile(x):
"""
Find the correspoding percentile of each value relative to a list of values.
where x is the list of values
Input list should already be sorted!
"""
# sort the input list …Run Code Online (Sandbox Code Playgroud) 我出乎意料地无法找到postgresql的第n个百分位函数.
我通过mondrian olap工具使用这个,所以我只需要一个返回95%的聚合函数.
我找到了这个链接:
http://www.postgresql.org/message-id/162867790907102334r71db0227jfa0e4bd96f48b8e4@mail.gmail.com
但由于某些原因,该百分位函数中的代码在某些情况下使用某些查询返回空值.我已经检查了数据,数据中没有什么奇怪的东西会导致这种情况!
有没有办法使用numpy.percentile函数来计算加权百分位数?或者是否有人知道替代python函数来计算加权百分位数?
谢谢!
percentile ×10
python ×5
algorithm ×3
numpy ×3
statistics ×2
c# ×1
filtering ×1
function ×1
math ×1
matplotlib ×1
median ×1
optimization ×1
outliers ×1
pandas ×1
plot ×1
postgresql ×1
r ×1
resampling ×1
scipy ×1
weighted ×1