본문 바로가기
  • 紹睿: 자유롭고 더불어 사는 가치있는 삶
Data/데이터 분석·통계

[Doing Data Science] 데이터과학 입문 - O'Reilly :: 연습문제(1)

by 징여 2018. 3. 15.
반응형

Doing Data Science 데이터과학 입문 - O'Reilly :: 연습문제(1) p.63

 

2.2.2 연습문제:EDA

뉴욕타임즈 홈페이지에 기록된 하루 분량의 광고 노출횟수와 클릭횟수

각 행은 사용자

나이

성별(0= 여성, 1=남성) 

노출횟수(Impressions)

클릭횟수(Clicks)

로그인 횟수

 

 

1. 사용자를 "<18", "18-24", "25-34", "35-44", "45-54", "55-64", "65+"로 범주화 해서 age_group으로 나타내어라.

#데이터 불러오기
data1 <- read.csv('/Users/jiyoung/Downloads/dds_datasets/dds_ch2_nyt/nyt1.csv')

head(data1)

#   Age Gender Impressions Clicks Signed_In  
# 1  36      0           3      0         1  
# 2  73      1           3      0         1  
# 3  30      0           3      0         1    
# 4  49      1           3      0         1  
# 5  47      1          11      0         1  
# 6  47      0          11      1         1 

#6개의 범주로 나타내기 age_group
data1$age_group <- cut(data1$Age, breaks = c(-Inf, 0, 18, 24, 34, 44, 54, 64, Inf), 
                       labels=c('under0', 'under18', '18_24', '25_34', '35_44', '45_54', '55_64', 'over65')


#    Age Gender Impressions Clicks Signed_In age_group
# 1  36      0           3      0         1     35_44
# 2  73      1           3      0         1    over65
# 3  30      0           3      0         1     25_34
# 4  49      1           3      0         1     45_54
# 5  47      1          11      0         1     45_54
# 6  47      0          11      1         1     45_54
 

 

2. 어느 특정한 날짜에 대해,

2-1. 6개의 나이범주에 대한 노출횟수와 클릭률(CTR=clicks/impressions)의 분포를 도표로 나타내어라.

나이범주에 따른 노출횟수와 클릭수

library(ggplot2)

data1$CTR <- data1$Clicks/data1$Impressions

#Impressions
ggplot(data1, aes(x=Impressions, fill=age_group)) + geom_histogram()

#CTR
ggplot(data1, aes(x=CTR, fill=age_group))+geom_histogram()

ggplot2를 쓰면 간단데스 - 

 

 

가만히 보면, CTR이 0 에 쏠려서 확인하기가 어렵다. 그래서 Impressions과 Clicks 횟수가 0인 데이터들을 한번 제외해 보기로함

library(ggplot2)

data2 <- subset(data1, Impressions>0 & Clicks>0 & age_group != 'under0')
ggplot(data2, aes(x=CTR, fill=age_group))+geom_histogram()

# nrow(data1)
# 458441
# nrow(data2)
# 22062

데이터가 개많이 줄었다; 이거 맞는건지 모르겠넹 흑흑...

 

 

2-2. 사용자들의 클릭 행동에 기반하여 그들을 분할하거나 범주화하는 새로운 변수를 정의하라

table(data$Clicks)를 해보니까, 0이 월등하게 많았다.

그래서 클릭한 사람과 안한 사람으로 나누기로 결정..

data1 <- subset(data1, age_group != 'under0')

head(data1)

data1$Onclick <- 'NA'
data1$Onclick[which(data1$Clicks > 0)]<- 'YES'
data1$Onclick[which(data1$Clicks == 0)] <- 'NO'

ggplot(data1, aes(x=age_group, y=Onclick, fill=Onclick)) + geom_col()

 

2-3. 데이터를 탐색하고, 사용자 세부 집단 혹은 인구통계적 집단(예를 들어 18세 미만의 남성 집단과 18세 미만의 여성집단, 또는 로그인한 집단과 그렇지 않은 집단)을 시각적으로 그리고 양적으로 비교하라.

 

1) 남성과 여성으로 나누기 (0 = 여성, 1= 남성)

간단하게, table(data1$Gender) 하게 외면, 

- 여성 153070명

- 남성 168265명

 

2) age_group 항목별 남성/여성 나타내보기

data1$Gender <- factor(data1$Gender)
ggplot(data1, aes(x=age_group, y=Gender, fill=Gender)) + geom_col()

nrow(subset(data1, age_group=='under18' & Gender==1 )) # 12362
nrow(subset(data1, age_group=='under18' & Gender==0 )) # 6890

 

 

2-4. 데이터를 요약하는 지표를 산출하라. CTR, 사분위수, 평균, 중앙값, 분산, 최댓값

summary(data1)

 

  Age  Impression   Clicks  CTR
 Min. 7.00  0.000  0.000000  0.0000 
 1st Qu. 29.00 3.000 0.000000  0.0000 
 Median 41.00  5.000  0.000000 0.0000
 Mean 42.06 5.011 0.07148 0.0143
 3rd Qu. 53.00 6.000 0.000000 0.0000
 Max. 108.00 20.000 3.000000  1.0000 

 

Gender

0: 153070

1: 168265

 

Onclick

No: 299273

Yes: 22063

 

 

 age_group
 18~24 35270
 25~34 58174 
 35~44 70860 
 45~54 64288 
 55~64 44738
 65~ 28753



 

 

3. 분석을 다른 날짜로 확장하라.

이건 다음기회에.. 배고프당 밥머거야지

 

 

 

 

 

 

반응형

댓글