2012-08-08 149 views
3

我有一些由Android手机收集的数据,它以SQLite格式存储在SQLite文件中。我想用MatLab或Octave来处理这些数据(分析它)。 SQLite数据存储为一个文件。如何将SQLite数据(由Android设备收集)导入Octave或MatLab?

我想知道你会用什么命令将这些数据导入到MatLab中?说,把它放入一个向量或矩阵。我是否需要任何特殊工具箱或软件包(如数据库软件包)来访问SQL格式?

+0

数据有多复杂?它只是表中的数字(您可以导出为CSV)还是涉及更复杂的内容? – 2012-08-08 12:21:17

+0

它大多只是文件中的单个表格,表格中填充了数字(但一列的时间为hh:mm:ss.ms格式)。 我会尝试CSV的想法(欢呼的想法)现在。我想我会在MatLab中使用文件I/O命令?但最终,我将拥有不同的SQL文件堆栈,并且将每个文件转换为CSV可能会非常麻烦。 – 2012-08-08 13:42:07

回答

4

还有mksqlite工具。

我个人使用它,有一些问题得到我的matlab版本的正确版本。但之后,没有问题。您甚至可以直接查询数据库文件以减少导入到matlab中的数据量。

+0

我已经看过它,它看起来不错。我正在使用Linux机器(给予我的权限有限),我想知道是否可以使用mksqlite? – 2012-08-08 14:25:03

+0

寻找'我如何重建mksqlite?'在文档页面上。你只需要一个编译器和matlab。我有两个,使用'buildit',得到了一些警告,它被安装。 – 2012-08-08 14:36:24

3

尽管mksqlite看起来不错,但它不适用于Octave,可能不适合作为长期解决方案。将表导出为CSV文件是一种选择,但由于涉及到字符串解析,对于较大的数据集,导入(进入Octave)可能会很慢。

作为替代方案,我最终编写了一个小型Python脚本,将我的SQLite表转换为MAT文件,该文件可以快速加载到Matlab或Octave中。 MAT文件是平台中立的二进制文件,该方法适用于包含数字和字符串的列。

import sqlite3 
import scipy.io 

conn = sqlite3.connect('my_data.db') 
csr = conn.cursor() 
res = csr.execute('SELECT * FROM MY_TABLE') 
db_parms = list(map(lambda x: x[0], res.description)) 

# Remove those variables in db_parms you do not want to export 

X = {} 
for prm in db_parms: 
    csr.execute('SELECT "%s" FROM MY_TABLE' % (prm)) 
    v = csr.fetchall() 
    # v is now a list of 1-tuples 
    X[prm] = list(*zip(*v)) 

scipy.io.savemat('my_data.mat', X)