일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 내일배움카드
- SQL와일드카드
- AI컨퍼런스
- index
- 스타트업
- 파이썬
- Python
- 데이터컨퍼런스
- 바이트디그리
- MegaCon
- SQL부분일치
- POP
- 결측값
- Append
- dropna
- 메가바이트스쿨
- MegaCon2022
- 데이터분석인강
- 패스트캠퍼스
- Carrying Capacity
- SQL부분불일치
- K디지털그레딧
- K디지털크레딧
- MegabyteSchool
- 데이터분석초격차패키지
- NotNull
- 엑셀기초통계
- 데이터분석초격차패치지
- Toss PO SESSION
- Aha Moment
- Today
- Total
da-ta ta-da
데이터 분석 인강 4주차 : 마케팅 데이터 분석 본문
1. 마케팅 데이터 분석
- 광고 지표 종류: CTR(click/impression), CPM(cost/impression*1000), CPC(cost/click), CPA(cost/action)
- matplotlib을 통해 광고 데이터 시각화
- 막대 그래프: df.plot.bar(), 가로 막대 그래프: df.plot.barh()
- 히스토그램: df.plot.hist(bins = range(최소값, 최대값, 단위)
- 차트 옵션: figsize[], fontsize,
- 구성 요소 추가: plt.title("타이틀명"), plt.xlabel("x축 라벨"), plt.ylabel("y축 라벨"),
plt.xticks(), plt.yticks() ⇒ x, y축 단위 설정
용례) plt.xticks([0, 1, 2, 3], ['첫째', '둘째', '셋째', '넷째', rotation = 0)
plt.xlim([]), plt.ylim([]) ⇒ 그래프에 나타낼 x, y축 범위 설정
2. 검색 광고 데이터 분석
- 검색 광고 데이터를 pandas로 불러와 중점 관리, 저효율 광고를 키워드 및 광고 그룹 단위로 분석할 수 있다.
- 분석 과정은 데이터 전처리, 데이터 탐색, 시각화, 데이터 분석으로 진행된다.
1) 데이터 전처리
- 데이터를 전처리하여 컬럼별 데이터를 다루기 좋게 재정의한다.
(1) read_excel을 통해 검색 광고 데이터 불러오기: df.read_excel 함수 사용
- Window의 경우 '\'로 디렉토리가 구분되어 있으므로, 파이썬의 구분자인 '/'로 변경해주거나, \를 하나 더 붙여주거나, 경로 앞에 'r'을 추가하여 불러올 수 있다.
- skiprows argument를 추가하여 사용하지 않는 행을 삭제해준다. skiprows = 5 ; 5번째 행부터 출력, skiprows = [0] 1번째 행을 제외하고 출력
(2) 결측치 확인: df.isnull() 함수 사용
- df.isnull(): 자체로는 boolean 값으로 반환이 되어 null 값을 알기 어려움
- df.isnull().sum(): 열 단위로 sum을 해서 해당 열의 데이터 중 null 값이 없는지 확인
- df.isnull().sum(axis = 1): 행 단위 결측치 확인
(3) 데이터 프레임 열 단위 수치 연산 및 데이터 타입 변경
- 소수 값을 반올림하고, 정수로 반환: round(column명, n), .astype(int) 사용
- round의 두 번째 argument는 어느 자리에서 반올림할지 결정하는 값
2) 데이터 탐색
(1) 데이터 탐색에 자주 사용되는 함수: head(), tail(), shape, describe(), columns, index...
- unique() 컬럼 데이터의 고유값들
- len과 unique를 같이 사용하면 컬럼 내 데이터 종류 수를 파악할 수 있다.
- pd.set_option('display.float_format', {:.2f}'.format) ⇒ pandas에서 데이터를 불러올 때 항상 float 소수점 2자리 형식으로 불러온다.
- value_counts() ⇒ 열 데이터 고유값의 빈도 확인
- sort_values() ⇒ 정렬, 기본 오름차순. 내림차순은 sort_values(ascending = False)
3) 시각화를 통한 데이터 탐색 실습
(1) 패턴을 갖는 데이터 시각화
- 데이터의 패턴을 확인할 수 있도록 특정 기준을 두고 정렬해준다.
- sort_value()를 통해 오름차순/내림차순으로 데이터를 정렬하고
- reset_index()으로 함수 index를 재정의해준다.
- index를 재정의할 경우 기존의 index명이 column으로 생성되므로 해당 column은 drop()을 통해 제거해준다. drop('삭제할 index명', axis = 1), 해당 값을 유지할 경우 'inplace = True' argument를 추가한다.
(2) 시각화된 데이터를 통해 분석할 데이터 선정하기
- 시각화된 데이터를 통해 중점 관리 키워드 및 저효율 키워드의 조건을 정의 (ex. 중점 관리: imp, click 상위 5%, 저효율: 노출수 하위 95%, 클릭수 하위 95%, 총비용 상위 15% 이상, 상위 5% 미만)
(3) 데이터 분석
- 중점 관리 키워드 및 저효율 키워드의 조건을 quantile() 함수로 걸어준다. quantile은 분위수를 출력해주는 함수
- 분석할 property가 index가 되도록 set_index 함수를 통해 index를 재정의해준다. df.set_index('키워드')
- groupby 함수를 통해 동일한 광고 그룹 내 키워드를 묶어서 광고 그룹별로 분석하기
grouped = df.groupby('광고그룹') # grouped 출력 시 객체 정보만 출력되며, 데이터를 사용하기 위해서는 집계 함수를 사용해야 한다. excel의 pivot table 값 필드 설정 개념
df_group = grouped_sum() # 동일 그룹 내 키워드 값이 합계로 나타나므로, CTR, CPC column은 전처리해야 한다.
df_group['CTR'] = df_group['클릭수'] / df_group['노출수']
df_group['CPC'] = df_group['총비용'] / df_group['클릭수']
df_group[df_group['클릭수' == 0] # 위 계산에서 클릭 수가 0일 경우 결측치가 발생한 것을 알 수 있다.
df_group['CPC'] = df_group['CPC'].fillna(0) # 평균 클릭 비용 중 결측치가 생긴 데이터를 fillna 괄호 안의 값으로 대체해준다.
df_group['CPC'] = round(df_group['CPC'], 0).astype(int)
- 중점관리 광고그룹 광고 그룹 조건 걸기
# 노출수 상위 20% 이상, 클릭수 상위 10% 이상
imp = df_group['노출수']
clk = df_group['클릭수']
result = df_group[(imp >= imp.quantile(0.8)) & (clk >= clk.quantile(0.9))]
result.index # 중점 관리 광고 그룹 출력
3. 고객 데이터 분석
- bank client data로 고객 데이터 분석하기
- pd.read_csv 로 파일 불러오기, 디렉토리나 파일명에 한글이 있을 경우 engine = 'python' 파라미터를 추가해준다.
- age 데이터 10 단위로 끊어 확인하기 (hist plot)
# age 오름차순으로 정렬하고 히스토그램 만들기
age = ((df['age'].sort_values()).reset_index()).drop('index', axis = 1)
age.plot.hist(bins = range(10, 101, 10) # range(x축 최소값, x축 최대값, 단위)
plt.show()
- obeject value로 이루어진 데이터 그래프 그리기
marital = df['marital'].value_counts() # value가 object면 value_counts를 활용
marital.plot.barh()
plt.show()
1) 분석 주제: 대출 여부와 은행 상품 가입 데이터간 관계
- 가입 여부에 따라 그룹핑하고 대출 여부에 따라 한번 더 그룹핑, groupby(), get_group() 함수 활용
# 상품 가입 여부(y)에 따라 그룹화
grouped = df.groupby('y')
yes_group = grouped.get_group('yes') # y column에서 yes value를 가진 row 그룹화
no__group = grouped.get_group('no') # y column에서 no value를 가진 row 그룹화
# 위 그룹들의 loan column 응답 빈도 출력
yes = yes_group['loan'].value_counts()
no = no_group['loan'].value_counts()
# 상품 가입 여부에 따라 loan 응답 비중 확인
yes = yes / yes.sum()
no = no / no.sum()
yes.name = 'y_yes' # 시리즈의 이름 설정, 열 방향으로 결합했을 때 column명이 된다.
no.name = 'y_no'
pd.concat([yes, no], axis = 1) # 열 방향으로 결합하기
2) 분석 주제: 연령, 상품 가입 여부, 직업 간 관계 분석
- pivot table 기능을 사용, pd.pivot_table(데이터프레임명, 값, index, column, aggfunc)이 기본 파라미터. aggfunc은 값을 나타낼 계산 방법을 입력
# pivot table을 활용하여 세 개의 column age, job, y를 분석
pd.pivot_table(df, values = 'age', index = 'y', columns = 'job', aggfunc = 'mean')
# cf) multie index, index와 column을 멀티로 넣을 수도 있다
pd.pivot_table(df, 'age', ['y', 'marital'], ['job', 'education'], aggfunc = 'mean')
pd.pivot_table(df, values = 'age', index = 'y', columns = 'job', aggfunc = 'mean', fill_value = 0) # 결측치 0으로 대체
# 은행 상품을 가입한 사람과 가입하지 않은 사람의 연령 차이 구해서 diff 행으로 추가
pivot.loc['diff'] = pivot.loc['yes'] - pivot.loc['no']
result = pivot.sort_values('diff', axis = 1, ascending = False) # diff 기준으로 내림차순 정렬
result.loc['diff].plot.bar(figsize = (15, 10))
plt.show()
'Data Analyst' 카테고리의 다른 글
데이터 분석 인강 5주차 : Push 발송 시간, 로그 데이터 (0) | 2022.05.22 |
---|---|
데이터 분석 인강 5주차 : 쇼핑몰 주문 데이터 분석 (0) | 2022.05.22 |
데이터 분석 인강 3주차 : 데이터 시각화 분석 실전 (0) | 2022.05.08 |
데이터 분석 인강 3주차 : Seaborn (0) | 2022.05.08 |
데이터 분석 인강 3주차 : Pandas (0) | 2022.05.08 |