다시 시작된 팀프로젝트🫠
의견 조율부터 결과내기까지 여간 쉽지 않은데, 두번 경험했으니 더 잘해보자..!
이번 프로젝트는 무려 심화프로젝트
기초를 넘어서 SQL, Python을 사용해 전처리, 예측모델, 시각화까지 완성해보는 시간이 될 거다. 아자아자!
선정주제 : GA4 데이터로 프로덕트 분석
- 개요
- 유저 분석에 널리 사용되는 GA4 데이터를 직접 다뤄봅니다
- 서비스 사용성 분석에 일반적으로 사용되는 지표를 직접 구해봅니다
팀 프로젝트 시작과 함께 고르게 된 GA4 데이터- 배경
- 로그 데이터 Log data는 서비스를 이용하는 유저의 족적을 파악할 수 있는 데이터입니다.
- 굉장히 양이 많고, 전처리가 조금 어렵지만 서비스 분석을 하기 위해서는 필수적인 여정이기에 이를 체험보고자 합니다.
- 주제
- 사용자 로그행동 데이터 활용 웹 서비스 분석
- 분석 해볼만한 것
- DAU/WAU/MAU를 line chart로 시각화
- 유저별 평균접속시간의 분포를 ECDF로 시각화
- 방문 주차에 따른 코호트를 생성하고, 코호트 별로 weekly 리텐션을 구하고 이를 heatmap으로 시각화
- 요일/시간대별 사용자 수를 구하고 이를 heatmap으로 시각화
- (Challenging) Carrying Capacity
- 참고 영상(토스)- (Challenging) 국가별 DAU 평균을 Folium으로 시각화하기
- (Challenging) 캠페인 효과 분석: 캠페인으로 들어온 사람은 다른 사람과 다른 특징을 가지고 있는지 분석해보기
- 데이터셋 : https://www.kaggle.com/competitions/ga-customer-revenue-prediction/overview
챌린징 과제는 두고보고, 기본분석부터 차근차근 시작해보기!
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import json #json형태의 컬럼값 펼치기
from pandas import json_normalize
df = pd.read_csv("/Users/sookyeong/Desktop/train 2.csv")

device외 여러 컬럼이 json 형식의 데이터를 갖는다.
✅ json형식을 dataframe형식으로 변경이 필요

전체 데이이터로 보면 결측치 없이 깔-끔
공부하기엔 좋지 않은 캐글데이터. 현업에서는 데이터가 생각보다 엉망이라 한다.
✅ date 컬럼은 datetime 형식으로 변경 필요
그리고 컬럼설명 중,
visitStartTime - The timestamp (expressed as POSIX time).
❓ POSIX 시간
POSIX 시간이란 1970년 1월 1일 00:00:00 UTC부터 현재까지의 초를 나타내는 방식입니다. 따라서 주어진 숫자 1472830385는 POSIX 시간에서 1472830385초 후의 시간을 의미합니다.
라고 한다. gpt한테 물어봄
✅ visitStartTime을 datetime 형식으로 변경 필요
device_df = json_normalize(df['device'].apply(json.loads))
geonetwork_df = json_normalize(df['geoNetwork'].apply(json.loads))
totals_df = json_normalize(df['totals'].apply(json.loads))
trafficsource_df = json_normalize(df['trafficSource'].apply(json.loads))

device컬럼을 datafrme으로 다시 보면, 결측치는 없지만 값이 없는것과 마찬가지인 컬럼들이 많다. 분석 효율을 위해 이런 데이터는 제외한다.

이런식으로.
geonetwork, trafficsource도 마찬가지(totals는 유저행동과 관련있어 보여서 다 사용하기로)
# date컬럼 날짜 형식으로 변경
df['new_date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df.head(3)

# POSIX 시간을 datetime으로 변환하여 새로운 컬럼에 저장
df['new_visitStartTime'] = pd.to_datetime(df['visitStartTime'], unit='s') # unit='s'는 초 단위를 의미합니다.
df.head(3)

#필요한 컬럼만 남기기
# df
df2 = pd.DataFrame(df[['channelGrouping', 'new_date', 'fullVisitorId', 'sessionId', 'visitId', 'visitNumber', 'new_visitStartTime']])
#device 사용컬럼만 남기기
device_df2 = pd.DataFrame(device_df[['browser', 'deviceCategory']])
#geonetwork 사용컬럼만 남기기
geonetwork_df2 = pd.DataFrame(geonetwork_df[['continent', 'country']])
#traficsource 사용컬럼만 남기기, 나머지 컬럼은
trafficsource_df2 = pd.DataFrame(trafficsource_df[['campaign', 'source', 'medium', 'keyword']])
#데이터 하나로 합치기
df3 = pd.concat([df2, device_df2, geonetwork_df2, totals_df, trafficsource_df2], axis = 1)
df3

EDA가 다 끝난건 아니다.
시각화를 해보고 무엇을 분석해볼지 더 면밀하게 돌려볼 필요가 있다.
다음 스텝에서 이어가보자.