PythonとTKinterを使い、CSVファイルをグラフ表示するGUIアプリを作ってみました。ファイルはダイアログで選択できるように作っています。
アプリの機能
INPUTボタンを押すことで、CSVファイルを選択できます。
選択したCSVファイルをグラフで表示します。
画面下のボタンを押すことで、表示されたグラフの画像を保存できます。
用意するもの
サンプルとなるCSVファイルを作成し、ホームディレクトリに保存します。
名前,身長,体重
山田,170.2,56
吉川,158.7,89
佐藤,168.9,46
pandasをインストールしておきます。
pip install pandas
アプリのコード
以下のコードを実行することで、INPUTボタンが表示され、CSVファイルを選択できるようになります。グラフは画像として、アプリとは別に表示されます。画像の画面を閉じることで、何度でもCSVファイルを選択し、グラフを表示できます。
※フォントはLinux Ubuntuで使われる「Noto Sans CJK JP」を指定してありますが、別のフォントに変更できます。
# coding: utf-8
import os
# tkinterのインポート
import tkinter as tk
# CSVファイルのインポート
import csv
import tkinter.filedialog
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=["Noto Sans CJK JP"])
# 関数の定義
def dialog():
# ファイル選択ダイアログの表示
file_path = tkinter.filedialog.askopenfilename()
if len(file_path) != 0:
# ファイルが選択された場合
df = pd.read_csv(file_path)
#print(df)
df.plot.barh()
plt.show()
### GUI ###
# ウインドウの作成
root = tk.Tk()
# ウインドウのサイズ指定
root.geometry("300x120")
# ボタン作成
run_button = tk.Button(root, text = "INPUT", command = dialog)
# ボタンの位置を指定
run_button.place(x = 110, y = 60)
# ウインドウ状態の維持
root.mainloop()
グラフの種類を変える
今回作成したアプリでは、「横棒グラフ」(水平棒グラフ)で表示するように設定してありますが、グラフの種類はもちろん、変更可能です。変更方法は以下の通り。
グラフを表示する・折れ線グラフにする
df.plot()
※何も設定しないと折れ線グラフになります。
横棒グラフにする
df.plot.barh()
縦棒グラフにする
df.plot.bar()
円グラフにする
pie.plot()
その他のカスタマイズ
そのほか、グラフのタイトル、ラベル、フォント、フォントのサイズ、縦軸の範囲、カラーなどを変更できます。詳しくは以下のサイトを参考にしてください。
Python データ分析 グラフ http://www.dicre.com/python/graph.html
データフレームからのグラフ作成|キータ@python/データ分析の修行 https://note.com/super_yes_man/n/nf2b61bc57f59
なお、今回CSVファイルをグラフ化するにあたって、pandas (matplotlib)を利用しています。より詳しくカスタマイズしたい人はpandasを検索して調べてみてください。
データベース SQliteからグラフ表示する
データベース SQliteを利用してグラフを表示させることもできます。PythonとTKinterで作ったコードをそのまま利用します。
用意するもの
データベースのファイル
例:TEST.db
データベースのテーブル
例:persons (TEST.dbに作ったテーブルのデータ)
アプリの機能
DATAボタンを押すと、指定したデータベースのテーブル データをグラフで表示します。
アプリのコード
# coding: utf-8
import sqlite3
import os
# tkinterのインポート
import tkinter as tk
# CSVファイルのインポート
import csv
import tkinter.filedialog
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=["Noto Sans CJK JP"])
# データベースの情報
dbname = "TEST.db"
conn = sqlite3.connect(dbname)
cur = conn.cursor()
# 関数の定義
def database():
df = pd.read_sql('SELECT * FROM persons', conn)
#print(df)
df.plot.barh()
plt.show()
### GUI ###
# ウインドウの作成
root = tk.Tk()
# ウインドウのサイズ指定
root.geometry("300x120")
# ボタン作成
run_button = tk.Button(root, text = "DATA", command = database)
# ボタンの位置を指定
run_button.place(x = 110, y = 60)
# ウインドウ状態の維持
root.mainloop()