[Project] GA4 데이터 분석 전처리(drop, fillna, astype, DAU/WAU/MAU 구하기)

김수경·2024년 2월 7일

팀프로젝트

목록 보기
3/5

팀원들과 논의 후 필요없는 컬럼 재정리

# new_date는 new_visitstarttime과 같은 값이라 제외
df3 = df3.drop(['keyword', 'newVisits', 'new_date'], axis =1)

drop을 쓸때도 axis=1을 해준다.

null값이 있는게 눈에 띄는데
pageview는 조회수, bounce는 이탈, transactionrevenue는 거래금액으로 분석의 중요한 지표라 판단해서 결측치를 처리해 사용하기로 했다.
결측치는 평균값을 대체하거나 0을 넣거나 하는 등 적절하게 채워주면 된다.
세 컬럼 모두 기록이 없는 것이 결측치라 판단, 0을 넣어주었다.

#transactionrevenue, bounces 결측치 0으로 채우기
df3['transactionRevenue'] = df3['transactionRevenue'].fillna(0)
df3['bounces'] = df3['bounces'].fillna(0)
df3['pageviews'] = df3['pageviews'].fillna(0)

fillna(0) 으로 결측치 처리하기


DAU/WAU/MAU

전처리가 모두 완료된건 아닌 것 같지만, 필요한 것은 그때그때 분석때 하기로하고 먼저 DAU/WAU/MAU 구하는 것을 시도해보기로!

  • 유저는 'fullVisitorID'
  • 일자는 new_visitStartTime

1. 시각까지 포함된 컬럼값 수정(dt.date)

timestamp_day = df3['new_visitStartTime'].dt.date

DAU 구하기(groupby 사용)

dau = df3.groupby(timestamp_day)['fullVisitorId'].nunique()

groupby 메소드로 날짜별 고유한 유저수를 구한다.

WAU/MAU 구하기(resample 사용)
WAU와 MAU는 단순히 일자를 보는게 아니라 일주일별, 달별로 기간을 쪼개고 유저수를 따져주어야 한다.
resample 메소드를 사용해봄

#wau 구하기
start_date = pd.Timestamp('2016-08-01')
end_date = pd.Timestamp('2017-07-31')
filtered_data = df[(df['new_visitStartTime'] >= start_date) & (df['new_visitStartTime'] <= end_date)]

wau = filtered_data.resample('W-Mon', on='new_visitStartTime')['fullVisitorId'].nunique()
wau

wau에서 filtered_data 대신 df3데이터를 넣으면 로딩이 한참걸린다.
데이터 기준을 잡고 필터링을 하고 'W-Mon'을 기준으로 구한다.
'M'을 기준으로 구하면 MAU
'D'로 잡으면 DAU겠지?

#mau 구하기
start_date = pd.Timestamp('2016-08-01')
end_date = pd.Timestamp('2017-07-31')
filtered_data = df[(df['new_visitStartTime'] >= start_date) & (df['new_visitStartTime'] <= end_date)]

# 월별로 사용자를 그룹화하고 MAU 계산
mau = filtered_data.resample('M', on='new_visitStartTime')['fullVisitorId'].nunique()
mau

DAU/WAU/MAU 그래프 합치기

#dau, mau 그래프 합치기
plt.figure(figsize=(8,5))
plt.plot(dau, label = 'DAU', color = 'blue')
plt.plot(wau, label = 'WAU', color = 'green')
plt.plot(mau, label = 'MAU', color = 'red')
plt.xlabel('Date')
plt.ylabel('users')
plt.legend()
plt.show()

내가 혼자 해본거라 틀릴수도 있음!

👩🏻‍💻오늘 써먹어본 것!

  • .fillna()
  • drop.df['column'], axis = 1
  • filterdata.resample('M', on='date')['use_id'].nunique()
  • df.groupby('date')['user_id'].nunique()
profile
잘 하고 있는겨?

0개의 댓글