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