Pythonを使ったグラフ表示の方法として、matplotlibやフレームワークなどを使ったことがある方もいらっしゃると思います。データを視覚化することで現状の課題に対するフィードバックがしやすくなる為、前向きにデータ活用していきたいものですよね。(小さい規模での)導入作業を繰り返し行うことで、周囲に合意を得られる形で情報が共有され、実際に導入実績につながるということもあるのかもしれません。
今回は、GUIツールで「取り込んだExcel(csv)ファイルを操作し、PDFファイルでグラフ表示する」方法について確認していきます。ライブラリには
GUI:PySimpleGUI / グラフ表示:Plotly /PDF出力:kaleido を使用します。
ライブラリを用いてデータを読み書きしたり、グラフを出力したり、PDF出力するといった具合に、使用用途に合わせて組み合わせて実装していけると良いですよね。
添付資料のダウンロードはこちらから (右クリックからリンク先を保存してください)
添付資料にある「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
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でファイル読み込み処理を実装する
問題:CSVデータをpandasのデータフレームを利用して読込
先程実行したGUIのソースにpandasのデータフレームを利用して読み込み、
CSVファイルをデータ表示させて内容を確認してみましょう。
*このとき、実行ファイルと同じディレクトリに「ExpenseList.csv」を追加すること
import pandas as pd
# pandasでcsvファイルの内容を読み込む
# csvファイルの、1列目にAccountDate, 2列目にExpenseItem, 3列目にMemo, 4列目にWithdrawalAmountが入っているとする
df = pd. read_csv('csvのパスを記載', encoding='SHIFT_JIS')
print(df)
Pandasとは?
Pythonでデータ処理をするために作られた高機能なライブラリ。代表的な使い方としてSeriesやDataFrameを使ったデータの処理方法があります。Pandasを利用するには、以下のようにインポートを行います。Asキーワードを使用してpdで呼び出せるようにします。
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」を実施してください。
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の基本③~円グラフの書き方を理解する
前の問題のグラフ表示方法を参考にして
ExpenseList.csvの支出カテゴリごとの合計費用の割合について
Plotly expressを利用して、円グラフで表示してください。
業務で Python を使ってツールを作る機会がある方もいらっしゃると思います。自身の PC で Visual Studio Code を使って簡単に今回のサンプルを試すことができますので、この機会に Python に触れる時間を作っていただけると嬉しい限りです。
以上となります。