Dataframe.resample()仅适用于时间序列数据.我找不到从非时间序列数据中获取每一行的方法.什么是最好的方法?
我正在寻找一种算法来确定实时数据捕获的百分位数.
例如,考虑开发服务器应用程序.
服务器的响应时间可能如下:17 ms 33 ms 52 ms 60 ms 55 ms等.
报告第90百分位响应时间,第80百分位响应时间等是有用的.
朴素算法是将每个响应时间插入列表中.请求统计信息时,对列表进行排序并将值放在适当的位置.
内存使用量与请求数量呈线性关系.
是否有一种算法可以在内存使用量有限的情况下产生"近似"百分位数统计量?例如,假设我想以一种处理数百万个请求的方式来解决这个问题,但只想使用一千字节的内存进行百分位跟踪(丢弃旧请求的跟踪不是一个选项,因为百分位数应该是满足所有要求).
还要求不存在分布的先验知识.例如,我不希望提前指定任何范围的存储桶.
据我所知,OHLC使用一列数据对Pandas中的时间序列数据进行重新采样将完美地工作,例如在以下数据帧上:
>>df
ctime       openbid
1443654000  1.11700
1443654060  1.11700
...
df['ctime']  = pd.to_datetime(df['ctime'], unit='s')
df           = df.set_index('ctime')
df.resample('1H',  how='ohlc', axis=0, fill_method='bfill')
>>>
                     open     high     low       close
ctime                                                   
2015-09-30 23:00:00  1.11700  1.11700  1.11687   1.11697
2015-09-30 24:00:00  1.11700  1.11712  1.11697   1.11697
...
但是如果数据已经是OHLC格式,我该怎么办?根据我的收集,API的OHLC方法为每列计算OHLC切片,因此如果我的数据采用以下格式:
             ctime  openbid  highbid   lowbid  closebid
0       1443654000  1.11700  1.11700  1.11687   1.11697
1       1443654060  1.11700  1.11712  1.11697   1.11697
2       1443654120  1.11701  1.11708  1.11699   1.11708
当我尝试重新采样时,我会为每个列获得一个OHLC,如下所示:
                     openbid                             highbid           \
                        open     high      low    close     open     high   
ctime                                                                       
2015-09-30 23:00:00  1.11700  1.11700  1.11700  1.11700 …我有一个1-n numpy数组,我想下采样.如果下采样栅格不完全适合数据,则可以使用以下任何方法:
基本上如果我有
1 2 6 2 1
我的下采样率为3,所有以下都可以:
3 3
3 1.5
或者插值会给我的任何东西.
我只是在寻找最快/最简单的方法.
我找到了scipy.signal.decimate,但这听起来像是抽取了值(根据需要取出它们,只在X中留下一个).  scipy.signal.resample似乎有正确的名字,但我不明白他们在描述中的整个傅立叶的位置.我的信号不是特别周期性的.
你能帮我一把吗?这似乎是一项非常简单的任务,但所有这些功能都非常错综复杂......
我之前运行过相同的代码(带有我需要的包)并且它有效,不确定现在发生了什么。这显示了错误,
 AttributeError: module 'PIL.Image' has no attribute 'Resampling'。可能这是一个小问题,但我无法弄清楚,我正在数据块中工作。
我需要将2D数据重新采样到常规网格.
这就是我的代码:
import matplotlib.mlab as ml
import numpy as np
y = np.zeros((512,115))
x = np.zeros((512,115))
# Just random data for this test:
data = np.random.randn(512,115)
# filling the grid coordinates:    
for i in range(512):
    y[i,:]=np.arange(380,380+4*115,4)
for i in range(115):
    x[:,i] = np.linspace(-8,8,512)
    y[:,i] -=  np.linspace(-0.1,0.2,512)
# Defining the regular grid
y_i = np.arange(380,380+4*115,4)
x_i = np.linspace(-8,8,512)
resampled_data = ml.griddata(x,y,data,x_i,y_i)
(512,115)是2D数据的形状,我已经安装了mpl_toolkits.natgrid.
我的问题是我得到了一个蒙面数组,其中大部分条目都是nan,而不是一个主要由常规条目组成的数组,而边界只有nan.
有人能指出我做错了吗?
谢谢!
假设我有一个10,000磅的矢量,我想采取一个只有100个对数间隔点的切片.我想要一个函数给我索引的整数值.这是一个简单的解决方案,只需使用+ logspace,然后摆脱重复.
def genLogSpace( array_size, num ):
    lspace = around(logspace(0,log10(array_size),num)).astype(uint64)
    return array(sorted(set(lspace.tolist())))-1
ls=genLogspace(1e4,100)
print ls.size
>>84
print ls
array([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,
         11,   13,   14,   15,   17,   19,   21,   23,   25,   27,   30,
         33,   37,   40,   44,   49,   54,   59,   65,   71,   78,   86,
         94,  104,  114,  125,  137,  151,  166,  182,  200,  220,  241,
        265,  291,  319,  350,  384,  422,  463,  508,  558,  613,  672,
        738,  810,  889,  976, 1071, 1176, …我想在C++中实现上面提到的两个图像重采样算法(bicubic和Lanczos).我知道有很多现有的实现,但我仍然想做自己的.我想部分原因是因为我想了解它们是如何工作的,部分是因为我想给它们一些在主流实现中找不到的功能(比如可配置的多CPU支持和进度报告).
我试过读维基百科,但这些东西对我来说太干了.也许对这些算法有一些更好的解释?我在SO或Google上找不到任何东西.
补充:似乎没有人可以给我一个关于这些主题的良好链接.任何人都可以至少尝试在这里解释一下吗?
我有以下15分钟的数据作为dataframe3年.前两列是索引.
2014-01-01 00:15:00  1269.6      
2014-01-01 00:30:00  1161.6      
2014-01-01 00:45:00  1466.4      
2014-01-01 01:00:00  1365.6      
2014-01-01 01:15:00  1362.6      
2014-01-01 01:30:00  1064.0      
2014-01-01 01:45:00  1171.2      
2014-01-01 02:00:00  1171.0      
2014-01-01 02:15:00  1330.4      
2014-01-01 02:30:00  1309.6      
2014-01-01 02:45:00  1308.4      
2014-01-01 03:00:00  1494.0    
我曾经习惯于resample获得月平均值的第二个系列.
data_Monthly = data.resample('1M', how='mean')
如何将最后一列中的值除以月平均值,结果仍然是15分钟粒度的时间序列?
我正在编写一些以不同速度播放WAV文件的代码,因此波浪要么慢,要么低音,要么更快,音高更高.我目前正在使用简单的线性插值,如下所示:
            int newlength = (int)Math.Round(rawdata.Length * lengthMultiplier);
            float[] output = new float[newlength];
            for (int i = 0; i < newlength; i++)
            {
                float realPos = i / lengthMultiplier;
                int iLow = (int)realPos;
                int iHigh = iLow + 1;
                float remainder = realPos - (float)iLow;
                float lowval = 0;
                float highval = 0;
                if ((iLow >= 0) && (iLow < rawdata.Length))
                {
                    lowval = rawdata[iLow];
                }
                if ((iHigh >= 0) && (iHigh < rawdata.Length))
                {
                    highval = rawdata[iHigh];
                }
                output[i] = …resampling ×10
python ×6
pandas ×3
algorithm ×2
numpy ×2
audio ×1
average ×1
bicubic ×1
dataframe ×1
matplotlib ×1
percentile ×1
python-2.7 ×1
scipy ×1
time-series ×1