In [1]:
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
!ls ../_dataset/clickstream/
In [3]:
df = pd.read_csv(
"../_dataset/clickstream/Data2_Clickstreams.tab",
delimiter="\t",
encoding="ms949",
)
In [4]:
df.head()
Out[4]:
In [5]:
profile_df = pd.read_excel("../_dataset/clickstream/Data1_Profiles.xlsx")
profile_df.head()
Out[5]:
In [6]:
merged_df = pd.merge(
df,
profile_df,
on="CUS_ID",
)
In [7]:
merged_df.head()
Out[7]:
In [8]:
cus_df = merged_df.groupby("CUS_ID").get_group(1)
# cus_df.sort_values("TIME_ID")
In [9]:
merged_df.groupby("CUS_ID").agg(
{
"ST_TIME": {"체류시간": "sum"},
"SITE_CNT": {"페이지뷰": "sum"},
"SITE_NM": {"방문한 사이트 수": lambda x: np.unique(x).size}, # 접속한 서로 다른 사이트 수
"BACT_NM": {"커버리지": lambda x: x.unique().size / 22},
"TIME_ID": {"총 접속 일수": lambda x: x.apply(lambda y: str(y)[:8]).unique().size}
}
)
Out[9]:
In [10]:
# 성별에 따른 카테고리 접속 비중
merged_df.groupby(["GENDER", "BACT_NM"]).size().unstack()
Out[10]:
In [11]:
# 일단은 하나의 그룹에 대해서 연산을 수행하자
male_group = merged_df.groupby("GENDER").get_group("남자")
male_group.BACT_NM.value_counts().sort_values(ascending=False)[:3]
Out[11]:
In [12]:
# 각 그룹별 방문 횟수가 많은 사이트 카테고리 Top 5개
merged_df\
.groupby("GENDER")\
.apply(
lambda x: x.BACT_NM.value_counts().sort_values(ascending=False)[:5]
)
Out[12]:
In [13]:
merged_df.BACT_NM.unique().size
Out[13]: