具有约2000万个采样点和千兆字节数据的交互式大图


80

我在我的RAM上遇到问题:它无法保存我要绘制的数据。我确实有足够的高清空间。有什么解决方案可以避免我的数据集出现“阴影”?

具体来说,我处理数字信号处理,必须使用高采样率。我的框架(GNU Radio)将值(避免使用过多的磁盘空间)保存为二进制。我打开包装。之后,我需要绘图。我需要剧情可缩放,并且是交互式的。这是一个问题。

对此是否有优化的潜力,或者可以处理更大数据集的另一种软件/编程语言(例如R或类似语言)是否有优化的潜力?实际上,我想要更多的数据。但是我没有其他软件的经验。GNUplot失败,采用与以下类似的方法。我不知道R(喷射)。

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import struct

"""
plots a cfile

cfile - IEEE single-precision (4-byte) floats, IQ pairs, binary
txt - index,in-phase,quadrature in plaintext

note: directly plotting with numpy results into shadowed functions
"""

# unpacking the cfile dataset
def unpack_set(input_filename, output_filename):
    index = 0   # index of the samples
    output_filename = open(output_filename, 'wb')

    with open(input_filename, "rb") as f:

        byte = f.read(4)    # read 1. column of the vector

        while byte != "":
        # stored Bit Values
            floati = struct.unpack('f', byte)   # write value of 1. column to a variable
            byte = f.read(4)            # read 2. column of the vector
            floatq = struct.unpack('f', byte)   # write value of 2. column to a variable
            byte = f.read(4)            # next row of the vector and read 1. column
            # delimeter format for matplotlib 
            lines = ["%d," % index, format(floati), ",",  format(floatq), "\n"]
            output_filename.writelines(lines)
            index = index + 1
    output_filename.close
    return output_filename.name

# reformats output (precision configuration here)
def format(value):
    return "%.8f" % value            

# start
def main():

    # specify path
    unpacked_file = unpack_set("test01.cfile", "test01.txt")
    # pass file reference to matplotlib
    fname = str(unpacked_file)
    plt.plotfile(fname, cols=(0,1)) # index vs. in-phase

    # optional
    # plt.axes([0, 0.5, 0, 100000]) # for 100k samples
    plt.grid(True)
    plt.title("Signal-Diagram")
    plt.xlabel("Sample")
    plt.ylabel("In-Phase")

    plt.show();

if __name__ == "__main__":
    main()

像plt.swap_on_disk()之类的东西可以将其缓存在我的SSD上;)


你是什么意思“直接与numpy的结果绘制成阴影功能”
jfs

2
我不明白您如何获得“千兆字节”的数据。2000万x(3 x(4字节))= 240MB,对吗?@EOL是完全正确的-将所有非常好的二进制数据转换为文本格式完全浪费时间和I / O,请使用numpy直接访问二进制文件。
乔纳森·杜尔西

很奇怪,我看不到您在任何地方存储floati和floatq?还是以“ lines”开头的行是在while循环内?
K.-Michael Aye 2012年

有趣的是,由于6个非空格字符的编辑规则,我无法编辑它。有时,只有4个空格才能使代码完全不起作用...;)
K.-Michael Aye 2012年

Answers:


88

因此,您的数据并不是很大,而您在绘制数据时遇到了麻烦,这表明工具存在问题。Matplotlib有很多选项,输出也不错,但这是一个巨大的内存消耗,它从根本上假设您的数据很小。但是还有其他选择。

举例来说,我使用以下代码生成了一个20M的数据点文件“ bigdata.bin”:

#!/usr/bin/env python
import numpy
import scipy.io.numpyio

npts=20000000
filename='bigdata.bin'

def main():
    data = (numpy.random.uniform(0,1,(npts,3))).astype(numpy.float32)
    data[:,2] = 0.1*data[:,2]+numpy.exp(-((data[:,1]-0.5)**2.)/(0.25**2))
    fd = open(filename,'wb')
    scipy.io.numpyio.fwrite(fd,data.size,data)
    fd.close()

if __name__ == "__main__":
    main()

生成的文件大小约为229MB,不是很大。但是您已经表示过,您想转到更大的文件,因此最终会遇到内存限制。

首先,让我们专注于非交互式绘图。首先要意识到的是,在每个点上都带有字形的向量图将是一场灾难-对于20 M点中的每一个,无论如何大部分都会重叠,试图绘制很少的十字或圆圈,或者正在发生变化成为灾难,产生大量文件并耗费大量时间。我认为这是默认情况下下沉matplotlib的原因。

Gnuplot可以轻松解决此问题:

gnuplot> set term png
gnuplot> set output 'foo.png'
gnuplot> plot 'bigdata.bin' binary format="%3float32" using 2:3 with dots

gnuplot

甚至可以使Matplotlib谨慎行事(选择栅格后端,并使用像素标记点):

#!/usr/bin/env python
import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

datatype=[('index',numpy.float32), ('floati',numpy.float32), 
        ('floatq',numpy.float32)]
filename='bigdata.bin'

def main():
    data = numpy.memmap(filename, datatype, 'r') 
    plt.plot(data['floati'],data['floatq'],'r,')
    plt.grid(True)
    plt.title("Signal-Diagram")
    plt.xlabel("Sample")
    plt.ylabel("In-Phase")
    plt.savefig('foo2.png')

if __name__ == "__main__":
    main()  

matplotlib

现在,如果要进行交互,您将不得不对数据进行分类以进行绘制,并即时进行放大。我不知道有任何Python工具可以帮助您立即完成此操作。

另一方面,绘制大数据是很常见的任务,并且有一些工具可以胜任。 Paraview是我个人的最爱,VisIt是另一个。它们都主要用于3D数据,但是Paraview特别是2d,并且具有很高的交互性(甚至具有Python脚本接口)。唯一的技巧是将数据写入Paraview可以轻松读取的文件格式。


2
很棒的帖子。+1为VisIt和ParaView提及-它们都是有用且强大的可视化程序,旨在处理(非常!)大型数据集。请注意,VisIt还具有Python脚本编写界面,并且除了绘制2D和3D曲线外,还可以绘制1D曲线。就文件格式而言,VTK是两个程序都支持的相对简单的格式(实际上ParaView是建立在VTK库上的)。
克里斯(Chris)

2
请查看Bokeh Datashader,它“甚至可以将最大的数据转换为图像”:github.com/bokeh/datashader
tommy.carstensen

3
感谢您提及Paraview和VisIt。两者都设法解决了我提到的2D用例:stackoverflow.com/a/55967461/895245
Ciro Santilli郝海东冠状病六四事件法轮功

38

在Ubuntu上对具有1000万点散点图基准的开源交互式绘图软件进行的调查

受到以下描述的用例的启发:https ://stats.stackexchange.com/questions/376361/how-to-find-the-sample-points-that-have-statistically-有意义-大-离群值-r我已对其进行基准测试以下非常简单且幼稚的1000万点直线数据的一些实现:

i=0;
while [ "$i" -lt 10000000 ]; do
  echo "$i,$((2 * i)),$((4 * i))"; i=$((i + 1));
done > 10m.csv

前几行10m.csv如下所示:

0,0,0
1,2,4
2,4,8
3,6,12
4,8,16

基本上,我想:

  • 进行多维数据的XY散点图,希望将Z作为点颜色
  • 交互式选择一些有趣的观察点
  • 查看所选点的所有尺寸(至少包括X,Y和Z)以尝试了解为什么它们在XY散点中是异常值

为了获得更多乐趣,我还准备了更大的10亿点数据集,以防任何程序可以处理1000万点!CSV文件有点不稳定,所以我转到了HDF5:

import h5py
import numpy

size = 1000000000

with h5py.File('1b.hdf5', 'w') as f:
    x = numpy.arange(size + 1)
    x[size] =  size / 2
    f.create_dataset('x', data=x, dtype='int64')
    y = numpy.arange(size + 1) * 2
    y[size] =  3 * size / 2
    f.create_dataset('y', data=y, dtype='int64')
    z = numpy.arange(size + 1) * 4
    z[size] = -1
    f.create_dataset('z', data=z, dtype='int64')

这将产生一个〜23GiB文件,其中包含:

  • 十亿点的直线很像 10m.csv
  • 图表中心上方的一个离群点

除非在小节中另有说明,否则这些测试都是在Ubuntu 18.10中进行的,除非是在具有Intel Core i7-7820HQ CPU(4核/ 8线程),2个Samsung M471A2K43BB1-CRC RAM(2个16GiB),NVIDIA Quadro M1200的ThinkPad P51笔记本电脑上进行的4GB GDDR5 GPU。

结果汇总

考虑到我非常特定的测试用例,并且我是许多审查软件的首次用户,这就是我观察到的:

它可以处理1000万点吗?

Vaex        Yes, tested up to 1 Billion!
VisIt       Yes, but not 100m
Paraview    Barely
Mayavi      Yes
gnuplot     Barely on non-interactive mode.
matplotlib  No
Bokeh       No, up to 1m
PyViz       ?
seaborn     ?

它有很多功能吗?

Vaex        Yes.
VisIt       Yes, 2D and 3D, focus on interactive.
Paraview    Same as above, a bit less 2D features maybe.
Mayavi      3D only, good interactive and scripting support, but more limited features.
gnuplot     Lots of features, but limited in interactive mode.
matplotlib  Same as above.
Bokeh       Yes, easy to script.
PyViz       ?
seaborn     ?

GUI是否感觉良好(不考虑良好的性能):

Vaex        Yes, Jupyter widget
VisIt       No
Paraview    Very
Mayavi      OK
gnuplot     OK
matplotlib  OK
Bokeh       Very, Jupyter widget
PyViz       ?
seaborn     ?

Vaex 2.0.2

https://github.com/vaexio/vaex

安装并获得一个hello world的工作,如以下所示:如何在Vaex中进行交互式2D散点图缩放/点选择?

我以高达10亿的积分测试了vaex,它非常有效!

它是“ Python脚本优先”的代码,它具有很高的可重复性,使我可以轻松地与其他Python东西交互。

Jupyter设置有几个移动的部分,但是一旦我使它与virtualenv一起运行,那就太神奇了。

要加载在Jupyter中运行的CSV:

import vaex
df = vaex.from_csv('10m.csv', names=['x', 'y', 'z'],)
df.plot_widget(df.x, df.y, backend='bqplot')

我们可以立即看到:

在此处输入图片说明

现在,我们可以使用鼠标缩放,平移和选择点,并且更新速度非常快,所有这些操作都在10秒内完成。在这里,我放大查看了一些单独的点,并选择了其中一些(图像上较淡的矩形):

在此处输入图片说明

用鼠标进行选择后,其效果与使用该df.select()方法完全相同。因此,我们可以通过在Jupyter中运行来提取所选点:

df.to_pandas_df(selection=True)

输出格式为:

        x       y        z   index
0 4525460 9050920 18101840 4525460
1 4525461 9050922 18101844 4525461
2 4525462 9050924 18101848 4525462
3 4525463 9050926 18101852 4525463
4 4525464 9050928 18101856 4525464
5 4525465 9050930 18101860 4525465
6 4525466 9050932 18101864 4525466

由于10M点效果很好,所以我决定尝试1B点...而且效果也不错!

import vaex
df = vaex.open('1b.hdf5')
df.plot_widget(df.x, df.y, backend='bqplot')

要观察离群值,该离群值在原始图上是不可见的,我们可以遵循如何在vaex交互式Jupyter bqplot plot_widget中更改点样式以使单个点变大和可见?并使用:

df.plot_widget(df.x, df.y, f='log', shape=128, backend='bqplot')

产生:

在此处输入图片说明

然后选择点:

在此处输入图片说明

我们获得异常值的完整数据:

   x          y           z
0  500000000  1500000000  -1

这是创作者的演示,具有更有趣的数据集和更多功能:https : //www.youtube.com/watch?v=2Tt0i823-ec&t=770

在Ubuntu 19.04中测试。

VisIt 2.13.3

网站:https//wci.llnl.gov/simulation/computer-codes/visit

许可证:BSD

劳伦斯·利弗莫尔国家实验室Lawrence Livermore National Laboratory)开发,该实验室国家核安全局的实验室,因此,如果我能使它正常工作,那么您可以想象1000万点将毫无用处。

安装:没有Debian软件包,只需从网站下载Linux二进制文件即可。无需安装即可运行。另请参阅:https : //askubuntu.com/questions/966901/installing-visit

基于VTKVTK是许多高性能绘图软件使用的后端库。用C写。

经过3个小时的用户界面玩后,我确实可以使用它了,并且确实可以解决我的用例,详情如下:https : //stats.stackexchange.com/questions/376361/how-to-find-the-sample-具有统计意义的大离群值r

这是此帖子的测试数据的外观:

在此处输入图片说明

和一些选择的变焦:

在此处输入图片说明

这是选择窗口:

在此处输入图片说明

在性能方面,VisIt很好:每个图形操作要么只花费少量时间,要么立即执行。当我不得不等待时,它会显示一条“处理中”消息以及剩余的工作量百分比,并且GUI没有冻结。

由于10m点工作得很好,所以我也尝试了100m点(一个2.7G CSV文件),但不幸的是它崩溃了/进入了一种奇怪的状态,我看着它进入,htop因为4个VisIt线程占用了我所有的16GiB RAM并可能由于应有的死机了失败的malloc。

最初的入门有点痛苦:

  • 如果您不是核弹工程师,那么许多默认设置都会令人感到残酷吗?例如:
    • 默认点大小1px(在显示器上被灰尘弄脏)
    • 轴的比例从0.0到1.0:如何在“访问”绘图程序中显示实际的轴数值,而不是从0.0到1.0的分数?
    • 多窗口设置,选择数据点时讨厌的多弹出窗口
    • 显示您的用户名和打印日期(通过“控件”>“注释”>“用户信息”删除)
    • 自动定位默认设置很糟糕:图例与轴冲突,找不到标题自动化,因此不得不添加标签并手动重新放置所有内容
  • 只有很多功能,因此很难找到想要的功能
  • 该手册非常有帮助,但是它是一个386页PDF庞然大物,日期不详,日期为“ October 2005 Version 1.5”。我想知道他们是否以此来发展Trinity这是我最初回答此问题后创建的一个很好的Sphinx HTML
  • 没有Ubuntu软件包。但是预编译的二进制文件确实可以工作。

我将这些问题归因于:

  • 它已经存在了很长时间,并使用了一些过时的GUI创意
  • 您不能只单击绘图元素来更改它们(例如,轴,标题等),并且有很多功能,因此很难找到想要的功能

我也很喜欢它有些LLNL基础结构泄漏到该存储库中。例如,请参阅docs / OfficeHours.txt和该目录中的其他文件!对于“星期一早上的家伙”布拉德(Brad)感到抱歉!哦,答录机的密码是“ Kill Ed”,请不要忘记这一点。

视点5.4.1

网站:https//www.paraview.org/

许可证:BSD

安装:

sudo apt-get install paraview

桑迪亚国家实验室Sandia National Laboratories)开发,该实验室是NNSA的另一个实验室,因此我们再次希望它可以轻松处理数据。也是基于VTK并用C ++编写的,这进一步受到了欢迎。

但是我很失望:由于某种原因,1000万点使GUI非常缓慢且无响应。

我对广告中的“我现在正在工作,稍等片刻”这一刻受到控制是很好的,但是在这种情况下GUI冻结了吗?不能接受的。

htop显示Paraview正在使用4个线程,但是CPU和内存均未达到极限。

在GUI方面,Paraview非常美观和现代,在不卡口的情况下比VisIt更好。这是一个较低的点数供参考:

在此处输入图片说明

这是带有手动点选择的电子表格视图:

在此处输入图片说明

另一个缺点是与VisIt相比,Paraview感觉缺乏功能,例如:

Mayavi 4.6.2

网站:https//github.com/enthought/mayavi

制定者:有思想

安装:

sudo apt-get install libvtk6-dev
python3 -m pip install -u mayavi PyQt5

VTK Python之一。

Mayavi似乎非常专注于3D,我找不到如何在其中进行2D绘制的图表,因此不幸的是,它并没有削减它的使用范围。

但是,仅为了检查性能,我改编了以下示例:https : //docs.enthought.com/mayavi/mayavi/auto/example_scatter_plot.html,获得了1000万分,并且运行良好,没有滞后:

import numpy as np
from tvtk.api import tvtk
from mayavi.scripts import mayavi2

n = 10000000
pd = tvtk.PolyData()
pd.points = np.linspace((1,1,1),(n,n,n),n)
pd.verts = np.arange(n).reshape((-1, 1))
pd.point_data.scalars = np.arange(n)

@mayavi2.standalone
def main():
   from mayavi.sources.vtk_data_source import VTKDataSource
   from mayavi.modules.outline import Outline
   from mayavi.modules.surface import Surface
   mayavi.new_scene()
   d = VTKDataSource()
   d.data = pd
   mayavi.add_source(d)
   mayavi.add_module(Outline())
   s = Surface()
   mayavi.add_module(s)
   s.actor.property.trait_set(representation='p', point_size=1)
main()

输出:

在此处输入图片说明

但是,我无法放大到足以看到单个点的地方,近3D平面太远了。也许有办法吗?

关于Mayavi的一件很酷的事情是,开发人员付出了很多努力,使您可以很好地从Python脚本启动和设置GUI,就像Matplotlib和gnuplot一样。看来在Paraview中也可以做到这一点,但是文档至少没有那么好。

通常,感觉不到VisIt / Paraview的功能。例如,我无法直接从GUI加载CSV如何从Mayavi GUI加载CSV文件?

Gnuplot 5.2.2

网站:http : //www.gnuplot.info/

当我需要快速又肮脏时,gnuplot真的很方便,这始终是我尝试的第一件事。

安装:

sudo apt-get install gnuplot

对于非交互式使用,它可以合理地处理10m个点:

#!/usr/bin/env gnuplot
set terminal png size 1024,1024
set output "gnuplot.png"
set key off
set datafile separator ","
plot "10m1.csv" using 1:2:3:3 with labels point

在7秒内完成:

在此处输入图片说明

但是如果我尝试与

#!/usr/bin/env gnuplot
set terminal wxt size 1024,1024
set key off
set datafile separator ","
plot "10m.csv" using 1:2:3 palette

和:

gnuplot -persist main.gnuplot

那么初始渲染和缩放就太迟钝了。我什至看不到矩形选择线!

还要注意,对于我的用例,我需要使用超文本标签,如下所示:

plot "10m.csv" using 1:2:3 with labels hypertext

但标签功能存在性能错误,包括非交互式渲染。但是我报告了它,伊桑(Ethan)在一天之内解决了这个问题:https : //groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/qpL8aJIi9ZE

但是,我必须说,有一种合理的解决方法可以选择异常值:只需将带有行ID的标签添加到所有点!如果附近有很多点,您将无法阅读标签。但是对于您关心的异常值,您可能会发现!例如,如果我在原始数据中添加一个异常值:

cp 10m.csv 10m1.csv
printf '2500000,10000000,40000000\n' >> 10m1.csv

并将plot命令修改为:

#!/usr/bin/env gnuplot
set terminal png size 1024,1024
set output "gnuplot.png"
set key off
set datafile separator ","
plot "10.csv" using 1:2:3:3 palette with labels

这显着减慢了绘图速度(在上述修复后40分钟),但产生了合理的输出:

在此处输入图片说明

因此,通过一些数据过滤,我们最终会到达那里。

Matplotlib 1.5.1,numpy 1.11.1,Python 3.6.7

网站:https//matplotlib.org/

当我的gnuplot脚本开始变得太疯狂时,我通常会尝试使用Matplotlib。

numpy.loadtxt 一个人花了大约10秒钟,所以我知道这不会进展顺利:

#!/usr/bin/env python3

import numpy
import matplotlib.pyplot as plt

x, y, z = numpy.loadtxt('10m.csv', delimiter=',', unpack=True)
plt.figure(figsize=(8, 8), dpi=128)
plt.scatter(x, y, c=z)
# Non-interactive.
#plt.savefig('matplotlib.png')
# Interactive.
plt.show()

首先,非交互式尝试提供了良好的输出,但耗时3分55秒...

然后,交互式交互花了很长时间进行初始渲染和缩放。无法使用:

在此处输入图片说明

请注意,在此屏幕截图中,应立即缩放并消失的缩放选择在等待计算缩放时在屏幕上停留了很长时间!

plt.figure(figsize=(8, 8), dpi=128)由于某种原因,我不得不注释掉交互式版本才能工作,否则它会被炸毁:

RuntimeError: In set_size: Could not set the fontsize

散景1.3.1

https://github.com/bokeh/bokeh

Ubuntu 19.04安装:

python3 -m pip install bokeh

然后启动Jupyter:

jupyter notebook

现在,如果我绘制100万个点,则一切工作正常,界面很棒且快速,包括缩放和悬停信息:

from bokeh.io import output_notebook, show
from bokeh.models import HoverTool
from bokeh.transform import linear_cmap
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
import numpy as np

N = 1000000
source = ColumnDataSource(data=dict(
    x=np.random.random(size=N) * N,
    y=np.random.random(size=N) * N,
    z=np.random.random(size=N)
))
hover = HoverTool(tooltips=[("z", "@z")])
p = figure()
p.add_tools(hover)
p.circle(
    'x',
    'y',
    source=source,
    color=linear_cmap('z', 'Viridis256', 0, 1.0),
    size=5
)
show(p)

初始视图:

在此处输入图片说明

缩放后:

在此处输入图片说明

如果我阻塞了10m,htop表明铬有8个线程在不间断的IO状态下占用了我所有的内存。

这询问有关参考点的问题:如何参考选定的bokeh背景数据点

毕威士

https://pyviz.org/

TODO评估。

集成Bokeh + datashader +其他工具。

视频演示1B数据点:https : //www.youtube.com/watch? v = k27MJJLJNT4“ PyViz:仪表板,用于在30行Python中可视化10亿个数据点”,“ Anaconda,Inc.” 发表于2018-04-17。

海生的

https://seaborn.pydata.org/

TODO评估。

已经有关于如何使用seaborn可视化至少5000万行的质量检查。


1
惊人的写作!感谢您详细介绍每种解决方案的优缺点以及示例代码!
gaborous


13

您当然可以优化文件的读取:您可以将其直接读取到NumPy数组中,以利用NumPy的原始速度。您有几种选择。如果存在RAM问题,则可以使用memmap,它将大多数文件保留在磁盘上(而不是在RAM中):

# Each data point is a sequence of three 32-bit floats:
data = np.memmap(filename, mode='r', dtype=[('index', 'float32'), ('floati','float32'), ('floatq', 'float32')])

如果RAM不是问题,则可以使用fromfile将整个数组放入RAM中:

data = np.fromfile(filename, dtype=[('index', 'float32'), ('floati','float32'), ('floatq', 'float32')])

然后可以使用Matplotlib的常规plot(*data)功能进行绘图,可能通过另一种解决方案中提出的“放大”方法进行。


1
如果你想创建一个结构化numpy的阵列和打开文件为只读,则:np.memmap(filename, mode='r', dtype=[('floati','f'), ('floatq', 'f')])
jfs,

从一百万点的双打开始,我在任何尝试的后端中都遇到了Agg溢出问题,也使用path.simplify = True。因此,我不相信使用Matplotlib可以做到“像那样”。
K.-Michael Aye 2012年

有趣。正如乔纳森·杜尔西(Jonathan Dursi)的答案所提到的那样,使用Matplotlib可以达到2000万点,但有一些限制(光栅输出等)。
Eric O Lebigot 2012年


8

我会建议一些复杂的方法,但是应该可以起作用:以不同的分辨率,不同的范围构建图形。

例如,以Google Earth为例。如果最大程度地缩放以覆盖整个星球,则分辨率是最低的。缩放时,图片会更改为更详细的图片,但仅在您要缩放的区域上。

因此,基本上对于您的绘图(是2D还是3D?我假设是2D),我建议您构建一个大图,以低分辨率覆盖整个[0,n]范围,另外2个较小的图覆盖[0,n] / 2]和[n / 2 + 1,n]的分辨率是大图的两倍; 4个较小的图覆盖了[0,n / 4] ... [3 * n / 4 + 1,n],其中两倍上面2的分辨率,依此类推。

不确定我的解释是否很清楚。另外,我不知道这种多分辨率图形是否可以由任何现有的绘图程序处理。


在那种情况下,我可以简单地降低采样率...但是在一个交互式绘图中,我需要那么多的值。
wishi 2011年

4
@wishi:考虑到其中许多会重叠,您真的需要一幅图中的数百万个价值吗?对我来说,自适应分辨率似乎是合理的。
user703016 2011年

没机会...特别是我正在记录封装在非常短的信号突发中的实时数据。那意味着所有样品或什么都没有。您无法适应计划分析的内容;)
wishi 2011年

12
这只是显示问题,而不是数据分析问题。您的结果将不会受到影响,只会影响显示。
user703016 2011年

有一个类似的问题,但几年来我有terra字节的数据。(传感器数据采样率为40kHz)。现在,我希望有一个交互式绘图,该绘图将绘制x小时甚至一整天的平均值,当我放大它时,应动态计算新的平均值,依此类推,直到达到如此远的地步因为不需要任何均值计算。问题是:是否有这样的事情已经实现或者我给它自己编程
white91wolf

2

我想知道通过加快您的积分查询是否会赢得胜利?(一段时间以来,R *(r星)树吸引了我。)

我不知道在这种情况下使用r *树之类的方法是否可行。(当缩小时,树中较高的节点可能包含有关更粗,缩小的渲染的信息,更靠近叶子的节点包含各个样本)

甚至内存都可以将树(或最终使用的任何结构)映射到内存中,以保持性能提高和RAM使用率降低。(将内存管理任务转移到内核)

希望这是有道理的。晚了!


我对R一无所知。我的数据集类似于{index,floati,floatq}之类的csv。重复20M次。我不知道你怎么想打造你R.提到的数据结构
wishi

2
我认为这可能是一个涉及的项目。我说的是“ R星”树。维基百科:en.wikipedia.org/wiki/R * _tree HTH
nielsbot,2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.