【第5回】pythonデータ分析100本ノックをやってみた (ノック21-25)

Python 機械学習

Python実戦データ分析100本ノックを、データサイエンス初心者の私と一緒にやっていきませんか?

今回は第5回、ノック21〜ノック25までをやっていきたいと思います。
「Python実戦データ分析100本ノック」は、pandas の使い方やデータサイエンスを実戦的に学べる書籍なので
ぜひ手に取ってみてください。

Python実践データ分析100本ノック レビューでも実用的と高評価ですね。

今回の目的は、スポーツジムの顧客履歴などを元に顧客の定着を

データ分析する事です。

ノック21:データを読み込んで把握しよう

今までの方法で、

1.ジムの履歴データ

2.会員データ

3.会員区分データ

4.キャンペーン区分データ

を読み込んでみましょう

import pandas as pd
uselog = pd.read_csv(‘use_log.csv’)

 

print(len(uselog))

 

uselog.head()

 

customer = pd.read_csv(‘customer_master.csv’)

 

print(len(customer))

 

customer.head()

class_master = pd.read_csv(‘class_master.csv’)

 

print(len(class_master))

 

class_master.head()

campaign_master = pd.read_csv(‘campaign_master.csv’)

 

print(len(campaign_master))

 

campaign_master.head()

ノック22:顧客データを整形しよう

customer と class_master を [class] 列をキーとして結合して、

customer_join というデータを作ります。その後、campaign_master も結合します。

customer_join = pd.merge(customer, class_master, on=”class”, how=”left”)

 

customer_join = pd.merge(customer_join, campaign_master, on=”campaign_id”, how=”left”)

 

customer_join.head()

欠損値を確認しましょう。

end_date 以外は欠損値がない事がわかります。

customer_join.isnull().sum()

ノック23:顧客データの基礎集計をしよう

ここからは、何を解析するかを決める為、

会員区分、男女数、辞めたかどうかなどの基礎データを集積します。

customer_join.groupby(“class_name”).count()[“customer_id”]

 

 

customer_join.groupby(“campaign_name”).count()[“customer_id”]

 

 

customer_join.groupby(“gender”).count()[“customer_id”]

 

 

customer_join.groupby(“is_deleted”).count()[“customer_id”]

20180401 より後に入会した人を集計しましょう。

customer_join[“start_date”] = pd.to_datetime(customer_join[“start_date”])

 

customer_start = customer_join.loc[customer_join[“start_date”]>pd.to_datetime(“20180401”)]

 

print(len(customer_start))

ノック24:最新顧客データの基礎集計をしよう

まずは、最新月の顧客データを確認しましょう。

集計条件は20190331 以降に辞めた、または(|)、退会日データが空欄(isna())

である事です。

customer_join[“end_date”] = pd.to_datetime(customer_join[“end_date”])

 

customer_newer = customer_join.loc[(customer_join[“end_date”]>=pd.to_datetime(“20190331”))|(customer_join[“end_date”].isna())]

 

 

print(len(customer_newer))

 

customer_newer[“end_date”].unique()

ノック23でやったように、最新月バージョンで

顧客データを集計しましょう。

customer_newer.groupby(“class_name”).count()[“customer_id”]

 

 

 

customer_newer.groupby(“campaign_name”).count()[“customer_id”]

 

 

 

customer_newer.groupby(“gender”).count()[“customer_id”]

ノック25:利用履歴データを集計しよう

まず、顧客ID と月別利用回数を並べて表示してみましょう。

uselog[“usedate”] = pd.to_datetime(uselog[“usedate”])

 

uselog[“年月”] = uselog[“usedate”].dt.strftime(“%Y%m”)

 

uselog_months = uselog.groupby([“年月”,”customer_id”],as_index=False).count()

 

uselog_months.rename(columns={“log_id”:”count”}, inplace=True)

 

del uselog_months[“usedate”]

 

uselog_months.head()

/div>

uselog_customer = uselog_months.groupby(“customer_id”).agg([“mean”, “median”, “max”, “min” ])[“count”]

 

uselog_customer = uselog_customer.reset_index(drop=False)

 

uselog_customer.head()

ここまでで、顧客ごとの月内利用回数をまとめる事ができました。
次は定期的にジムを利用している場合のフラグ(目印)をつけていきましょう。