#13 groupbyを使ったデータのグループ化

>100 Views

September 07, 23

スライド概要

データサイエンス体験動画「データサイエンス チュートリアル 猫のタロー編」の第13回目は、Section 11「groupbyを使ったデータのグループ化」です。

特定の列の値ごとにグループを作成する「groupby()」について解説します。

解説するプログラムは、次の2つです。

 ㉖ データ名.groupby(“列名”).count()
㉗ データ名.groupby(“列名1”)[“列名2”].max()

「groupby()」で作ったグループは、pandasの特殊なオブジェクトになっているので中身を確認することができません。しかし、関数と組み合わせることによって、グループごとの計算が一気にできます。

ここでは、顧客ごとの購入期間を算出する例を説明しています。よく使う例ですので、しっかりと身に付けましょう!

■この動画のブログ

データサイエンス チュートリアル
https://tutorial4datascience.blogspot.com/

profile-image

すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけ、ブルシットジョブをこの世からなくしていきましょう!

関連スライド

各ページのテキスト
1.

1 1st STEP ビッグデータの 読み込みとデータの確認 Section 11 groupbyを使ったデータのグループ化 ㉖ データ名.groupby(“列名”).count() ㉗ データ名.groupby(“列名1”)[“列名2”].max()

2.

2 Section 11 groupbyを使ったデータのグループ化 1.列の値ごとにグループを作成する「groupby()」 「groupby()」は特定の列の値ごとにグループを作成することができます。 ただし、「groupby()」で作ったグループは、pandasの特殊なオブジェクトになっているので printして中身を確認することができません。 例えば、ある列に出てくる要素がいくつあるかを調べる時に、下記のような使い方をよくします。 ㉖ データ名.groupby(“列名”).count()

3.

3 Section 11 groupbyを使ったデータのグループ化 2.「groupby ()」で作ったグループの最大値、最小値を求める グループごとの計算をするには、「groupby ()」を使うと一気にできます。 「列名1」でグループ分け(顧客番号、クラス名、性別等)をして、そのグループの「列2」に あるデータ(購入金額、テストの点数、体重等)の最大値、最小値、平均等を算出する 場合などです。 ㉗は、グループごとの計算、すなわち、グループごとの最大値を算出するプログラムを記載し ています。 ㉗ データ名.groupby(“列名1”)[“列名2”].max() 「.max()」の代わりに、「.min () 」、「.mean () 」、「.sum () 」、「.describe () 」も使 用できます。

4.

4 Section 11 groupbyを使ったデータのグループ化 ㉖ データ名.groupby(“列名”).count() まずは、㉖を使って、「id_pos4」の国ごとに各列の要素が何個あるか調べてみましょう。 国ごとに、すべての列の要素数が同じ数であることが確認できます。これは、 「id_pos4」には 欠損値がありませんから、当然の結果となります。

5.

5 Section 11 groupbyを使ったデータのグループ化 ㉗ データ名.groupby(“列名1”)[“列名2”].max() 次に、㉗を使って、顧客、すなわち「CustomerID」ごとに請求日時(「InvoiceDate」) が一番新しいものを調べてみましょう。一番新しいものは、最大値となりますから、最後は 「.max()」を使います。

6.

6 Section 11 groupbyを使ったデータのグループ化 ㉗ データ名.groupby(“列名1”)[“列名2”].max() 同様に、顧客ごとに請求日時が一番古いものを調べてみましょう。一番古いものは、最小値 となりますから、最後は「.min()」を使います。

7.

7 Section 11 groupbyを使ったデータのグループ化 ㉗ データ名.groupby(“列名1”)[“列名2”].max() 顧客ごとの請求日時が一番新しいものから一番古いものを差し引くと、顧客ごとの購入期間 を求めることができます。購入期間が長い顧客は、優良顧客と言えますね!

8.

8 Section 11 groupbyを使ったデータのグループ化 ㉗ データ名.groupby(“列名1”)[“列名2”].max() ちなみに、「.describe()」を使って購入期間の最大値・最小値を調べると、最大値は373 日間、最小値は0日間になります。 最小値は0日間というのは、少し変ですね。返品が疑われます。