sqlite3は、DBごとに一つのファイルとして作成するため可搬性がよいが、それだけにシンプルなため、扱うGUIツールとしてはsqlitebrowserしかないようだ。
個々のパソコン等にsqlite3とsqlitebrowserをインストールすれば、sqlite3のファイルを扱える。
Wi-Fiプローブデータのうち、今のところ、2地点間流動(flow)データのみsqlite3に入れてある。
kofuのデータはすでに4GB程度に膨れ上がっているので、パソコン等にコピーして扱うのが不便である。そのため、サーバ上においてあるDBにpythonプログラムでアクセスするのが楽である。
以下ではその手始めのことを書く。
より実施的なクエリは
https://8tops.yamanashi.ac.jp/~toyoki/labTips/flow/kofu_sqlite.html
https://8tops.yamanashi.ac.jp/~toyoki/labTips/flow/kofu_travel_time_dist_sqlite.html
あたりを見てほしい。
バス運行解析ではもっと大規模なデータベース(MySQL)をあつかうことになる。MySQLはネットワーク越しにアクセスするのでセキュリティ管理が重要である。そのため、アクセスの仕方は、Google Driveの方に載せてある。
どのデータベースにも対話的にDBにアクセスするCUI(コマンドラインツール)が存在する。
sqlite3ではそのままsqlite3というツール(それ自体がDBソフトの名前)がある。必要に応じて各自インストールして利用してみる。
サーバには、すでに入っている。(Raspberry Piにも基本ツールとして入っている。)
使い方はWeb上にたくさんある。
import csv
import sqlite3
from datetime import datetime as dt
from datetime import timedelta
import pandas as pd
db_file = "/home/raspimngr/db/kofu_traveler.sqlite3" # ファイルの場所はそれぞれの環境に応じて変える
conn = sqlite3.connect(db_file) # DBへの接続
cur = conn.cursor() # コマンドライン的なオブジェクト
def query(sql_str):
cur.execute(sql_str)
return cur.fetchall()
# テーブルの一覧をみる (どのようにしてcreateしたかも全部出力される)
query('select * from sqlite_master WHERE type="table"')
# テーブルの最初の5行だけ表示 (内容の確認ができる)
query("select * from flow_all limit 5")
# 列の名前を取得する execute関数の返値は列名と値のセットなので列名のみは次のようにして出力
# 上で定義したquery関数はデータのみを返す
result = cur.execute("select * from flow_all limit 5")
# result.description # descriptionの構造を確認
list(map(lambda x: x[0], result.description))