こんにちは、sanagiです。
突然ですが、私は前に「PythonでExcelを自動化する」という業務をやっていた時期があり、今回はそれをネタにブログを書こうかなと思い、google先生で調べていたのですが、どうやら最近はExcel自身にPythonを書く機能があるらしいのです。
「Python in Excel」というらしいのですが、ちょっと面白そうなので今回はこれをテーマにブログを書いていこうと思います。
Python in Excel とは?
ExcelでPythonと聞いたときに、マクロ的なもの?とイメージしたのですが、どうやらそういった感じではなかったです。
以下のようにセルにPythonのコードを埋め込むことで、データ加工したり、グラフ出力したり、機械学習させたり等ができる機能のようです。(画像引用:Python in Excel の概要)
試してみる
まず、Pythonをセルに挿入する方法ですが、以下のように「Pythonの挿入」を選択することで挿入することができます。
この「Pythonに挿入」を使って色々試してみましょう!
①グラフ描画
matplotlibというライブラリを使って、グラフを描画します。
①まず、以下のようにプロットしたいデータ表を作成します。
②「Pythonの挿入」を実行したセルに以下をコピーして実行します。(Ctrl + Enterキーで実行できる)
import matplotlib.pyplot as plt
# Excel の範囲からリストとして読み込む
x = xl("A2:A13").iloc[:, 0] # datetime型のSeries
y = xl("B2:B13").iloc[:, 0] # float型のSeries
# プロット
plt.plot(x, y, 'o-', color='blue', label='Sales') # 折れ線グラフの表示
plt.xlabel('Month')
plt.ylabel('Sales')
plt.title('Sales Graph')
plt.legend() # 凡例の表示
plt.grid(True)
plt.show()
③実行完了したら、Pythonを挿入したセルに"[PY]Image"と表示されるので、右クリック > 「セルの上にプロットを表示」を選択することで、グラフを表示することができます。
実行結果はこんな感じ↓↓
実行時に、右側にエディターが出てくるようになるので、編集等はこのエディタが使いやすいです。
②図形表示
次もmatplotlibを使うもので、今度は座標データから図形を作成してみます。
①先ほどと同様に「Pythonを挿入」で以下のソースをセルに挿入します。
import matplotlib.pyplot as plt
# Excel からデータ読み込み
df = xl("A1:B7", headers=True)
points = df[["X", "Y"]].values.tolist()
fig, ax = plt.subplots()
shape = plt.Polygon(points, color='lightgreen')
ax.add_patch(shape)
ax.set_aspect('equal') # アスペクト比を等しく
ax.autoscale_view() # 自動スケーリング
ax.axis('off') # 軸を非表示
plt.show()
②実行すると、以下のように座標データから図形を表示することができました。
使ってみた感想
良かった点
・環境構築がないので楽
エクセルが入っていれば(実際にはPythonが使えるエクセルにはバージョン・ユーザー制限があるようですが(参考:ExcelでのPythonの可用性))、ライブラリをインストールしたり等の環境構築もいらないので、初心者でも始めやすいなと感じます。
・機械学習関連が使用できる
scikit-learn(線形回帰、クラスタリング、教師なし学習)やstatsmodels(線形モデル・時系列分析)など、機械学習関連のライブラリが使えるので、エクセルのデータを数値予測や教師なし学習といった機械学習に用いることができるのは良い点だなと思いました。
あともう一歩な点
・ローカルファイルの読み込みや外部urlのアクセス等が制限されている
Python実行時はクラウド上で実行しているようなので、セキュリティ的にローカルファイルや外部へのアクセスが制限されているようです。確かにセキュリティ面を考えると難しいような気がしますね。
・ライブラリが追加できない
環境構築が必要ないのは、とてもありがたいのですが、逆に使えるのは、Microsoft側で用意されたライブラリのみなので、pipを使って他のライブラリを追加で入れることができないです。クラウドでPython実行しているので、しょうがない部分かもしれません。
・エラーが発生した場所がちょっと分かりにくい
エラー文は出力されるのですが、何行目で発生した等が表示されないので、エラーの内容によっては、どこで発生したエラーなのか分かりにくいこともありました。
おわりに
どうでしたか?
個人的には、手軽に機械学習で使うのは有りかなぁ?というのが正直な感想です。
グラフ表示したり等ほとんどはPython使わなくてもデフォルトのExcel機能でできるので、プラスの機能で使えるのは機械学習くらいかなと感じました。といっても、数万行以上あるデータを扱ったりになると、厳しいかもしれませんね。
もし使えそうな機会があったら、機械学習お試ししてみたいなと思っています。