2013-12-12 70 views
30

我真的很喜欢R中的data.frames,因为你可以在一个数据结构中存储不同类型的数据,并且你有很多不同的方法来修改数据(添加列,合并数据。帧,...),它很容易从数据中提取子集,...Java对象模拟R data.frame

是否有任何可用的Java库具有相同的功能?我最感兴趣的是以类矩阵的方式存储不同类型的数据,并能够提取数据的一个子集。

在Java中使用二维数组可以提供类似的结构,但添加一个列并随后提取最高k个记录要困难得多。

+0

在之前的工作中,我使用Object [] []'(行优先模式) 来编写类似的库 来存储数据。 您可以轻松地编写 你需要的所有操作方法(把它们写一次一个,在需要时):添加一列, 提取柱, 添加行, 提取一排, 'cbind' ,'rbind','merge','ddply'等。 由于他们受到R的启发, 大多数这些方法都有一个参数: 例如,要添加一个新列, 我会提供一个函数计算行的其余部分的值; 提取行,我会提供一个谓词,以指示要保留的行。 –

+0

这也是我的想法。但我想也许已经有一个支持所有功能的库,以便我不必重新实现它:) – Michael

+0

我还希望有一个实现data.frame的Java类。 – stackoverflowuser2010

回答

9

我刚刚开源了一个基于类型列(包括对原始值的支持)提供数据框的Java 8库Paleo的初稿。可以通过编程方式创建列(通过简单的构建器API),也可以从文本文件导入列。

详情请参阅README

该项目从出生时起依然湿润 - 我对反馈/ PR,tia非常感兴趣!

+0

不错,那是我非常想找的东西。您是否有计划将具有功能的Paleo库扩展到例如对数据记录进行排序或仅保留具有某些属性的记录等? – Michael

+1

我很高兴你喜欢它!排序和切片绝对在我的名单上。哪一个更紧迫? – netzwerg

+0

我有兴趣根据日期列重新采样数据帧。如果它提供了这种可能性,看看Paleo ...如果不是,如果可行的话,我会添加它! – Christophe

4

R不太精通,但你应该看看Guava,特别是Table s。他们做不是提供你想要的确切功能,但你可以扩展他们或他们的规范可以帮助你写你自己的收藏。

+0

我以前没有玩过Guava的表格,但它们看起来与R的数据框非常相似。特别是,它可以提取特定的行或特定的列。另一方面,似乎并没有简单的方法*将给定的行或列添加到表中 – raptortech97

10

我最近在Java中工作时也发现自己需要数据框架结构。幸运的是,在编写一个非常基本的实现之后,我获得了批准将其作为开源发布。你可以在这里找到我的实现:Joinery -- Data frames for Java。欢迎贡献和功能请求。

+0

请务必注意,细木工是GPL3许可的,因此可能不适用于许多用例 –

10

Tablesaw(https://github.com/lwhite1/tablesaw)是2015年开始的Java数据框,并在2017年进行了积极的开发。它的设计尽可能地扩展了而不牺牲易用性。其功能包括按行和列进行过滤,描述性统计,地图/缩小功能,交叉表,图表,机器学习。 Apache许可证。

在一次查询测试中,它在2 ms内从500,000,000条记录表中返回了500多条记录。

它还包括一个面向列的存储区,它比使用CSV文件小得多,速度也快得多。欢迎贡献,功能请求和简单的反馈。

3

Morpheus(http://www.zavtech.com/morpheus/docs/)提供了一个DataFrame类似于R.它是一个高性能的列存储数据结构,可以使数据在行或列维度中进行排序,分片,分组和集合。它还支持在内部使用Fork & Join框架对许多这些操作进行并行处理。

您可以轻松阅读&将数据写入CSV文件,数据库以及专有的JSON格式。适用于从Quandl,Google财经和其他人加载数据的适配器也可用。

它支持多种线性回归,主成分分析,线性代数和其他类型的分析支持。功能集仍然在增长,但它已经是一个非常有能力的框架。

0

在该R,我们有数据帧,在Python我们有大熊猫,在Java: 有来自deeplearning4j的Schema

还为无处不在虹膜数据的数据分析版本,如果你想刚刚开始,here

还有其他自定义对象(来自Weka,来自Tensorflow的或多或少相同)。