6.オブジェクト指向データベース
基礎知識
Pythonのデータ型
Pythonでは,type関数を使用してデータ型を確認できる.Pythonは動的型付け言語であり,変数の型は実行時に変更できる.以下に,数値型(int)と文字列型(str)の基本的な使用例を示す.
a = 100
print(type(a))
b = "Hello!"
print(type(b))
リスト(list)
リストは,データの配列構造である.Pythonのリストは可変長で,異なる型の要素も格納できる.以下に,連続する4つの整数を含むリストの生成例を示す.
v = [100, 101, 102, 103]
print(v)
数列の生成にはrange関数が使用できる.range(開始値, 終了値, 増分) の形式で,等差数列を効率的に生成する.
u = range(1, 11, 2)
print(u)
辞書(dictionary)
辞書は,キーと値のペアを管理するデータ構造である.ハッシュテーブルを使用しており,キーによる高速なデータアクセスが可能である.以下に,辞書の基本的な使用例を示す.
d = {'x': 100, 'y': 200}
print(d)
辞書は動的に要素を追加できる.
d = {'x': 100, 'y': 200}
d['z'] = 300
print(d)
keys() メソッドを使用して,すべてのキーを取得できる.
print(d.keys())
デコレータ(@記号)
デコレータは,関数やクラスの動作を変更・拡張するための機能である.@記号を使用して,関数やクラスの定義の前に記述する.デコレータを使用することで,コードの再利用性が向上する.
データ処理基盤
pandas
pandasは,Pythonにおける強力なデータ解析ライブラリである.表形式データの操作や統計解析に特化した機能を提供する.
pandasのSeries
Seriesは,インデックス付きの1次元配列構造である.NumPy(数値計算ライブラリ)をベースとした高速な演算と,統計分析機能を提供する.
import pandas as pd
s = pd.Series([100, 101, 102, 103])
print(s)
s.describe()
pandasのDataFrame
DataFrameは,2次元のテーブルデータを扱うための主要なデータ構造である.以下に,基本的な使用例を示す.
import pandas as pd
x = pd.DataFrame()
x['id'] = [1, 2]
x['name'] = ['apple', 'orange']
x['price'] = [80, 150]
print(x)
新しい列の追加も容易に行える.
x['color'] = ['red', 'orange']
print(x)
DataFrameの各列はSeries型として扱われ,高度な統計分析機能を利用できる.
import pandas as pd
x = pd.DataFrame()
x['id'] = [1, 2]
x['name'] = ['apple', 'orange']
x['price'] = [80, 150]
print(x.keys())
print(x['price'])
print(type(x['price']))
print(x['price'].describe())
条件に基づくデータの抽出には,queryメソッドを使用する.
import numexpr
x.query("price > 100")
numexprは数式評価ライブラリであり,pandasのqueryメソッドの演算を高速化する.
CSVファイルの操作
CSVファイルの読み込み
Windowsシステムでのファイルパスは,バックスラッシュをエスケープする必要がある.ヘッダー行がある場合は,header=0を指定する.
import pandas as pd
iris = pd.read_csv('C:\\iris.csv', header=0)
print(iris)
CSVファイルの書き出し
DataFrameをCSVファイルとして保存する.
x.to_csv('x.csv')
データベース
オブジェクト指向データベース
オブジェクト指向データベースは,プログラムで使用しているオブジェクトを直接永続化(プログラム終了後もデータを保持すること)できる特徴を持つ.
ZODB(Zope Object Database)
ZODBは,Pythonオブジェクトの永続化に特化したデータベースシステムである.オブジェクトリレーショナルマッピング(オブジェクトとリレーショナルデータベース間のデータ変換)を必要とせず,トランザクション(データベース操作の一貫性を保証する仕組み)機能を備えている.
ZODBの基本操作
データベースの接続
以下のコードは,ZODBデータベースへの接続と初期化を行う.指定したファイルが存在しない場合は,自動的に作成される.
import ZODB
import ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('hoge.fs')
db = ZODB.DB(storage)
conn = db.open()
ルートオブジェクトの操作
ZODBのルートオブジェクトは辞書と同様のインターフェースを持ち,キーと値のペアとしてデータを格納できる.
import ZODB
import ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('hoge.fs')
db = ZODB.DB(storage)
conn = db.open()
root = conn.root()
print(root.keys())
root['rose'] = 'red'
root['banana'] = 'yellow'
print(root.keys())
print(root)
データを永続化するには,transactionモジュールを使用する.具体的には,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を使用したデータ分析
以下の手順で,CSVファイルのデータをpandasで分析する.
- CSVファイルの読み込み
import pandas as pd
iris = pd.read_csv('C:\\iris.csv', header=0)
print(iris)
- 基本的な統計分析
print(iris.describe())
print(type(iris))
print(iris.keys())
print(iris['sepal_length'])
print(iris['sepal_width'])
ZODBでのデータ永続化
以下の手順で,データをZODBに保存する.
- データベースへの接続と初期状態の確認
import ZODB
import ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('hoge.fs')
db = ZODB.DB(storage)
conn = db.open()
root = conn.root()
print(root.keys())
root['rose'] = 'red'
root['banana'] = 'yellow'
print(root.keys())
print(root)
- Irisデータセットの保存
root['iris_data'] = iris
print(root.keys())
print(root)
print(root['iris_data'])
- 追加データの保存
root['v'] = [100, 101, 102, 103]
root['d'] = {'x':100, 'y':200}
print(root.keys())
print(root)