标签: smoothing

平滑不规则采样的时间数据

给定一个表,其中第一列是经过某个参考点的秒数,第二列是任意测量值:

6   0.738158581
21  0.801697222
39  1.797224596
49  2.77920469
54  2.839757536
79  3.832232283
91  4.676794376
97  5.18244704
100 5.521878863
118 6.316630137
131 6.778507504
147 7.020395216
157 7.331607129
176 7.637492223
202 7.848079136
223 7.989456499
251 8.76853608
278 9.092367123 
    ...
Run Code Online (Sandbox Code Playgroud)

如您所见,在不规则的时间点对测量结果进行采样.我需要通过在每次测量之前将读数平均最多100秒来平滑数据(在Python中).由于数据表很大,因此最好使用基于迭代器的方法.不幸的是,经过两个小时的编码后,我无法找到高效优雅的解决方案.

谁能帮我?

编辑小号

  1. 我希望每个原始读数都有一个平滑的读数,平滑的读数是原始读数的算术平均值和前100(delta)秒中的任何其他读数.(约翰,你说得对)

  2. 巨大的~1e6 - 10e6线+需要使用紧RAM

  3. 数据大致是随机游走

  4. 数据已排序

解析度

我测试了J Machin和yairchu提出的解决方案.他们都给出了相同的结果,但是,在我的数据集中,J Machin的版本呈指数级,而yairchu的版本是线性的.以下是由IPython的%timeit(以微秒为单位)测量的执行时间:

data size   J Machin    yairchu
10        90.2        55.6
50          930         258
100         3080        514
500         64700       2660
1000        253000      5390
2000        952000      11500
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助.

python datetime data-mining smoothing

6
推荐指数
1
解决办法
3303
查看次数

实现双指数平滑,又称双指数移动平均线(DEMA)

如果我有时间序列数据 - {x,y}对的列表 - 并想要平滑它,我可以像这样使用指数移动平均线:

EMA[data_, alpha_:.1] := 
  Transpose @ {#1, ExponentialMovingAverage[#2, alpha]}& @@ Transpose@data
Run Code Online (Sandbox Code Playgroud)

你将如何实现双指数平滑

DEMA[data_, alpha_, gamma_] := (* unstub me! *)
Run Code Online (Sandbox Code Playgroud)

如果它本身可以找出alpha和gamma的良好值,那就太好了.


关于如何处理时间序列中存在间隙的情况的相关问题,即样本未随时间均匀分布:

指数移动平均数在不同时间采样

wolfram-mathematica smoothing

6
推荐指数
1
解决办法
1990
查看次数

Java Swing - 更好的字体平滑

是否有可能在Java swing应用程序中调整字体平滑?

这是一些比较:

在此输入图像描述

差异并不大,但如果你看得足够近,Adobe Story(以及许多其他Flash应用程序)具有更强大和更好的平滑性.

我用Java编写文本编辑器,我希望在JTextPane和JLabels上的应用程序中实现这种平滑.

java fonts swing smoothing

6
推荐指数
1
解决办法
1206
查看次数

代码类似于划船冲程

我正在研究一个显示移动划艇的小程序.以下显示了一个简单的示例代码(Python 2.x):

import time
class Boat:
    def __init__(self, pace, spm):
        self.pace = pace  #velocity of the boat in m/s
        self.spm = spm    #strokes per minute
        self.distance = 0 #distance travelled

    def move(self, deltaT):
        self.distance = self.distance + (self.pace * deltaT)

boat1 = Boat(3.33, 20)
while True:
    boat1.move(0.1)
    print boat1.distance
    time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,船只有一个步速和每分钟行数.每次move(deltaT)调用该方法时,它都会根据速度移动一定距离.

上面的船只是以恒定的速度行进,这是不现实的.真正的划艇在行程开始时加速,然后在划桨叶片离开水后减速.在线有许多图表显示了典型的划船曲线(此处显示的力,速度看起来相似):

划船冲程图 资料来源:highperformancerowing.net

速度应该随着时间的推移而保持不变,但它应该在中风期间发生变化.

将恒定速度改变为曲线的最佳方法是什么(至少基本上)类似于更逼真的划船冲程?

注意:有关如何更好地标记此问题的任何想法?这是算法问题吗?

python plot spline smoothing

6
推荐指数
1
解决办法
376
查看次数

R smooth.spline():平滑样条曲线不平滑但过度拟合我的数据

我有几个数据点似乎适合通过它们拟合样条曲线.当我这样做时,我会得到一个相当凹凸不平的合身,比如过度拟合,这不是我理解为平滑的.

适合

是否有一个特殊的选项/参数来恢复像这里一样非常平滑的样条曲线的功能.

的的使用penalty参数smooth.spline没有任何明显的效果.也许我做错了?

这是数据和代码:

results <- structure(
    list(
        beta = c(
            0.983790622281964, 0.645152464354322,
            0.924104713597375, 0.657703886566088, 0.788138034115623, 0.801080207252363,
            1, 0.858337365965949, 0.999687052533693, 0.666552625121279, 0.717453633245958,
            0.621570152961453, 0.964658181346544, 0.65071758770312, 0.788971505000918,
            0.980476054183113, 0.670263506919246, 0.600387040967624, 0.759173403408052,
            1, 0.986409675965, 0.982996471134736, 1, 0.995340781899163, 0.999855895958986,
            1, 0.846179233381267, 0.879226324448832, 0.795820998892035, 0.997586607285667,
            0.848036806290156, 0.905320944437968, 0.947709125535428, 0.592172373022407,
            0.826847031044922, 0.996916006944244, 0.785967729206612, 0.650346929853076,
            0.84206351833549, 0.999043126652724, 0.936879214753098, 0.76674066557003,
            0.591431233516217, 1, 0.999833445117791, 0.999606223666537, 0.6224971799303,
            1, 0.974537160571494, 0.966717133936379
        ), inventoryCost = c(
            1750702.95138889,
            442784.114583333, 1114717.44791667, 472669.357638889, 716895.920138889,
            735396.180555556, 3837320.74652778, 872873.4375, 2872414.93055556, …
Run Code Online (Sandbox Code Playgroud)

regression r spline curve-fitting smoothing

6
推荐指数
1
解决办法
3839
查看次数

如何识别geom_smooth()使用的函数

我想显示一个由创建的图,geom_smooth()但是对我来说,能够描述如何创建该图很重要。

我可以从文档中看到,当n> = 1000时,使用gam作为平滑函数,但是我看不到使用了多少个结或使用哪个函数生成了平滑。

例:

library(ggplot2)

set.seed(12345)
n <- 3000
x1 <- seq(0, 4*pi,, n)
x2 <- runif(n)
x3 <- rnorm(n)
lp <- 2*sin(2* x1)+3*x2 + 3*x3
p <- 1/(1+exp(-lp))
y <- ifelse(p > 0.5, 1, 0)

df <- data.frame(x1, x2, x3, y)

# default plot
ggplot(df, aes(x = x1, y = y)) +
  geom_smooth() 

# specify method='gam'
# linear
ggplot(df, aes(x = x1, y = y)) +
  geom_smooth(method = 'gam') 

# specify gam and splines
# Shows …
Run Code Online (Sandbox Code Playgroud)

r spline smoothing ggplot2 gam

6
推荐指数
1
解决办法
2208
查看次数

如何让CSS渐变看起来流畅?

我有一个黑色的背景,并希望在内部添加一个块,从简单的CSS渐变到透明到0.7白色:

linear-gradient(to right, 
    hsla(0, 0%, 100%, 0), 
    hsla(0, 0%, 100%, 0.76) 14%, 
    hsla(0, 0%, 100%, 0.76)
)
Run Code Online (Sandbox Code Playgroud)

但这看起来很糟糕:

在此输入图像描述

我找到的唯一方法是手动添加其他颜色停止.

background: linear-gradient(
    to right,
    hsla(0, 0%, 100%, 0),
    hsla(0, 0%, 100%, 0.05) 2%,
    hsla(0, 0%, 100%, 0.09) 3%,
    hsla(0, 0%, 100%, 0.2) 5%,
    hsla(0, 0%, 100%, 0.57) 11.5%,
    hsla(0, 0%, 100%, 0.69) 14%,
    hsla(0, 0%, 100%, 0.75) 16.5%,
    hsla(0, 0%, 100%, 0.76) 17.5%,
    hsla(0, 0%, 100%, 0.77)
);
Run Code Online (Sandbox Code Playgroud)

它看起来好多了:

比较示范

CodePen上的比较演示

是否有更简单的方法使颜色停止时CSS渐变平滑?

css gradient linear-gradients smoothing

6
推荐指数
1
解决办法
3252
查看次数

时间序列数据python的Lowess平滑

我正在尝试使用 LOWESS 来平滑以下数据:

时间序列数据

我想获得一条平滑的线来过滤掉数据中的尖峰。我的代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import HourLocator, DayLocator, DateFormatter
from statsmodels.nonparametric.smoothers_lowess import lowess

file = r'C:...'
df = pd.read_csv(file) # reads data file   

df['Date'] = pd.to_datetime(df['Time Local'], format='%d/%m/%Y  %H:%M')     

x = df['Date']  
y1 = df['CTk2 Level'] 

filtered = lowess(y1, x, is_sorted=True, frac=0.025, it=0)

plt.plot(x, y1, 'r')
plt.plot(filtered[:,0], filtered[:,1], 'b')

plt.show()
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,出现以下错误:

ValueError: view limit minimum -7.641460199922635e+16 小于 1 并且是无效的 Matplotlib 日期值。如果您将非日期时间值传递给具有日期时间单位的轴,则通常会发生这种情况

我的数据中的日期格式为 07/05/2018 00:07:00。我认为问题在于 LOWESS 正在努力处理日期时间数据,但不确定?

你能帮我么?

python time-series smoothing

6
推荐指数
1
解决办法
3865
查看次数

如何在 Python 中使用补间,而不会失去准确性?

我一直在努力使用补间来使 Python 中的鼠标移动平滑,我目前正在尝试自动化一些重复性任务。

我尝试使用补间去除一些在没有应用平滑的情况下发生的粗糙度,但是这样做我失去了明显的准确性,因为我的dydx值被number我最终得到了余数。这可能会因获得可以解决greatest common factor在我的两个值(因为两者dxdy需要由同一分number)不幸的是这导致了过小的GCD的。

由于鼠标无法移动屏幕上像素的其余部分,因此我最终会明显降低精度。

问题:如何对鼠标移动应用补间,而不会失去准确性?

import pytweening
import win32api
import win32con
from time import sleep

dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10]
dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38]

while True:

    count = 0

    values = [(pytweening.getPointOnLine(0, 0, x, y, 0.20)) for x, y in zip(dx, dy)]

    while win32api.GetAsyncKeyState(win32con.VK_RBUTTON) and win32api.GetAsyncKeyState(win32con.VK_LBUTTON): …
Run Code Online (Sandbox Code Playgroud)

python smoothing easing

6
推荐指数
2
解决办法
687
查看次数

空间 bam (gam) 中的时间自相关

我正在根据声学标签检测对河流中的鱼类深度进行建模(这意味着数据并不完全是完美间隔的连续时间序列)。我预测,深度会根据河流的空间位置而有所不同,因为不同的区域有不同的可用深度,一天中的不同时间,因为深度对光有反应,一年中的一天也有相同的原因,并且个体之间也有所不同。那么基本模型就是

深度 ~ s(lon, lat) + s(小时) + s(yday) + s(ID, bs="re")

有几百万次检测,所以模型很糟糕,所以

bam(深度 ~ s(经度、纬度) + s(小时) + s(yday) + s(ID, bs="re")

每个人的深度应该与之前的记录自相关(当然这取决于它最后一次注册的时间,但我不太知道如何解释时间上的离散间隔)。

我知道 rho 参数在 bam 中用作一种 corAR1 函数,我想这可以解释自相关。我还考虑将 lag(深度,by=ID) 作为预测变量,它的表现相当好,但我不确定这种方法的有效性。

我跟踪了几个面包屑发现 rho 可以从没有相关结构的模型中估计 rho<-acf(resid(m1),plot=FALSE)$acf 2 -

对于每个人,我添加了一个 ARSTART 变量来调用 AR.start = df$ARSTART 来考虑个体之间不同的时间序列 - 所以我的模型是

m2<-bam(depth~s(lon, lat)+s(yday)+s(hour, bs="cc")+s(fID, bs="re"), AR.start=df$ARSTART, discrete=T, rho=rho, data=df) 
Run Code Online (Sandbox Code Playgroud)

一切都进展顺利,根据 AIC,具有自相关结构的模型拟合得更好(更好),但效果的后验估计非常不准确(或缩放比例很差)。与没有结构的模型相比,根据 lon、lat 平滑器的空间效应变得极端(且均匀),其中空间平滑器似乎非常有效地捕获空间方差,表明它们被预测在较深的区域中更深且在较浅的区域较浅。

图 1. 深度的后验空间估计用于没有自相关结构的模型,但显然没有考虑深度和滞后深度将相关的现实(按 ID 嵌套)。注意 z 值在原始值范围内调整后验估计是有意义的(大多数探测深度为 0-4 m)

图 2. 当模型包含 rho 参数来解释时间自相关时,深度使用的后验空间估计。注意 z 的巨大尺度,它远远超出了我们测量的范围,并且根本无法解释

如果需要,我可以提供示例代码,但问题本质上是,与模型相比,自相关结构会如此显着地改变后验估计的值是否有意义,并且时间自相关结构是否吸收了所有方差是否与空间效应相关(在具有自相关结构的模型中似乎被否定)?

一些想法-我不知道什么是最好的:

  1. 盲目遵循 AIC,而没有真正理解为什么后验估计如此奇怪(巨大),或者为什么空间效应消失,尽管基于系统的生物学知识显然很重要
  2. 报告我们将自相关结构拟合到数据中,它拟合得很好,但没有改变关系的形状,因此我们呈现没有该结构的模型结果
  3. 没有自相关结构但使用 s(lagDepth) 变量作为固定效应的模型
  4. 模型的变化是深度而不是深度,这似乎消除了一些自相关。

非常感谢所有帮助-非常感谢

spatial smoothing gam mgcv autocorrelation

6
推荐指数
0
解决办法
723
查看次数