データの相関係数を Azure Machine Learning の Notebook でサクッと視覚化する定石スクリプト

毎回自分が、過去のスクリプトからコピペするので、備忘録を兼ねて。
全然難しいことではないです。単に関数名とかパッケージ名を忘れるだけです(汗

データが機械学習の教師データとして使い物になりそうか?」をサクッと確認するためのスクリプトです。

サクッと確認することが目的なので、データサイエンティストにじっくり分析してもらう手前の簡単なデータチェックだと考えてください。
学習させる価値があるデータなのか “あたりを付ける” ことが目的。
十分な分析ではありませんが、イケそうなら後続の開発フローに早く流せるし、データの品質が良くないようなら何が問題かを明らかにして早めに再収集できますしね。


今回は、Azure Machine Learning studio にアップロードしたデータセットに対して各列の相関係数を求めます。
さらに数値だけだと分かりづらいので、ヒートマップで視覚化します。

  1. 対象のデータを ML studio のデータセットとしてインポート
  2. 新規の Notebook でデータセットを読み込む
  3. Pandas の DataFrame で相関係数を求める
  4. seaborn でヒートマップ化

だけの手順。

コードは定石どおりで、いじる必要はありません。
Azure の Subscription ID など環境に依存する設定値はそれぞれ異なりますが、設定値を含めたスクリプトが Machine Learning studio の環境内からコピペできます。悩みどころはゼロです。

「教師データとして使えそうか?」の確認方法としては、Excel を使ったり Power BI を使ったり するやり方もあります。
が、Notebook でやりたいとか、Azure Machine Learning studio で品質を管理したいとかのニーズもあると思います。
そんな時に今回の投稿です。


対象のデータを ML studio のデータセットとしてインポート

Azure Machine Learning を使う場合、まずはデータセットを studio 内に取り込みます。
データセットの登録は、今回の処理に専用の手順でなく、Azure Machine Learning studio を使う上で絶対に必要なものです。

手順は

  1. ML studio で [データセット] – [データセットの作成]・・・今回はローカルの CSV
  2. 基本情報を入力
  3. データストアの選択・・・※データストアの指定が可能だが、通常はデフォルトの “以前に作成されたデータストア” でよい
  4. データファイルの選択
  5. 設定値の確認・変更・・・プレビューを参考にして、列見出し、行のスキップは変更することがあるくらいのはず
  6. スキーマの確認・変更・・・最初はデフォルトのままでよさそう
  7. 詳細を確認して [作成]

新規の Notebook でデータセットを読み込む

今回のようにデータセットの品質を確認したい場合も、データセットを学習させたい場合も、 Notebook でデータを扱うにはデータセットを読み込まなければなりません。

データセット読み込みのコードは簡単です。ML studio のデータセットのページにコードがあるので、そのまま使えます。
読み込みに必要な Azure の Subscription ID やリソースグループ名、ワークスペース名、データセット名まで埋め込まれたコード名で、本当にそのままコピペするだけです。

  1. ML studio の [データセット] で対象のデータセットを選択

2. [使用する] タブをクリックすると “サンプルの使い方” が表示されるので、これをコピー

必要なパラメーターが全部埋まっています。
唯一、最後の行だけは

df = dataset.to_pandas_dataframe()

くらいの変更が必要ですね。(これは、あとでまた)

3. [ノートブック] – [新しいファイルの作成]

4. ファイル名を入力して、ファイルの種類を選択(”Python Notebook”)、ディレクトリを選択して [作成]
全く大した話ではないですが、ファイルの種類を Python Notebook にすれば、ファイルの拡張子 “.ipynb” は自動的に追加されます。

5. (コンピューティングがまだ無い場合) [新しいコンピューティング] で、スクリプト実行用の仮想マシンを作成
今回はデータが小さくトレーニングでもないので、CPU マシンで問題ないでしょう。 (“Standard_D3_v2” で OK)

6. 新規作成したスクリプトファイルを選択して、スクリプトを実行するコンピューティングを確認。続いて [編集] – [Jupyter で編集] を選択
(もちろん、JupyterLab でもインライン編集でもいいですが)


Pandas の DataFrame で相関係数を求める

Jupyter Notebook が開いたらスクリプトを記述します。

  1. 本稿の先頭で作った Dataset のサンプルスクリプトをコピーして、Notebook に貼り付け
    ただし最後の行は、行頭に “df = ” を付ける
# azureml-core のバージョン 1.0.72 以上が必要です
# バージョン 1.1.34 以降の azureml-dataprep[pandas] が必要です
from azureml.core import Workspace, Dataset

subscription_id = '<Subscription ID>'
resource_group = 'DatasetVisualize'  # 実際のリソースグループ名
workspace_name = 'DatasetVisualize'  # 実際のワークスペース名

workspace = Workspace(subscription_id, resource_group, workspace_name)

dataset = Dataset.get_by_name(workspace, name='Titanic')  # 実際の Dataset 名
df = dataset.to_pandas_dataframe()

2. [Run] ボタンなり Shift + Enter なりでセルを実行
認証を求められたら、表示された コードで “https://microsoft.com/devicelogin&#8221; でログイン

3. Notebook の次のセルに “df” と入力して Shift + Enter など
Pandas の DataFrame に確かに Dataset が読み込まれていることが分かる

df

4. 次のセルで相関係数を表示する

df.corr()

ここで見る値は各列の相関係数です。
今回でいうと(そういえば今回使っているデータセットは、タイタニック号の乗船者リスト なんですが)、”助けられたか”、 “助けられなかったか” を意味する “Survived” 列に対して、他の列がどれだけ強い相関関係を持つかを調べるのが目的です。
“Survived” 行で各列の値が 1 または -1 に近いほど強い相関関係を持つことを意味します。

“Survived” 列に対しては、”Pclass” (船室の等級、一等船室、二等船室・・・) および “Fare” (料金) が強く作用していることが分かります。

直感的には年齢や性別も相関関係を持っているような気がしますが、今回小さい値または表に出てこないのは、今回のテーマから外れるので別の機会に。
簡単にだけ書くと、”Age” 列は値の欠損が多いことが原因、”Sex” 列は文字列だからです。
性別については事前に 0 と 1 のように値を数値に置換してから取り込むと、ある程度強い相関関係がみられたはずです。


seaborn でヒートマップ化

ここまでで相関関係は(ある程度)分かりましたが、せっかくなので図示します。

seaborn はヒートマップにしてくれるので、これを使いましょう。

  1. Notebook で次のセルに以下を入力
    “sns.heatmap” だけですね、簡単。
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

sns.heatmap(df.corr())

色が濃いほど強い相関関係を持つことを表します。


記事は長くなりましたが、やってることは簡単。(細かいところまで画面を入れたので無駄に長い気も・・・すみません)

こうすることで、データの品質をまずはざっくり確認できるわけです。

ここまでするくらいなら、自動 ML (Automated ML) に流して実際に学習させてしまうほうがラクな気もしますが。

「こういうのもあるんだね」くらいで理解しておくといいと思います。

念のためですが、最後に大事なお知らせ。
ここまで終わったら、忘れずに コンピューティング インスタンスを停止 してくださいね。
仮想マシンを止めないと課金も止まりませんよ。


独り言。
超絶ハードはお仕事をやっていたり諸々あったり(謎)で、ブログ更新がものすごく久しぶりなんですが、改めてまたボチボチと。
こんなにブログ書かなかったのは初めてかもしれない。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中