Snowflakeのデータに対して探索的データ分析をしたい!SnowsightのチャートとAmazon SageMaker Studioの例

Snowflakeに格納したデータに対する探索的データ分析(EDA)ツールの例として、Snowsightのチャート(ダッシュボード・ワークシート)とAmazon SageMaker Studioのご紹介です。
2023.08.10

データアナリティクス事業本部 機械学習チームの鈴木です。

Snowflakeに格納したデータを使って機械学習モデルを構築したい際に、最初のステップとして探索的データ分析(Exploratory data analysis、以降EDA)をどこでするとよいかを検討する機会がありました。

Snowflakeが公開している情報を確認しつつ、私がよく利用するSnowsightのチャートとAmazon SageMaker Studioの例をご紹介します。

Snowflakeのデータに対するEDA

Snowflakeのデータに対するEDAをしたい場合は、基本的には分析用の環境を用意する必要があると考えています。候補としては次のセクションでご紹介します。

2023年8月現在で、Snowflakeではネイティブの機械学習機能であるSnowpark MLのプレビュー開始が発表されています。

主要コンポーネントとして、Snowpark ML DevelopmentおよびSnowpark ML Opsがあり、APIの仕様は以下のガイドから確認できます。

これらのコンポーネントは使用する特徴量が決まった上でのモデル開発・運用の機能を備えているため、EDAについてはこれまで通り別途実施する必要があると考えています。

Snowflakeのデータに対するEDAツール

機械学習モデルを開発する際に、データがどのような傾向を持つか確認し、有効な特徴量を作成するための探索的データ分析が必要です。

私はAWSのサービスをメインで活用しているため、今回はSnowflakeとAWSでできる以下の2つの例を紹介します。

  • Snowsightのダッシュボード・ワークシートで可視化する
  • Snowpark Pythonにより取得したデータをAmazon SageMaker Studioノートブックで分析する

なお、Snowflakeの公式ページの『DATA ANALYTICAL TOOLS』によると、データから洞察を引き出すためのパートナーエコシステムとして、4つの製品を紹介しています。

QuickStartでは『Exploratory Data Analysis with Snowflake and Deepnote』というDeepnoteを使った例が紹介されています。

また、Snowpark ML for PythonのQuickStartの一つである『Intro to Machine Learning with Snowpark ML for Python』の『5. ML Feature Transformations』で紹介されているノートブックでは、Pythonのmatplotlibでの可視化例が紹介されています。

例1. Snowsightのチャート

概要

Snowsightのダッシュボードとワークシートでは、非常に手軽にデータの可視化を行うことができます。

どちらでも同等の可視化を行うことができますが、今回はダッシュボードでの文脈でご紹介します。

分析のイメージ

Snowsightにログインし、左ツールバーのダッシュボードを開きました。

ツールバー

+ ダッシュボードよりダッシュボードを追加し、新しいタイルからタイルを追加しました。

新しいタイル

タイルはSQLおよびPythonでの分析結果の2種を選ぶことができました。

タイルの種類

まずSQLの場合だと、事前に用意しておいたデータベースにSELECT文を実行し、以下のようにデータを取得できました。この時点でカラムごとの概要を右側に表示してくれました。

SQLでの分析1

チャートタブを開くと、いくつかの種類のチャートを選択できました。

SQLでの分析2

例えば散布図の場合、X軸・Y軸・色に相当するデータを選択できました。

SQLでの分析3

Pythonの場合は以下のようにデータの取得ができました。結果タブの内容はSQLと同様のもので、どちらを使い慣れているかや分析ロジックの複雑さによって選ぶのがよさそうです。

Pythonでの分析1

チャートタブについてはSQLと同様です。

Pythonでの分析2

以下のようなダッシュボードが作成できました。

作成したダッシュボード例

使用した感想

チャートの種類が限られますが、UIから非常に簡単にデータへの洞察を得ることができるため、とてもよかったです。タイルの作成はワークシートで行えるため、Snowflakeのコンピュートの利用もシームレスに行うことができました。

ダッシュボードの共有も、同一アカウント内のユーザーであれば簡単に行うことができることもポイントです。

より詳細な分析・作り込みができるツールはあった方がよいものの、Snowsightに標準で備わっているツールとしては十分すぎる機能で、すごいなと思いました。

ダッシュボードだけでなく、ワークシートでインタラクティブに同等の分析ができるのも素晴らしいです。

ワークシートの可視化例

例2. Amazon SageMaker Studioノートブック

概要

Jupyter Notebook互換のSageMakerノートブックで分析が可能です。

SageMaker Studio Notebookの例

ノートブックはEDAを行うための標準的なツールの一つです。

ノートブックを使うと、例えば以下のようなPythonコードを書いてどんどん作り込みをしたいような可視化の場合に便利です。

執筆時点では、Amazon SageMaker Studioの昨年12月にリリースされたUIが利用できます。詳しくは以下の記事にまとめております。SageMaker自体の環境についても利用イメージが記載されていますのでご確認ください。

分析のイメージ

AWSマネジメントコンソールからSageMaker Studioにアクセスします。

例えばCreate notebookから新規でノートブックを作成できます。

SageMaker Studio

以下の画面はSageMaker Studioでノートブックに記述したコードを実行するための実行環境の設定です。現在はSnowpark PythonはPython3.8のみサポートしていますが、ランタイムも選択可能で、Set up notbook environmentで利用するイメージを選択でき、例えばData Science 2.0イメージではPython3.8が利用できます。

分析用のコンテナ

Selectを押すとPythonスクリプトを実行するためのリソースが起動し、分析を進めることができます。

ノートブックが起動した後は、例えば『Snowpark Pythonを使ったクライアントアプリケーション用のローカル開発環境の準備をしてみた | DevelopersIO』で紹介したSnowflakeへの接続方法と同じ方法で、Snowpark Pythonを使ってデータを取得可能です。

!pip install pandas==2.0.3
!pip install pyarrow==10.0.1
!pip install snowflake-snowpark-python

試してみたところ、pipの依存関係チェックでエラーが出てしまいますが、EDAで使う分にはひとまず問題なさそうでした。気になる方はpip checkの結果をもとに解消をしてもらうとよいかもしれません。

以下は事前に作成しておいたSNOWPARK_OPERATORユーザーで、ML_DATABASEデータベースのPUBLICスキーマにあるテーブルに対して操作をする設定例です。

from snowflake.snowpark import Session

# セッションの作成
connection_parameters = {
   "account": "アカウント識別子",
   "user": "SNOWPARK_OPERATOR",
   "password": "設定したパスワード",
    "warehouse": "使用するウェアハウス"
}

session = Session.builder.configs(connection_parameters).create()

# 使用するロール・データベース・スキーマの選択
session.use_role("SNOWPARK_ROLE")
session.use_database("ML_DATABASE")
session.use_schema("PUBLIC")

事前にアイリスデータセットのデータが入ったIRISテーブルがあったとして、以下のようにデータを取得してPandasデータフレームに変換ができます。

pandas_df = session.sql("SELECT * FROM IRIS").to_pandas()

pandas_df.head(10)

作成されたデータフレーム

後はよくノートブック環境で行うように、可視化のためのライブラリを使って傾向をグラフで確認することが可能です。

以下はSeabornを使ったインタラクティブな可視化の作成です。

import seaborn as sns

sns.scatterplot(data=pandas_df, x="SEPAL_LENGTH", y="SEPAL_WIDTH", hue="CLASS")

Seabornによる散布図の例

以下はPlotlyを使ったインタラクティブな可視化の作成です。

import plotly.express as px

df_agg = pandas_df.groupby("CLASS").agg("mean")

data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(df_agg, x=df_agg.index, y='SEPAL_LENGTH')
fig.show()

plotlyによるインタラクティブなグラフの作成

ノートブックを使うメリット

ノートブックを使うメリットとしてはいろいろありますが、個人的には以下の点が挙げられると思います。

  • インタラクティブにコードを実行でき、EDAの場面では使いやすい
  • 細かい作り込みが必要な可視化ができる

1点目はセルにコードを入力して実行することでデータの取得や可視化を進められるというものですが、例えば1度実行すると全てのコードが実行されてしまったり、表示がコードの実行によってどんどん上書きされてしまうような環境だとEDAをする分にはやりづらいことが多いです。その点、ノートブックの場合はセルと結果が1:1なので結果を残すことができ、後から確認するために便利です。その代わり、セルの実行の順序によっては、後からあらためて上から順番に実行した結果と変わってしまう可能性もあるので注意が必要です。

2点目は、コードを書けば好きなライブラリで好きなように可視化ができるのでより細かい作り込みができるというものです。可視化は洞察が分かりやすくシンプルなものである方が良いことは大前提ですが、例えば以下のような場合には独自に作り込みをした方が目的を達成する分析ができる場合があります。

  • コート上のスポーツ選手の位置のログデータを可視化する際に、背景をコートの画像にしたい
  • 極座標形式のようなほかのツールでサポートされていない形式で表示したい
  • 可視化結果をGIF形式のビデオをにしたのでそれを貼りたい

システム化する際のデータ取得について

AWS Glueを使ってSnowflake上のデータをバッチで取得し、S3にコピーを持っておくことも可能です。

多くの分析者で分析するような場合や、分析の結果SageMakerで機械学習モデルを開発・運用することになった場合は検討してもよいかもしれません。

Glueによるデータ取得

使い方については以下のブログでご紹介しました。

最後に

Snowflakeに格納したデータを使って機械学習モデルを構築したい際に、最初のステップとして探索的データ分析(Exploratory data analysis、以降EDA)をどこでするとよさそうか、Snowflakeが公開している情報を確認しつつ、私がよく利用するSnowsightのチャートとAmazon SageMaker Studioの例をご紹介しました。

記事執筆時点ではプレビューではありますが、今後Snowpark MLが一般公開されればSnowflakeでの機械学習モデルの活用場面もさらに増えてくると思うので楽しみですね。

参考になりましたら幸いです。

ほかに参考にした文献