こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Python環境下でSQLを実行し、SQLite内のデータを抽出したい
- SQLのSELECT文を用いてデータを集計する方法が知りたい
データベースとは
データベース(database, DB)とは、データの検索および蓄積が容易にできるよう整理された情報の集まりを指します。
データベースは、「データを格納するファイル」と「データの格納や検索の処理を実行するプログラム」から構成されます。このプログラムはデータベース管理システム(Database Management System, DBMS)と呼びます。
SQLとは
データベースにあるテーブルデータの読み書きは、SQL(Structured Query Language)と呼ばれるデータベース操作の専用言語で書かれた命令をクライアントからRDBMSに送ることで実現できます。
データベースおよびSQLについて詳しく知りたい方はこちらの記事をご覧下さい。
データベース(DB)・SQLとは?|リレーショナルデータベースの基本や仕組み・利用メリットを徹底解説!
データベースの概要・基本操作およびSQLの利用用途を丁寧に解説します。加えてリレーショナルデータベースについても言及します。
SQLiteとは
近年ではオープンソースのリレーショナルデータベース管理システム(RDBMS)が広く用いられており、SQLiteもその中の1つとして位置付けられます。
SQLiteは開発用ライブラリとして提供されているアプリケーション内に組み込み可能なRDBMSであり、Pythonに標準で付属しています。
【参考】Python環境下でSQLを実行する際に参考となる書籍
Python環境下でSQLを実行し、RDBMSからデータを抽出する方法について詳しく学習したい方向けに、おすすめの書籍を2点ご紹介します。
その他データベーススペシャリストやソフトウェア開発も見据えた方向けにも、厳選したおすすめ書籍・動画教材を紹介しています。詳しくはこちらの記事をご覧ください。
データベース・SQLの学習におすすめな入門本・動画教材7選
「データベースの仕組み・設計方法を学習したい」「データベーススペシャリストの資格を取得したい」「データベースシステムを活用したソフトウェアを開発したい」このような要望を叶えるためのおすすめ教材を紹介します。
今回の解説範囲
本記事ではPython環境下でSQL(SELECT文)を実行し、データを集計する方法について解説します。本記事を通じて具体的に下記のようなことができるようになります。
- COUNT|レコードの個数集計
- AVG|特定カラムの平均値算出
- MAX|特定カラムの最大値算出
- MIN|特定カラムの最小値算出
- SUM|特定カラムの合計値算出
- GROUP BYメソッドを用いたデータ集計
また、今回データ抽出先のデータベースとしてSQLiteを利用します。
Python環境とSQLiteをベースとし、SQLのSELECT基本操作を学習したい方はこちらを参照ください。
PythonでのSQLite操作とSQL・SELECT文によるデータ抽出方法解説|データベース・プログラミング入門
「Python環境下でSQLを実行しSQLiteを操作」「SQLによるデータ抽出(SELECT)」このような方法を知りたい方向けの解説記事です。
【事前準備】Python環境でSQLを実行|SQLiteへの接続方法
まずはじめに、Python環境下でSQLを実行し、SQLiteを操作するための環境を構築します。
SQLiteのソフトウェアをダウンロード
SQLite形式のデータを閲覧・操作するのに便利です。
DB Browser for SQLiteのリンクにアクセスし、お使いのOSに応じたバージョンを選択し、ダウンロードしましょう。
サンプルデータのダウンロード
本記事ではSQLiteにアクセスし、上図のER図に示すようなサンプルデータを例に用いてデータ集計を行います。
SQLite Sakila Sample DatabaseのDownloadをクリックしましょう。Downloadしたフォルダ内のsqlite-sakila.dbファイルを今回利用します。
フォルダ構成
Pythonスクリプトファイルと前述でダウンロードしたsqlite-sakila.dbは同じディレクトリに配置しましょう。
フォルダ構成
|
--- Pythonスクリプト.py
|
--- sqlite-sakila.db
SQL操作を実現するためのPythonライブラリインストール
PandasおよびSQLAlchemyというPythonライブラリを今回用います。以下それぞれインストールしましょう。
Pandas
pip install pandas
SQLAlchemy
データベースとPandasを接続するために、SQLAlchemyが必要です。
pip install sqlalchemy
【SQL・Python実践】SELECT文を用いたデータ集計
それでは実際にPython環境下でSQLを実行していきます。データ集計には主にSELECT文を用いて記述します。
今回はsql_operation()
という関数にSQLの命令文を引数として渡すことで、テーブルからデータを参照することとします。下記のコードを事前に実行しておきましょう。
import sqlite3
import pandas as pd
# データベース接続
db_name = "sqlite-sakila.db"
connection = sqlite3.connect(db_name)
# SQL分を引数に渡すと、Pandas.DataFrameを返す関数
def sql_operation(sql_query):
# SQL文とDBのConnectionをもとにDataFrame作成
df = pd.read_sql(sql_query, connection)
# 出力
return df
Count|レコード集計
選択したカラムのレコード数を取得したい場合はCOUNTメソッドを用いて、下記のように記述します。
# SQL文
query = '''
SELECT COUNT(customer_id)
FROM customer
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# COUNT(customer_id)
# 599
COUNTメソッドを用いた集計の際は、WHERE句による絞込条件も合わせて記述することが多いです。以下store_idという絞込条件を追加した例を示します。
# SQL文
query = '''
SELECT COUNT(customer_id)
FROM customer
WHERE store_id = 1
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# COUNT(customer_id)
# 326
AVG|平均値算出
選択したカラムから値の平均値を求める際は、AVGメソッドを用いて下記のように記載します。
# SQL文
query = '''
SELECT AVG(amount)
FROM payment
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# AVG(amount)
# 4.200667
MAX|最大値算出
選択したカラムから値の最大値を求める際は、MAXメソッドを用いて下記のように記載します。
# SQL文
query = '''
SELECT MAX(amount)
FROM payment
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# MAX(amount)
# 11.99
MIN|最小値算出
選択したカラムから値の最小値を求める際は、MINメソッドを用いて下記のように記載します。
# SQL文
query = '''
SELECT MIN(amount)
FROM payment
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# MIN(amount)
# 0
SUM|合計算出
選択したカラムから値の合計値を求める際は、SUMメソッドを用いて下記のように記載します。
# SQL文
query = '''
SELECT SUM(amount)
FROM payment
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# SUM(amount)
# 67416.51
GROUP BYを用いたデータ集計
最後にデータをまとめる際に有効なGROUP BY
メソッドを組み合わせてデータを集計します。
# SQL文
query = '''
SELECT store_id, COUNT(customer_id)
FROM customer -- テーブル名を指定
GROUP BY store_id -- 集計方法
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# store_id COUNT(customer_id)
# 0 1 326
# 1 2 273
上記の例はstore_id別にレコード数を集計した結果となります。
データとしてもう少し見やすくするためには、以下のように名称を変更すると良いかもしれませんね。
# SQL文
query = '''
SELECT store_id AS 'ストア番号',
COUNT(customer_id) AS '顧客数'
FROM customer -- テーブル名を指定
GROUP BY store_id -- 集計方法
'''
# 関数実行
sql_operation(query)
# 出力イメージ
# ストア番号 顧客数
# 0 1 326
# 1 2 273
データベース・SQL操作まとめ
当サイトではデータベースの設計ノウハウやSQL操作における基本構文の解説記事を多数配信しています。合わせてご覧ください。
データベース・SQL操作に関する記事一覧
データベースの設計手法やSQL操作における基本構文の解説記事を配信中です。
【参考】Pythonを活用した様々なお役立ち情報
当サイトではPythonを活用した様々なお役立ち情報を配信しています。
Pythonでできること・仕事に応用
「Pythonで実現できることを知りたい」「Pythonスキルを仕事で活かしたい」方はこちら!
Python✖️AI・機械学習
Python活用の最大メリットの1つであるAI・機械学習について詳しく知りたい方はこちら!
Python✖️投資自動化(仮想通貨)
Pythonはフィンテックとの相性が良く、その中でも仮想通貨自動売買タスクは近年注目度の高い領域です。フィンテック・投資に興味がある方はこちら!
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら