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