はじめに
先日SnowflakeのpythonワークシートがPublic Previewになりました。
ちょうどSnowflakeでテストデータを作成する必要があったので、良い機会だと思いpythonワークシートで簡単なテストデータを生成してみました。
概要
SnowflakeはSnowparkというフレームワークを提供しており、これを用いることでPythonなどのプログラミング言語を用いてデータを操作できます。
元々Snowparkを使うには自分で環境を構築する必要がありましたが、pythonワークシートがPublic PreviewになったことでSnowflakeのUI上からpythonコードを実行できるようになりました。
今回はそのpythonワークシートを用いて、機械学習の説明でよく見かけるような線型関数にノイズを加えた2次元データを生成します。
手順
まずSnowflake UI上のサイドメニューのBilling & TermsからAnacondaを有効化します。
そうすることでNumPyやPandasといったパッケージが利用できるようになります。

pythonワークシートを開くとサンプルのコードがすでに記載してあり、そのコードを実行することでpackagesビューから利用できるパッケージやバージョン一覧を取得することができます。

では本題ですが、今回テストデータを生成するために実行したコードは以下です。
import snowflake.snowpark as snowpark
import numpy as np
import pandas as pd
def main(session: snowpark.Session):
X = np.arange(100).reshape(100, 1)
Y = 2 * X + np.random.randint(0, 50, (100, 1))
XY = np.concatenate([X, Y], axis=1)
pd_df = pd.DataFrame(XY, columns=['x', 'y'])
df = session.create_dataframe(pd_df)
df.write.mode("overwrite").save_as_table("tbl")
return df
解説
pythonやSnowparkが分かる方であれば何をしているか分かると思いますが、main関数内でやっていることを説明します。
- まずデータを操作するにはSnowflakeデータベースとのセッションを確立する必要があるので、snowparkのSessionクラスを引数として与える
-
Xには0~99の値を持つ1×100の2次元配列を入れる -
YにはXを2倍し、0~49のランダムな数値を加算した1×100の2次元配列を入れる -
XとYを横に結合し、一度PandasのDataFrameに変換してからSnowparkのDataFrameを作成する(ndarrayからはSnowparkのDataFrameを直接作成できないため) - 最後に
save_as_tableメソッドを使って、tblという名前のテーブルにデータを書き込む
(参考)
https://docs.snowflake.com/ja/developer-guide/snowpark/python/working-with-dataframes
実行結果
グラフで見てみると、想定通り線型関数にノイズが加えられたようなデータを生成できていることが分かります。

まとめ
今回は簡単なデータ生成をしてみましたが、プログラミング言語を用いることで柔軟なデータ操作ができると思うので、ぜひpythonワークシートを活用してみてください!
