【Python】Tkinter・MySQL:ボタンを押下して、DBデータから散布図を作成する

■概要

Tkinterにて画面を作成し、ボタン押下でMySQLのDBデータを取得する。

取得したDBデータをもとに、散布図を作成する。

▼画面イメージ

「散布図作成」ボタンを押下すると・・・

散布図が表示される。

▼DBデータ

・接続情報

DBの接続情報は以下の通り。

項目名
MySQLユーザ名user01
MySQLパスワードaaa
MySQL接続ホスト(IPアドレス)127.0.0.1
MySQL接続ポート3306
データベース名test_schema

・DBデータ情報

SELECT文にて取得するデータ情報は、以下のユーザコードに対する、「身長」および「体重」とする。
なお、ユーザコードは今回は使用しない。

user_codeheightweight
00116050
00216356
00317164
00417466
00518070
00616557
00717465
00817762
00917569

■サンプルコード

・メイン画面と散布図作成処理(make_graph_height_weight.py)

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns
import tkinter as tk

from connect_mysql import ConnectMysql, SelectUserHeightWeght


def FncInput():
    sql_connect = ConnectMysql()
    connect_info = sql_connect.connector_mysql()

    select_user = SelectUserHeightWeght()
    result_data = select_user.select_user_height_weight(connect_info)
    df = pd.DataFrame(result_data)
    sns.set()
    sns.jointplot(x="height", y="weight", data=df, color='black')
    plt.show()


# main処理
if __name__ == '__main__':
    # ウィンドウの設定
    base = tk.Tk()
    base.title("散布図作成")
    canvas = tk.Canvas(base, width=150, height=50, bd=0, highlightthickness=0)
    canvas.pack()

    # 読込ボタン関係の設定
    btn_inputcsv = tk.Button(base, text="散布図作成", command=FncInput)
    btn_inputcsv.place(x=35, y=15)

    base.mainloop()

・MySQL接続、SELECT文実行処理(connect_mysql.py)

import mysql.connector

# MySQLの接続情報
MYSQL_USER = 'user001'
MYSQL_PASSWORD = 'aaa'
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = '3306'
MYSQL_DATABASE = 'test_schema'
MYSQL_AUTH = 'mysql_native_password'

# SQL文
SQL_SELECT_HEIGHT_WEIGHT = 'SELECT height, weight ' \
    + 'FROM test_user_height_weight;'


# Mysql接続・実行クラス
class ConnectMysql:
    def __init__(self):
        self.con = None

    def connector_mysql(self):
        try:
            # mysqlに接続
            self.con = mysql.connector.connect(
                user=MYSQL_USER,
                password=MYSQL_PASSWORD,
                host=MYSQL_HOST,
                port=MYSQL_PORT,
                database=MYSQL_DATABASE,
                auth_plugin=MYSQL_AUTH
            )

        # 例外処理
        except Exception as e:
            print('connector_mysql: 例外エラー: ', e)

        finally:
            return self.con


# テーブルから身長・体重を取得するクラス
class SelectUserHeightWeght():
    def __init__(self):
        self.rows = None

    def select_user_height_weight(self, con):
        # 出力形式は辞書型
        self.cursor = con.cursor(dictionary=True)
        try:
            # SQL実行
            self.cursor.execute(SQL_SELECT_HEIGHT_WEIGHT)

            # 検索結果格納
            self.rows = self.cursor.fetchall()

        # 例外処理
        except Exception as e:
            print('select_user_height_weight: 例外エラー: ', e)

        finally:
            self.cursor.close()
            return self.rows

■実行結果

・起動(初期画面)より、「散布図作成」ボタンを押下

散布図が作成されることを確認

■参考

本ツールを作成するにあたり、参考とさせていただいたソースのURLを以下に示す。


※散布図作成ツールのGitHub

コメント