4. Python のデータフレーム,集計・集約,ソー<ト/h1>

概要

この演習では,Python によるデータ処理を実習する。MySQL Employees Sample データベースのデータを SQLite3 に格納し,サンプルデータセットとして使用する。

この演習を通じて,以下の操作を習得する。

Python の pandas パッケージ

Python の pandas パッケージは,以下の機能を持つ。

本演習では,このうちデータフレームへの読み込み,集計・集約,ソートを扱う。

Python のデータフレームの例

以下は dept_emp テーブルから読み込んだデータフレームの例である。

emp_nodept_nofrom_dateto_date
10001d0052025-04-019999-01-01
10002d0072025-04-159999-01-01
10003d0042025-05-019999-01-01
10004d0042025-06-012026-01-31
10005d0032025-04-019999-01-01
10006d0052025-07-019999-01-01
10007d0082025-08-019999-01-01
10008d0052025-04-102026-02-15
10009d0062025-09-019999-01-01
10010d0042025-05-152026-01-10

SQLite の GLOB

SQLite の GLOB は,文字列のパターンマッチを行う。GLOB は大文字・小文字を区別する。

例えば,以下の SQL 文では,列 A に文字列 "9999" を含む行を取得する。

SELECT * FROM R WHERE A GLOB '*9999*'

演習準備

この演習では 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:インストーラーによるインストール

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

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

必要なライブラリのインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

pip install -U pandas matplotlib

演習

前準備

Employees Sample データベース(SQLite版)

このデータベースは,MySQL Employees Sample Database を SQLite 形式に変換したものであり,GitHub 上の bytebase/employee-sample-database リポジトリで公開されている。出典と著作権表示は以下のとおりである。

データの出典: MySQL Employees Sample Database(原著者: Fusheng Wang, Carlo Zaniolo。リレーショナルスキーマ: Giuseppe Maxia。データ変換: Patrick Crews)

This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

SQLite adaptation: bytebase/employee-sample-database (MIT License)

ステップ 1:データベースの準備

コマンドプロンプトで以下のコマンドを実行し,データベースファイルをカレントディレクトリにダウンロードする。python -c は,引用符内の Python コードをコマンドライン上で直接実行するオプションである。urllib.request.urlretrieve は,第1引数に指定した URL からファイルを取得し,第2引数に指定したファイル名で保存する関数である。

python -c "import urllib.request; urllib.request.urlretrieve('https://raw.githubusercontent.com/bytebase/employee-sample-database/main/sqlite/dataset_small/employee.db', 'employee.db')"

ステップ 2:SQLite3 データベースへの接続

コマンドプロンプトで python と入力して Python の対話型シェルを起動し,以下を実行して SQLite3 データベースに接続する。本演習では,ステップ1でカレントディレクトリにダウンロードした employee.db を使用する。

import sqlite3
c = sqlite3.connect('employee.db')

ステップ 3:データベースの確認

データベースに含まれるテーブルの一覧を確認する。sqlite_master は SQLite が内部的に保持するシステムテーブルであり,データベース内のテーブルやインデックスなどの定義情報が格納されている。

result = c.execute("select name from sqlite_master where type='table'").fetchall()
print(result)

各テーブルの列情報を確認する。PRAGMA table_info(テーブル名) は,指定したテーブルの列名,データ型,主キーの有無などの構造情報を返す SQLite 固有のコマンドである。

for table_name in ['department', 'dept_manager', 'dept_emp', 'employee', 'title', 'salary']:
    print(table_name)
    result = c.execute(f"PRAGMA table_info({table_name})").fetchall()
    print(result)
    print()

ステップ 4:テーブルをデータフレームに読み込む

pandas を使い,データベースのテーブルをデータフレームに読み込む。以下のコードでは,ステップ2で作成した接続オブジェクト c を使用し,テーブルの内容を変数 df に読み込んでいる。

import pandas
df = pandas.read_sql("SELECT * FROM dept_emp", c)

ステップ 5:データフレームの確認と分析

5-1. データフレームの確認

データフレームの内容を確認する。df.describe(include='all') を実行すると,各列の統計項目が表示される。

文字列型の列に対しては,以下の項目が表示される。

数値型の列に対しては,以下の項目が表示される。

df.describe(include='all')

5-2. 集計

データフレームの集計を行う。

df.count()
df['dept_no'].value_counts()

5-3. ソート

昇順:

df.sort_values(by='emp_no', ascending=True)

降順:

df.sort_values(by='emp_no', ascending=False)

複数列によるソート:

df.sort_values(by=['dept_no', 'emp_no'], ascending=[True, True])

5-4. 頻度分布

データフレームの列の頻度分布を求める。

df['dept_no'].value_counts()
df['emp_no'].hist()

5-5. 集約

groupby() を使用して,特定の列でグループ化し,集約を行う。

df.groupby('dept_no').count()
df.groupby('dept_no')['emp_no'].count()