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