SnowflakeとPythonでデータ可視化
Snowflakeで今日拝なびら(ちゅう うがなびら=こんにちは)。
ちゅらデータshinyashikiです!
前々回「SnowflakeにPythonから繋いでみよう!」ではPythonからSnowflakeへの繋ぎを行いました。
また、前回「CLIクライアント(SnowSQL)を使ってSnowflakeにアクセスしてみよう」ではSnowflakeのCLIツールであるSnowSQLを使ってデータの登録を行いました。
3部作最終回となる今回は、Pythonを使ってSnowflakeのデータを可視化してみます。
・SnowflakeにPythonから繋いでみよう!
・CLIクライアント(SnowSQL)を使ってSnowflakeにアクセスしてみよう
・SnowflakeとPythonでデータ可視化 ← 本記事
はじめに
使用するSnowflake環境について
ユーザや仮想ウェアハウス、データベースといったSnowflakeのリソースの作成方法については本記事では省略します。
必要に応じて事前にご用意ください。
なお、本記事では以下のリソースが存在すると仮定します。
・アカウント: sample123.ap-northeast-1.aws
・ユーザ: TRAINING_SHINYASHIKI
・仮想ウェアハウス: SHINYASHIKI_TRAINING_WH
・データベース: SHINYASHIKI_TRAINING_DB
・テーブル: IRIS_DATA
・「CLIクライアント(SnowSQL)を使ってSnowflakeにアクセスしてみよう」で作成したアヤメの花のデータを保持するテーブル
検証で使用する端末について
本記事の検証端末としてMacを使用しています。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H2
Python環境の準備
Jupyter Notebookの起動
本記事では「SnowflakeにPythonから繋いでみよう!」で構築したPython環境をそのまま使います。
まずはDockerコンテナを起動します。
$ docker start scipy-notebook scipy-notebook
コンテナが起動したらlocalhost:8888でブラウザ起動してJupyter Notebookを立ち上げます。

データの可視化
それでは早速データの可視化を行っていきます。
今回はPandasを使ってデータをグラフ化していきたいと思います。
Pandas DataFrameへデータの読み取り
まずはSnowflakeのテーブル「IRIS_DATA」からPandas DataFrameへデータの読み取りを行うPythonコードを実行してみます。
なお、ここでのポイントは、
1.snowflake.connector.connect()でSnowflakeの対象リソースに接続
2.ctx.cursor()でカーソルを生成
3.cs.execute(“select * from IRIS_DATA”)でSQLを実行
4.cs.fetch_pandas_all()でカーソル内のすべての行をフェッチし、Pandas DataFrame にロード
となります。
import snowflake.connector
#①Snowflakeに接続
ctx = snowflake.connector.connect(
user='TRAINING_SHINYASHIKI',
password='xxxxxx',
account='sample123.ap-northeast-1.aws',
warehouse='SHINYASHIKI_TRAINING_WH',
database='SHINYASHIKI_TRAINING_DB',
schema='public',
)
#②カーソルを生成
cs = ctx.cursor()
try:
#③SQLを実行
cs.execute("select * from IRIS_DATA")
#④カーソル内のすべての行をフェッチし、Pandas DataFrame にロード
df = cs.fetch_pandas_all()
display(df)
finally:
cs.close()
ctx.close()

大丈夫そうですね!
150行のデータがDataFrameに正しく読みこまれているようです。
いろんなグラフを描いてみる
Pandas DataFrameにデータが読み込まれていれば、あとはPandasの機能を使って簡単にグラフが描けます。
例えば
CLASS(種類)が”Iris_virginica”のPETAL_WIDTH(花びらの幅)
をヒストグラムとして描きたい場合は、
iris_virginica_petal_width = df[df.CLASS=="Iris-virginica"].PETAL_WIDTH iris_virginica_petal_width.hist()

あるいは
CLASS(種類)ごとのPETAL_WIDTH(花びらの幅)の平均
を棒グラフとして描きたい場合は、
petal_width = df[["CLASS","PETAL_WIDTH"]]
petal_width.groupby("CLASS").mean().plot(kind="bar")

みたいな感じで簡単に描けます!
まとめ
駆け足となりましたが、
SnowflakeにPythonから繋いでみよう!
CLIクライアント(SnowSQL)を使ってSnowflakeにアクセスしてみよう
SnowflakeとPythonでデータ可視化
について一通り試してみました。
SnowSQLを使えば、他のRDBMSと同じような感覚でクライアントからSQLを実行することができます。
またPython用Snowflakeコネクタを使うことで、PythonからSnowflakeにアクセスしたり、PandasのDataFrameとしてデータを扱うといったことがとても簡単にできます。
それでは !
また、やーさい!(また、会いましょう!)