* 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction
1. 문제 배경
- 평균세션시간별 방문자수 비중을 파이 차트로 시각화 필요
└ 평균세션시간이 0인 비중이 94%, 나머지 시간은 각 비중이 현저히 낮아 특정 기준 이하 값은 합계하여 '기타' 항목 처리
- 막대그래프에서 X축 이름과 간격 별도 지정
2. 파이차트
- 평균세션시간이 0인 비중이 94%로, 나머지 시간대는 항목이 많고, 비중이 미비하여 합계 값으로 표기 필요
- 1) 전체 수치에서 백분율을 구하고, 2) 기준치에 따라 일부는 sum 적용하여 파이차트용 데이터프레임 생성
## 평균세션시간별 비중
# df_avg_session_time가 유저별 평균세션시간이 저장된 변수
# 평균세션시간이 0인 경우가 전체의 93.5%
each_session_time = df_avg_session_time.value_counts()
sum_session_time = df_avg_session_time.value_counts().sum()
pct_session_time = each_session_time / sum_session_time
df_pct_session_time = pct_session_time.reset_index()
df_pct_session_time.columns = ['avg_session_time', 'percentage']
df_pct_session_time
# 0.02% 이하는 모두 합쳐서 etc로 표기
threshold = 0.0002
# 기준치보다 적은 %는 sum처리
etc_values = df_pct_session_time[df_pct_session_time['percentage'] < threshold]
etc_total = etc_values['percentage'].sum()
# 기준치보다 큰 %만 새로운 데이터프레임으로 지정
df_pct_session = df_pct_session_time[df_pct_session_time['percentage'] >= threshold]
# 새로운 데이터 프레임에서 etc 값 새로운 행에 추가
# 파이썬은 0부터 시작하므로 len(df_pct_session)을 넣으면, 현재에서 1개 열 추가된 영역 지정
df_pct_session.loc[len(df_pct_session)] = ['etc', etc_total]
df_pct_session
# 파이 그래프 그리기
plt.figure(figsize=(5, 5))
plt.pie(df_pct_session['percentage'], labels=df_pct_session['avg_session_time'], autopct='%1.1f%%')
plt.title('Percentage of Avg session time')
plt.show()
- 디바이스별 매출액 합계 (강조 값 explode 추가)
# 디바이스별 매출액 비중(%)
device_psum_pct = (device_psum / device_psum.sum()).reset_index()
# 각 범주에 들어갈 라벨과 값, 색상, 강조할 값 지정
labels = ['desktop', 'mobile', 'tablet']
sizes = device_psum['totals.transactionRevenue']
colors = ['skyblue', 'lightblue', 'silver']
explode = (0.03, 0, 0) # 특정 부분 강조를 위한 설정
# 파이 차트 그리기
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=False, startangle=140)
plt.title('Device Aevenue Percentage')
3. 막대그래프
- 막대그래프의 x축의 간격과 이름은 xticks()와 range() 함수를 활용
# 디바이스별 개수, 구매수, 매출액
device_cnt = pd.DataFrame(df['device.deviceCategory'].value_counts())
device_pcont = pd.DataFrame(df.groupby('device.deviceCategory')['totals.transactionRevenue'].count())
device_psum =pd.DataFrame(df.groupby('device.deviceCategory')['totals.transactionRevenue'].sum())
# 각 수치 데이터프레임으로 병합
device_df = pd.concat([device_cnt, device_pcont, device_psum], axis=1).reset_index()
device_df.columns = ['device', 'count', 'pcont', 'psum']
device_df
# 전환율 생성
deviece_cvr = device_df['pcont'] / device_df['count']
# 막대그래프 그리기
sns.barplot(deviece_cvr)
plt.title('Device CVR')
plt.xticks(range(0,3), ['desktop', 'mobile', 'tablet'])
plt.xlabels('Device CVR')
'TIL' 카테고리의 다른 글
[240216] 구매자 예측 모델링(실패한 코드) (0) | 2024.02.16 |
---|---|
[240215] 피벗 테이블을 활용한 히트맵 시각화 (0) | 2024.02.16 |
[240213] 유저ID와 방문시작시간으로 세션ID/평균세션시간 생성(feat. ECDF) (0) | 2024.02.14 |
[240208] 날짜 데이터 타입 변환 및 처리(to_datetime, datetime) (0) | 2024.02.08 |
[240207] 문자열, 숫자 데이터 타입 변환(astype, to_numeric) (0) | 2024.02.08 |