コーディングの環境は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 件のコメント:
コメントを投稿