データサイエンス 100 本ノックとは

The-Japan-DataScientist-Society/100knocks-preprocess: データサイエンス 100 本ノック(構造化データ加工編)

Google Colab で データサイエンス 100 本ノックをするにあたって

以下の ipynb ファイルを使用させていただきました。

noguhiro2002/100knocks-preprocess_ForColab-AzureNotebook: データサイエンス 100 本ノック(構造化データ加工編)For Azure_Notebook/Google_Colabo

実行ファイル

データサイエンス 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]