2022. 7. 10. 14:01ㆍData Science/with Python(Numpy, Pandas …ect.)
키워드 분석 : 저효율키워드 출력
노출수와 클릭수 상위 5%에
해당하는 키워드를 추출하는 작업을
통해 quantile함수를 활용한 95백분위수를
찾고 그 이상의 노출수를 추출, 상위 5%에
해당하는 키워드를 추출해보고자 한다.
imp=df['노출수']
# quantile (default : 2사분위수(중앙값))
imp.quantile()
# median - 중앙값
imp.median()
# 최소값
imp.quantile(0)
imp.min()
# 최대값
imp.quantile(1)
imp.max()
quantile 함수는 분위수를 출력하는
함수로 default 값은 2사분위수이다.
※ 2사분위수 = 중앙값
물론 median이라는 중앙값만 호출할 수
있는 함수가 따로 있으나 수학 통계에서도
그렇듯 사분위수로도 가능하다.
(괄호)안에 0을 넣어주면 최소값을,
1을 넣어주면 최대값을 반환한다.
# 95백분위수
quantile(0.95)
그럼 95 백분위수는 어떻게 구하느냐.
위와 같이 백분률이 아닌 비율로
치환하여 대입해주면 된다.
imp = imp[imp>=imp.quantile(0.95)]
우리에게 필요한 것은 95백분위수
하나가 아닌 그 이상의 상위 5% 숫자들이
필요한 것이므로 위와 같이 마스킹하여
새로운 imp에 대입해준다.
그럼 이렇게 출력이 되는데
index가 있기 때문에 이것을 기준으로
'키워드'도 추출이 가능하다.
df_index = df.set_index('키워드')
imp = df_index['노출수']
imp = imp[imp>=imp.quantile(0.95)]
데이터프레임의 인덱스를 키워드로 변경하고
해당 데이터프레임에서 '노출수'만 imp에
할당해서 뽑아낸다. 그럼 index와 '노출수'만
뽑히는데 index 자리에 '키워드'를 넣어놓은
상태이므로 키워드와 노출수로 이루어진
데이터프레임이 완성된다. 거기서 위에서
상위 5%를 추출한 코드를 뒤에 붙여주어
다시 출력해주면 우리가 원하던 사위 5%의
키워드와 노출수를 뽑아낼 수 있다.
조건이 여러개일 경우
예를 들어 노출수와 클릭수 모두 95백분위수
이상인 데이터만 뽑아내고 싶다면
데이터프레임[(조건문)&(조건문)]
형식을 이용해주면 된다.
▼적용 예시▼
imp = df_index['노출수']
clk = df_index['클릭수']
result = df_index[(imp>=imp.quantile(0.95))&(clk>=clk.quantile(0.95))]
위 그래프를 확인해보면 노출수, 클릭수가
상위 5%의 키워드가 아닌데도 불구하고
비용이 많이 쓰이고 있는 키워드가 있다.
result = df_index[(imp<imp.quantile(0.95))&(clk<clk.quantile(0.95))&(cost>=cost.quantile(0.85))&(cost<cost.quantile(0.95))]
노출수와 클릭수가 95백분위수 미만이면서
총비용이 85백분위수 이상 95백분위수 미만인
중복 조건을 걸어주어 필터링 한 것을 result에
대입하고 result.index로 result의 index(키워드)를
추출해 저효율키워드를 확인했다.
광고그룹 분석
말 그대로 광고그룹을 기준으로 분석을
해볼 것이기 때문에 groupby 함수를
이용하여 데이터 구성을 광고그룹
기준으로 재구성해줄 것이다.
grouped=df.groupby('광고그룹')
grouped.count()
df를 광고그룹을 기준으로
그룹핑하고 다른 요소들을 count
해준 것으로 아래와 같이 출력된다.
전처리를 하기 앞서 어떤 요소들을
정리해주면 좋을지 확인하기 위해
아래 함수를 활용하여 기초통계량을
확인해본다.
# 평균
grouped.mean()
# 중앙값
grouped.median()
# 표준편차
grouped.std()
# 분산
grouped.var()
# 그룹 데이터 합계
grouped.sum()
광고그룹 분석 전처리
현재는 키워드 기준으로 ctr, cpc가
계산되어 있으므로 광고그룹 기준으로
다시 계산해준다. 방법은 키워드
기준으로 분석했을 때와 똑같다.
# 클릭률(ctr) = 클릭수 / 노출수
df_group['클릭률(%)']=df_group['클릭수']/df_group['노출수']
# 평균클릭비용(cpc) = 총비용 / 클릭수
df_group['평균클릭비용(VAT포함,원)']=df_group['총비용(VAT포함,원)']/df_group['클릭수']
다음은 결측값을 처리한다.
# 결측값 해결
## 클릭수 column 중 0인 데이터 탐색
df_group[df_group['클릭수']==0]
## 결측값 대체
df_group['평균클릭비용(VAT포함,원)']=df_group['평균클릭비용(VAT포함,원)'].fillna(0)
fillna 함수는 전달된 값으로
결측값(na)을 대체하는 함수다.
다음은 클릭비용과 같이 정수단위로
떨어져야하는 요소임에도 소수점이
나온 값을 정리해줄 차례이다.
df_group['평균클릭비용(VAT포함,원)']=round(df_group['평균클릭비용(VAT포함,원)'],0)
df_group['평균클릭비용(VAT포함,원)']=df_group['평균클릭비용(VAT포함,원)'].astype(int)
round함수를 이용하여 반올림을
해주고, astype 함수로 데이터타입을
int로 바꿔주어 소수점을 제거해줬다.
데이터 시각화
# 노출수 칼럼 선그래프
(((df_group['노출수'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()
# 클릭수 칼럼 선그래프
(((df_group['클릭수'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()
# 총비용 칼럼 선그래프
(((df_group['총비용(VAT포함,원)'].sort_values()).reset_index()).drop('광고그룹', axis=1)).plot()
노출수를 정렬한 뒤 index로
설정함으로써 x 축이 노출수/클릭수/
총비용 값이 되도록 했다.
drop 함수로 이제는 필요없는
광고그룹 column을 지워준 후
선그래프로 나타나면 위와
같이 출력된다.
imp = df_group['노출수']
clk = df_group['클릭수']
cost = df_group['총비용(VAT포함,원)']
# 중점관리 광고그룹
result1 = df_group[(imp>=imp.quantile(0.8))&(clk>=clk.quantile(0.9))]
result1.index
# 저효율 광고그룹
result2 = df_group[(imp<imp.quantile(0.8))&(clk<clk.quantile(0.9))&(cost>=cost.quantile(0.6))&(cost<cost.quantile(0.9))]
result2.index
이를 통해 노출수가 상위 20%이면서
클릭수가 상위 10%인 중점관리 광고그룹과
노출수 80% 미만, 클릭수 90%미만이면서
총비용이 60%이상 90%미만인 저효율
광고그룹을 추출할 수 있다.
'Data Science > with Python(Numpy, Pandas …ect.)' 카테고리의 다른 글
[데이터분석 인강] 코호트 분석과 푸쉬 노티피케이션 (0) | 2022.07.16 |
---|---|
[데이터분석 인강]검색광고 데이터 분석 : 데이터 탐색 시각화ver. (선그래프) (0) | 2022.07.09 |
검색광고 데이터 분석 : 데이터 전처리&기본적인 데이터 탐색 (0) | 2022.07.09 |
마케팅 데이터 분석 : 간단한 matplotlib 사용법 정리 (0) | 2022.07.08 |
Kaggle Survey EDA 03 : 직업과 관련된 EDA (0) | 2022.07.06 |