【第6回】pythonデータ分析100本ノックをやってみた (ノック26-30)
Python実戦データ分析100本ノックを、データサイエンス初心者の私と一緒にやっていきませんか?
今回は第6回、ノック26〜ノック30までをやっていきたいと思います。
「Python実戦データ分析100本ノック」は、pandas の使い方やデータサイエンスを実戦的に学べる書籍なのでぜひ手に取ってみてください。
↓Python実践データ分析100本ノック
レビューでも実用的と高評価ですね。
リンク
今回の目的は、スポーツジムの顧客履歴などを元に顧客の定着を
データ分析する事です。
曜日による利用履歴の違いを確認する為、
.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 の値を入れるという意味です。
今までにやってきた方法で、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()
次は会員期間の列を追加して、会員期間をいれてみましょう。
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()
まず、会員の月別利用回数の各種統計量を確認しましょう。
月別の平均の平均、平均の最大などややこしいですが、しっかり理解してみましょう。
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”])
もう一息です。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()
customer_join.to_csv(“customer_join.csv”, index=False)
お疲れ様でした。これで3章は終了です。次回は4章に進んでいきたいと思います。
リンク
この記事を書いた人
元薬局薬剤師。今は一般会社で働き、副業ライター(月5-6桁)しつつ自由に暮らす30代男性。英語学習(TOEIC920点)やライティング、マーケティング、メンタル術など、社会で必要とされつつ、個人で稼げるために必要なスキルを磨いて、その様子を発信しています。
コメント