はじめに
先日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ワークシートを活用してみてください!