❄️

Frosty Friday Week102 Intermediate Snowpark Pandas

がく@ちゅらデータエンジニアです!

現在、Frosty Friday Live Challangeとして、最初からやっていますが、Week100到達!ってことで、最新のチャレンジもちょこちょこやっていこうかなって思ってます。

https://frostyfriday.org/blog/2024/07/19/week-102-intermediate/

Week102 Intermediate Snowpark Pandas

問題(Google翻訳そのままなのでご容赦下さい

Snowpark Pandas! ついに、分散型 Snowflake システムで使い慣れたよく知られた構文を使用することで、Pandas との愛憎関係は完全に愛情に満ちたものになりました。

今週のチャレンジでは、Snowpark Pandas を使用して 5 つの質問に次々と答えていきます。

以下は起動時の SQL コードです。

create or replace stage frosty_stage url = 's3://frostyfridaychallenges/challenge_102/';

次に、ノートブックを開いて、最初のセルに次の内容を入力します。

import modin.pandas as pd
import snowflake.snowpark.modin.plugin

from snowflake.snowpark.context import get_active_session
session = get_active_session()

clothes_shop_df = pd.read_csv('@frosty_stage/clothes_shop_purchases.csv')

その後、次の 4 つの質問に答える準備が整いました。

  1. 一日のうちのどの時間帯に売上の大部分が集中しますか?
  2. どのサーバーが一番売れましたか?
  3. 最初の 5 つのアイテムに対して 20% の税金を差し引いた場合、合計価格はいくらになりますか?
  4. レジ 4 と 5 を統合した場合、最大のレジ番号は何になりますか?
回答
  1. 10
  2. Mary Harris

やってみた

まず、Snowflake Notebookを開きます。
データベース: FROSTY_FRIDAY
スキーマ:WEEK102
※スキーマについては、事前に作ってました

STAGEの作成と取り込みファイルの確認

cellを作り

create or replace stage frosty_stage url = 's3://frostyfridaychallenges/challenge_102/';
list @frosty_stage;

スタートアッププログラムを起動

Python cellを作成し

import modin.pandas as pd
import snowflake.snowpark.modin.plugin

from snowflake.snowpark.context import get_active_session
session = get_active_session()

clothes_shop_df = pd.read_csv('@frosty_stage/clothes_shop_purchases.csv')

を実行したところ、モジュールがないよ!ってエラーが出ました

パッケージを追加します

  • 「modin」を追加 最新版、2024年7月末時点でのバージョンは、0.28.1
  • Sessionを停止し、再開します

再度

import modin.pandas as pd
import snowflake.snowpark.modin.plugin

from snowflake.snowpark.context import get_active_session
session = get_active_session()

clothes_shop_df = pd.read_csv('@frosty_stage/clothes_shop_purchases.csv')

を実行ました

UserWarning: Snowpark pandas has been in Public Preview since 1.17.0. See https://docs.snowflake.com/developer-guide/snowpark/python/snowpark-pandas for details.
read_csv implementation has mismatches with pandas:
Staged files use the Snowflake CSV parser, which has different behavior than the pandas CSV parser.

のようなWarningがでましたが、DataFrameへの取り込み自体はできているようです。

import streamlit as st
st.write(clothes_shop_df.dtypes)
st.dataframe(clothes_shop_df)

で、Dataframeを見るとうまく表示ができました

Q1. At what hour of the day are the majority of our sales?

1日のうち、私たちの販売の大部分は何時に行われますか?

df = clothes_shop_df.to_pandas()
result = df.groupby(df["Timestamp"].dt.hour).sum(numeric_only=True).sort_values("Total_Price", ascending=False)
st.dataframe(data=result,width=1000)

回答としては、12
となるのですが、問題の回答的には、10・・・うーーーーん

Q2. Which server sold the most?

どのサーバーが最も多く売れましたか?

df = clothes_shop_df.to_pandas()
result = df.groupby(df["Server"]).sum(numeric_only=True).sort_values("Total_Price", ascending=False).index[0]
st.write(result)

Mary Harris
→正解!!!

Q3. What is the total price like if we deduct 20% for tax on the first five items?

→ 最初の5つのアイテムに対して20%の税金を差し引いた場合の合計金額はどのくらいですか?

df = clothes_shop_df.head(5)
df["Total_Price_After_Tax"] = df["Total_Price"] * 0.8
st.dataframe(df[["Transaction_ID", "Total_Price", "Total_Price_After_Tax"]])
  • まず、最初の5件を取得(.head(5))
  • 20%の税金を差し引いた Total_Price_After_Tax をdfに追加
  • 表示

Q4. What would the biggest till number be if we merged tills 4 and 5?

→ 4番レジと5番レジを統合した場合、最大のレジ番号は何番になりますか?

df = clothes_shop_df
df = df.groupby(df["Till_Number"]).sum(numeric_only=True).sort_values("Total_Price", ascending=False)
st.dataframe(df[["Total_Price"]])

結果は

※レジ番号5番がないんです・・・・ないんです・・・何も難しいことがないと言うか、統合できないんです!!!!!

Gitで公開

https://github.com/gakut12/Frosty-Friday/blob/main/week102_imediate_snowpark_pandas/notebook_app.ipynb

といろいろやってみましたが、
sakatokuさんがやってらした

https://github.com/Sakatoku/Frosty-Friday/blob/main/week102_intermediate_snowpark_pandas_api/week102.ipynb

を参考というか、そのまま実行したという形になってます。
sakatokuさんありがとう><

まとめ

自分にとっては、Pythonでの、DataFrameの扱いがまだまだわからない
できる限りSQLですまそう
ストアドプロシージャも、Snowflake Scripting(Lang:SQL)を駆使してやるって方向に行くので、まだまだなれないです><

Frosty Fridayのチャレンジで、有識者の方のやり方をなぞって、まねて、学んでいければな〜とおもっています。

Frosty Friday Live Challenge

tomoさんと二人のメインMCでやってるYoutubeはこちら
こちらは、Week1から解説しているのでぜひ御覧ください!
コメントとか高評価もらえるととても励みになります♪

https://www.youtube.com/playlist?list=PLVj4iIZgzTAq2FzaBBgqFOtZaJTcoG3JR

ちゅらデータ株式会社

Discussion