Excel in Python (11) セキュリティ

 Pythonコードは、Microsoft Azureのクラウド上で、隔離された環境の中で実行されます。そのため、動作には制限があり、以下のことを留意しておく必要があります。

  • Anaconda は安全なライブラリの厳選されたセットを提供します。
  • Python コードはあなたのコンピュータ上のファイルにアクセスできません。
  • Python コードはネットワーク/インターネットにアクセスできません。
  • Python コードは Microsoft Excel と対話できません。
    • PythonコードでExcelワークブックを操作することはできません
  • PythonコードはPythonオブジェクトを返すだけです。
  • Pythonコードにデータをプッシュするには、新しいx/()関数を使用します。
    • xl関数は、Excelの以下のデータにアクセスできます。
      • 範囲
      • 名前
      • テーブル
      • Power Query接続
  • Azureへのデータアップロードは100MBに制限されています。

Python in Excel (10) ライセンス

 Python in Excel は、現在ベータチャネルのプレビューになっています。いずれ一般公開されるようになれば、利用するにはサブスクリプション料金が必要になる見込みです。

 ただし、この機能は全員が使用できる必要はないと考えられています。つまり、Python in Excelを作成、実行するのは特定のメンバーで、それ以外の人はサブスクリプションなしで閲覧できるということです。サブスクリプションがなくても、最後の実行結果が表示されたエクセルを閲覧することは可能です。

 Pythonの実行環境はAnacondaです。現在のAnacondaのライセンスは、個人向けはフリープランとなっていますが、商用にはプロプラン、ビジネスプラン、エンタープライズプランがあります。

プラン 金額
Pro $25/mo
BUSINESS $75/mo
ENTERPRIZE 個別

 Googleクラウド上で利用できるPython実行環境である Google Colab は無料で使用できますが、使用料上限を緩和する有料プランがあります。

プラン 金額
Pay As You Go 従量課金
Colab Pro 月額1,179円
Colab Pro+ 月額5,767円

 そのような状況を加味した料金が設定されるのではないかと思います。

Python in Excel (09) サンプルデータセット

Pythonサンプルを試す

 Python in Excelには、すぐに試せるサンプルがあります。

 「Pythonの導入」から「Pythonサンプルを試す」を選択すると、右側のウインドウに5つのサンプルが表示されます。

 いずれも、機械学習を学ぶためのサンプルとして利用されるIrisデータセットを使用しています。

サンプル名 内容
pandas で説明する pandasのdescribe()を使って各列ごとの要約統計量を取得する
散布図を作成する matplotlibを使って散布図を作成する
相関マトリックスを作成する pandasのcorr()を使って相関係数を計算する
ペア プロットを作成する seabornを使ってペア プロットを作成する
線形会期を生成する seabornを使って線形会期図を作成する

 データセットには、以下の項目で、150件入っています。

項目名 内容
sepal_length がく片の長さ(cm)
sepal_width がく片の幅(cm)
petal_length 花弁の長さ(cm)
petal_width 花弁の幅(cm)
soecues

 種には、setosa(ヒオウギアヤメ), versicolor(ブルーフラッグ), virginica(ヴァージニカ)の3種類があります。

 このデータセットは、パターン認識でもっともよく知られているデータセットで、通称Fisher's Iris dataset(フィッシャーのあやめデータセット)と呼ばれています。Creative Commons Attribution 4.0 International (CC BY 4.0) licenseに基づき、自由に使用できます。UCI Machine Learning Repository

 ちなみに、サンプルの一番下に、「Python in Excel ドキュメントを表示します。」というリンクがあります。これをクリックすると、Python in Excelのヘルプが表示されます。

seaborn用のサンプルデータセット

 seabornは、GitHubに登録されているサンプルデータセットload_dataset() を使って呼び出すことができますが、Python in Excelは、外部に接続することができないため、利用できません。

scikit-learn (sklearn)用のサンプルデータセット

Toy dataset

 scikit-learnの load_iris() を使って、Irisのデータセットを読み込むことができます。サンプルと同様のデータセットを用意するには、以下のように記述します。

from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = [iris.target_names[i] for i in iris.target]
df

 この他にも以下のようなサンプルを使用することができます。いずれも機械学習のサンプルとしてよく使われているデータセットです。

データセット サンプル名 分析方法
datasets.load_diabetes() 糖尿病の診療 回帰
datasets.load_digits() 手書き文字(数字)の認識 分類
datasets.load_linnerud() 生理学的特徴と運動能力の関係 回帰
datasets.load_wine() ワインの識別 分類
datasets.load_breast_cancer() 乳癌の診断結果 分類

7.1. Toy datasets — scikit-learn 1.3.0 documentation

サンプルデータセット – scikit-learn①【Python】 | BioTech ラボ・ノート

 Real world datasets

 scikit-learnには、Toy datasetの他にReal world datasetsがありますが、Connection refused となって利用できません。

GitHubなどで公開されているデータセットの利用

 Pythonの関数で呼び出すことができませんので、Power Queryで読み込んで利用します。

Python in Excel (04) データ参照 Power Queryで取得したデータ - Excelについての気になったこと

Python in Excel (08) ライブラリ

import済みライブラリ

 Python in Excelでは、以下のライブラリがimport済みの状態になっているので、改めて import文を記入せずに使えます。また、ライブラリの省略名も以下のように設定済みになっています。

ライブラリ import文 備考
matplotlib import matplotlib.pyplot as plt グラフ作成
NumPy import numpy as np 科学数値計算
pandas import pandas as pd データ解析
seaborn import seaborn as sns グラフ作成
statsmodels import statsmodels as sm 統計解析

 例えば、サンプルで提供されるPythonコードでは、よく以下のような書きかたがされています。

import pandas as pd

s1 = pd.Series([1,2,3,5])
print(s1)

 しかし、pandasは既にimport済なので、以下のように書くことができます。

s1 = pd.Series([1,2,3,5])
print(s1)

 リボンにある「初期化」を実行すると、ライブラリがimport されていることが分かります。

機械学習で有名なTensorFlowは、現在使用することはできません。一般公開では、有料でも使えるようになることを期待します。

import して使えるライブラリ

 Pythonの実行環境はAnacondaを使用していますので、Anacondaで利用できるパッケージは使用可能です。

Anaconda Cloud

 ただし、一部利用できないものや、利用できない機能があります。

 Python式で pip list を実行すると、使用できるライブラリを調べることができます。

 機械学習ライブラリ scikit-learn(sklearn)や、Pythonの画像処理ライブラリPillow(PIL)も含まれていますので、importして使用することができます。

制限事項

 Python in ExcelPythonコードは、ローカルPC上で実行されているのではなく、Microsoftクラウドサーバー上で実行されています。従って、処理によっては制限されるものがあります。

 Pythonによるファイルの読み込み、書き込み処理は、サーバー上のファイルに対して行われます。書き込みはパーミッション・エラーになります。

 また、外部インターネットサイトへの接続を行う処理は、接続が拒否され、エラーとなってしまいます。urllibやrequestsを使用したデータの取得はできません。

Python in Excel (07) 変数

 Pythonコードで作成された変数がどのように扱われるか確認します。

 変数以外でも、import されたモジュールも同じように引き継がれますので、全てのPythonコードに同じimport文を書く必要はありません。

計算方法が「自動」の場合

同一シート上

 前回、処理される順番を調べましたが、定義された変数も、その順番に従って評価されます。

 従って、定義されたセルより上の行では未定義エラーとなり、同一行であっても定義されたセルより左のセルではエラーになります。

複数のシート

 別のシートに定義された変数も使用することができますが、定義されたシートがシート見出しで現在のシートより左になっていなければなりません。

計算方法が「手動」の場合

 シートやセルの位置に関係なく、変数には、最後に実行された結果が反映します。

 以下の図では、A1~A5までのセルには「a=1」「a=2」...と記述してゆき、最後にB3のセルで変数aの値を表示するようにしました。

 自動計算の場合は、3が表示されるはずですが、手動にした場合は、A5で最後に実行した「a=5」の結果が反映しています。

 計算方法で、「再計算実行」を行うと、B3の値は3になります。

Python in Excel (06) 処理順~計算方法を「手動」にしておこう~

Pythonコード実行のタイミング

 Pythonコードは、Excelのセルに書かれた関数のように、依存関係を解釈して最小限の更新を行うような、最適化された動作を行いません。

 Excelの計算方法が「自動」になっている場合、ブック上にあるどのシートのどのセルであっても、1つのPython式が評価されたら、 ブック上にあるすべてのPython式が評価されます。また、Python式の実行は、クラウドに設置されたマイクロソフトのサーバーで実行されています。そのため、いくつものPython式を記述する場合、1つのコードをコミットする度にクラウド上のサーバーと通信し、これまで記述したコードが最初からすべて実行されるのを待たなければなりません。途中に時間がかかる処理があった場合に作業が進まなくなってしまいます。

 よって、Python in Excel を使用する場合は、計算方法を「手動」にしておく ことをお勧めします。しかし、この計算モードは「 伝染する 」ので、同時に複数のブックを開く場合は注意が必要です。(参照 雑・Excel入門試論 - 脱VLOOKUPの思考 02 - ブック - オプション - Qiita

計算方法が「自動」の実行の順番

同一シート上

 同一シート上のPythonコードは、以下のように、一番上左のセルが最初に実行され、右方向、次に下方向のセルの式が実行されます。

複数のシート

 複数のシートにPythonコードが描かれていた場合、シート見出しの左から順番に処理されます。シートの順番を入れ替えると、処理の順番も変更されます。

計算方法が「手動」の場合

 Python式の実行は、コミットしたセルに記述された式のみになります。

 従って、コミットする度に全ての式が最初から評価されることがなくなり、いくつものコードを分けて記述していくことができます。

 ただし、計算方法で「再計算実行」(ショートカットキーで Ctrl +F9)を行うと、前段の自動計算の順番でブック上のすべての式が評価されます。

Python in Excel (05) 出力

一つの値が返される場合

 セルに入力されたPythonコードが評価された結果、最後の式が一つの値を返す場合は、その値がセルに表示されます。

 値の左側に表示されるアイコンは、表示が Pythonオブジェクト であることを示しています。この表示は、数式バーの左にある同じアイコンをクリックすると、 Excelの値 の表示に変更できることが分かります。

変更すると、セルに表示されていたアイコンは消え、いつものエクセルのセルのように見えます。

 表示の切り替えは、このアイコンをクリックして行うか、以下のショートカットキーを使用します。

Ctrl + Shift + Alt + M

 Pythonの入力モードに変更する時と同様に、4つのキーを同時に押さなければなりません。私はここでも Alt + Mマッピングしています。

値を返さない場合

 コードが評価された結果が値を返さない場合、None Type が表示されます。

 このような場合でも、最後に表示させたい値を書いておけば、その値が表示されます。

リスト型

 Pythonのリスト型が返されると、list という表示になります。Excelの値に表示を変えると、リストの値がスピルして表示されます。

辞書型

 キーと値がセットになったものを辞書と呼びます。辞書型が返されると、セルには dict と表示されます。

 辞書型は、Excelの値として表示することはできません。

データフレーム型

 PandasのDataFrameになっているデータは、セルに DataFrame と表示されます。セルの左のアイコンをクリックすると、データを見ることができます。

 また、表示をExcelの値に変えると、スピルして表示されます。

print

 Pythonコードの中で print 文を実行すると、右側の「診断」と書かれた下に出力されます。

 この場所には、Pythonの実行エラーも表示されますので、適宜ゴミ箱マークをクリックして削除します。