4 minutes
データサイエンス100本ノックをPythonでやってみた [91-100]
データサイエンス 100 本ノックとは
The-Japan-DataScientist-Society/100knocks-preprocess: データサイエンス 100 本ノック(構造化データ加工編)
Google Colab で データサイエンス 100 本ノックをするにあたって
以下の ipynb ファイルを使用させていただきました。
実行ファイル
データサイエンス 100 本ノック by tomowarkar
091
P-091: 顧客データフレーム(df_customer)の各顧客に対し、売上実績のある顧客数と売上実績のない顧客数が 1:1 となるようにアンダーサンプリングで抽出せよ。
group = pd.merge(
df_customer,
df_receipt.groupby('customer_id').agg({"amount":"sum"}).reset_index(),
how = "left",
on ="customer_id"
).groupby(df_customer_u.amount > 0)
max_num = min(len(group.groups.get(True)), len(group.groups.get(False)))
num = 10000
flag_true_idx = np.random.choice(group.groups.get(True).values, min(max_num, num), replace=False)
flag_false_idx = np.random.choice(group.groups.get(False).values, min(max_num, num), replace=False)
flag_true_df = df_customer.loc[flag_true_idx]
flag_false_df = df_customer.loc[flag_false_idx]
092
P-092: 顧客データフレーム(df_customer)では、性別に関する情報が非正規化の状態で保持されている。これを第三正規化せよ。
df_gender = df_customer[['gender_cd', 'gender']].drop_duplicates()
df_customer_v2 = df_customer.drop(columns="gender")
093
P-093: 商品データフレーム(df_product)では各カテゴリのコード値だけを保有し、カテゴリ名は保有していない。カテゴリデータフレーム(df_category)と組み合わせて非正規化し、カテゴリ名を保有した新たな商品データフレームを作成せよ。
df_product_v2 = pd.merge(
df_product,
df_category[["category_small_cd", "category_major_name", "category_medium_name", "category_small_name"]],
how="left",
on="category_small_cd"
)
094
P-094: 先に作成したカテゴリ名付き商品データを以下の仕様でファイル出力せよ。なお、出力先のパスは data 配下とする。
- ファイル形式は CSV(カンマ区切り)
- ヘッダ有り
- 文字コードは UTF-8
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.csv", sep=",", header=True, encoding="UTF-8", index=False)
095
P-095: 先に作成したカテゴリ名付き商品データを以下の仕様でファイル出力せよ。なお、出力先のパスは data 配下とする。
- ファイル形式は CSV(カンマ区切り)
- ヘッダ有り
- 文字コードは CP932
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.csv", sep=",", header=True, encoding="CP932", index=False)
096
P-096: 先に作成したカテゴリ名付き商品データを以下の仕様でファイル出力せよ。なお、出力先のパスは data 配下とする。
- ファイル形式は CSV(カンマ区切り)
- ヘッダ無し
- 文字コードは UTF-8
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.csv", sep=",", header=False, encoding="UTF-8", index=False)
097
P-097: 先に作成した以下形式のファイルを読み込み、データフレームを作成せよ。また、先頭 10 件を表示させ、正しくとりまれていることを確認せよ。
- ファイル形式は CSV(カンマ区切り)
- ヘッダ有り
- 文字コードは UTF-8
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.csv", sep=",", header=True, encoding="UTF-8", index=False)
pd.read_csv("data/product_v2.csv").head(10)
product_cd category_major_cd ... category_medium_name category_small_name
0 P040101001 4 ... 御飯類 弁当類
1 P040101002 4 ... 御飯類 弁当類
2 P040101003 4 ... 御飯類 弁当類
3 P040101004 4 ... 御飯類 弁当類
4 P040101005 4 ... 御飯類 弁当類
5 P040101006 4 ... 御飯類 弁当類
6 P040101007 4 ... 御飯類 弁当類
7 P040101008 4 ... 御飯類 弁当類
8 P040101009 4 ... 御飯類 弁当類
9 P040101010 4 ... 御飯類 弁当類
[10 rows x 9 columns]
098
P-098: 先に作成した以下形式のファイルを読み込み、データフレームを作成せよ。また、先頭 10 件を表示させ、正しくとりまれていることを確認せよ。
- ファイル形式は CSV(カンマ区切り)
- ヘッダ無し
- 文字コードは UTF-8
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.csv", sep=",", header=False, encoding="UTF-8", index=False)
pd.read_csv("data/product_v2.csv", header=None).head(10)
0 1 2 3 4 5 6 7 8
0 P040101001 4 401 40101 198.0 149.0 惣菜 御飯類 弁当類
1 P040101002 4 401 40101 218.0 164.0 惣菜 御飯類 弁当類
2 P040101003 4 401 40101 230.0 173.0 惣菜 御飯類 弁当類
3 P040101004 4 401 40101 248.0 186.0 惣菜 御飯類 弁当類
4 P040101005 4 401 40101 268.0 201.0 惣菜 御飯類 弁当類
5 P040101006 4 401 40101 298.0 224.0 惣菜 御飯類 弁当類
6 P040101007 4 401 40101 338.0 254.0 惣菜 御飯類 弁当類
7 P040101008 4 401 40101 420.0 315.0 惣菜 御飯類 弁当類
8 P040101009 4 401 40101 498.0 374.0 惣菜 御飯類 弁当類
9 P040101010 4 401 40101 580.0 435.0 惣菜 御飯類 弁当類
099
P-099: 先に作成したカテゴリ名付き商品データを以下の仕様でファイル出力せよ。なお、出力先のパスは data 配下とする。
- ファイル形式は TSV(タブ区切り)
- ヘッダ有り
- 文字コードは UTF-8
os.makedirs("data", exist_ok=True)
df_product_v2.to_csv("data/product_v2.tsv", sep="\t", header=True, encoding="UTF-8", index=False)
100
P-100: 先に作成した以下形式のファイルを読み込み、データフレームを作成せよ。また、先頭 10 件を表示させ、正しくとりまれていることを確認せよ。
- ファイル形式は TSV(タブ区切り)
- ヘッダ有り
- 文字コードは UTF-8
pd.read_csv("data/product_v2.tsv", sep="\t").head(10)
product_cd category_major_cd ... category_medium_name category_small_name
0 P040101001 4 ... 御飯類 弁当類
1 P040101002 4 ... 御飯類 弁当類
2 P040101003 4 ... 御飯類 弁当類
3 P040101004 4 ... 御飯類 弁当類
4 P040101005 4 ... 御飯類 弁当類
5 P040101006 4 ... 御飯類 弁当類
6 P040101007 4 ... 御飯類 弁当類
7 P040101008 4 ... 御飯類 弁当類
8 P040101009 4 ... 御飯類 弁当類
9 P040101010 4 ... 御飯類 弁当類
[10 rows x 9 columns]