【Python初心者でも分かる】データサイエンティスト協会の100本ノック解説|データの結合

スポンサーリンク
Python
ゼロ知識の初心者がデータサイエンスを完全無料で学習する方法5選
データサイエンスの知識や技術、またはPythonについて学びたい。でも「大学に行くほど本気度がない」、「スクールに行くほどお金がない」、なんせ「時間がない」という方も多いはずです。というよりほとんどの方がそうだと思います(当然わたし...
初心者に人気のプログラミング言語Pythonは独学可能か?
Pythonは非常に人気のあるプログラミング言語で、まったくの初心者でも独学が可能と言われています。 Pythonはさまざまな目的に使える、汎用性のあるプログラミング言語です。 プログラミングは「独学が難しい」と言われていま...

データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。

今回は36~39本です。内容は主に、「データを結合する方法」について解説していきます。

Pythonの環境設定は以下の記事を参考にして下さい。

【2021年最新】M1 mac でanacondaをインストールする方法

【2021年最新】WindowsでAnacondaをインストールする方法

データを結合する方法

まずは、以下からダウンロードして下さい。

GitHubからデータをダウンロードする方法

P-036: レシート明細データフレーム(df_receipt)と店舗データフレーム(df_store)を内部結合し、レシート明細データフレームの全項目と店舗データフレームの店舗名(store_name)を10件表示させよ。

import pandas as pd
df_receipt = pd.read_csv("receipt.csv")  # データを読み込む(レシート明細データ)
df_store = pd.read_csv("store.csv")      # データを読み込む(店舗データ)

pd.merge(df_receipt,df_store[["store_cd","store_name"]],how="inner",on="store_cd").head(10)

出力:

これは、レシート明細データ(df_receipt)と店舗データ(df_store)を結合させています。

レシート明細データ(df_receipt)、店舗データ(df_store)ともに、”store_cd” という変数を持っています。その “store_cd” が一致するようにデータを結合しています。

もう少し、コードの意味を確認してみましょう。

P-037: 商品データフレーム(df_product)とカテゴリデータフレーム(df_category)を内部結合し、商品データフレームの全項目とカテゴリデータフレームの小区分名(category_small_name)を10件表示させよ。

df_product = pd.read_csv("product.csv")    # データを読み込む(商品データ)
df_category = pd.read_csv("category.csv")  # データを読み込む(カテゴリデータ)

pd.merge(df_product,
         df_category[["category_small_cd","category_small_name"]],
         how="inner",on="category_small_cd").head(10)

出力:

商品データフレーム(df_product)とカテゴリデータフレーム(df_category)を結合させています。

商品データフレーム(df_product)、カテゴリデータフレーム(df_category)ともに、”category_small_cd” という変数を持っています。その “category_small_cd” が一致するようにデータを結合しています。

もう少し、コードの意味を確認してみましょう。

P-038: 顧客データフレーム(df_customer)とレシート明細データフレーム(df_receipt)から、各顧客ごとの売上金額合計を求めよ。ただし、買い物の実績がない顧客については売上金額を0として表示させること。また、顧客は性別コード(gender_cd)が女性(1)であるものを対象とし、非会員(顧客IDが’Z’から始まるもの)は除外すること。なお、結果は10件だけ表示させれば良い。

amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_38 = df_customer.query('gender_cd == "1" and not customer_id.str.startswith("Z")', engine='python')
pd.merge(df_38['customer_id'], amount_sum, how='left', on='customer_id').fillna(0).head(10)

出力:

コードの1行目は、以前紹介したグループ分けを行っています。

コードの2行目は、以前紹介したデータを抽出を行っています。

コードの3行目は、今回紹介しているデータの結合を行っています。

もう少し詳しく解説してみます。

P-039: レシート明細データフレーム(df_receipt)から売上日数の多い顧客の上位20件と、売上金額合計の多い顧客の上位20件を抽出し、完全外部結合せよ。ただし、非会員(顧客IDが’Z’から始まるもの)は除外すること。

df_sum = df_receipt.groupby("customer_id").amount.sum().reset_index()
df_sum = df_sum.query("not customer_id.str.startswith('Z')",engine="python")
df_sum = df_sum.sort_values("amount",ascending=False).head(20)

df_cut = df_receipt[~df_receipt.duplicated(subset=["customer_id","sales_ymd"])]
df_cut = df_cut.query("not customer_id.str.startswith('Z')",engine="python")
df_cut = df_cut.groupby("customer_id").sales_ymd.count().reset_index()
df_cut = df_cut.sort_values("sales_ymd",ascending=False).head(20)

pd.merge(df_sum,df_cut,how="outer",on="customer_id")

出力:

出力結果は上図になります。

これは、「df_sum」と「df_cut」をそれぞれ作成し、お互いを結合しています。

 

データサイエンティスト協会の100本ノックを解説|ダウンロードから読み込みまで

データサイエンティスト協会の100本ノックを解説|データの抽出

データサイエンティスト協会の100本ノックを解説|変数の一部を使ってデータを抽出する

データサイエンティスト協会の100本ノックを解説|ソート(順序で整列)

データサイエンティスト協会の100本ノックを解説|グループ分け



コメント

タイトルとURLをコピーしました