スポンサーリンク

【SQLite】SQLiteにはじめて触ってみた感想 Jupyter Notebookのログ解析に

Python
スポンサーリンク
本ページにはプロモーションが含まれています。
たろ
たろ

SQLiteにPythonで接続するにはどうすればいいの?

こんな疑問にお答えします。

本記事の内容
  • SQLiteにはじめて触った感想
  • PythonでSQLiteに接続する方法
  • Jupyter Notebookが吐き出すログの処理

こんにちは。

SQLiteに触る機会があったので実際にSQLiteに触りながら感じたことを赴くままに備忘録としてまとめた記事になります。

そもそもSQLiteとは?

SQLite(エスキューライト)は、ファイルベースのデータベースエンジンです。 SQLiteは、サブクエリーを含むほとんどのSQL構文の実行ができます。 SQLiteは構文が充実していますが、同時接続を並列に処理する機構が比較的弱いという短所があります。

https://blog.pyq.jp/entry/Python_kaiketsu_200227

SQLite は並列処理ができない点からワードプレスなどで構築したWebアプリケーションで利用する場合には不向きということ。

またなぜ触れることになったかというとJupyterから吐き出されているログが SQLite に保存されていたため解析する際に利用することになりました。

後日談)やりたかったことは Jupyter Notebook のログが保存されている history.sqlite のログ解析で、結局 SQLite は最初に実行したDBのインポートのみでお役御免となりました()

スポンサーリンク

SQLiteに触れてみる

Jupyter Notebook 上でコマンドを実行しています。

Pythonなどの環境のバージョンは次の通り:

Python: 3.5.5
SQLite: 3.23.1
Jupyter Notebook: 5.6.0

PythonでSQLiteに接続

次のコードのようにSQLiteを読み込みデータベースと接続します。

# SQLiteの読み込み
import sqlite3
# DBとのコネクションオブジェクトの作成
con = sqlite3.connect("history.sqlite")
# Cursor オブジェクトを作ることで execute() メソッドを呼び SQL コマンドを実行できる状態になる
cursor = con.cursor()

Jupyter Notebook はどんなテーブルを作成しているのか

まずはどんなテーブルが存在するか不明だったため一覧表示してみた。

cursor.execute("select * from sqlite_master")
cursor.fetchall()

出力がこちら。

[('table',
  'sessions',
  'sessions',
  2,
  'CREATE TABLE sessions (session integer\n                        primary key autoincrement, start timestamp,\n                        end timestamp, num_cmds integer, remark text)'),
 ('table',
  'sqlite_sequence',
  'sqlite_sequence',
  3,
  'CREATE TABLE sqlite_sequence(name,seq)'),
 ('table',
  'history',
  'history',
  4,
  'CREATE TABLE history\n                (session integer, line integer, source text, source_raw text,\n                PRIMARY KEY (session, line))'),
 ('index', 'sqlite_autoindex_history_1', 'history', 5, None),
 ('table',
  'output_history',
  'output_history',
  6,
  'CREATE TABLE output_history\n                        (session integer, line integer, output text,\n                        PRIMARY KEY (session, line))'),
 ('index', 'sqlite_autoindex_output_history_1', 'output_history', 7, None)]

なんだかよくわからない結果が獲れましたがテーブルは

  • sessions
  • sqlite_sequence
  • history
  • output_history

以上4つ存在することがわかりました。

もう少しスマートに出力する場合は下記のコマンドでもOK。

cursor.execute("select tbl_name from sqlite_master")
cursor.fetchall()

手に入れたデータは Pandas の世界に

SQL でデータを扱うのがすこし面倒な感じがしたので pandas で中身を確認することに。

import pandas as pd
df = pd.read_sql('SELECT * FROM sessions', con)

あとは Pandas のコマンドをごにょごにょすることで中身の確認と解析ができます。

それぞれのテーブルの中身にはわりと貴重なデータが入ってました。

例えば、sessions の中には Jupyter Notebook の利用を開始した時間と終了時間が入ってたため、差を取ればどのくらい Jupyter に触れていいたのかがわかります。

また、history の中にはどんなコマンドを実行したのかが記録されていました。

やれることは山ほどありそうだぞ!!

まとめ

  • PythonでSQLiteに接続する方法の紹介
  • データの解析はPandasと組み合わせると効率的に進めることができそう
  • Jupyterは自動でログを吐き出してくれるため解析にすごく役立つ

コメント

タイトルとURLをコピーしました