This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# getwd() | |
# setwd(D:\\BigData\\Source) | |
# | |
x<-c(1:10) | |
x | |
y <- seq(1,20,2) | |
y <- seq(1,by=2, length=10) | |
replace(x,2,8) # X 데이터 변경은 안되고 출력만 | |
x<-replace(x,2,8) #데이터 치환 | |
x | |
#append() : 지정한 위치에 데이터 요소를 삽입 끼워 넣기 | |
#append(데이터, 삽입할 값, 삽입할 위치) | |
append(x,5,7) | |
x | |
# paste() : 반복적으로 데이터에 값을 이어서 입력할 때 사용 | |
paste("no",x) | |
paste(x,"호") | |
x | |
# 평균 | |
mean(x) | |
# 분산 | |
var(x) | |
# 표준편차 | |
sd(x) | |
# 상관계수 | |
cor(x,y) | |
# 최소값 | |
min(x) | |
# 최대값 | |
max(x) | |
# 합 | |
sum(x) | |
# 누적합 : 각 값의 합을 더하는 | |
cumsum(x) | |
# 곱 | |
prod(x) | |
# 범위 | |
range(x) | |
# 길이 | |
length(x) | |
rev(x) | |
sort(x) | |
sort(x,decreasing=T) | |
order(x) | |
order(-x) | |
rank(x) | |
# 데이터에 대한 요약 통계량 | |
summary(x) | |
# 벡터내의 요소 값들이 모두 조건을 만족하는 지 체크 | |
all(x > 8) | |
# 벡터내의 요소 값 중에 조건을 하나라도 만족하는 지 체크 | |
any(x > 8) | |
# 결측값이 있는 데이터 통게 | |
naData <- c(1:10,NA) | |
naData | |
mean(naData) # 결측값이 있어 통계를 낼 수 없다. | |
# subset() : NA(결측값)을 처리하고 출력 | |
subset(naData, x>5) | |
naData[x>5] | |
# which() : 조건을 만족하는 원소들의 인덱스를 출력 리 | |
which(x>5) | |
x | |
# ifelse() : 조건에 따라 실행 | |
# ifelse(조건식,조건이 참일때 명령문, 조건이 거짓일때 명령문) | |
ifelseResult <-ifelse(x %% 2 == 0,"짝수","홀수") | |
ifelseResult | |
#사용자 함수 | |
#함수이름 <- function(매개변수1, 매개변수2, ....){ | |
# 명령어 또는 프로세스 실행 | |
# return (데이터) | |
# } | |
testFunc <- function(x){ | |
reData<-ifelse(x %% 2 == 0, "짝","홀") | |
return (reData) | |
} | |
testFunc(c(3,4,5,6)) | |
testFunc(x) | |
testFunc(2) | |
x | |
x<-append(x,1, 5) | |
x | |
# x에서 데이터가 1인 색인(인덱스)을 검색하여 색인 값을 반 | |
firstFunc1 <- function(x){ | |
return (which(x==1)) | |
} | |
firstFunc1(x) | |
x |
분석 모델을 만든 것
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 김농부는 이전 년도의 날씨정보를 기반으로 내일 비가 오는지 그렇지 않은지를 예측하고자 한다. | |
# | |
# 날씨가 비가 온 날은 1, 비가 오지 않은 날은 0의 값을 갖는 데이터가 있다고 가정하자. | |
# | |
# 이전 k년의 날씨 기록을 기반으로 내일의 날씨를 예측하는데 조건은 k년 중 반 이상 비가 왔을 때 비가 온다고 가정하자. | |
# | |
# 기상 데이터와 예측을 위한 k년을 입력받아 이때 오차율을 계산해보자. | |
# 예측값과 실제값을 비교하여 두 값의 차가 1일 경우 오류이며 오류의 평균을 오차율로 한다. | |
## 실제 프로세스 | |
# 1.데이터를 생성 | |
# 2.예측에 필요한 기본 데이터를 지정(3) | |
# 3.현재 년도 이전까지의 날씨 데이터를 제어 | |
# 3.1 현재 년도의 이전가지 날씨 데이터의 합은 총 비가 온날 -> 누적합 cumsum(x) | |
# 3.2 3.1의 값의 범위인 년도를 나누면 평균값 도출 | |
# 3.3 평균값이 0.5보다 크거나 같으면 비가 온다고 예측 | |
# 3.4 3에서 계산한 예측값과 실제 값이 같은지 그 오차율을 체크 및 계산 | |
# 위의 3번과 4번 프로세스를 predictFunc 함수로 구현 | |
predictFunc <- function(real, basicNum){ | |
# input <- scan() | |
# 실제 데이터를 기준으로 누적합을 계산 | |
cumsum(real) | |
# 누적합을 데이터로 갖는 벡터데이터 cumData를 생성(첫번째 0의 값으로 시작) | |
cumData <- c(0, cumsum(real)) | |
# 함수 내부에서 출력하기 위해서는 print() 사용 | |
print(cumData) | |
# 예측 데이터셋을 생성(벡터데이터, 길이 : 실데이터 길이 - 예측기본 데이터 개수) | |
n <- length(real) | |
predData <- vector(length=n - basicNum) # 배열선언 후 길이 지정 | |
print(predData) | |
for(i in 1:n-basicNum){ | |
predData[i] <- ifelse(cumData[i+basicNum]/(i+basicNum-1) >= 0.5,1,0) | |
} | |
edData<-c(NA,NA,NA,predData) | |
print(predData) | |
print(edData) | |
result <- abs(predData - real[(basicNum+1):n]) # : 이 우선순위가 높다 | |
# abs 절대값 | |
return(mean(result)) # 예측 오차율 | |
} | |
# 벡터데이터 real은 실제 비가 온 날을 1로 한 실데이터 | |
real <- c(1,0,0,1,0,1,1,0,1,1) | |
# basicNum 데이터는 예측의 기본 데이터가 되는 년수 | |
basicNum <- 3 | |
# 모든 프로세스는 predictFunc에서 실행 | |
predictFunc(real,basicNum) | |
x<-c(1:5) | |
y<-c(7:11) | |
x+y#같은 인덱스 끼리 연산 | |
year <- c(2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018) | |
# | |
da <- c(0,1,1,1,2,2,3,4,4,5) | |
ye <- c(NA,NA,NA,0,1,0,1,1,1,1) | |
resu <- c(NA,NA,NA,X,X,X,O,X,O,O) | |
dd <- data.frame(year,da,ye,resu) | |
여기까지가 통계인가요 ...
수치 데이터는 바꿀수 없지만 환경 데이터는 바꿀수 있다.
데이터 분석 오차율 0.2 -> 앞의 확률이 적다면( > 0.2, 1,0)
데이터 분석을 할때 정답은 없다.
0.2라는 값과 0.5라는 모델이 나오면
데이터가 부정확함에도 불구하고 최소한의 오차율이 나오게 한다면 과연 맞는 것일까?
행렬
R에서 행렬의 내부 저장 공간은 열 우선 배열방식 (80년대 책을 생각해보면)
행렬에 데이터를 저장시, 1번 열, 2번 열 .. 순으로 저장
matrix() 함수 : 행렬을 만드는 함수
nrow, ncol : 행과 열의 수를 지정하는 인수, 모두 지정할 필요 없음
length 데이터 개수, mode 데이터 타입, dim 행과 열의 개수, dimnames 행과 열의 이름
행렬 간 곱, 행렬-상수 간 곱, 행렬 간 합 같은 선형 대수 연산이 가능
0행렬 전치행렬,
상삼각행렬,
하삼각행렬
apply 함수 알아보깅
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
getwd() | |
# 행렬(Matrix) : 행과 열로 구성된 데이터 형태 | |
# 행렬의 생성 | |
m <- matrix(c(1:9)) | |
# m 데이터의 형태를 출력 : Class(데이터) | |
class(m) | |
m | |
# 3행 3열의 행렬을 생성 | |
m <- matrix(c(1:9),nrow = 3, ncol = 3) | |
m | |
# 열 우선이기 때문에 | |
m <- matrix(c(1:9), nrow = 3) | |
m | |
# 데이터 원소의 개수가 행과 열에 입력되는 개수보다 크면 나머지 데이터 원소를 버림 | |
m <- matrix(c(1:11),nrow = 3, ncol = 3) | |
m | |
# 데이터 원소가 행과 열에 모두 입력하고도 행과 열에 데이터가 모두 입력되지 않으면 | |
# 데이터 원소의 첫 원소부터 입력 | |
m <- matrix(c(1:11), nrow = 3) | |
m | |
# 행렬 m은 2행 2열의 matrix를 선언하고 | |
m <- matrix(nrow=2, ncol=2) #선언만 되고 데이터는 입력 되지 않은 상태 NA들어가 있음. | |
# 1행 1열에는 1, 1행 2열에는 2, 2행 1열에는 3, 2행 2열에는 4를 입력 | |
m[1,1] <- 1 | |
m[1,2] <- 2 | |
m[2,1] <- 3 | |
m[2,2] <- 4 | |
m | |
# 행렬은 열 우선으로 입력을 하는데 행우선으로 입력을 받고 싶을 때 byrow속성을 사용 | |
m <- matrix(c(1:10), nrow=2, byrow=T) #행이 2개 열이 5개 생성됨 byrow=Ture | |
m | |
# 행렬의 이름을 지정 : dimnames(행렬) | |
dimnames(m) <- list(paste("row",c(1:2)),paste("col",c(1:5))) | |
m | |
# 해렬의 행과 열의 개수를 벡터 데이터 형식으로 출력 | |
dim(m) | |
# lenght() : 행렬의 길이 | |
length(m) | |
# 행렬간의 대수 연산 | |
m <- matrix(c(1:4),nrow=2) | |
m | |
m+m | |
m+3 | |
m*m | |
# 행렬의 곱 | |
m %*% m | |
# 데이터 연결할 때 사용하는 함수: cbind(), rbind() | |
v1 <- c(1:3) | |
v2 <- c(4:6) | |
v3 <- c(7:9) | |
v1 | |
v2 | |
v3 | |
# 행기준으로 결합 | |
m <- rbind(v1,v2,v3) | |
# 열 기준으로 결합 | |
cbind(v1,v2,v3) | |
dimnames(m) | |
tmp <- matrix(c(1:9), nrow=3) | |
tmp | |
# 행렬 tmp의 1행의 값 | |
tmp[1,] | |
class(tmp) | |
class(tmp[1,]) | |
# 행렬 tmp에서 3열의 값 | |
tmp[,3] | |
# 행렬 tmp에서 4보다 큰 값 | |
m[m>4] #읽는 순서는 행우선으로 읽는다 | |
# 행렬 tmp의 3열에서 7보다 큰 값의 열을 찍어준다 | |
m[m[,3]>7] | |
m[m[,3]>7, 1] #첫번째 열의 값을 찍어준다 | |
m[m[3,]>7, 1] #인덱스 값을 찍어준다. | |
# 행렬의 2행과 3열을 제외하고 출력 | |
m[-2,-3] | |
# 행렬에서 2열과 3열을 출력 | |
m[,2:3] | |
# 모든 관계 연산자는 답이 논리형 m[,3] > 5 크냐 작냐 FALSE TRUE TRUE | |
m[,3] > 5 |