■概要
Tkinterにて画面を作成し、ボタン押下でMySQLのDBデータを取得する。
取得したDBデータをもとに、散布図を作成する。
▼画面イメージ
「散布図作成」ボタンを押下すると・・・
散布図が表示される。
▼DBデータ
・接続情報
DBの接続情報は以下の通り。
項目名 | 値 |
---|---|
MySQLユーザ名 | user01 |
MySQLパスワード | aaa |
MySQL接続ホスト(IPアドレス) | 127.0.0.1 |
MySQL接続ポート | 3306 |
データベース名 | test_schema |
・DBデータ情報
SELECT文にて取得するデータ情報は、以下のユーザコードに対する、「身長」および「体重」とする。
なお、ユーザコードは今回は使用しない。
user_code | height | weight |
---|---|---|
001 | 160 | 50 |
002 | 163 | 56 |
003 | 171 | 64 |
004 | 174 | 66 |
005 | 180 | 70 |
006 | 165 | 57 |
007 | 174 | 65 |
008 | 177 | 62 |
009 | 175 | 69 |
■サンプルコード
・メイン画面と散布図作成処理(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
コメント