今回はSQLiteを用いた
超簡単なデータベース入門です。
解説動画はこちら
SQLiteとは
小規模アプリ・学習用途に最適です。
今回は詳細なSQL文の内容説明は省きますが
コードを実行すれば、SQL文を実行したことと同じ結果になります。
データベースの接続
ここからはデータベースの接続を行っていきましょう。
Google Colabでは初めから
SQLiteを使えるようになっています。
実行するとファイル置き場に
sample.db が出来上がります。
テーブルのカラムの個数と
? の個数を合わせておく必要があります。
投入するデータも、カラムの個数に合わせた
リスト型で定義しましょう。
ここまで実行すると、3件分のデータが格納されると思います。
SELECT 抽出カラム FROM テーブル名
SELECT 抽出カラム FROM テーブル名 WHERE 条件
UPDATE テーブル名 SET 更新カラム名 WHERE 条件
データの削除(DELETE)
データの削除はDELETE文を実行して行えます。
DELETE FROM テーブル名 WHERE 条件
pandasデータフレームでもテーブルからデータ取得できます。
取引データを格納するデータベースとテーブルを新たに作ります。
次のコードを実行すると取引データをDBに格納できます。
ここから先は
取引データを1分単位で集計してみやすくします。
最後は可視化です。
集計したデータをplotlyで可視化します。

まとめ
SQLiteを用いると
非常に簡単にデータベースをセットアップできます。
データ投入や検索もPythonであれば
数行で行う事ができるので
非常に便利です。
これからSQLやデータベースを勉強したい方は
ぜひSQLiteを使ってみてください。
それでは。
超簡単なデータベース入門です。
解説動画はこちら
超簡単 SQLite入門
今回は
今回は
Google Colabでデータベースを使ってみましょう
SQLiteを用いてデータベースの操作の基本を
体験してみましょう
SQLiteを用いてデータベースの操作の基本を
体験してみましょう
SQLiteとは
軽量な組み込み型データベースです。
一般的なRDBと使い方はほとんど一緒で
単一ファイルで管理されPython標準ライブラリで操作可能です。
小規模アプリ・学習用途に最適です。
データベースの仕組み
データベースはテーブルと呼ばれる
「表」形式のデータを複数組み合わせたものです。
「表」形式のデータを複数組み合わせたものです。
表は複数のカラム(列)が存在し
データ行はレコードと呼ばれています。

データ行はレコードと呼ばれています。

カラムはデータの形式によって
異なるデータ型を定義して格納できるようになっています。
異なるデータ型を定義して格納できるようになっています。
通常のRDBはSQL文を用いて
テーブルの操作を行えるようになっています。
テーブルの操作を行えるようになっています。
今回は詳細なSQL文の内容説明は省きますが
コードを実行すれば、SQL文を実行したことと同じ結果になります。
データベースの接続
ここからはデータベースの接続を行っていきましょう。
Google Colabでは初めから
SQLiteを使えるようになっています。
# データベース作成と接続 import sqlite3 # データベースの作成 # メモリに保存したい場合 # conn = sqlite3.connect(':memory:') # ファイルに保存したい場合 conn = sqlite3.connect('sample.db') # 接続 cursor = conn.cursor()
sample.db が出来上がります。
テーブルの作成
データベースを作成したら
その中にテーブルを作る事ができます。
データベースを作成したら
その中にテーブルを作る事ができます。
cursor.execute でSQL文(CREATE文)を実行すると
テーブルを作成できます。
テーブルを作成できます。
# テーブル作成CREATE文 create_query = ''' CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER ) ''' # テーブル作成を実行 cursor.execute(create_query) conn.commit() # テーブルの確認 query = "select name from sqlite_master where type = 'table';" cursor.execute(query) cursor.fetchall()
データの投入
INSERT文を実行してデータを投入することができます。
INSERT INTO テーブル名 VALUES (?, ?, ?)
テーブルのカラムの個数と
? の個数を合わせておく必要があります。
投入するデータも、カラムの個数に合わせた
リスト型で定義しましょう。
# データを3件挿入 users_data = [ (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 22) ] cursor.executemany('INSERT INTO users VALUES (?, ?, ?)', users_data) conn.commit()
ここまで実行すると、3件分のデータが格納されると思います。
データの取得
データの取得は
データの取得は
SELECT文を実行してデータを取得する事ができます。
SELECT 抽出カラム FROM テーブル名
# 全件取得 cursor.execute('SELECT * FROM users') rows = cursor.fetchall() # 結果を表示 for row in rows: print(row)
(1, 'Alice', 25)
(2, 'Bob', 30)
(3, 'Charlie', 22)
条件付きでデータ取得(WHERE)
SELECT文のWHERE句を加えると
条件を指定することができます。
条件を指定することができます。
SELECT 抽出カラム FROM テーブル名 WHERE 条件
# 条件付きで取得(年齢 > 23)
cursor.execute('SELECT name FROM users WHERE age > 23')
print(cursor.fetchall())
[('Alice',), ('Bob',)]
データの更新(UPDATE)
UPDATE文を実行するとデータを更新することができます。
UPDATE テーブル名 SET 更新カラム名 WHERE 条件
# データの更新(Bobの年齢を35に) cursor.execute("UPDATE users SET age = 35 WHERE name = 'Bob'") conn.commit() cursor.execute('SELECT * FROM users') print(cursor.fetchall())[(1, 'Alice', 25), (2, 'Bob', 35), (3, 'Charlie', 22)]
データの削除(DELETE)
データの削除はDELETE文を実行して行えます。
DELETE FROM テーブル名 WHERE 条件
# データの削除(Charlieを削除) cursor.execute("DELETE FROM users WHERE name = 'Charlie'") conn.commit() cursor.execute('SELECT * FROM users') print(cursor.fetchall())[(1, 'Alice', 25), (2, 'Bob', 35)]
Pandasライブラリでデータ取得
pandasデータフレームでもテーブルからデータ取得できます。
import pandas as pd df = pd.read_sql_query("SELECT * FROM users", conn) df
応用編
ビットコインの取引データを取得してテーブルに格納する
取引データを格納するデータベースとテーブルを新たに作ります。
import requests import sqlite3 # SQLiteデータベースの接続 conn = sqlite3.connect('trades.db') cursor = conn.cursor() # 取引テーブルの作成 cursor.execute(''' CREATE TABLE IF NOT EXISTS trades ( id INTEGER PRIMARY KEY, amount REAL, rate REAL, pair TEXT, order_type TEXT, created_at DATETIME ) ''')
次のコードを実行すると取引データをDBに格納できます。
# 取引データを取得 # コインチェックのAPIエンドポイント url = 'https://coincheck.com/api/trades' params = {'pair': 'btc_jpy', 'limit': 100} response = requests.get(url, params=params) data = response.json() if data['success']: # 取引データをデータベースにUPSERT for trade in data['data']: cursor.execute(''' INSERT INTO trades (id, amount, rate, pair, order_type, created_at) VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET amount = excluded.amount, rate = excluded.rate, pair = excluded.pair, order_type = excluded.order_type, created_at = excluded.created_at ''', (trade['id'], float(trade['amount']), float(trade['rate']), trade['pair'], trade['order_type'], trade['created_at'])) conn.commit() conn.close() print("取引データの取得とUPSERTが完了しました。")
ここから先は
Pandasデータフレームで取引データを見てみましょう。
import pandas as pd import sqlite3 conn = sqlite3.connect('trades.db') cursor = conn.cursor() df = pd.read_sql_query("SELECT * FROM trades", conn) # created_atをdatetime型に変換 df['created_at'] = pd.to_datetime(df['created_at']) df.set_index('created_at', inplace=True)
取引データを1分単位で集計してみやすくします。
minute_candles = df.resample('min').agg( open=('rate', 'first'), high=('rate', 'max'), low=('rate', 'min'), close=('rate', 'last'), volume=('amount', 'sum'), count=('rate', 'count') ).dropna() minute_candles["volatility"] = minute_candles["high"] - minute_candles["low"] minute_candles["volatility_rate"] = minute_candles["volatility"] / minute_candles["close"] minute_candles["volume_avg"] = minute_candles["volume"] / minute_candles["count"]

最後は可視化です。
集計したデータをplotlyで可視化します。
import plotly.graph_objects as go from plotly.subplots import make_subplots # subplot作成(上下2段) fig = make_subplots( rows=2, cols=1, shared_xaxes=True, row_heights=[0.7, 0.3], vertical_spacing=0.02, subplot_titles=('ローソク足チャート', '出来高(Volume)') ) # ローソク足(上段) fig.add_trace( go.Candlestick( x=minute_candles.index, open=minute_candles['open'], high=minute_candles['high'], low=minute_candles['low'], close=minute_candles['close'], name='Candlestick' ), row=1, col=1 ) # 出来高(棒グラフ・下段) fig.add_trace( go.Bar( x=minute_candles.index, y=minute_candles['volume'], name='Volume', marker_color='gray', opacity=0.5 ), row=2, col=1 ) # レイアウト調整 fig.update_layout( title='ローソク足 + Volume(出来高)チャート', xaxis_rangeslider_visible=False, showlegend=False, height=600 ) fig.show()

まとめ
SQLiteを用いると
非常に簡単にデータベースをセットアップできます。
データ投入や検索もPythonであれば
数行で行う事ができるので
非常に便利です。
これからSQLやデータベースを勉強したい方は
ぜひSQLiteを使ってみてください。
それでは。