Excelセル内へのグラフ出力の基本
ここでは、xl(..., headers=True)で読み込んだDataFrameをグラフにする基本パターンと、matplotlibとseabornの役割分担を確認します。
サンプルとして、事務機器メーカー営業部の月次実績データ(複合機・プリンター・シュレッダー、1月~6月)を使います。見出しを含む次の19行をシートの左上(A1:E19)に入力し、本稿全体で使い回してください。
| 月 | 商品カテゴリ | 売上 | 広告費 | 問い合わせ件数 |
| 1月 | 複合機 | 980 | 120 | 42 |
| 2月 | 複合機 | 1050 | 130 | 46 |
| 3月 | 複合機 | 1880 | 320 | 88 |
| 4月 | 複合機 | 1650 | 285 | 76 |
| 5月 | 複合機 | 1520 | 260 | 70 |
| 6月 | 複合機 | 1120 | 145 | 50 |
| 1月 | プリンター | 1180 | 150 | 95 |
| 2月 | プリンター | 1240 | 165 | 102 |
| 3月 | プリンター | 1310 | 180 | 108 |
| 4月 | プリンター | 1290 | 175 | 105 |
| 5月 | プリンター | 1360 | 195 | 112 |
| 6月 | プリンター | 1420 | 205 | 118 |
| 1月 | シュレッダー | 620 | 70 | 55 |
| 2月 | シュレッダー | 650 | 75 | 58 |
| 3月 | シュレッダー | 610 | 68 | 54 |
| 4月 | シュレッダー | 680 | 82 | 62 |
| 5月 | シュレッダー | 700 | 88 | 65 |
| 6月 | シュレッダー | 720 | 92 | 67 |
売上・広告費の単位は千円、問い合わせ件数は件です。
画像としての埋め込みの考え方
Excelの標準グラフはセルとは別のグラフオブジェクトですが、Python in Excelでは、matplotlibで作成したFigureなどをセルの出力として表示できます。入力データが変わって再計算されると、Pythonコードも再実行され、グラフが更新されます。ここでは、xl()で表を読み込み、月ごとの売上合計を折れ線グラフにします。
コードの確認や編集は、数式タブの[Python]グループにある[エディター]から行えます。
まず、基本的なグラフ可視化コードを実行してみます。Pythonセルにコードを入力すると、Pythonエディターでコードを編集できます。エディターでは、コードと出力プレビューを確認できます。なお、グラフのタイトルや軸ラベルが長くて切れる場合は、最後のfigの前にfig.tight_layout()を加えると、レイアウトを自動的に調整できます。
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = [ # (1)
"Yu Gothic", "Meiryo", "MS Gothic",
"Hiragino Sans", "sans-serif"
]
plt.rcParams["axes.unicode_minus"] = False
df = xl("A1:E19", headers=True) # 表を読み込んで月ごとに集計
monthly = df.groupby("月")["売上"].sum()
fig, ax = plt.subplots()
ax.plot(monthly.index, monthly.values) # 折れ線グラフを描画
fig # (2)
コードの最後のfig(2)がそのまま画像としてセルに返ります。先頭のplt.rcParams(1)は、x軸の「1月」などの日本語を表示できるよう、使用するフォントの候補を指定しています。指定したフォントは実行環境によって利用できるものが異なるため、このように複数の候補を並べています。プレビューには3カテゴリ合計の月次売上(千円)の折れ線が表示され、3月を頂点に山型になります。
