2010-03-06 47 views
8

我處理了很多在Python,R和Matlab之間交換的文本/數據。SQLite或平面文本文件?

我的指導是扁平的文本文件,但也偶爾使用SQLite來存儲數據和從每個程序(但不是Matlab)的訪問。我在SQL中不使用GROUPBY,AVG等,就像我在R中執行這些操作一樣,所以我不一定需要數據庫操作。

對於需要在程序之間交換數據以利用每種語言中可用庫的應用程序,有哪些數據交換格式/方法可以使用(甚至是XML或NetCDF或HDF5)的經驗法則?

我知道在Python之間 - > R有rpy或rpy2,但是我對這個問題有更多的一般意義 - 我使用很多計算機,它們都沒有rpy2,還使用其他一些科學分析需要在不同時間訪問數據的軟件(處理和分析的階段也是分開的)。

回答

15

如果所有語言都支持SQLite - 請使用它。 SQL的強大功能現在可能對您沒有什麼用處,但它可能會在某些時候出現,並且可以節省您在確定要以更復雜的方式查詢數據時不得不重寫的情況。

如果您只想訪問數據存儲區中的某些數據位,SQLite的速度可能會大大提高 - 因爲如果不讀取整個文件(儘管這不是不可能),那麼使用純文本文件就會很困難。

+0

+1對於sqlite和預計在未來廣泛使用數據庫,即使它現在不明顯。 – 2010-03-06 12:20:46

+0

謝謝 - 是的,不讀整個文件絕對是它的優點。 – hatmatrix 2010-03-06 13:05:18

5

平面文本文件(例如csv格式)將是最便攜的解決方案。幾乎所有的程序/庫都可以使用這種格式:R和Python具有良好的csv支持,如果數據集不是太大,甚至可以將csv導入到Excel中以執行較小的任務。

但是,對於較大的數據集而言,文本文件並不便利,因爲幾乎所有操作(取決於數據結構)都需要完整讀取它們。你可以很容易地過濾數據(即使沒有太多的SQL專家),正如你已經提到的,它可以自己做一些計算(AVG,SUM,...)。使用Firefox插件SQLiteManager,您可以在每臺計算機上使用數據庫,而無需任何安裝/配置問題,從而輕鬆管理數據(導入/導出,過濾器)。

所以我建議使用SQLite來處理需要大量過濾來提取所需數據的大型數據集。對於較小的數據集,或者如果不需要選擇數據的子集,平面(csv)文本文件應該沒問題。

+0

謝謝 - 用於小文件的csv和用於較大文件的SQL(過濾的可能性是一個優點)。不知道Firefox Plug-in - 這太棒了。 – hatmatrix 2010-03-06 13:06:36

+0

1用於SQLiteManager插件。我使用它,這是一個生活的節省和偉大的進口(在CVS格式;)) – 2010-12-16 19:56:16

+0

多麼有趣,贊成或平面文本!這似乎去我的首選項(儘管TAB分隔的平面文本文件來管理從任何計算機的便攜式菜單),你也推薦我一個平面文件嗎?看到我的新菜單自動化項目http://stackoverflow.com/questions/4524327/php-how-to-automate-building-a-100-ul-li-menuitems-while-keeping-the-menu-s – Sam 2010-12-25 00:21:22