SQLite还是平面文本文件?
我处理了很多文本和数据,这些数据在Python、R和有时的Matlab之间交换。
我通常使用简单的文本文件,但有时也会用SQLite来存储数据,以便从每个程序中访问(不过Matlab还没用过)。我在SQL中不太使用GROUPBY、AVG等操作,因为我更喜欢在R中进行这些操作,所以我并不一定需要数据库的功能。
对于需要在程序之间交换数据的应用,以便利用每种语言中可用的库,有没有什么好的经验法则来选择使用哪种数据交换格式或方法(比如XML、NetCDF或HDF5)?
我知道在Python和R之间可以用rpy或rpy2,但我想更一般性地讨论这个问题——我使用的很多电脑上都没有rpy2,而且我还用了一些其他的科学分析软件,这些软件在不同的时间需要访问数据(处理和分析的阶段也是分开的)。
2 个回答
一个简单的文本文件(比如csv格式)是最方便的选择。几乎所有的程序和库都能处理这种格式:R和Python对csv的支持都很好,如果你的数据量不大,甚至可以把csv文件导入到Excel中进行一些小任务。
不过,对于较大的数据集,文本文件就不太方便了,因为几乎所有操作都需要完全读取文件(这取决于你的数据结构)。
SQLite让你可以很轻松地筛选数据(即使你对SQL不太了解),而且正如你提到的,它还可以自己进行一些计算(比如平均值、总和等)。使用Firefox的插件 SQLiteManager,你可以在任何电脑上使用这个数据库,而不需要麻烦的安装或配置,因此可以轻松管理你的数据(导入/导出、筛选)。
所以我建议对于需要大量筛选以提取所需数据的大型数据集,使用SQLite比较合适。而对于较小的数据集,或者不需要选择数据子集的情况,简单的文本文件(csv)就可以了。
如果所有的编程语言都支持SQLite,那就用它吧。虽然现在你可能觉得SQL的强大功能用不上,但将来你肯定会需要它,这样可以避免以后想要以更复杂的方式查询数据时还得重新写代码。
而且,如果你只是想访问数据存储中的某些特定数据,SQLite的速度可能会快很多。因为用普通的文本文件来做到这一点会比较麻烦,必须把整个文件都读进来(虽然这不是不可能)。