head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
ts_model2
AirPassengers
ts_model2 <- auto.arima(AirPassengers)
ts_model2
AirPassengers
str(AirPassengers)
ts_model2 <- auto.arima(AirPassengers[61:144])
ts_model2
ts_model2 <- auto.arima(AirPassengers[49:144])
ts_model2
#[단계4] 모형 생성 : 계절차분을 적용한
model <- arima(tsdata, c(0, 0, 0),
seasonal = list(order = c(1, 1, 0)))
ts_model2 <- auto.arima(AirPassengers[1:144])
ts_model2
AirPassengers[1:144]
ts_model2 <- auto.arima(AirPassengers)
ts_model2
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 82,
45, 56, 45, 56, 70, 75, 65, 59, 67, 54, 70, 73,
55, 49, 67, 55, 71, 78, 71, 65, 69, 55, 70, 75,)
length(data)# 36
AirPassengers
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
str(AirPassengers)
ts_model2 <- auto.arima(tsdata)
ts_model2
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 82,
45, 56, 45, 56, 70, 75, 65, 59, 67, 54, 70, 73,
60, 50, 65, 55, 68, 72, 69, 60, 70, 65, 70, 75,)
length(data)# 36
AirPassengers
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
ts_model2
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 82,
45, 56, 45, 56, 70, 75, 65, 59, 67, 54, 70, 73,
60, 50, 65, 55, 68, 72, 69, 60, 70, 65, 70, 75,)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data[1:48], start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
str(AirPassengers)
ts_model2 <- auto.arima(tsdata)
ts_model2
ts_model2 <- auto.arima(WWWusage)
ts_model2
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 82)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data[1:36], start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
#Warning message:
#  In value[[3L]](cond) :
#  The chosen test encountered an error, so no seasonal differencing is selected. Check the time series data.
# 선택한 테스트에 오류가 발생하여 계절별 차이가 선택되지 않았습니다. 시계열 데이터를 확인하십시오.
# [해설] , 첫 번째 계절 차 이후 데이터에 계절 윈도우가 두 개 미만이기 때문에 STL 분해를 수행 할 수 없습니다.
# 사용가능한 데이터가 충분하지 않은 경우 경고
'''
From stl(): series is not periodic or has less than two periods
1 seasonal differences will be used. Consider using a different unit root test.
'''
ts_model2
## 2. 정상성시계열의 [계절형] ##
#[단계1] 시계열자료 특성분석
#(1) 데이터 준비
'''
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 43, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 89)
'''
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 61, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 65, 67, 77, 69, 79, 82,
50, 45, 63, 60, 68, 70, 58, 65, 70, 55, 65, 70)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
## 2. 정상성시계열의 [계절형] ##
#[단계1] 시계열자료 특성분석
#(1) 데이터 준비
'''
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 71, 65, 69, 43, 70, 75,
56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 89)
'''
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 61, 65, 69, 53, 70, 75,
56, 56, 65, 55, 82, 85, 65, 67, 77, 69, 79, 82,
50, 55, 63, 60, 68, 70, 58, 65, 70, 55, 65, 70)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
#Warning message:
#  In value[[3L]](cond) :
#  The chosen test encountered an error, so no seasonal differencing is selected. Check the time series data.
# 선택한 테스트에 오류가 발생하여 계절별 차이가 선택되지 않았습니다. 시계열 데이터를 확인하십시오.
# [해설] , 첫 번째 계절 차 이후 데이터에 계절 윈도우가 두 개 미만이기 때문에 STL 분해를 수행 할 수 없습니다.
# 사용가능한 데이터가 충분하지 않은 경우 경고
'''
From stl(): series is not periodic or has less than two periods
1 seasonal differences will be used. Consider using a different unit root test.
'''
ts_model2
data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 61, 65, 69, 53, 70, 75,
56, 56, 65, 55, 68, 80, 65, 67, 77, 69, 79, 82,
50, 55, 63, 60, 68, 70, 58, 65, 70, 55, 65, 70)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
ts_model2
data <- c(55, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65,
55, 49, 67, 55, 71, 78, 61, 65, 69, 53, 70, 75,
56, 56, 65, 55, 68, 80, 65, 67, 77, 69, 79, 82,
57, 55, 63, 60, 68, 70, 58, 65, 70, 55, 65, 70)
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
head(tsdata)
tail(tsdata)
#(3) 시계열요소분해 시각화
ts_feature <- stl(tsdata, s.window="periodic")
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
#[단계3] 모형 식별과 추정
# - 최적의 모형과 파라미터를 제공받기 위해서 auto.arima() 함수를 이용한다.
#install.packages('forecast')
library(forecast)
ts_model2 <- auto.arima(tsdata)
ts_model2
#[단계4] 모형 생성 : 계절차분을 적용한
model <- arima(tsdata, c(0, 1, 1),
seasonal = list(order = c(1, 1, 0)))
model
# (1) 자기상관함수에 의한 모형 진단
tsdiag(model)
# (2)Box-Ljung에 의한 잔차항 모형 진단
Box.test(model$residuals, lag=1, type = "Ljung")
# [단계6] 미래 예측
par(mfrow=c(1,2))
fore <- forecast(model, h=24) # 2년 예측
plot(fore)
plot(fore)
fore2 <- forecast(model, h=6) # 6개월 예측
ts_model2
length(data)# 36
#(2) 시계열자료 생성
tsdata <- ts(data, start=c(2020, 1), frequency=12)
tsdata
plot(ts_feature)
#[단계2] 정상성시계열 변환
# - 계절성을 갖는 경우에는 계절차분을 적용한다.
par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff) # 차분 시각화
ts_model2
model
# (1) 자기상관함수에 의한 모형 진단
tsdiag(model)
# (2)Box-Ljung에 의한 잔차항 모형 진단
Box.test(model$residuals, lag=1, type = "Ljung")
# [단계6] 미래 예측
par(mfrow=c(1,2))
fore <- forecast(model, h=24) # 2년 예측
plot(fore)
fore2 <- forecast(model, h=6) # 6개월 예측
plot(fore2)
# (2)Box-Ljung에 의한 잔차항 모형 진단
Box.test(model$residuals, lag=1, type = "Ljung")
# 1.텍스트 파일 가져오기
#----------------------------------------------------
marketing <- file("D:\\sunmoon\\2_Rwork\\2_Rwork\\Part-II/marketing.txt", encoding="UTF-8")
marketing2 <- readLines(marketing) # 줄 단위 데이터 생성
# incomplete final line found on - Error 발생 시 UTF-8 인코딩 방식으로 재 저장
close(marketing)
head(marketing2) # 앞부분 6줄 보기 - 줄 단위 문장 확인
str(marketing2)
# 2. 줄 단위 단어 추출
#----------------------------------------------------
# Map()함수 이용 줄 단위 단어 추출 : Map(f, ...) -> base)
lword <- Map(extractNoun, marketing2)
length(lword) # [1] 472
lword <- unique(lword) # 중복제거1(전체 대상)
# 2. 줄 단위 단어 추출
#----------------------------------------------------
# Map()함수 이용 줄 단위 단어 추출 : Map(f, ...) -> base)
lword <- Map(extractNoun, marketing2)
library(rJava) # 아래와 같은 Error 발생 시 Sys.setenv()함수로 java 경로 지정
library(KoNLP) # rJava 라이브러리가 필요함
# 1.텍스트 파일 가져오기
#----------------------------------------------------
marketing <- file("D:\\sunmoon\\2_Rwork\\2_Rwork\\Part-II/marketing.txt", encoding="UTF-8")
marketing2 <- readLines(marketing) # 줄 단위 데이터 생성
# incomplete final line found on - Error 발생 시 UTF-8 인코딩 방식으로 재 저장
close(marketing)
# 1.텍스트 파일 가져오기
#----------------------------------------------------
marketing <- file("D:\\sunmoon\\2_Rwork\\2_Rwork\\Part-II/marketing.txt", encoding="UTF-8")
marketing2 <- readLines(marketing) # 줄 단위 데이터 생성
# 1.텍스트 파일 가져오기
#----------------------------------------------------
marketing <- file("D:/SUNMOON_Spring_R_Python_Tensorflow_201908/2_Rwork/Rwork/Part-II/marketing.txt", encoding="UTF-8")
marketing2 <- readLines(marketing) # 줄 단위 데이터 생성
# incomplete final line found on - Error 발생 시 UTF-8 인코딩 방식으로 재 저장
close(marketing)
head(marketing2) # 앞부분 6줄 보기 - 줄 단위 문장 확인
str(marketing2)
# 2. 줄 단위 단어 추출
#----------------------------------------------------
# Map()함수 이용 줄 단위 단어 추출 : Map(f, ...) -> base)
lword <- Map(extractNoun, marketing2)
length(lword) # [1] 472
lword <- unique(lword) # 중복제거1(전체 대상)
length(lword) # [1] 353(119개 제거)
lword <- sapply(lword, unique) # 중복제거2(줄 단위 대상)
length(lword)
class(lword) # list
lword # 추출 단어 확인
# 3. 전처리
#----------------------------------------------------
# 1) 길이가 2~4 사이의 단어 필터링 함수 정의
filter1 <- function(x){
nchar(x) <= 4 && nchar(x) >= 2 && is.hangul(x)
}
# 2) Filter(f,x) -> filter1() 함수를 적용하여 x 벡터 단위 필터링
filter2 <- function(x){
Filter(filter1, x)
}
# 3) 줄 단어 대상 필터링
lword_final <- sapply(lword, filter2)
lword_final # 추출 단어 확인(길이 1개 단어 삭제됨)
# 4. 트랜잭션 생성 : 연관분석을 위해서 단어를 트랜잭션으로 변환
#----------------------------------------------------
# arules 패키지 설치
install.packages("arules")
library(arules)
#--------------------
# arules 패키지 제공 기능
# - Adult,Groceries 데이터 셋
# - as(),apriori(),inspect(),labels(),crossTable()=table()
#-------------------
# as.xxx() # 형변환
wordtran <- as(lword_final, "transactions") # lword에 중복데이터가 있으면 error발생
wordtran
# 트랜잭션 내용 보기 -> 각 트랜잭션의 단어 보기
inspect(wordtran)
# 5.단어 간 연관규칙 산출
#----------------------------------------------------
# 트랜잭션 데이터를 대상으로 지지도와 신뢰도를 적용하여 연관규칙 생성
# 형식) apriori(data, parameter = NULL, appearance = NULL, control = NULL)
tranrules <- apriori(wordtran, parameter=list(supp=0.25, conf=0.05))
# 트랜잭션 내용 보기 -> 각 트랜잭션의 단어 보기
inspect(wordtran)
# 트랜잭션 내용 보기 -> 각 트랜잭션의 단어 보기
inspect(wordtran)
inspect(tranrules) # 연관규칙 생성 결과(59개) 보기
# (1) 데이터 구조 변경 : 연관규칙 -> label 추출
rules <- labels(tranrules, ruleSep=" ")
rules
# 문자열로 묶인 연관단어를 행렬구조 변경
rules <- sapply(rules, strsplit, " ",  USE.NAMES=F)
rules
class(rules) # [1] "list"
# list -> matrix 반환
rulemat <- do.call("rbind", rules)
rulemat
################################
### train/test 과적합 판단
################################
library(psych)
idx <- sample(nrow(galton), nrow(galton)*0.7)
library(psych) # galton dataset
data("galton") # dataset loading
data(Galton)
library(psych) # galton dataset
data(Galton)
library(psych) # galton dataset
install.packages("UsingR")
library(UsingR)
data("galton") # dataset loading
galton
str(galton)
library(UsingR)
data(galton) # dataset loading
str(galton)
library(UsingR)
data(galton) # galton 데이터 셋 가져오기
head(galton,30)
# 단순선형회귀 모델 생성
# 형식) lm(formula= y ~ x 변수, data) # x:독립, y 종속, data=data.frame
setwd("c://Rwork/Part-III")
product <- read.csv("product.csv", header=TRUE)
head(product) # 친밀도 적절성 만족도(등간척도 - 5점 척도)
str(product) # 'data.frame':  264 obs. of  3 variables:
y = product$'제품_만족도' # 종속변수
x = product$'제품_적절성' # 독립변수
df <- data.frame(x, y)
df
# 1) 회귀모델 생성
product_lm <- lm(formula=y ~ x, data=df)
product_lm
# 회귀방정식(1차방정식)
head(df) # x=4, y=3
x=4; y=3
a=0.7393
b=0.7789
y_pred = a*x + b
y_pred # 3.7361
# 오차(잔차:error) = 관측치 - 예측치
err = y - y_pred
err # -0.7361
abs(err) # 0.7361
names(product_lm)
product_lm$residuals[1] # -0.735963
product_lm$fitted.values[1] # 3.735963(예측치)
# 모델의 예측값
fitted.values(product_lm)[1:2] # 3.735963 2.996687
x <- data.frame(x=5) # 설명변수 x 포함
predict(product_lm, x) # 4.475239
x <- data.frame(x=1)
predict(product_lm, x) # 1.518135
# 2) 회귀 모델 결과
summary(product_lm)
# 형식) lm(formula= y ~ x 변수, data) # x:독립, y 종속, data=data.frame
setwd("c://Rwork/Part-III")
product <- read.csv("product.csv", header=TRUE)
head(product) # 친밀도 적절성 만족도(등간척도 - 5점 척도)
str(product) # 'data.frame':  264 obs. of  3 variables:
y = product$'제품_만족도' # 종속변수
x = product$'제품_적절성' # 독립변수
df <- data.frame(x, y)
df
# 1) 회귀모델 생성
product_lm <- lm(formula=y ~ x, data=df)
product_lm
# 회귀방정식(1차방정식)
head(df) # x=4, y=3
x=4; y=3
a=0.7393
b=0.7789
y_pred = a*x + b
y_pred # 3.7361
# 오차(잔차:error) = 관측치 - 예측치
err = y - y_pred
err # -0.7361
abs(err) # 0.7361
names(product_lm)
product_lm$residuals[1] # -0.735963
product_lm$fitted.values[1] # 3.735963(예측치)
# "coefficients"  "residuals" "fitted.values"
# 모델의 예측값
fitted.values(product_lm)[1:2] # 3.735963 2.996687
# 회귀모델 예측 : 친밀도(설명변수) 5인 경우 -> 만족도(반응변수) 예측
# 형식) predict(model, 설명변수)
x <- data.frame(x=5) # 설명변수 x 포함
predict(product_lm, x) # 4.475239
x <- data.frame(x=1)
predict(product_lm, x) # 1.518135
# 기울기와 절편 계산식
y = product$'제품_만족도' # 종속변수
x = product$'제품_적절성' # 독립변수
Cov_xy = mean((x- mean(x)) * (y - mean(y)))
Cov_xy = mean((x- mean(x)) * (y - mean(y)))
Sxx = mean((x-mean(x))**2)
a = Covxy / Sxx
Covxy = mean((x- mean(x)) * (y - mean(y)))
Sxx = mean((x-mean(x))**2)
a = Covxy / Sxx
a
b = mean(y) / (a * mean(x))
b
b = mean(y) / (a - mean(x))
b
b = mean(y) - (a * mean(x))
b
