見出し画像

xlwingsでエクセルとPythonを合体②:Pythonでのシミュレーション結果の連携

ヘッダーの謎の写真は読み進めていただければわかります!!

さて、今回はPythonによるシミュレーション結果をエクセルに表示する方法を学習していきます。処理のイメージとしては、Pythonで正規分布のシミュレーションをして、その結果をエクセルに表示するというものです。

正直いうと、、

エクセルのVBAでそれを書ければ、わざわざそのためにPythonを使う必要もないのですが、今後の機械学習の結果をエクセルに表示する必要性がある可能性も考慮し、この方法での連携方法をご紹介します。

というのも、エクセルで機械学習を実施するというのはある意味方法としてはあるのですが、Pythonを使ったほうが理解しやすいですし、コードとしてもわかりやすいので、言語の理解よりも内容の理解に注力できるというメリットがあります。

なお、このマガジンでの目指したいアウトプットは以下になります。

まだ読まれていない方がいればぜひ、ご確認ください。

また、今回は前回を実行していることを前提に始めますので、こちらをまずは実行した状態で読み進めてもらえると。実施していることはエクセルとPythonの連携や、シートを選択すること、名前をつけることになります。

今回は以下の事項を実行していきます。

1.正規分布のシミュレーションを実行
2.実行したシミュレーションを可視化
3.エクセルにそれを連携する
(更新するたびに新たなものを生成するのではなく、更新できる状態)

冒頭でも少し触れましたが、1と2はエクセルのVBAでも実行できるのですが、Pythonを使って実施したほうが今後の機械学習の実行の容易性の観点から考慮して便利です。

1.正規分布のシミュレーションを実行

平均(以下ではexp):0.02、標準偏差(以下ではstd):0.01、シミュレーション回数(以下ではsims):10000で実行してみます。

import xlwings as xw
import numpy as np
import matplotlib.pyplot as plt

exp = 0.02
std = 0.01
sims = 10000
pd = np.random.normal(exp, std, sims)
plt.hist(pd, bins=100)
plt.show()

正規分布はnp.random.normalで実行することになり、そこのパラメーターとしては平均等の指定をすることで値を取ることができます。

2.実行したシミュレーションを可視化

すると、以下のような実行結果が以下のように表示されます。

事前に指定した、平均やばらつきがきれいに整備分布という形で可視化できています。

3.エクセルにそれを連携する

では、最後にエクセルに連携していきます。

fig = plt.figure()
plt.hist(pd, bins=100)
ipt.pictures.add(fig)

これで実行することができるので、実行するとエクセルにアウトプットが連携されます。

次に、もう一度、実行すると2枚の写真が表示されることになります。
(画面でわかるようにずらしているので、実行した直後では重なっているのでわからないのですが)

ヘッダー写真はこれだったわけですが、結構これは厄介で、データが変わったとき、再実行すると毎回追加されてしまうことは避けたいので、これを防ぐ必要があります。

毎回追加されないようにするにはpictures.add内になるパラメータを少し追加する必要があります。

ipt.pictures.add(fig, name="pic", update=True)

name="〇〇"とupdate=Trueを指定することになります。

ここで実施していることとしてはnameを追加し、update=Trueを実行する2つのセットで同じObjectを更新するということになるので、それにより何回実行しても対象を更新することを可能にします。

以上で、今回ご紹介したい機能は終了となります。ぜひ今回の機能もマスターしてエクセル×Python力を上げていきましょう。

この記事が気に入ったらサポートをしてみませんか?