본문 바로가기

Coding/R

GA데이터 R로 분석하기

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
library(scales)
library(ggplot2)
library(RGoogleAnalytics)
oauth_token <- Auth(client.id = '--', client.secret = '--')
save(oauth_token, file='oauth_token')
ValidateToken(oauth_token)
query.list <- Init(start.date = '2019-01-01',
                   end.date = '2020-06-30',
                   dimensions = 'ga:date',
                   metrics = 'ga:sessions,ga:bounces,ga:pageviews,ga:avgTimeOnPage,ga:1dayUsers',
                   # pageviews- 이 블로그 총 페이지뷰
                   # avgTimeonPage- 페이지에 머무르는 시간
                   
                   max.results = 10000,
                   sort = "ga:date",
                   table.id = '--')
ga.query <- QueryBuilder(query.list)
ga.data <- GetReportData(ga.query, oauth_token, split_daywise = T)
head(ga.data)
ga.data
ga.data.total <- ga.data[,c(1,2)]
ga.data.an <- as.Date(ga.data.total$date, format = '%Y%m%d')
ga.data.an
ga.data.total$date <- ga.data.an
plot(ga.data.total)
 
#날짜 문자열에서 날짜로 바꾸기      
install.packages('stringr')           
library(stringr)
ga.date1 <- substr(ga.data.an$date, 14)
ga.date2 <- substr(ga.data.an$date, 56)
ga.date3 <- substr(ga.data.an$date, 78)
 
ga.data.total <- paste(ga.date, ga.date2, ga.date3, sep='_')
ga.data.total <- as.Date(ga.data.total)
 
# 데이터 정제(결측치, 이상치 제거)
ga.data.total$sessions <- ifelse(ga.data.total$sessions>=25, NA, ga.data.total$sessions)
plot(ga.data.total, type='l')
 
 
install.packages('forecast')
library(forecast)
 
 
# 1.시계열 데이터로 변환 +++++++++++++++++++++++++++++++++++++++
library(xts)
sol <- xts(ga.data.total[,-1], order.by = as.Date(ga.data.total[,1], "%Y/%m/%d"))
sol
 
# 이상치 제거
sol <- ifelse(sol>=2020, sol)
 
# 시각화
ts.plot(sol, type='l', col='red')
 
# 모형진단 - 타당성 검정
 
arima.sol <- auto.arima(sol)
arima.sol
sol.model <- arima(sol, order=c(1,1,1))
 
tsdiag(sol.model)
Box.test(sol.model$residuals, lag=1, type = 'Ljung')
 
fore.sol <- forecast(sol.model, h=100)
plot(fore.sol)
 
# 기대값
 
fore.sol
 
# 수익예측
fore.sol$mean
sol.exp <- sum(fore.sol$mean)
sol.exp
 
sol.exp.inc <- sol.exp/50*0.01
round(sol.exp.inc, digits = 1)
cs

 

'Coding > R' 카테고리의 다른 글

R 활용을 위한 기초 통계학 - 1  (0) 2018.11.05