2012-08-08 9 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)