2013-12-12 71 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的或多或少相同)。