## --- 오랜만에 R을 활용한 간단한 데이터 분석 샘플 -----------
# 이번엔 시계열 분석의 기초와
# 비지니스의 아이콘 두사람에 대한 분석 ^^
# 피터 드러커와 스티브 잡스
## time series analysis sample
# data got from google trends
# [note] 구글트렌즈 (trends.google.com ) 에 접속해 키워드를 입력하고 CSV로 다운로드 실시
# 구글 로그인을 하지 않으면 할 수 없음을 유의!
# 아래는 구글 트렌즈 화면
# 여러개의 키워드에 대한 검색 추이를 비교해서 볼 수 있는 간편한 툴
# [1] read the first sheet in an excel file
# 다운로드한 엑셀시트를 임포트 (먼저 CSV로 저장된 파일을 엑셀로 변환한 후 import
require(xlsx) # 엑셀 파일을 읽어 들이기 위한 패키지 먼저 설치후 사용
s_ts1 <- read.xlsx("steve_jobs_1.xlsx", 1) # 엑셀은 여러 시트가 있을 수 있으므로 첫번째 시트로 지정
plot(s_ts1, type="l") # 먼저 스티브 잡스 (Steve Jobs) 에 대한 구글 검색 추이 분포를 확인
# 왜 2012년이 잡스의 해였는지는 누구나 알겠지 ^^
s_ts2 <- read.xlsx("google_ts_smpl1.xlsx", 1) # 이번에는 여러 키워드를 비교한 추이 파일을 import
plot(s_ts2$peter.drucker, type="l") # 드러커에 대한 검색 추이를 확인
# 한번의 피크(spike 라고 보통 부르는) 는 있었지만 전체적으로 보면 관심이 줄어드는 추세
# 추세선을 넣는 부분은 조금 후에 설명!
plot(s_ts2$iphone, type="l")
# 이번에는 스티브잡스의 유품인 아이폰에 대한 검색 추이 확인
# 그리고 추세에 대한 확인
# 역시... 지금은 잡스와 아이폰의 시대... 드러커와는 비교가 안되네
# 드러커는 지는 해, 잡스는 뜨는 해~~ (TT)
|
|
|
plot(s_ts2$apple, type="l") # 그렇다면 잡스의 본부 애플은???
# 아이폰도 잡스도 뜨는데 애플이 질리는 없지...
# 여기까지 왔으니 이제는 좀 체계적인 부분에 대한 응용 개시
# 우선 plot을 사용한 분포에 대해 추세선을 추가하는 작업을 연습
# 먼저 추세선을 그리기 위해 필요한 참고 자료부터 마련
# 시계열 자료가 몇개의 data point로 구성된 것인지 부터 확인
length(s_ts2$iphone)
# 결과 :: 508 -- 상당히 많은 수의 포인트가 있을 수 밖에 없는 이유는
# 구글이 제공한 데이터가 주단위였기에
z <- lm(s_ts2$iphone~ c(1:508) ) # 이제 추세선을 그리기 위한 회귀분석
# 간단한 구문으로 단순선형회귀분석을 실시
# 문법은 lm :: linear model , y= s_ts2$iphone (즉, iphone 검색량)
# x=1~508 (즉, 주 week의 일련번호) -- 1,2,3,~~~ 508
# summary(z) # 회귀분석 결과에 대한 확인 --- 생략
abline(z) # 플롯에 회귀분석 결과로 생성된 추세선을 반영
# 여러개의 spike가 보이지만 사실 길게 보면 추세는 지속적인 증가라는 점을 깨닫게 됨
cor(s_ts2$iphone, s_ts2$apple) # 이번에는 상관분석을 통해 애플과 아이폰간의 관계 확인
# 결과 상관계수 :: 0.8473507 # 매우 높은 상관관계를 가지고 있음을 확인
# 스티브 잡스는 뜨고, 아이폰도, 애플도... 역시 지금은 대세임을 확인
# 세 가지 키워드 모두가 진정 HOT 함에 차이가 없음
# 이번에는 시계열 자료를 STL (i.e. Seasonlity and Trend 분석) 을 통해 분해해서 확인
# 추세 이외에 혹시 계절성도 개입되는 것은 아닌지를 확인 시도
ts_stl_sjobs <- ts(s_ts1$steve.jobs, frequency=12 )
# stl() 사용을 위해 먼저 시계열자료형으로 vector를 변환
# 연간의 반복을 Seasonality로 생각하고 있으니 12개월 월단위 변동으로 지정 (frequency)
# 이제 준비된 자료를 stl함수에 대입. "per" 의 의미는 periodical 주기성
stl_sjobs <- stl(ts_stl_sjobs, "per")
summary(stl_sjobs)
# 결과를 보면 ... (아래는 결과. 명령 구문이 아님)
Call:
stl(x = ts_stl_sjobs, s.window = "per")
Time.series components:
seasonal trend remainder
Min. :-1.438384 Min. : 0.838174 Min. :-10.02683
1st Qu.:-1.279834 1st Qu.: 1.104721 1st Qu.: -0.16094
Median :-0.870194 Median : 1.347969 Median : 0.62984
Mean :-0.071241 Mean : 2.905023 Mean : -0.02182
3rd Qu.:-0.512825 3rd Qu.: 3.048345 3rd Qu.: 1.02355
Max. : 9.718203 Max. :14.435134 Max. : 75.93012
IQR:
STL.seasonal STL.trend STL.remainder data
0.767 1.944 1.184 1.000
% 76.7 194.4 118.4 100.0
Weights: all == 1
Other components: List of 5
$ win : Named num [1:3] 1171 19 13
$ deg : Named int [1:3] 0 1 1
$ jump : Named num [1:3] 118 2 2
$ inner: int 2
$ outer: int 0
# STL.seasonal STL.trend STL.remainder data 이 부분을 눈여겨 보기
# STL.seasonal 의 비중이 상대적으로 (trend와 비교) 상당히 높으며,
# STL.remainder 의 비중도 매우 높음
# 계절적인 변동이 크게 있는 듯 보이지만, 사실 추세와 계절성 합하더라도
# 전체의 변동을 설명하는 것은 얼마되지 않아 믿기 곤란하다는 것
acf(ts_stl_sjobs ) ; pacf(ts_stl_sjobs )
# 불안감을 해소하기 위해서 이번에는 autocorrelation을 확인
# ACF, PACF 모두에서 선을 넘지 못하고 있는 패턴을 확인
# 결국 스티브잡스가 특정 계절에만 인기를 끄는 패턴은 없어 보인다는 것
# 그렇다면 드러커는 ???
ts_stl_pdrucker <- ts(s_ts2$peter.drucker, frequency=12 )
stl_pdrucker <- stl(ts_stl_pdrucker, "per")
summary(stl_pdrucker )
Call:
stl(x = ts_stl_pdrucker, s.window = "per")
Time.series components:
seasonal trend remainder
Min. :-0.4539913 Min. : 6.16092 Min. :-16.77015
1st Qu.:-0.2699583 1st Qu.: 8.85038 1st Qu.: -0.95320
Median :-0.1375737 Median :10.88711 Median : 0.11877
Mean : 0.0037220 Mean :12.53593 Mean : -0.01012
3rd Qu.: 0.1906390 3rd Qu.:15.59400 3rd Qu.: 0.86870
Max. : 1.5830914 Max. :34.21196 Max. : 64.54827
IQR:
STL.seasonal STL.trend STL.remainder data
0.4606 6.7436 1.8219 6.0000
% 7.7 112.4 30.4 100.0
Weights: all == 1
Other components: List of 5
$ win : Named num [1:3] 5081 19 13
$ deg : Named int [1:3] 0 1 1
$ jump : Named num [1:3] 509 2 2
$ inner: int 2
$ outer: int 0
# 드러커의 추이에 대해서도 선형 추세선 삽입하는 과정은 마찬가지였음
plot(s_ts2$peter.drucker, type="l")
z <- lm(s_ts2$peter.drucker ~ c(1:508) )
abline(z)
# 연습용 분석의 주제 자체에 대한 해설 종합::
# [1] 드러커는 진정한 Guru이며 많이 사람들이 오랜동안 관심을 가졌음
# [2] 그러나 그 인기도 시간이 지나고 유행이 바뀌면서 조금은 퇴색이 될 수 밖에 없음이 세상 이치
# [3] 요즈음의 세상은 미디어를 통해 이벤트를 만들어 내고 새로운 자극을 계속 던저야 주목 유지가 가능함
# 이 원리는 모든 마케팅과 비지니스에서 변하지 않는 Fundamental Principle 일 듯
------------ [전용준, 2013: 리비젼, 빅 데이터, 데이터 분석, 단순하고 간단한 통계]
'R 데이터 분석' 카테고리의 다른 글
multiple regression for forecasting : considerations (0) | 2013.10.05 |
---|---|
some basic checkpoints on multiple regression using small sample (0) | 2013.09.29 |
Error in solve.default(sigma): system is computationally singular (0) | 2013.09.25 |
twitter access tmp (0) | 2013.08.29 |
[R 분석 연습] 2차원 플롯 : 밀집 영역 플로팅 (0) | 2013.06.14 |