データサイエンス 100 本ノック(構造化データ加工編)with Polars
はじめに
- 原本ではPandasを利用していますが、Polarsを利用して解いてみました
- データはPostgreSQLからCSVを出力して利用しています
import math
from sklearn.model_selection import train_test_split
from sklearn.model_selection import TimeSeriesSplit
from imblearn.under_sampling import RandomUnderSampler
import polars as pl
df_customer = pl.read_csv("../data/customer.csv")
df_category = pl.read_csv("../data/category.csv")
df_product = pl.read_csv("../data/product.csv")
df_receipt = pl.read_csv("../data/receipt.csv")
df_store = pl.read_csv("../data/store.csv")
df_geocode = pl.read_csv("../data/geocode.csv")
演習問題
P-001: レシート明細データ(df_receipt)から全項目の先頭 10 件を表示し、どのようなデータを保有しているか目視で確認せよ
df_receipt.head(10)
P-002: レシート明細データ(df_receipt)から売上年月日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10 件表示せよ
df_receipt.select(
pl.col("sales_ymd"), pl.col("customer_id"), pl.col("product_cd"), pl.col("amount")
).head(10)
P-003: レシート明細データ(df_receipt)から売上年月日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、10 件表示せよ。ただし、sales_ymd を sales_date に項目名を変更して抽出すること
df_receipt.select(
pl.col("sales_ymd").alias("sales_date"),
pl.col("customer_id"),
pl.col("product_cd"),
pl.col("amount"),
).head(10)
P-004: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の条件を満たすデータを抽出せよ
- 顧客 ID(customer_id)が"CS018205000001"
df_receipt.select(
pl.col("sales_ymd"), pl.col("customer_id"), pl.col("product_cd"), pl.col("amount")
).filter(pl.col("customer_id") == "CS018205000001")
P-005: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ
- 顧客 ID(customer_id)が"CS018205000001"
- 売上金額(amount)が 1,000 以上
df_receipt.select(
pl.col("sales_ymd"), pl.col("customer_id"), pl.col("product_cd"), pl.col("amount")
).filter((pl.col("customer_id") == "CS018205000001") & (pl.col("amount") >= 1000))
P-006: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上数量(quantity)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ
- 顧客 ID(customer_id)が"CS018205000001"
- 売上金額(amount )が 1,000 以上または売上数量(quantity)が 5 以上
df_receipt.select(
pl.col("sales_ymd"),
pl.col("customer_id"),
pl.col("product_cd"),
pl.col("amount"),
pl.col("quantity"),
).filter(
(pl.col("customer_id") == "CS018205000001")
& ((pl.col("amount") >= 1000) | (pl.col("quantity") >= 5))
)
P-007: レシート明細データ(df_receipt)から売上日(sales_ymd)、顧客 ID(customer_id)、商品コード(product_cd)、売上金額(amount)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ
- 顧客 ID(customer_id)が"CS018205000001"
- 売上金額(amount)が 1,000 以上 2,000 以下
df_receipt.select(
pl.col("sales_ymd"), pl.col("customer_id"), pl.col("product_cd"), pl.col("amount")
).filter(
(pl.col("customer_id") == "CS018205000001")
& (pl.col("amount") >= 1000)
& (pl.col("amount") <= 2000)
)