PythonTech Blog 

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としてデータを扱うといったことがとても簡単にできます。

それでは !
また、やーさい!(また、会いましょう!)

このページをシェアする:



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。