python データベース(RDBMS)を作成しデータを格納。
実行結果
hw.sqlite3というデータベースファイルが生成される。
実際の機械学習のプログラムにおいてはデータベースでのデータを使用することがほとんどなのでデータベースを連携させ、機械学習を行えるようにデータベースの生成から学んでいく。
上記コードでデータベースファイルの作成。
今回では簡易に利用できるデータベース(RDBMS)として、SQLiteを利用。SQLiteであれば、pythonの標準ライブラリーなので手軽にSQLクエリーを利用してデータベースを操作できる。
今回作成しているデータベースは、身長と体重、体型の3つのフィールドを持つデータベースとする。
列 フィールド説明 DBフィールド名
0 顧客ID(自動で追加) id
1 身長(cm) height
2 体重(kg) weight
3 体型(0~5の値) typeNo
体型は6段階の値で表現
値 体型
0 低体重(痩せ型)
1 普通体重
2 肥満1
3 肥満2
4 肥満3
5 肥満4
データベースに接続して、SQL文の実行
sqlite3.connect()でデータベースに接続し、オブジェクト生成。SQL文を実行するため、execute()メソッドを使用。
SQL文ではデータベースを作成するために三連引用符を使用。
CREATE TABLE IF NOT EXISTS person(カラム名 データ型, カラム名 データ型...)
CREATE TABLE(テーブル作成) IF NOT EXISTS(オプション、データベースに同じ名前のテーブルがないときだけテーブルを作成する制約) person(テーブル名)。
続く()内ではカラム名とデータ型を指定している。
id(カラム名) INTEGER(データ型) PRIMARY KEY(制約、重複した値の保存を禁止する)
height(カラム名) NUMBER
weight(カラム名) NUMBER
typeNo(カラム名) INTEGER
INTEGERとNUMBERはどちらも整数型を表すそうだが明確な違いはわからなかった。
次に新規に身長と体重、体型を100件追加するプログラムを実行してデータベースにデータを格納していく。
実行結果
100件の身長、体重、体型のデータがデータベースに格納される。
データベースに接続し、関数呼び出し
sqlite3.connect()で引数にデータベースファイルのパスを指定しデータベースに接続。
for文で100回insert_db()関数を実行。insert_db()関数では身長、体重、体型のデータをデータベースに格納し、内容を出力する。
c = conn.execute('SELECT cout(*) FROM preson')ではpersonテーブルのレコードの総数を取得している。SELECT文はデータベースからデータを取り出す時に使う。count(*)で全てのレコードの総数を取得。FROM句でテーブル指定。返り値はsqlite3.Cursorオブジェクト。
c.fetchone()でcorsorオブジェクトの1行目をタプルで取得する。
insert_db()関数、データベースにデータを格納
random.randint(130, 180)で130~180までの整数をランダムに変数heightに格納。
weightも同様。
体型はbmiによって値を変更。BMIは体重(kg) / (身長(cm)/100)の2乗 。
**を使用することで身長/100を2乗している。
if文でBMIの値によってtype_no(体型)に格納する値を変更。
conn.executemany()で一度に複数のデータを保存する。タプルをリストのを扱うので第二引数で[]で囲っている。for文を回すように一つの指令(第一引数のSQL文)を複数のデータに実行する(第二引数)。
第一引数のSQL文のINSERTではデータベースにデータを保存したい時にはINSERT文を使う。
書式
INSERT INTO テーブル名(カラム名, カラム名..)
VALUES(値, 値,..)
VALUES(?,?)のようにすることでexecutemany()の第二引数で指定したリストが順番に?の部分に格納され、それぞれのカラムに保存される。