コーディングの環境はminiconda3でインストールしたSpyderを使ってます。
今回は第3章「なぜ売上は減少しているのか?」(ヒストグラム)をPythonでコーディングします。
# -*- coding: utf-8 -*- import os import pandas as pd import numpy as np import matplotlib.pyplot as plt """ ファイル読込 """ current_dir = os.getcwd() # DAU dau = pd.read_csv(os.path.join(current_dir, "data", "section3-dau.csv")) # DPU dpu = pd.read_csv(os.path.join(current_dir, "data", "section3-dpu.csv")) # INSTALL install = pd.read_csv(os.path.join(current_dir, "data", "section3-install.csv")) """ ファイルを結合(merge) """ dau_install = pd.merge(dau, install, how="left", on=["user_id", "app_name"]) dau_install_payment = pd.merge(dau_install, dpu, how="left", on=["log_date", "app_name", "user_id"]) #dau_install_payment.to_csv("merged_file.csv") """ 非課金ユーザの課金額をゼロにする """ dau_install_payment.payment[dau_install_payment.payment.isnull()] = 0.0 print(dau_install_payment.head()) """ 月次集計 """ # 月カラムを追加する dau_install_payment["log_month"] = dau_install_payment.log_date.str[0:7] dau_install_payment["install_month"] = dau_install_payment.install_date.str[0:7] # グループ化して集計する mau_payment = dau_install_payment.groupby( by=["log_month", "user_id", "install_month"], as_index=False )["payment"].sum() print(mau_payment.head()) """ 新規ユーザー/既存ユーザーでの集計 """ # 新規ユーザー/既存ユーザーの区分を追加する mau_payment["user_type"] = np.where(mau_payment["install_month"] == mau_payment["log_month"], "install", "existing") print(mau_payment.head()) # 集計 mau_payment_summary = mau_payment.groupby( by=["log_month", "user_type"], as_index=False )["payment"].sum() mau_payment_summary.columns = ["log_month", "user_type", "total_payment"] print(mau_payment_summary.head()) """ グラフ表示 """ #月別ユーザ数(新規/既存) : 棒グラフ x_ticks = mau_payment_summary.log_month[ ~mau_payment_summary.log_month.duplicated() ] x = np.array(range(x_ticks.size)) y_existing = mau_payment_summary[mau_payment_summary.user_type == "existing"].total_payment y_install = mau_payment_summary[mau_payment_summary.user_type == "install"].total_payment plt.bar(x, y_existing, color="pink", label="existing", align="center", linewidth=0, width=0.6) plt.bar(x, y_install, bottom=y_existing, color="skyblue", label="install", align="center", linewidth=0, width=0.6) plt.subplots_adjust(right=0.68) plt.xticks(x, x_ticks) plt.xlabel("log month") plt.ylabel("total payment") plt.legend(bbox_to_anchor=(1.42,1)) plt.show() #月別新規ユーザー課金額 : ヒストグラム hdata = mau_payment[(mau_payment.payment > 0) & (mau_payment.user_type == "install")] payment06 = hdata[hdata.log_month == "2013-06"].payment payment07 = hdata[hdata.log_month == "2013-07"].payment plt.hist(x=[payment06, payment07], color=["pink", "skyblue"], label=["2013-06", "2013-07"], linewidth=0) plt.xlabel("payment") plt.ylabel("count") plt.legend(title="log month") plt.show()
月別ユーザ数(新規/既存) : 棒グラフ
月別新規ユーザー課金額:ヒストグラム
0 件のコメント:
コメントを投稿