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

Python 機械学習

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

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

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

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

データ分析する事です。

ノック26:利用履歴データから定期利用フラグを作成しよう

曜日による利用履歴の違いを確認する為、

.dt.weekday を使って月曜日0~日曜日6まで変換します。

log_id を count という名前に変えて、表示します。

uselog["weekday"] = uselog["usedate"].dt.weekday
uselog_weekday = uselog.groupby(["customer_id","年月","weekday"], as_index=False).count()[["customer_id","年月", "weekday","log_id"]]
uselog_weekday.rename(columns={"log_id":"count"}, inplace=True)
uselog_weekday.head()

データを見ると、weekday=5 つまり、土曜日に集中的にきている事がわかります

uselog_weekday = uselog_weekday.groupby(“customer_id”,as_index=False).max()[[“customer_id”, “count”]]

 

uselog_weekday[“routine_flg”] = 0

 

uselog_weekday[“routine_flg”] = uselog_weekday[“routine_flg”].where(uselog_weekday[“count”]<4, 1)

 

uselog_weekday.head()

.where(uselog_weekday[“count”]<4, 1) というのは、

uselog_weekday[“count”]<4 であればそのまま、それ以外は1 の値を入れるという意味です。

ノック27:顧客データと利用履歴データを結合しよう

今までにやってきた方法で、customer_id をキーとして、顧客データと利用履歴データをマージしましょう。

customer_join = pd.merge(customer_join, uselog_customer, on=”customer_id”, how=”left”)

 

customer_join = pd.merge(customer_join, uselog_weekday[[“customer_id”, “routine_flg”]], on=”customer_id”, how=”left”)

 

customer_join.head()

最後に、欠損値の数を確認しましょう。

customer_join.isnull().sum()

ノック28:会員期間を計算しよう

次は会員期間の列を追加して、会員期間をいれてみましょう。

from dateutil.relativedelta import relativedelta

 

customer_join[“calc_date”] = customer_join[“end_date”]

 

customer_join[“calc_date”] = customer_join[“calc_date”].fillna(pd.to_datetime(“20190430”))

 

customer_join[“membership_period”] = 0

 

for i in range(len(customer_join)):

 

delta = relativedelta(customer_join[“calc_date”].iloc[i], customer_join[“start_date”].iloc[i])

 

customer_join[“membership_period”].iloc[i] = delta.years*12 + delta.months

 

customer_join.head()

ノック29:顧客行動の各種統計量を把握しよう

まず、会員の月別利用回数の各種統計量を確認しましょう。

月別の平均の平均、平均の最大などややこしいですが、しっかり理解してみましょう。

customer_join[[“mean”, “median”, “max”, “min”]].describe()

次は、routine_flg をID 毎にカウントします。

その結果、週に4回以上来店しているフラグ会員と、その他を分けられます。

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

最後に、会員期間を横軸、会員数を縦軸にしてヒストグラムを作成してみましょう。

import matplotlib.pyplot as plt

 

%matplotlib inline

 

plt.hist(customer_join[“membership_period”])

ノック30:退会ユーザーと継続ユーザーの違いを把握しよう

もう一息です。is_deleted=1 の退会会員(1行目)と is_deleted=0 の継続会員(3行目) の特徴を見てみましょう。

customer_end = customer_join.loc[customer_join[“is_deleted”]==1]customer_end.describe()

customer_stay = customer_join.loc[customer_join[“is_deleted”]==0]customer_stay.describe()

最後にcsv ファイルに落としてみましょう。

customer_join.to_csv(“customer_join.csv”, index=False)

お疲れ様でした。これで3章は終了です。次回は4章に進んでいきたいと思います。