Pythonを使ったグラフ表示の方法として、matplotlibやフレームワークなどを使ったことがある方もいらっしゃると思います。データを視覚化することで現状の課題に対するフィードバックがしやすくなる為、前向きにデータ活用していきたいものですよね。導入作業を繰り返し行うことで、周囲に合意を得られる形で情報が共有され、実際に導入実績につながるということもあるのかもしれません。
今回は、GUIツールで「取り込んだcsvファイルを操作し、PDFファイルでグラフ表示する」方法について確認していきます。ライブラリには
GUI:PySimpleGUI
グラフ表示:Plotly
PDF出力:kaleido を使用します。
ライブラリを用いてデータを読み書きしたり、グラフを出力したり、PDF出力するといった具合に、使用用途に合わせて組み合わせて実装していけると良いですよね。
Contents
はじめに
添付資料にある「ExpenseList.csv」を基にグラフ表示してみたいと思います。
ExpenseList.csv
PySimpleGUIの画面レイアウト作成
それでは、PySimpleGUIライブラリを使ってGUIツールの画面レイアウトを作成していきましょう。
問題:サンプルコードを実行して画面レイアウトを作成
以下のサンプルのように(PySimpleGUIの基礎解説の参考サイトや他のWebサイトを参考にしながら)csvファイルを読み込む画面レイアウトを作成してみましょう。
【参考サイト】:PySimpleGUIの使い方についての基礎解説
http://www.k-techlabo.org/blog2/?page_id=1481
・インストール
pipというPythonのパッケージ管理ツールを使って、「PySimpleGUI」をインストールします。
※Pythonインストール時に標準で入っているパッケージ以外をインストールする場合、
「pip install パッケージ名」のコマンドで、ローカル環境のPowerShellにてインストールをします。
pip install PySimpleGUI
▷サンプルコード(画面レイアウト作成): layout_PySimpleGUI.py
import PySimpleGUI as sg layout = [ [sg.Text("ファイル"), sg.InputText(), sg.FileBrowse('ファイル選択', key="inputFilePath")], [sg.Text(" ↓↓PDFにてグラフを表示:")], [sg.Button('グラフ出力')] ] window = sg.Window("ファイル読込", layout) # イベントループ while True: event, values = window.read() if event == sg.WIN_CLOSED: break elif event == 'グラフ出力': # 処理の内容を記載 sg.popup('処理内容の実装前') window.close()
Pythonでファイル読み込み処理を実装する
Pandasとは?
Pandasとは、Pythonでデータ処理をするために作られた高機能なライブラリのことで、代表的な使い方としてSeriesやDataFrameを使ったデータの処理方法があります。
Pandasを利用するには、以下のようにインポートを行います。Asキーワードを使用してpdで呼び出せるようにします。
In
import pandas as pd
▷使用例
# 1次元データの利用 ser = pd.Series( [10, 20, 30, 40] ) ser # 2次元データの利用 df = pd.DataFrame( [10, “a”, True], [20, “b”, False], [30, “c”, False], [40, “d”, True] ) df
csvやExcelのデータを読み込んだり、列や行を削除したり、フィルターをかけて抽出をしたりといったExcelやデータベース言語のSQLでできることがPandasの機能にはあります。
Pythonでグラフ表示~ Plotlyライブラリの基礎
次に、グラフ描画するにあたって、使用するライブラリの基礎を押さえておきましょう。
・Plotly とは?
・インタラクティブな可視化ができるライブラリ
・「Plotly express」というPlotlyのラッパーを使うと、より簡潔な方法でデータ可視化
今回は、「Plotly express」を使って、折れ線グラフ、棒グラフ、円グラフを描画する例をみていきます。
問題 :Plotlyの基本①~折れ線グラフの書き方を理解する
ExpenseList.csvのに各月(AccountDateごと)の支出合計額の推移をPlotly expressを利用して、折れ線グラフで表示してください。
作業の際、PDF出力する為に「pip install kaleido」を実施してください。
【書式】:折れ線グラフ(Plotly express)
import plotly.express as px
px.line(対象のデータフレーム, title=’AccountDateごとの支出’)
▷使用例
import PySimpleGUI as sg import pandas as pd import plotly.express as px layout = [ [sg.Text("ファイル"), sg.InputText(key='-file-'), sg.FileBrowse('ファイル選択', key="inputFilePath",target='-file-')], [sg.Text(" ↓↓ PDFにてグラフを表示:")], [sg.Button('グラフ出力')] ] window = sg.Window("ファイル読込", layout) # イベントループ while True: event, values = window.read() if event == sg.WIN_CLOSED: break elif event == 'グラフ出力': # ファイルパスを取得 f = values['-file-'] # pandasでcsvファイルの内容を読み込む # csvファイルの、1列目にAccountDate, 2列目にExpenseItem, 3列目にMemo, 4列目にWithdrawalAmountが入っているとする df = pd.read_csv(f, encoding='SHIFT_JIS') # WithdrawalAmount列を数値変換する df['WithdrawalAmount'] = df['WithdrawalAmount'].apply(lambda x: x.replace(',', '')).astype('int') #作成したデータフレームを基にグラフを作成 df2 = df[['AccountDate','WithdrawalAmount']].groupby('AccountDate').sum(numeric_only=True) print(df2) #折れ線グラフを作成 fig = px.line(df2, title='AccountDateごとの支出') fig.show() #出力内容をPDFでグラフ表示(kaleidoライブラリ) fig.write_image("./test.pdf") window.close()
問題 :Plotlyの基本②~棒グラフの書き方を理解する
前の問題のグラフ表示方法を参考にして
ExpenseList.csvの支出カテゴリごとの合計額を
Plotly expressを利用して、棒グラフで表示してください。
【書式】:棒グラフ(Plotly express)
import plotly.express as px
px.bar(対象のデータフレーム, title=’支出カテゴリごとの費用’)
問題 :Plotlyの基本③~円グラフの書き方を理解する
前の問題のグラフ表示方法を参考にして
ExpenseList.csvの支出カテゴリごとの合計費用の割合について
Plotly expressを利用して、円グラフで表示してください。
【書式】:棒グラフ(Plotly express)
import plotly.express as px
px.pie(対象のデータフレーム, values=’WithdrawalAmount’, names=’ExpenseItem’)
====================================
業務でPythonを使ってツールを作ったり、自動化処理を記述したりする機会がある方もいらっしゃると思います。自身のPCでVisual Studio Codeを使って簡単に今回のサンプルを試すことができますので、この機会にPythonに触れる時間を作っていただけると嬉しい限りです。
以上となります。