SiLaure's Data
[ad DA] 01~02. 데이터 전처리 실습 본문
패스트캠퍼스 검색광고 데이터 분석
데이터의 구성 :
분석목표 :
- 중점관리 키워드, 저효율 키워드 추출
- 중점관리 광고그룹, 저효율 광고그룹 추출
분석과정 :
- 데이터 전처리
- 데이터 탐색
- 시각화
- 데이터분석
1. 데이터 전처리
- 학습목표 :
- read_excel함수를 사용하여 파이썬에 데이터 불러오기
- 데이터프레임의 열 단위 수치연산 및 데이터 타입 다루기
In [1]:
import pandas as pd
from pandas import DataFrame
from pandas import Series
In [2]:
import matplotlib.pyplot as plt
In [3]:
# matplotlib 한글 폰트 출력코드
# 출처 : 데이터공방( https://kiddwannabe.blog.me)
import matplotlib
from matplotlib import font_manager, rc
import platform
try :
if platform.system() == 'Windows':
# 윈도우인 경우
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
else:
# Mac 인 경우
rc('font', family='AppleGothic')
except :
pass
matplotlib.rcParams['axes.unicode_minus'] = False
read_excel함수를 사용하여 파이썬에 데이터 불러오기
- 파이썬의 디렉토리 경로구분자 : 슬래시(/)
- 운영체제별 디렉토리 경로구분자
- Mac의 경우 : 슬래시(/)
- 윈도우의 경우 : 역슬래시(\ or \)
In [4]:
# window의 경우 경로인식에러 발생
df=pd.read_excel('C:\Users\user\Desktop\1. 수업자료\(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online\Part 13~17) Project\01. 광고 데이터를 활용한 데이터 분석 Project\Data\네이버보고서.xls')
File "<ipython-input-4-124afa99afc6>", line 2
df=pd.read_excel('C:\Users\user\Desktop\1. 수업자료\(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online\Part 13~17) Project\01. 광고 데이터를 활용한 데이터 분석 Project\Data\네이버보고서.xls')
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
In [5]:
# 방법1 : \\
df=pd.read_excel('C:\\Users\\user\\Desktop\\1. 수업자료\\(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online\\Part 13~17) Project\\01. 광고 데이터를 활용한 데이터 분석 Project\\Data\\네이버보고서.xls')
In [6]:
# 방법2 : /
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls')
In [7]:
# 방법3 : r
df=pd.read_excel(r'C:\Users\user\Desktop\1. 수업자료\(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online\Part 13~17) Project\01. 광고 데이터를 활용한 데이터 분석 Project\Data\네이버보고서.xls')
In [326]:
# Mac :
df=pd.read_excel('/Users/junghs/네이버보고서.xls')
In [9]:
# head
df.head()
Out[9]:
캠페인보고서(2019.02.01.~2019.04.30.),ftasia | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | |
---|---|---|---|---|---|---|---|
0 | 광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) |
1 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606 | 0.414149 | 261.549448 | 2512444 |
2 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058 | 1.049915 | 295.974808 | 2384965 |
3 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324 | 0.028475 | 4841.66358 | 1568699 |
4 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
skiprows 함수 사용으로 불필요한 행 제거
In [12]:
# 첫 행 삭제
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls', skiprows=[0])
In [13]:
# head
df.head()
Out[13]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
skiprows 사용 예제
In [18]:
# 원본데이터 가져오기
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls')
In [19]:
# head
df.head()
Out[19]:
캠페인보고서(2019.02.01.~2019.04.30.),ftasia | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | |
---|---|---|---|---|---|---|---|
0 | 광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) |
1 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606 | 0.414149 | 261.549448 | 2512444 |
2 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058 | 1.049915 | 295.974808 | 2384965 |
3 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324 | 0.028475 | 4841.66358 | 1568699 |
4 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
In [20]:
# 하나의 행 제거
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls', skiprows=[1])
In [21]:
# head
df.head()
Out[21]:
캠페인보고서(2019.02.01.~2019.04.30.),ftasia | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
In [22]:
# 여러 행 제거
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls', skiprows=[0,2,4])
In [23]:
# head
df.head()
Out[23]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
1 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
2 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
3 | 6. 파이썬 | 파이썬 | 384522 | 260.4 | 0.067720 | 3705.360983 | 964876 |
4 | 1. 코딩 | 코딩 | 562162 | 271.2 | 0.048242 | 3243.215339 | 879560 |
(강의 진행을 위한 실습데이터 불러오기)
In [24]:
df=pd.read_excel('C:/Users/user/Desktop/1. 수업자료/(KDT) 머신러닝과 데이터분석 A-Z 올인원 패키지 Online/Part 13~17) Project/01. 광고 데이터를 활용한 데이터 분석 Project/Data/네이버보고서.xls', skiprows=[0])
df.head()
Out[24]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
결측치 확인
In [25]:
df.isnull()
Out[25]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | False | False | False | False | False | False | False |
1 | False | False | False | False | False | False | False |
2 | False | False | False | False | False | False | False |
3 | False | False | False | False | False | False | False |
4 | False | False | False | False | False | False | False |
... | ... | ... | ... | ... | ... | ... | ... |
1376 | False | False | False | False | False | False | False |
1377 | False | False | False | False | False | False | False |
1378 | False | False | False | False | False | False | False |
1379 | False | False | False | False | False | False | False |
1380 | False | False | False | False | False | False | False |
1381 rows × 7 columns
In [27]:
# 결측치 확인 - 열단위
df.isnull().sum()
Out[27]:
광고그룹 0
키워드 0
노출수 0
클릭수 0
클릭률(%) 0
평균클릭비용(VAT포함,원) 0
총비용(VAT포함,원) 0
dtype: int64
In [28]:
# 결측치 확인 - 행단위
df.isnull().sum(1)
Out[28]:
0 0
1 0
2 0
3 0
4 0
..
1376 0
1377 0
1378 0
1379 0
1380 0
Length: 1381, dtype: int64
데이터프레임의 열 단위 수치연산 및 데이터 타입 다루기
- 클릭수(반올림처리, 일의 자리수로 변경)
- 클릭률
- 평균클릭비용(VAT포함,원)
In [29]:
#df.head()
Out[29]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
- 클릭수 : 한 번의 클릭이 총 몇 번 이루어졌는지 나타내는 지표
=> 반올림처리, 일의 자리수로 변경
In [30]:
# 클릭수 열에 round함수 적용
clk = round(df['클릭수'], 0)
In [31]:
clk
Out[31]:
0 9606.0
1 8058.0
2 324.0
3 1864.0
4 814.0
...
1376 0.0
1377 0.0
1378 0.0
1379 0.0
1380 0.0
Name: 클릭수, Length: 1381, dtype: float64
# round함수 활용예제¶
숫자 예시 : 9606.14574
In [32]:
print(round(9606.14574,-3))
print(round(9606.14574,-2))
print(round(9606.14574,-1))
print(round(9606.14574,0))
print(round(9606.14574,1))
print(round(9606.14574,2))
print(round(9606.14574,3))
print(round(9606.14574,4))
print(round(9606.14574,5))
10000.0
9600.0
9610.0
9606.0
9606.1
9606.15
9606.146
9606.1457
9606.14574
In [34]:
# clk변수의 4번째 자료 확인
clk[4]
Out[34]:
814.0
In [35]:
# clk변수의 5번째 자료 확인
clk[5]
Out[35]:
260.0
In [36]:
# 소수점 제거 = 실수(float) => 정수(int)로 변경
clk.astype(int)
Out[36]:
0 9606
1 8058
2 324
3 1864
4 814
...
1376 0
1377 0
1378 0
1379 0
1380 0
Name: 클릭수, Length: 1381, dtype: int32
In [37]:
# 기존 칼럼데이터 대체
clk = clk.astype(int)
In [38]:
# head
clk.head()
Out[38]:
0 9606
1 8058
2 324
3 1864
4 814
Name: 클릭수, dtype: int32
- 클릭률 : CTR = 클릭수 / 노출수 * 100
=> 클릭수가 변경되어 기존 클릭률(%) 열 데이터 변경필요
In [39]:
# 데이터프레임의 열은 서로 수치연산 가능
df['클릭수']/df['노출수'] *100
Out[39]:
0 0.414149
1 1.049915
2 0.028475
3 0.268489
4 0.008452
...
1376 0.000000
1377 0.000000
1378 0.000000
1379 0.000000
1380 0.000000
Length: 1381, dtype: float64
In [40]:
#클릭률 칼럼 대체
df['클릭률(%)'] = df['클릭수']/df['노출수'] *100
In [41]:
# head
df.head()
Out[41]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
In [42]:
# 수치연산 예제1
df['노출수'] + df['클릭수']
Out[42]:
0 2329062.0
1 775549.0
2 1138164.0
3 695969.6
4 9627187.6
...
1376 24016.0
1377 32287.0
1378 32602.0
1379 60844.0
1380 61193.0
Length: 1381, dtype: float64
In [43]:
# 수치연산 예제2
df['총비용(VAT포함,원)']/df['클릭률(%)']
Out[43]:
0 6.066524e+06
1 2.271580e+06
2 5.509038e+07
3 4.376987e+06
4 1.355813e+08
...
1376 NaN
1377 NaN
1378 NaN
1379 NaN
1380 NaN
Length: 1381, dtype: float64
- 평균클릭비용 : 칼럼명에 원 단위로 명시됨
=> 반올림처리, 일의 자리수로 변경
In [44]:
#head()
df.head()
Out[44]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 261.549448 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 295.974808 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4841.663580 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 630.593475 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408.435349 | 1145903 |
In [45]:
# cpc 변수 생성
cpc = round(df['평균클릭비용(VAT포함,원)'], 0)
df['평균클릭비용(VAT포함,원)'] = cpc.astype(int)
In [46]:
# head()
df.head()
Out[46]:
광고그룹 | 키워드 | 노출수 | 클릭수 | 클릭률(%) | 평균클릭비용(VAT포함,원) | 총비용(VAT포함,원) | |
---|---|---|---|---|---|---|---|
0 | 올인원 패키지 : 디자인 툴_파워컨텐츠_포토샵 | - | 2319456 | 9606.0 | 0.414149 | 262 | 2512444 |
1 | 올인원 패키지 : 업무자동화_VBA | - | 767491 | 8058.0 | 1.049915 | 296 | 2384965 |
2 | ㅍAOP 전체_중복키워드_디자인(삭제) | 일러스트 | 1137840 | 324.0 | 0.028475 | 4842 | 1568699 |
3 | 올인원 패키지 : 데이터 분석 입문 온라인_파콘 | - | 694106 | 1863.6 | 0.268489 | 631 | 1175174 |
4 | 3. html | HTML | 9626374 | 813.6 | 0.008452 | 1408 | 1145903 |
'Records of > Learning' 카테고리의 다른 글
[Machine Learning] 지도학습과 비지도학습 (0) | 2021.08.18 |
---|---|
[Machine Learning] Machine Learning의 개념 (0) | 2021.08.18 |
[Marketing DA] 03~04. 시각화 라이브러리 matplotlib (0) | 2021.08.11 |
[Marketing DA] 02. 데이터 분석을 위한 Domain Knowledge (0) | 2021.08.11 |
[Marketing DA] 01. 마케팅 데이터 분석 툴로써의 Python (0) | 2021.08.11 |
Comments