【第5回】pythonデータ分析100本ノックをやってみた (ノック21-25)
Python実戦データ分析100本ノックを、データサイエンス初心者の私と一緒にやっていきませんか?
今回は第5回、ノック21〜ノック25までをやっていきたいと思います。
「Python実戦データ分析100本ノック」は、pandas の使い方やデータサイエンスを実戦的に学べる書籍なので
ぜひ手に取ってみてください。
↓Python実践データ分析100本ノック
レビューでも実用的と高評価ですね。
リンク
今回の目的は、スポーツジムの顧客履歴などを元に顧客の定着を
データ分析する事です。
今までの方法で、
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()
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()
ここからは、何を解析するかを決める為、
会員区分、男女数、辞めたかどうかなどの基礎データを集積します。
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))
まずは、最新月の顧客データを確認しましょう。
集計条件は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”]
まず、顧客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()
ここまでで、顧客ごとの月内利用回数をまとめる事ができました。
次は定期的にジムを利用している場合のフラグ(目印)をつけていきましょう。
リンク
この記事を書いた人
元薬局薬剤師。今は一般会社で働き、副業ライター(月5-6桁)しつつ自由に暮らす30代男性。英語学習(TOEIC920点)やライティング、マーケティング、メンタル術など、社会で必要とされつつ、個人で稼げるために必要なスキルを磨いて、その様子を発信しています。
詳しい自己紹介は(https://iroirotantan.com/ryoutaro/)で
コメント