7. オブジェクトデータベースの基本操作とデータ分析

データベーストランザクションの基礎概念

トランザクション

データベースにおける一連の処理をまとめた作業単位である.データの一貫性を保証するための重要な概念である.

コミット命令(commit)

トランザクションで実行した一連のデータベース操作を確定し,その結果をデータベースに永続的に反映させる命令である.

アボート命令(abort)

トランザクションで実行した一連のデータベース操作を取り消し,トランザクション開始前の状態に戻す命令である.

ZODBデータベースの基本操作

データベースへの接続とルートオブジェクトの取得

ZODB(Zope Object Database)は,Pythonオブジェクトを直接永続化できるオブジェクト指向データベースである.FileStorageクラスによりファイルベースのストレージを作成し,DBクラスでデータベースインスタンスを管理する.トランザクション管理にはtransactionモジュールを使用する.db.open()メソッドでデータベースに接続し,conn.root()メソッドでルートオブジェクトを取得する.

import ZODB
import ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('hoge.fs')
db = ZODB.DB(storage)
conn = db.open()
root = conn.root()

ルートオブジェクトの確認

ZODBのルートオブジェクトはPersistentMapping(永続化機能を備えたマッピングクラス)として実装されており,Pythonの辞書型と同様のインタフェースを持ち,キーと値のペアでデータを格納する.keys()メソッドにより格納されているキーの一覧を取得できる.データベース新規作成時は空の状態で初期化される.

print(root.keys())

トランザクションのコミット

transactionモジュールを使用してトランザクションを制御する.commit()メソッドを実行することで,メモリ上の変更内容をストレージに永続化する.これにより,トランザクションの一貫性が保証され,システム障害時のデータ保護が実現される.

import transaction
transaction.commit()

演習準備

この演習では Python を使用する。Python がインストールされていない場合は,下記の「Python 3.12 のインストール(Windows 上)」を展開し,手順に従いインストールすること。下記の「必要なライブラリのインストール」を実施すること。

Python 3.12 のインストール(Windows 上) [クリックして展開]

以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install -e --id Python.Python.3.12 --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 AssociateFiles=1 InstallLauncherAllUsers=1"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

演習

pandasを使用したデータ分析

ここでは,ZODBに格納したデータに対して,pandasを使用した分析を行う.

データの読み込みと保存

pandas(Pythonのデータ分析ライブラリ)のread_csv関数を使用してCSVファイルを読み込む.header=0オプションでヘッダー行を指定し,データフレーム(表形式のデータ構造)として構造化する.読み込んだデータはZODBのルートオブジェクトに格納することで永続化できる.

import pandas as pd
iris = pd.read_csv('C:¥¥iris.csv', header=0)
root['iris_data'] = iris

基本的な統計分析

describe()メソッドを使用して,数値データの基本統計量(平均値,標準偏差,最小値,最大値,四分位数など)を一括計算する.これによりデータの分布や外れ値を把握できる.統計量はデータ型に応じて自動的に算出される.

# 基本統計量の計算
print(root['iris_data'].describe())

データの並べ替え

pandasのsort_values()メソッドを使用して,データを並べ替えることができる.by引数で並べ替えの基準となる列を指定し,ascending引数で昇順(True)・降順(False)を制御する.複数列による並べ替えにも対応している.

# 昇順での並べ替え
print(root['iris_data'].sort_values(by='sepal_length'))

# 降順での並べ替え
print(root['iris_data'].sort_values(by='sepal_length', ascending=False))

頻度分析

value_counts()メソッドを使用して,データの出現頻度を計算する.データの出現回数を自動的に集計し,デフォルトでは降順で表示する.これにより,データの分布パターンやカテゴリ別の比率を把握できる.

# 頻度分布の計算
print(root['iris_data']['sepal_length'].value_counts())

データの可視化

Matplotlib(Pythonのグラフ描画ライブラリ)とSeaborn(Matplotlibベースの統計データ可視化ライブラリ)を使用して,データの可視化を行う.散布図により2変数間の関係性を表示し,hueパラメータを使用してカテゴリ別に色分けできる.fit_reg=Falseオプションにより回帰直線の表示を制御できる.

# Matplotlibによる散布図('o'は円形マーカーを指定)
plt.plot(root['iris_data']['sepal_length'], root['iris_data']['sepal_width'], 'o')

# Seabornによるカテゴリ別散布図
import seaborn
seaborn.lmplot(data=root['iris_data'], x='sepal_length', y='sepal_width',
               fit_reg=False, hue='species')