计算百分位数以去除异常值的快速算法
我有一个程序,需要重复计算数据集的近似百分位(顺序统计量),以便在进一步处理之前删除异常值.我目前是通过对值数组进行排序并选择适当的元素来这样做的;这是可行的,但是尽管是该计划的次要部分,但这是对配置文件的明显斑点. 更多信息: 数据集包含最多100000个浮点数的顺序,并假定为"合理"分布式 - 不太可能重复或在特定值接近密度的巨大尖峰;而且,如果出于某种奇怪的原因,分布是奇怪的,那么近似值就可以降低准确,因为数据可能会弄乱并进一步处理可疑.但是,数据不一定是统一或正常分布的; 一个近似解决方案是可以的,但是我确实需要了解 近似如何引入错误以确保其有效. 由于其目的是删除异常值,因此我始终在相同数据上计算两个百分位数:例如 为95%,一个为5%. 该应用在C#中,C ++中的繁重举重;伪代码或以前的库都可以. 只要合理的方式,完全不同的删除异常值的方式也可以. 更新: 似乎我正在寻找一个近似选择算法. 尽管这一切都是在循环中完成的,但每次数据略有不同,因此
20 2024-04-14
编程技术问答社区
百分位数计算
我想模仿C#中的Excel等效百分位功能(或在某些伪代码中).我怎样才能做到这一点?该函数应进行两个参数,其中第一个是值列表,而第二个是用于计算功能的百分位数. 坦克! 编辑:很抱歉,如果我的问题遇到的话,就像我没有尝试过.我只是不明白Excel函数的工作原理(是的,我先尝试了Wikipedia和Wolfram),我想如果有人用代码呈现它,我会更好地理解它. @codeinchaos给出了一个似乎是我追求的答案. 解决方案 我认为 wikipedia页面具有您需要编写自己的功能的公式... 我尝试了: public double Percentile(double[] sequence, double excelPercentile) { Array.Sort(sequence); int N = sequence.Length; double n = (N - 1) * excelPercentile + 1; // Anot
20 2024-04-13
编程技术问答社区
在R中的boxplots中添加不同的百分位数
我是R的Failry,最近用它来制作一些箱形图.我还在箱形图中添加了平均值和标准偏差.我想知道我是否也可以以不同的百分位数添加某种刻度标记或圆圈.假设我是否想在每个小时的盒装中标记第85个百分位数,有没有办法做到这一点?我的数据包括每小时一年的MW负载,我的输出每月包含24个盒子图.我一次每月都在做,因为我不确定是否可以一次运行所有96个(每个月,工作日/周末,4个不同的区域)拳击手机的方法.预先感谢您的帮助. JANWD
8 2024-04-03
编程技术问答社区
Python-Matplotlib boxplot。如何显示百分位数0,10,25,50,75,90和100?
我想绘制一个 解决方案 如果您仍然好奇,我将样本放在一起.它使用from random import random import numpy as np import matplotlib.pyplot as plt from scipy.stats import scoreatpercentile x = np.array([random() for x in xrange(100)]) # percentiles of interest perc = [min(x), scoreatpercentile(x,10), scoreatpercentile(x,25), scoreatpercentile(x,50), scoreatpercentile(x,75), scoreatpercentile(x,90), max(x)] midpoint = 0 # time-series time fig = plt.figure() ax = fig.add_subplot(11
2 2024-04-03
编程技术问答社区
如何在pyplot框中指定百分位数?
说我有最简单的脚本 import plotly.offline as pyo import plotly.graph_objs as go # set up an array of 20 data points, with 20 as the median value y = [1,14,14,15,16,18,18,19,19,20,20,23,24,26,27,27,28,29,33,54] data = [ go.Box( y=y, boxpoints='outliers' # display only outlying data points ) ] pyo.plot(data, filename='box2.html') 我有以下 我的问题是,我知道这是针对25%和75%的百分位数吗? 有没有办法更改显示的百分位数的价值? 解决方案 您可以通过自己的在另一个有关绘图箱图的问题中,我回答了在这里,我编写了
16 2024-04-03
编程技术问答社区
是否可以用百分位数值代替原始输入值绘制方框图?
从我所看到的,boxplot()方法期望一系列原始值(数字)作为输入,然后从中计算百分位数以绘制Boxplot(S). 我想拥有一种可以通过百分位数并获得相应boxplot的方法. 例如: 假设我已经运行了几个基准测试,并且对于我测量的潜伏期(浮点值)的每个基准测试值.现在,我已经预先计算了这些值的百分位数. 因此,对于每个基准,我有第25、50、75个百分点,最多和最大 现在给出了这些数据,我想为基准绘制框图. 解决方案 仅使用百分位数和离群值(如果有)绘制框图,我制作了customized_box_plot函数,该函数基本上修改了基本框图(从微小的示例数据生成)中的属性,以使其成为根据您的百分位数. customized_box_plot函数 def customized_box_plot(percentiles, axes, redraw = True, *args, **kwargs): """ Generates
2 2024-04-03
编程技术问答社区
计算百分位数的条件数组
我有一些数据如下: val crit perc 0.415605498 1 perc1 0.475426007 1 perc1 0.418621318 1 perc1 0.51608229 1 perc1 0.452307882 1 perc1 0.496691416 1 perc1 0.402689126 1 perc1 0.494381345 1 perc1 0.532406777 1 perc1 0.839352016 2 perc2 0.618221702 2 perc2 0.83947033 2 perc2 0.621734007 2 perc2 0.548656662 2 perc2 0.711919796 2 perc2 0.758178085 2 perc2 0.820954467 2 perc2 0.478645786 2 perc2 0.848323655 2 perc
8 2024-03-06
编程技术问答社区
在php中使用数组查找百分位数
我有这样的数组 array( 45=>5, 42=>4.9, 48=>5, 41=>4.8, 40=>4.9, 34=>4.9, ..... ) 这里的索引是userid,值是他的得分. 现在,我想要的是在用户上实现百分位数,例如45,48的百分位数为99和42,40,34,为97,而41为94. 我如何实现这一目标? 解决方案 根据"分数"对数组进行排序,上升 百分位数=(排序阵列中的元素索引) * 100/(数组中的总元素) 示例: 5, 42=>4.9, 48=>5, 41=>4.8, 40=>4.9, 34=>4.9, ); print("Unsorted array: "); print_r($
4 2024-03-04
编程技术问答社区
向量化A列的B列的百分位数值(对于组)。
对于每对src和dest机场城市,我想返回列a的一个百分点b的值. 我可以手动执行此操作: 示例DF只有2对src/dest(我的实际DF中有成千上万): dt src dest a b 0 2016-01-01 YYZ SFO 548.12 279.28 1 2016-01-01 DFW PDX 111.35 -65.50 2 2016-02-01 YYZ SFO 64.84 342.35 3 2016-02-01 DFW PDX 63.81 61.64 4 2016-03-01 YYZ SFO 614.29 262.83 {'a': {0: 548.12, 1: 111.34999999999999, 2: 64.840000000000003, 3: 63.810000000000002, 4: 614.28999999999996, 5: -207.49000000000001,
6 2024-03-02
编程技术问答社区
熊猫滚动窗口百分位数排名
我正在尝试计算滚动窗口中的列的数据等级. test=pd.DataFrame(np.random.randn(20,3),pd.date_range('1/1/2000',periods=20),['A','B','C']) test Out[111]: A B C 2000-01-01 -0.566992 -1.494799 0.462330 2000-01-02 -0.550769 -0.699104 0.767778 2000-01-03 -0.270597 0.060836 0.057195 2000-01-04 -0.583784 -0.546418 -0.557850 2000-01-05 0.294073 -2.326211 0.262098 2000-01-06 -1.122543 -0.116279 -0.003088 2000-01-07 0.121387 0.763100
16 2024-03-02
编程技术问答社区
获得每组的第20至80个百分点-Pyspark
我在Pyspark数据框架中有三列(下面给出的示例数据) ordertype customerid 金额 a C1 100.2 a C2 1003.32 b C1 222 c C3 21.3 a C4 1.2 我想从每个订购类型中删除异常值.为了做到这一点,我正在从每个OrderType的数据中删除最高的n个百分点. 例如,对于n = 10,对于每个组,我将根据ordertype的数量和分区获取第10至90个百分位数的数据. 需要帮助来实现大型数据集(约6700万行计数). 如果在这种情况下为partion,有人可以帮助可能在partion上使用近似值. 解决方案 您可以使用approx_percentile,然后过滤: import pyspark.sql.functions as F df2 = df.withColumn( 'percentile', F.expr("approx_percentile(amou
18 2024-03-01
编程技术问答社区
Groupby和百分比分布Pyspark等效于给定的PANDAS代码
每当我想在整个数据集中获取熊猫的发行版时,我都会运行以下基本代码: x.groupby('y').describe(percentiles=[.1, .25, .5, .75, .9, 1]) 在哪里获得我想要的每个自定义百分比的分配值.我想在Pyspark中做完全相同的事情.但是,从我所读到的pyspark中的描述功能中,不允许指定百分比,而PySpark中的摘要功能仅允许标准值0.25、0.50、0.75,因此我无法自定义我想要的百分比. 我该如何处理下面的熊猫代码的等效内容,但在pyspark中? 解决方案 您可以使用all_aggregations = [] for col in sparkDF.drop('y').columns: all_aggregations.extend( [F.percentile_approx(col, 0.1).alias(f'{col}_perc_10'), F.percentile_approx(col, 0.25).ali
8 2024-03-01
编程技术问答社区
如何在PySpark数据帧中添加一列,该列包含数据帧中另一列的n次量化值。
我有一个非常大的CSV文件,该文件已被导入为Pyspark DataFrame:df.数据帧包含许多列,包括ireturn列.我想计算此列的0.99和0.01%,然后将另一列添加到new_col_99和new_col_01和new_col_01中,分别包含0.99和0.01%.我编写了以下代码,该代码适用于小型数据框架,但是当我将其应用于大型数据框时会遇到错误. from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df = spark.read.csv("name of the file", inferSchema = True, header = True) precentile_99 = df.selectExpr('percentile(val1, 0.99)').head(1)[0][0] precentile_01 = df.selectExpr('percent
24 2024-03-01
编程技术问答社区
在Spark-Scala中寻找每组的百分位数
我正在尝试使用以下窗口函数在列上进行百分位数.我已经提到在这里在一个组上使用ApproxQuantile定义./p> val df1 = Seq( (1, 10.0), (1, 20.0), (1, 40.6), (1, 15.6), (1, 17.6), (1, 25.6), (1, 39.6), (2, 20.5), (2 ,70.3), (2, 69.4), (2, 74.4), (2, 45.4), (3, 60.6), (3, 80.6), (4, 30.6), (4, 90.6) ).toDF("ID","Count") val idBucketMapping = Seq((1, 4), (2, 3), (3, 2), (4, 2)) .toDF("ID", "Bucket") //jpp import org.apache.spark.sql.Column import org.apache.spark.sql.catalyst.exp
14 2024-02-29
编程技术问答社区
Java Apache Commons getPercentile()的结果与MS Excel percentile不同。
i具有一种算法,该算法用一系列值(12个值)的Apache Commons计算percentile(85),以便以后的评估阈值以做出决定.结果类似于Excel给出的结果,但不是相等的,有时这对我的应用至关重要,因为使用Excel,结果不会通过阈值,而使用Apache Commons Math在Java中也是如此,所以我得到了不同的输出. 这是一个示例:Internet流量(Mbps)每2小时 32,707681360000000 41,258042977600000045,4453940200000000000000000000000000000000000000000000000000000000000000000000000000000000yyyyyyyisisor.is乱室29,4371963240000000 22,4667255616000000 20,0388452248000000 28,7807757104000000 除以1000 MB(电缆的容量)
2 2024-02-28
编程技术问答社区
从一个长阵列中计算百分数?
给出了毫秒毫秒的长期潜伏期,我想从中计算出百分位数.我在下面的方法下完成了这项工作,但我不确定如何验证这是否给我准确的结果? public static long[] percentiles(long[] latencies, double... percentiles) { Arrays.sort(latencies, 0, latencies.length); long[] values = new long[percentiles.length]; for (int i = 0; i
8 2024-02-28
编程技术问答社区
重复计算百分位数的快速算法?
在算法中,我必须计算 75%的数据集价值.现在我正在这样做: 获取值x 插入x在后面已经排序的数组中 swap x向下直到排序阵列 读取位置的元素array[array.size * 3/4] 点3为o(n),其余的是o(1),但这仍然很慢,尤其是在数组变大的情况下.有什么方法可以优化? 更新 谢谢Nikita!由于我使用的是C ++,这是最容易实现的解决方案.这是代码: template 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 (_low
16 2024-01-22
编程技术问答社区
实时数据采集的百分比
我正在寻找一种确定实时数据捕获百分位数的算法. 例如,考虑服务器应用程序的开发. 服务器的响应时间可能如下: 17 ms 33 ms 52毫秒 60 ms 55毫秒 等. 报告第90个百分位响应时间,80个百分位响应时间等是很有用的 天真的算法是将每个响应时间插入列表.当请求统计信息时,对列表进行排序并以适当的位置获取值. 内存使用与请求数量线性缩放. 如果记忆使用有限,是否有一种算法产生"近似"百分位统计信息?例如,假设我想以一种我处理数百万请求的方式解决此问题满足所有请求). 还要求对分布没有先验知识.例如,我不想提前指定任何水桶范围. 解决方案 我相信这个问题有许多良好的近似算法.一个良好的第一切割方法是简单地使用固定尺寸的数组(例如价值1k的数据).修复一些概率p.对于每个请求,使用概率P,将其响应时间写入数组(替换那里最古老的时间).由于数组是实时流的子采样,并且子采样保留了分布,因此对该阵列进行统计信息将使您近似完整的实时流的
8 2024-01-22
编程技术问答社区
百分比分组表
我需要计算哪个值代表组内的5%,34%,50%,67%和95%的百分点(在单独的列中).预期的输出将为 5% 34% 50% 67% 95% A 4 6 8 12 30 B 1 2 3 4 10 对于每个组的整数值. 下面的代码显示了我到目前为止的内容(但使用生成的数据): library(dplyr) library(tidyr) data.frame(group=sample(LETTERS[1:5],100,TRUE),values=rnorm(100)) %>% group_by(group) %>% mutate(perc_int=findInterval(values, quantile(values, probs=c(0.05,0.34,0.5,0.67,0.95)))) %>% pivot_wider(
12 2024-01-19
编程技术问答社区
SQL Server 2008 R2的百分比聚合
我正在使用SQL Server 2008 R2.我需要计算每组的百分位数,例如: SELECT id, PCTL(0.9, x) -- for the 90th percentile FROM my_table GROUP BY id ORDER BY id 例如,给定此ddl(小提琴)--- CREATE TABLE my_table (id INT, x REAL); INSERT INTO my_table VALUES (7, 0.164595), (5, 0.671311), (7, 0.0118385), (6, 0.704592), (3, 0.633521), (3, 0.337268), (0, 0.54739), (6, 0.312282), (0, 0.220618), (7, 0.214973), (6, 0.410768), (7, 0.151572), (7, 0.0639506), (5, 0.339075), (1, 0.2
24 2024-01-19
编程技术问答社区