分位数函数给出了给定的大熊猫系列的分位数,
例如
s.quantile(0.9)是4.2
是否存在反函数(即累积分布),它找到值x
s.quantile(X)= 4
谢谢
对于可能是个愚蠢的问题我很抱歉.当我做:
> quantile(df$column, .75) #get 3rd quartile
Run Code Online (Sandbox Code Playgroud)
我得到类似的东西
75%
1234.5
Run Code Online (Sandbox Code Playgroud)
有没有办法获得没有描述性"75%"字符串的值(1234.5)?非常感谢你.
以下代码使用两种不同的方法汇总数字数据。
第一种方法使用 Dataframe().describe() 并传递一些特定的额外百分位数。
该第二种方法是分别计算的摘要统计(平均值,标准,N),它堆叠,计算相同的位数,然后由索引追加两个和排序所以结果是基本相同的第一种方法。
有一些细微的命名差异,我们可以清理后记,因为汇总数据很小,所以速度非常快。
事实证明,在这个例子中,使用 describe 函数大约慢了 8 倍。
我正在寻找原因以及可能会进一步加快速度的任何其他方法的建议(过滤器、组、值)都从 UI 传递到龙卷风服务 - 所以速度很重要,因为用户正在等待结果,并且数据可能比这个例子更大。
import pandas as pd
import numpy as np
from datetime import datetime
def make_data (n):
ts = datetime.now().timestamp() + abs(np.random.normal(60, 30, n)).cumsum()
df = pd.DataFrame({
'c1': np.random.choice(list('ABCDEFGH'), n),
'c2': np.random.choice(list('ABCDEFGH'), n),
'c3': np.random.choice(list('ABCDEFGH'), n),
't1': np.random.randint(1, 20, n),
't2': pd.to_datetime(ts, unit='s'),
'x1': np.random.randn(n),
'x2': np.random.randn(n),
'x3': np.random.randn(n)
})
return df
def summarize_numeric_1 (df, mask, groups, values, quantiles):
dfg = df[mask].groupby(groups)[values] …Run Code Online (Sandbox Code Playgroud) 我创建了一个散点图(多组GRP)用IV=time,DV=concentration.我想在(0.025,0.05,0.5,0.95,0.975)我的情节中添加分位数回归曲线.
顺便说一句,这就是我创建散点图的方法:
attach(E) ## E is the name I gave to my data
## Change Group to factor so that may work with levels in the legend
Group<-as.character(Group)
Group<-as.factor(Group)
## Make the colored scatter-plot
mycolors = c('red','orange','green','cornflowerblue')
plot(Time,Concentration,main="Template",xlab="Time",ylab="Concentration",pch=18,col=mycolors[Group])
## This also works identically
## with(E,plot(Time,Concentration,col=mycolors[Group],main="Template",xlab="Time",ylab="Concentration",pch=18))
## Use identify to identify each point by group number (to check)
## identify(Time,Concentration,col=mycolors[Group],labels=Group)
## Press Esc or press Stop to stop identify function
## Create legend
## Use …Run Code Online (Sandbox Code Playgroud) 我看到很多类似 R 的问题,但我找不到专门针对 Python 的问题,最好使用 numpy。
假设我有一组观察结果存储在x. q * 100我可以获得人口累计百分比的值。
# Import numpy
import numpy as np
# Get 75th percentile
np.quantile(a=x, q=0.75)
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有一个函数可以实现相反的功能。也就是说,一个 numpy 函数将一个值作为输入并返回q。
为了进一步扩展这一点,scipy 分发对象有一个ppf方法可以让我做到这一点。我正在寻找 numpy 中类似的东西。它存在吗?
从文档提升来看,似乎为正态分布和伽玛分布提供了分位数函数(逆cdf函数),但我不清楚如何实际使用它们.有人可以贴一个例子吗?
请参阅下面的编辑 使用R,我想过滤矩阵(基因表达数据)并仅保留具有高方差值的行(基因/探针).例如,我只想保留具有底部和顶部百分位数值的行(例如,低于20%且高于80%).我想将我的研究仅限于下游分析的高变异基因.R中有基因过滤的常用方法吗?
我的矩阵有18个样本(列)和47000个探针(行),其值为log2变换和标准化.我知道该quantile()功能可以识别每个样品列中的20%和80%截止值.我无法弄清楚如何为整个矩阵找到这些值,然后将原始矩阵子集化以删除所有"非变化"行.
示例矩阵的平均值为5.97,因此最后三行应该被删除,因为它们包含20%和80%截止值之间的值:
> m
sample1 sample2 sample3 sample4 sample5 sample6
ILMN_1762337 7.86 5.05 4.89 5.74 6.78 6.41
ILMN_2055271 5.72 4.29 4.64 5.00 6.30 8.02
ILMN_1736007 3.82 6.48 6.06 7.13 8.20 4.06
ILMN_2383229 6.34 4.34 6.12 6.83 4.82 5.57
ILMN_1806310 6.15 6.37 5.54 5.22 4.59 6.28
ILMN_1653355 7.01 4.73 6.62 6.27 4.77 6.12
ILMN_1705025 6.09 6.68 6.80 6.85 8.35 4.15
ILMN_1814316 5.77 5.17 5.94 6.51 7.12 7.20
ILMN_1814317 5.97 5.97 5.97 5.97 5.97 5.97
ILMN_1814318 5.97 5.97 …Run Code Online (Sandbox Code Playgroud) 我需要计算大量数据的分位数.
假设我们只能通过某些部分(即大矩阵的一行)获取数据.要计算Q3分位数,需要获取数据的所有部分并将其存储在某处,然后对其进行排序并计算分位数:
List<double> allData = new List<double>();
// This is only an example; the portions of data are not really rows of some matrix
foreach(var row in matrix)
{
allData.AddRange(row);
}
allData.Sort();
double p = 0.75 * allData.Count;
int idQ3 = (int)Math.Ceiling(p) - 1;
double Q3 = allData[idQ3];
Run Code Online (Sandbox Code Playgroud)
我想找到一种获得分位数的方法,而不将数据存储在中间变量中.最好的解决方案是计算第一行中间结果的一些参数,然后逐步调整下一行.
注意:
这个问题类似于"在线"(迭代器)算法,用于估计统计中位数,模式,偏度,峰度,但我需要计算分位数.
此外,本主题中的文章很少,即:
在尝试实现这些方法之前,我想知道是否有其他更快的方法来计算0.25/0.75分位数?
我已经阅读了其他文章(例如here),以获得分位数的“反向”-即,获得与一系列值中的某个值相对应的百分位数。
但是,对于相同的数据序列,答案并不能为我提供与分位数相同的值。
我还研究了分位数提供9种不同的算法来计算百分位数。
所以我的问题是:是否有可靠的方法来获得分位数函数的反函数?ecdf没有采用“类型”参数,因此似乎无法确保它们使用相同的方法。
可重现的示例:
# Simple data
x = 0:10
pcntile = 0.5
# Get value corresponding to a percentile using quantile
(pcntile_value <- quantile(x, pcntile))
# 50%
# 5 # returns 5 as expected for 50% percentile
# Get percentile corresponding to a value using ecdf function
(pcntile_rev <- ecdf(x)(5))
# [1] 0.5454545 #returns 54.54% as the percentile for the value 5
# Not the same answer as quantile produces
Run Code Online (Sandbox Code Playgroud) 我有一个data.table,并希望按组计算统计数据.
R) set.seed(1)
R) DT=data.table(a=rnorm(100),b=rnorm(100))
Run Code Online (Sandbox Code Playgroud)
这些群体应该由
R) quantile(DT$a,probs=seq(.1,.9,.1))
10% 20% 30% 40% 50% 60% 70% 80% 90%
-1.05265747329 -0.61386923071 -0.37534201964 -0.07670312896 0.11390916079 0.37707993057 0.58121734252 0.77125359976 1.18106507751
Run Code Online (Sandbox Code Playgroud)
我如何计算出每箱的平均值b,比如b=-.5我是否[-0.61386923071,-0.37534201964]在bin中3
quantile ×10
r ×5
python ×3
pandas ×2
percentile ×2
algorithm ×1
boost ×1
c++ ×1
data.table ×1
describe ×1
ecdf ×1
numpy ×1
regression ×1
scatter-plot ×1
statistics ×1
subset ×1
variance ×1