【python初学者向け】さくっとMicrosoft Azure Notebooks上でpython書いてみた

はじめに

Microsoft Azure Notebooks上でのJupyter Notebookの起動が、想像以上に簡単だったので手順をメモしておきます。

対象者

・python初学者
-オンラインで学習中
-Anacondaより簡単に環境設定を済ませたい
-環境設定で挫折した
・初学者にpythonの学習環境を用意しようとしている人
・Microsoft Azure Notebookって何?という人

ゴール

Azure Notebookを立ち上げ、コードセルに足し算を記述、実行できる。

Microsoft Azure Notebooksとは?

Microsoftが提供しているクラウドサービスであるAzure上でpythonを実行できる、Jupyter Notebookライクなサービスです。
Azure Notebooks

実行環境

・Windows 10
・Microsoftアカウント サインイン済
※アカウント未作成の方は、まずこちらから設定を。

手順

1.検索サービスでAzure Notebooksで検索、Microsoft Azure Notebooksをクリック

2.日本語の案内に従った後、下記画面でSign Inをクリック

3.create one now?をクリック

4.Project Nameを入力、Createをクリック

5.左上の+Newタブから、Notebookをクリック

6.Notebook Nameを入力、Pythonのバージョンを選択、Createをクリック

7.作成したNotebookをクリック

1.完成!

2.足し算できる!

まとめ

Microsoftアカウントの設定が済んでいれば、たったこれだけのステップで環境が立ち上がります。
簡単なのでぜひお試しを!


Azure Machine Learning service - Visual interfaceを試す

はじめに

Microsoft Build 2019にてAzure Machine Learning service (ML service)の新機能「Visual interface」が発表されました。
これまでコーディングが必要だったML serviceにおいてMachine Learning Studio (ML Studio)のようなDrag & DropのGUI操作が可能になるというもので、ML serviceがより使いやすくなることが期待できます。
今回はML serviceに追加された「Visual interface」を試してみます。

ワークスペースの作成

「+リソースの作成」で「Machine Learning service workspace」を検索し、ワークスペースの作成を開始します。

必要な内容を入力して作成を実行します。

Visual interfaceの利用

作成したワークスペースのリソースに移動し、メニューの「Studioワークスペースを起動」で「ワークスペースを起動」をクリックするとVisual interfaceが開きます。(タイトルが「Machine Learning Studio」なので少し戸惑います。)

Visual interfaceのUIは、ただのスタイル違いといっていいほどML StudioのUIと同じつくりになっています。

試しに、サンプルの実験「Sample 1 - Regression: Automobile Price Prediction (Basic)」で実験を作成してみます。
実験の新規作成、モジュールの操作はML Studioと同じで、ML Studioを使い慣れたユーザーであれば特に追加知識なく使うことができそうです。
ただし、プレビュー段階のためか、ML Studioと比較すると使用できるモジュールの種類は少ないため、まだ完全にML Studioを置き換えられるものではない印象です。


Visual interface とML Studioで異なるのは、実験の実行に「Compute Target」を指定する点です。
実験の内容によってスペックを変更できるのはML Studioにはなかったものです。

実験を実行してみます。今回は試しなので、Visual interfaceから作成できるスペック(Standard D2 v2 / 0~2ノード)でCompute Targetを作成して実行します。
プリセット以外のスペックを使用する場合は、あらかじめAzureポータルでCompute Targetを作成しておく必要があります。

Compute Targetの作成が入るため、初回の学習は約13分がかかりました。

Evaluate Modelで精度を見るとML Studioより若干精度は低いものの、概ね同等の精度となっていることがわかります。

実行結果に関しては、Azure ポータルでも確認できるようになっています。
今のところEvaluate Modelの内容は反映されず、試行ごとの精度を横並びで比較することまではできないようです。

Web Serviceのデプロイ

作成したモデルをWeb Serviceとしてデプロイします。
モデルのデプロイも「Compute Target」を指定する以外はML Studioと大きく変わりません。
実行が完了した実験のメニューから「Create Predictive Experiment」をクリックします。

ML Studioと同様に作成されたモデルが1つのモジュールに変化し、「Predictive Experiment」が新たに作成されます。
これを再度実行して、実験を完了させます。

この段階で、Azure ポータル側の「モデル」を確認しても学習済みモデルは表示されませんでした。

実験が完了するとグレーアウトしていた「Deploy Web Service」がクリックできるようになります。

「Deploy Web Service」をクリックするとCompute Targetの選択ウィンドウが表示されます。
まだWeb Service用Compute Targetがないため、「Create New」を選択するとCompute Targetの作成手順が表示されます。
Azureポータルで作成する必要があるようなので、一度Azureポータルに戻って作成を行います。

ワークスペースの「コンピューティング」で「+コンピューティングの追加」をクリックします。

作成手順に沿って「Kubernetes Service」のCompute Targetを作成します。
Kubernetes ServiceのCompute Target は12 コア以上でないと作成できないため、「インスタンスのコア数×ノード数」が12以上となるように設定して作成を行います。
12 コアの環境はちょっとした検証にはなかなかヘビーなので、Azure Container Instancesで簡単に検証できるオプションも欲しいところです。

作成に成功するとVisual interfaceのCompute Targetの選択ウィンドウでもリソースが表示され、デプロイできるようになります。

デプロイを行うと、Visual interface上の学習済みモデルからイメージが作成され、Web Serviceが作成されます。

この段階でAzure ポータル側の「モデル」を確認すると、学習済みモデルが登録されていることが確認できました。

Web Serviceのエンドポイント、APIリファレンスもVisual interfaceから確認できます。

テスト画面で予測を実行してみます。
実価格$13495の自動車について価格を予測してみると「Scored Label」が13903.18とそれらしい値が出てきており、Web Serviceが正常に稼働していることがわかりました。

まとめ

思っていた以上にML StudioそのままのUIで、ML Studioは使ってきた身としては何不自由なく扱うことができました。
コーディングが必要でML serviceに手を出し辛かったユーザーにとっては、ML serviceに手を出す良いきっかけになりそうです。
まだプレビューが公開されたばかりで、モジュールが少なかったり、Web Serviceのデプロイが少し面倒だったりと洗練されていない部分はありますが、ML serviceに最適化された機能が追加され、使いやすくなっていくことに期待したいです。


Cognitive Service: Anomaly Detector APIを試す

はじめに

2019/04/18、Cognitive Servicesに新しくAnomaly Detector APIが追加されました。
Anomaly Detector APIは、読んで字のごとく「異常検知」に特化したAPIで、時系列数値データに含まれる異常な挙動の検出を簡単なREST APIで利用できるようです。
せっかくなので、適当なサンプルデータを使ってAnomaly Detector APIの異常検知を試してみます。

Anomaly Detector APIの仕様等々

※以下、執筆時点(2019/04/25)での情報となります。

APIメソッド

Anomaly Detector APIでは

Detect anomaly status of the latest point in time series.
Find anomalies for the entire series in batch.
の2つのメソッドが使用できます。
これらの違いは、最終データポイントの判定結果を返すか、すべてのデータポイントの判定結果を返すか、というものでリクエスト形式はともに同じものとなっています。
実利用においては、「Find anomalies for the entire series in batch.」でパラメータ調整を行い、リアルタイムでの異常検知に「Detect anomaly status of the latest point in time series.」を使用するという形になると思われます。

リクエスト形式

APIのリクエスト本文は、JSON形式でデータの粒度を示す「granularity」と時系列データ「series」が含まれる必要があります。
「granularity」は時系列の間隔を指定するパラメータで「daily」、「minutely」、「hourly」、「weekly」、「monthly」、「yearly」の6パターンが指定できます。
「series」は「timestamp」と「value」をペアにしたオブジェクトの配列を指定し、データ数は最小で12、最大で8640とし、時系列でソートされている必要があります。また、「timestamp」はISO 8601のUTCタイムスタンプ、「value」は数値型とし、1つでも型の異なる値が入るとリクエストエラーとなります。
そのほか、パラメータとして「sensitivity」、「period」、「maxAnomalyRatio」、「customInterval」が使用できるようです。
四半期ごとの時系列データを使用する場合は、以下のようなリクエスト本文とすればよさそうです。

[crayon-5e4b33b1357c4224873856/]

データ欠損

データ欠損は期間全体の10%まで許容されるようです。10%を超える欠損が含まれる場合はリクエストエラーが発生します。

レスポンス

Anomaly Detector APIの成功時のレスポンスは、以下のようなJSON形式となります。
「expectedValues」は学習モデルから得られる予測値で、異常判定のマージン「upperMargins」、「lowerMargins」と組み合わせて閾値を求めることができます。
「isAnomaly」、「isNegativeAnomaly」、「isPositiveAnomaly」はそれぞれ異常判定の真偽値で、異常判定閾値から外れた場合は「true」となりますが、「isNegativeAnomaly」は下限閾値、「isPositiveAnomaly」は上限閾値から外れた場合のみの判定となっています。
「period」はデータの周期性を示す値で、特定のパターンが何データポイントごとに現れるかの判定結果となります。

リージョン

「西ヨーロッパ」、「米国西部2」の2リージョンで利用可能です

利用料金

利用料金は以下の通りです。パブリックプレビューのため、Standardは一般公開時の価格の50%となっています。

検証データ

適当なサンプルデータといっても都合のいいセンサーデータを持っているわけではないので、検証データには、中部電力ホームページの「電力需給状況のお知らせ」にある「過去実績データ」を使ってみます。
試しに2018年データを可視化すると、電力データは気象条件に大きく影響を受け、夏季、冬季は特に冷暖房の使用等に伴って電力需要が増大することがわかります。

また、電力需要は1日、1週間単位で周期的なパターンを示すことがわかります。人や業務機器が稼働する平日日中帯は電力需要が大きく、土日等の休日は相対的に電力需要が小さくなります。

今回の検証には、電力需要データのうちの2018年4月~5月を使用します。
この時期は冷暖房の使用が少なく電力需要は比較的安定しますが、期間にゴールデンウィークがあり、前後の週と比較して電力需要の落ち込みが発生します。
もちろんこれを「異常」とは言えませんが、「通常とは異なる」という点から異常検知のサンプルとして使ってみます。

Anomaly Detectorの作成

Azureポータルの「リソースの作成」から「Anomaly Detector」を選択して作成を開始します。

必要な内容を入力して、作成を行います。

作成が完了したらAPIキーを取得します。リソースに移動し、メニューの「キー」からAPIキーをコピーして控えておきます。

スクリプト

今回は、PythonでAnomaly Detector APIにリクエストしています。
Anomaly Detector APIは、Face APIといったCognitive ServicesのAPIとリクエスト方法が変わらないため、簡単に利用できます。

[crayon-5e4b33b1357dc277895063/]

実行結果

スクリプトを実行して得られた結果を可視化してみると、ゴールデンウィーク期間の平日の電力需要を「異常」として検知できていました。

ゴールデンウィーク期間の閾値のカーブを見ると、前後の週と似たような電力需要カーブを示しており、1週間のパターンに基づいて需要の予測をしていることがわかります。

レスポンスの「period」を見ると168 (= 7×24)となっており、電力需要のパターンが1週間単位で現れることを判定できていました。

[crayon-5e4b33b1357ef675325158/]

異常判定の調整

リクエスト本文に「sensitivity」オプションを付加すると、異常検知の感度調整をすることができます。感度が高すぎると判定マージンが狭くなり、誤検知も増えるため、「sensitivity」で本当の異常値のみを検知するよう調整します。
とはいえ、今回のデータは「異常」があるわけではないので「sensitivity」の調整による閾値、異常判定の変化を確認します。スクリプトでは、リクエスト本文の設定を以下のように変更します。

[crayon-5e4b33b1357fe350749478/]

「sensitivity」を99、95、90、85と下げていくと、判定マージンが広がり、異常と判定されるポイントが減少していくことがわかります。なお、「sensitivity」が99の場合は、設定しない場合と結果が同じであり、「sensitivity」のデフォルト値は99となっているようです。

まとめ

Anomaly Detector APIは、非常に簡単なリクエストでデータの時系列パターンを判定し、異常を検知できることがわかりました。今回は単純なパターンでの検証でしたが、決まったパターンを持つ時系列データに対しては、モデル作成といった面倒な作業無しに異常検知の仕組みを導入できそうです。
まだ公開されたばかりということもあって、使用できるメソッドは少なく、実行のたびに過去データを送信する必要があるなど、やや使い勝手の悪い面もありますが、Face APIのようにカスタマイズができるように変更が加えられ、より使いやすいAPIになっていくことに期待したいところです。


【非エンジニアにもオススメ】Visual Studio Code を Markdown エディターとして使う

はじめに

弊社では開発環境として Visual Studio Code (以下VSCode) を利用しています。
メモ書き等は Markdown で記述する場合が多くVSCode上で記載したいと思いました。
※Markdown エディターはBoostnote等が有名ですよね。

そんな矢先 VSNotes なる拡張機能があることを知り導入してみました。
本記事では導入方法とOneDriveなどのクラウド環境との同期方法を紹介していきます。

どんな感じか?

タグとディレクトリでファイルを管理することが出来ます。
プレビューもコマンドを使用してすばやく行うことが可能です。

多機能ではないですがメモ書きには充分と思っています。

実行環境

Windows 10
Visual Studio Code - 1.33.1
VSNotes - 0.7.0

インストールと環境整備

拡張機能の検索窓から「VSNotes」を検索しインストールを実行

インストールが完了するとタブにアイコンが表示されます

F1キーを押し VSNotes の Run setup コマンドを実行する

右下にポップアップウィンドウが出現するので「Start」をクリックする

.mdファイルを保存するディレクトリを指定する ( OneDrive等クラウドだと幸せになれる )

あとは指定したディレクトリに.mdファイルを入れて運用していくことになります

使い方

Markdownファイルの生成
ファイル生成パターン1 : コマンドから新規のファイルを生成する

ファイル生成パターン2 : 対象ディレクトリにmdファイルを入れる

フォルダ構造で入れても大丈夫
http://azurerecipe.blob.core.windows.net/2019-04-22/08.png

更新ボタンを押すと表示されます

プレビュー機能
Markdown ファイルのプレビュー : F1からMarkdown : Open Previewを選択

プレビューウィンドウが表示される

他にも機能はありますが使う分にはこれで充分かと思ってます。

まとめ

VSCode で Markdown のメモを作成するのにオススメな拡張機能「VSNotes」の紹介記事でした。
複数のPCやMacも併用して業務を行う自分としては非常に助かっているツールになります。
VSCOde で出来ることもドンドン増えているので是非触ってもらえれば幸いです。