コーディングの環境はminiconda3でインストールしたSpyderを使ってます。
今回は第4章「どの属性の顧客が離脱しているのか?」(クロス集計)をPythonでコーディングします。
# -*- coding: utf-8 -*- import os import pandas as pd import numpy as np import matplotlib.pyplot as plt """ ファイル読込 """ current_dir = os.getcwd() data_dir = "data" dau_file = "section4-dau.csv" userinfo_file = "section4-user_info.csv" # DAU dau = pd.read_csv(os.path.join(current_dir, data_dir, dau_file)) print(dau.head()) # User Info userinfo = pd.read_csv(os.path.join(current_dir, data_dir, userinfo_file)) print(userinfo.head()) """ ファイルを結合 : merge """ dau_userinfo = pd.merge(dau, userinfo, how="left", on=["user_id", "app_name"]) print(dau_userinfo.head()) """ セグメント分析 : 性別でクロス集計 """ dau_userinfo["log_month"] = dau_userinfo.log_date.str[0:7] cross_gender = pd.crosstab(dau_userinfo.log_month, dau_userinfo.gender) print(cross_gender) """ セグメント分析 : 年代でクロス集計 """ cross_generation = pd.crosstab(dau_userinfo.log_month, dau_userinfo.generation) print(cross_generation) """ セグメント分析 : 性別 x 年代で集計 """ pivot_gender_generation = pd.pivot_table(dau_userinfo, values="user_id", index=["log_month"], columns=["gender", "generation"], aggfunc=np.count_nonzero) print(pivot_gender_generation) """ セグメント分析 : デバイスのクロス集計 """ cross_device = pd.crosstab(dau_userinfo.log_month, dau_userinfo.device_type) print(cross_device) """ セグメント分析の結果を可視化する """ # 日付、デバイス別にユーザー数を算出する dau_userinfo_device_summary = dau_userinfo.groupby( by=["log_date", "device_type"], as_index=False ).user_id.count() dau_userinfo_device_summary.columns = ["log_date", "device_type", "dau"] # log_dateを日付型に変換する dau_userinfo_device_summary.log_date = pd.to_datetime(dau_userinfo_device_summary.log_date) print(dau_userinfo_device_summary) # 時系列のトレンドグラフを描画する xy_android = dau_userinfo_device_summary[ dau_userinfo_device_summary.device_type =="Android" ][["log_date", "dau"]] xy_ios = dau_userinfo_device_summary[ dau_userinfo_device_summary.device_type =="iOS" ][["log_date", "dau"]] plt.plot( xy_android.log_date, xy_android.dau, linestyle="--", marker="o", markersize=10, color="pink", label="Android" ) plt.plot( xy_ios.log_date, xy_ios.dau, linestyle="-", marker="^", markersize=10, color="skyblue", label="iOS" ) plt.axis(facecolor="black") plt.ylim(ymin=0) plt.xlabel("log date") plt.ylabel("dau") plt.subplots_adjust(right=0.86) plt.legend(title="device type", loc="right", bbox_to_anchor=(1.32,.5)) plt.show()
セグメント分析:時系列
0 件のコメント:
コメントを投稿