我处理了许多我在Python,R和Matlab之间交换的文本/数据。
我的目标是平面文本文件,但偶尔也会使用SQLite存储数据并从每个程序访问(尽管不是Matlab)。我在SQL中不使用GROUPBY,AVG等,就像我在R中执行这些操作一样,所以我不一定需要数据库操作。
对于需要在程序之间交换数据以利用每种语言中的可用库的应用程序,有一个很好的经验法则可以使用哪种数据交换格式/方法(甚至是XML或NetCDF或HDF5)?
我知道Python之间 - > R有rpy或rpy2,但是我更想知道这个问题在一般意义上 - 我使用了许多计算机,它们都没有rpy2,还使用了一些其他需要在不同时间访问数据的科学分析软件(处理和分析的阶段也是分开的。)
答案 0 :(得分:15)
如果所有语言都支持SQLite - 请使用它。 SQL的强大功能可能对您现在没有用,但它可能会在某个时候出现,并且当您决定要以更复杂的方式查询数据时,它可以避免以后重写事情。
如果您只想访问数据存储区中的某些数据位,SQLite也可能会大大加快 - 因为使用平面文件执行此操作非常具有挑战性,而无需读取整个文件(尽管并非不可能)。
答案 1 :(得分:5)
平面文本文件(例如csv格式)将是最便携的解决方案。几乎每个程序/库都可以使用这种格式:R和Python具有良好的csv支持,如果您的数据集不是太大,您甚至可以将csv导入Excel以执行较小的任务。
但是,对于较大的数据集,文本文件是不方便的,因为几乎所有操作都需要完全读取它们(取决于数据的结构)。
SQLite允许您非常轻松地过滤数据(即使没有太多的SQL专家),正如您已经提到的,可以自己进行一些计算(AVG,SUM,...)。使用Firefox插件SQLiteManager,您可以在每台计算机上使用数据库,而无需任何安装/配置问题,从而轻松管理您的数据(导入/导出,过滤)。
因此我建议将SQLite用于需要大量过滤的大型数据集,以提取所需的数据。对于较小的数据集,或者如果不需要选择数据的子集,则平坦(csv)文本文件应该没问题。