Visual Studio Code と Python で Azure Data Services にアクセスしてみよう (Azure SQL Database 、 Azure Machine Leaning 編 )
Microsoft Japan Data Platform Tech Sales Team
清水
みなさん、こんにちは。昨年末の記事では、 Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスする際の手順やポイントをお伝えしましたが、いかがだったでしょうか? 今回は、 Visual Studio Code で Python 環境を構成し、 Azure SQL Database 、 Azure Machine Learning へアクセスする際の手順、ポイントをお伝えします。
Visual Studio Code とは
Visual Studio Code( 以降 VS Code) は、 Visual Studio と名前はついていますが、 Visual Studio 2015 や Visual Studio 2017 RC とは異なり、軽量かつ高速な高機能エディターです。 VS Code の詳細については、以下のサイトをご参照下さい。
VS Code は Windows に加え、 Linux , Mac の環境でも使用可能ですが、ここでは、 Windows の環境を前提とします。
VS Code のインストール
以下のサイトから最新版の Visual Studio Code のインストーラーがダウンロード可能です。
インストーラーをダウンロードしたら、これを実行し VS Code をインストールします。
インストール後、 VS Code を起動すると、以下のような画面が表示されるので、をクリックし、エクスプローラーを表示します。続いて、「フォルダーを開く」をクリックし、ファイルを配置するフォルダを指定します。
以下では「 WORK 」というフォルダを開いています。この状態でをクリックし、ファイル名を入力すると、エクスプローラーの右側に作業中ファイルが開かれます。
拡張機能 のインストールと設定
拡張機能のインストール前に Python のインストールを行います。ここでは、 インストールが容易かつデータ分析向けのディストリビューションという理由から Anaconda を使用することとします。詳細については、以下の記事の「 Python のインストール」ご参照下さい。
Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスしてみよう
Anaconda は 2017/2/25 現在、 Python 2.7 及び Python 3.6 を含むものが最新ですが、Python 3.5 等を含む以前のバージョンのインストーラーもダウンロードサイト内のリンクからダウンロード可能のようです。筆者の都合で恐縮ですが、今回動作確認を行った環境は Python 3.5 のため、以降では Python 3.5 を前提として説明を行います。
VS Code の特徴の 1 つとして、拡張機能があります。拡張機能を活用することで、より効率的なコーディングやデバックが可能になります。をクリックし、 ”Pyhton” と入力すると Python に関連した拡張機能の一覧が表示されます。各拡張機能の「インストール」をクリックすることで、インストールが可能です。 Python に関連した拡張機能は多数存在しますが、ここでは下図の「 Python 」という拡張機能を選択することとします。
インストールが完了したら、簡単な Python のコードを記述し、動作確認を行います。をクリックし、ファイル名に ”test.py” と入力し、ファイルを開きます。 “p” だけを入力すると候補が表示され、 Intellisense が有効なことが確認できます。また、画面下のステータスバーを確認すると、拡張子が .txt の場合はプレーンテキストと表示されていたのが、.py の場合には、 Python になっていることが確認できます。
“Hello!” とだけ表示する Python のコードを記述、保存します。作業中ファイルの画面を右クリック、メニューから「 Run Python File in Terminal 」 を選択し、コードを実行します。コードの画面の下に実行画面が表示されるので、正常に実行されていることを確認します。
Azure SQL Database へのアクセス
Python から Azure SQL Database や SQL Server へのアクセスには、 pyodbc や pymssql 等を使用することが一般的です。ここでは、 Python から ODBC を経由して SQL Server 、 Azure SQL Database にアクセスを行う pyodbc を選択します。なお、最新の ODBC ドライバは以下のサイトからダウンロード可能です。
Microsoft® ODBC Driver 13 for SQL Server® - Windows + Linux
https://www.microsoft.com/ja-JP/download/details.aspx?id=50420
pyodbc を Python に追加するため、 Anaconda のパッケージマネージャの conda を使用します。コマンドプロンプトを起動し、以下のように入力すると、 pyodbc をインストールすることが可能です。
conda install -c anaconda pyodbc=3.0.10
なお、 pyodbc の詳細については、以下をご参照下さい。
https://mkleehammer.github.io/pyodbc/
ここでは、アクセス先の Azure SQL Database に AdventureWorksLT サンプルデータベースが作成され、 VS Code からアクセス可能とします。拡張子が “.py” のファイルを新規作成し、以下のようなコードを記述、保存、実行します。
#pyodbcのインポート
import pyodbc
#接続先 SQL Server 名
server = 'SQL Server 名'
#接続先データベース名
database = 'AdventureWorksLT'
#SQL Server 認証で使用するログイン名
username = 'ログイン名'
#SQL server 認証で使用するパスワード
password = 'パスワード'
#Azure SQL Database への接続
#SQL Server 認証の場合
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server}; SERVER='+server+'; DATABASE='+database+' ;UID='+username+'; PWD='+ password + '; ENCRYPT=Yes')
#カーソルのオープン
cursor = cnxn.cursor()
#クエリの実行と行の取得
cursor.execute("SELECT AccountNumber, COUNT(*) FROM SalesLT.SalesOrderHeader GROUP BY AccountNumber ORDER BY AccountNumber;")
row = cursor.fetchone()
#取得した行の表示
while row:
print(row[0], row[1])
row = cursor.fetchone()
#t1テーブルを作成
cursor.execute("CREATE TABLE t1(co1 int primary key,col2 varchar(10))")
#t1テーブルに行を追加
cursor.execute("INSERT t1 VALUES(1,'test1')")
#トランザクションのCOMMIT
cnxn.commit()
#接続のクローズ
cnxn.close()
pyodbc では、暗黙的なトランザクションが有効になっているため、 INSERT の直後に commit を実行し、トランザクションをコミットしています。 正常に実行出来ると、以下のような画面が表示されます。
Azure Machine Leaning へのアクセス
Azure Machine Leaning( 以降 Azure ML) では、作成した予測モデルを、 Web サービスとして公開することが可能です。ここでは 、 userID を 1 つ送信すると、おすすめ Item の ID を 5 つ返す Web サービスを前提とします。 Azure ML では、 Web サービスの公開方法として、「 Deploy Web Service [Classic] 」と「 Deploy Web Service [New] Preview 」の 2 つバージョンが使用可能ですが、ここでは「 Deploy Web Service [New] Preview 」を用いて公開した Web サービスを前提とします。
「 Deploy Web Service [New] Preview 」を用いて公開した Web サービスの管理やサンプルコードの参照を行うには、 Azure Portal で対象 Azure ML の「概要」を表示し、「 Machine Learning Web サービス管理の起動」をクリックします。管理画面が表示されたら、画面上部の「 Web Services 」をクリックすると、 Web サービスの一覧が表示されるので、対象の Web サービスをクリックします
その後、以下の画面が表示されるので、「 Use Web Service 」をクリックします。
Web サービスの URL ( 下図では Request Response) 、 API キー ( 下図では Primary Key あるいは Secondary Key) や C# 、 Python 、 R 等で Web サービスにアクセスするためのサンプルコードが参照可能です。ここでは、 Python 3.5 を前提としているので、「 Python 3+ 」をクリックします。
VS Code で拡張子が “.py” のファイルを新規作成します。 上記の画面から Python のサンプルコードをコピー、ペーストし、 userID の値、 Web サービスの URL 、 API キーを修正し、保存、実行します。
#urllibとjsonのインポート
import urllib.request
import json
data = {
"Inputs": {
"input1":
[
{
'userID': "xxxxx", # おすすめ Item の ID を取得したい userID を指定
}
],
},
"GlobalParameters": {
}
}
body = str.encode(json.dumps(data))
url = 'https://xxxxx.services.azureml.net/xxxxx’ # Web サービスの URL に置き換えます。
api_key = 'abc123' # Web サービスの API キーに置き換えます。
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
req = urllib.request.Request(url, body, headers)
try:
response = urllib.request.urlopen(req) # Web サービスにリクエストを送信
result = response.read() #Web サービスからリクエストの結果を取得
print(result)
except urllib.error.HTTPError as error: # エラーハンドリング
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp,
# which are useful for debugging the failure
print(error.info())
print(json.loads(error.read().decode("utf8", 'ignore')))
正常に実行出来ると、 Item 1 から Item 5 の ID が返されます。
今回は、 VS Code で Python 環境を構成し、 Azure SQL Database 、 Azure Machine Learning にアクセスする際の手順とポイントをご紹介しましたが、いかがだったでしょうか ?Python から Azure SQL Database 、 Azure Machine Learning にアクセスする際にお役に立てれば幸いです。
関連記事
Visual Studio 2015 で Python 環境を構成し、 SQL Server 、 Azure SQL Database にアクセスしてみよう Azure Machine Learning のサンプルを使って機械学習を始めてみよう! Azure Machine Learning Studio を使ってモデルをスクラッチから構築してみよう