Julia 数据帧或数据帧是否比普通阵列快?

Julia 数据帧或数据帧是否比普通阵列快?,julia,Julia,我想知道在大型数据集(虽然很大,但仍然适合内存)上进行计算时,普通阵列与Juliab或DataFrame的性能是否有差异 我可以使用普通数组和算法进行排序、分组、缩减等。那么为什么我需要JuliaDB或DataFrame呢 我有点理解为什么Python需要Pandas——因为它将缓慢的Python转换为快速的C。但是为什么Julia需要Juliab或DataFrame——Julia已经很快了。这可能是一个广泛的话题。让我强调一下我认为关键的特征 与标准阵列相比,DataFrames.jl或Jul

我想知道在大型数据集(虽然很大,但仍然适合内存)上进行计算时,普通阵列与Juliab或DataFrame的性能是否有差异

我可以使用普通数组和算法进行排序、分组、缩减等。那么为什么我需要JuliaDB或DataFrame呢


我有点理解为什么Python需要Pandas——因为它将缓慢的Python转换为快速的C。但是为什么Julia需要Juliab或DataFrame——Julia已经很快了。

这可能是一个广泛的话题。让我强调一下我认为关键的特征

与标准阵列相比,DataFrames.jl或JuliaDB.jl有哪些好处
  • 它们允许您存储具有不同类型的数据列。您可以在数组中执行相同的操作,但通常它们必须是
    Any
    的数组,这将比使用具有具体类型的数据列更慢,占用更多内存
  • 您可以使用名称访问列。但是,这是一个次要功能-例如namedarray.jl提供了一个具有命名维度的类似数组的类型
  • 另外一个好处是,有一个基于列具有名称这一事实构建的生态系统(例如,连接两个
    DataFrame
    s或使用GLM.jl构建GLM模型)
  • 这种类型的存储(具有名称的异构列)是关系数据库中表的表示形式

    DataFrames.jl和JuliaDB.jl之间有什么区别
  • jl支持分布式并行;DataFrames.jl的正常使用假设数据适合内存(您可以使用
    SharedArray
    解决此问题,但这不是设计的一部分),如果您想要并行计算,则必须手动进行
  • JuliaDB.jl支持索引,而DataFrames.jl目前不支持索引
  • JuliaDB.jl的列类型是稳定的,而DataFrames.jl的列类型目前不稳定。其后果是:
    • 每次创建新类型的数据结构时,使用JuliaDB.jl时,必须重新编译应用于该类型的所有函数(对于大型数据集,可以忽略这一点,但在使用多个异构小型数据集时,可能会对性能产生明显影响)
    • 当使用DataFrames.jl时,在某些情况下,您必须使用特殊的技术来确保类型推断以实现高性能(最显著的是所讨论的屏障功能)

  • 与速度相比,我相信DF的一个优点是您可以对列进行名称访问,而不是使用经典矩阵进行基于位置的访问。DataFrame或Juliab表类似于SQL数据库中的表,允许联接、筛选、多种数据类型等,而普通数组实际上就像向量/矩阵/数组的数学构造。回答不错。我支持Julia的观点,主要的好处是允许跨列使用不同的类型。尽管对于许多问题来说,让所有内容都成为
    Float64
    就足够了,但在整个分析字段中,第一列最好是索引行的不同类型。例如,对于经济或金融数据,您经常希望第一列的类型为
    Date
    DateTime
    。我是否可以使用JuliaDB.jl来拟合数据集大于内存的回归模型(例如MixedModels.jl),而不在内存中加载所有内容?如果MixedModels.jl不可能,但是,对于您来说,与JuliaDB配合良好的功能就足够了(它已经支持许多模型)。