Pythonで日々の記録(Excel)を自動で取得してグラフにしよう

Excelシートなどで記録している日々の数字をPythonでグラフにしてみませんか?

Pythonにはグラフを作成するための便利なツール(matplotlibというライブラリ)があります。

matplotlibでExcelからグラフを作成する手順

以下の手順でグラフを作成していきます。

  1. x軸、y軸に入れるデータをExcelから自動で取得する
  2. matplotlibというライブラリでグラフを作成する
  3. グラフの見やすさを調整(必要な場合)

1.Excelシートからデータを取得する

毎日来場者数をカウントしていると仮定して、4月、5月、6月の3か月分をグラフにしてみます。

Excelに入っている合計は、SUM関数を使用。

グラフのx軸とy軸に入れる値をリストにします。

x軸に入れるのは月(Excelでは1行目のBからD列)、y軸に入れるのは来場者数(Excelでは2行目のBからD列)です。

import openpyxl

wb=openpyxl.load_workbook("集計.xlsx", data_only=True)
ws=wb["来場者数"]

number=[]
month=[]
for i in range(2,5):
    month_row=ws.cell(1,i).value
    total_row=ws.cell(2,i).value
    number.append(total_row)
    month.append(month_row)

print(number)
print(month)

x,y軸にはリストの値を渡すため、空っぽのリストにfor文で値を入れていくというプログラムを作成しました。

[15879, 15980, 15956]
['4月', '5月', '6月']

3か月分のリストが自動で取得完了!

8行目のfor i in range(2,5):は、BからD列の範囲を指定しています。

今回は3か月分だけなので、手動でリストを入力しても全く問題ありませんが、自動でExcelの値を取ってくるという仕様にしました

2.matplotlibでグラフを作成する

リストをmatplotlibというライブラリでグラフにします。

ライブラリがまだインストールされていない場合は!pip install matplotlibでインストールしてください。

import openpyxl
import matplotlib.pyplot as plt

#日本語表示できるように設定
plt.rcParams["font.family"]="MS Gothic"

wb=openpyxl.load_workbook("集計.xlsx", data_only=True)
ws=wb["来場者数"]

number=[]
month=[]
for i in range(2,5):
    month_row=ws.cell(1,i).value
    total_row=ws.cell(2,i).value
    number.append(total_row)
    month.append(month_row)

plt.plot(month,number)

日本語の表示が文字化けしてしまうため、下記のようにフォントを指定して修正しました。

MS Gothic、MS Mincho、Yu Gothic、Yu Minchoなど、お好みで調整してください。

また、このような棒グラフにすることもできます。

plt.plot(month,number)が折れ線グラフだったのを、plt.bar(month,number)に変えるだけです。

3.見やすさを調整する

必要に応じてグラフの見やすさを調整してください。

今回の場合は、このような調整を行いました。

日本語のフォントを表示させる:plt.rcParams[“font.family”]=”MS Gothic”

グラフのy軸のメモリを調整:plt.ylim(最小値, 最大値) (x軸ならplt.xlim(最小値,最大値))

棒グラフの幅を調整:widthを追加

他にもグラフの色を変えたり、色々な設定ができます!

プログラムのまとめ

上記プログラムをまとめてみました。

それぞれ折れ線グラフ、棒グラフです。

#折れ線グラフ
import openpyxl
import matplotlib.pyplot as plt

#日本語表示できるように設定
plt.rcParams["font.family"]="MS Gothic"

wb=openpyxl.load_workbook("集計.xlsx", data_only=True)
ws=wb["来場者数"]

number=[]
month=[]
for i in range(2,5):
    month_row=ws.cell(1,i).value
    total_row=ws.cell(2,i).value
    number.append(total_row)
    month.append(month_row)

plt.plot(month,number)

#棒グラフ
import openpyxl
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="MS Gothic"

wb=openpyxl.load_workbook("集計.xlsx", data_only=True)
ws=wb["来場者数"]

number=[]
month=[]
for i in range(2,5):
    month_row=ws.cell(1,i).value
    total_row=ws.cell(2,i).value
    number.append(total_row)
    month.append(month_row)
    plt.ylim(15600, 16000)

plt.bar(month,number,width=0.5)

グラフを保存したいときは

グラフを出力して保存したいというときには下記を最終行に追加してください。

今回プログラムを作成した場所に保存されます。

pngで保存する場合:

plt.savefig("ファイル名.png")

pdfで保存する場合:

plt.savefig("ファイル名.pdf")

ぜひ使ってみてください!

ABOUT US
中野友梨
旅行業の会社を運営。
慶応義塾大学卒

書類作成、確認作業などに追われる日々の仕事。
一生懸命やっているつもりだった。
計算ミス、手配ミスにヒヤヒヤする日々。
仕事の効率をなんとかしなけらばいけないと思っていたけど、 どうしたらよいのか分からなかった。
Pythonの世界なんて、全く知らなかった。
そんな私がPythonで仕事が効率化されることによって、公私ともに大きく 変わるとは、夢にも思っていなかった..。

業務効率化のためにPythonを始めたことがきっかけで、Pythonにはまりました。(個人利用レベル)
詳細はこちら

労働時間が大きく削減され、仕事が大カイゼンされて自由な時間も生まれました。
私のした素晴らしい経験を共有したい、仕事の効率が悪いけど、どうにかしたいという悩みを持った人々に向けて、 Pythonがいいよ、と教えてあげたい。
このブログでは、私が経験したエラー解決や迷い所、Pythonの活用方法をお伝えします。