본문 바로가기
프로그래밍/하루하루

빅데이터 2

by Luhie 2017. 7. 25.
# 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
view raw R03_Vector.R hosted with ❤ by GitHub


분석 모델을 만든 것

# 김농부는 이전 년도의 날씨정보를 기반으로 내일 비가 오는지 그렇지 않은지를 예측하고자 한다.
#
# 날씨가 비가 온 날은 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)
view raw R04_Example1.R hosted with ❤ by GitHub


여기까지가 통계인가요 ...


수치 데이터는 바꿀수 없지만 환경 데이터는 바꿀수 있다.

데이터 분석 오차율 0.2 -> 앞의 확률이 적다면( > 0.2, 1,0) 


데이터 분석을 할때 정답은 없다. 

0.2라는 값과 0.5라는 모델이 나오면

데이터가 부정확함에도 불구하고 최소한의 오차율이 나오게 한다면 과연 맞는 것일까?



행렬

R에서 행렬의 내부 저장 공간은 열 우선 배열방식 (80년대 책을 생각해보면)

행렬에 데이터를 저장시, 1번 열, 2번 열 .. 순으로 저장

matrix() 함수 : 행렬을 만드는 함수

nrow, ncol : 행과 열의 수를 지정하는 인수, 모두 지정할 필요 없음

length 데이터 개수, mode 데이터 타입, dim 행과 열의 개수, dimnames 행과 열의 이름

행렬 간 곱, 행렬-상수 간 곱, 행렬 간 합 같은 선형 대수 연산이 가능

0행렬 전치행렬,

상삼각행렬,

하삼각행렬



apply 함수 알아보깅


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
view raw R05_Matrix.P hosted with ❤ by GitHub



'프로그래밍 > 하루하루' 카테고리의 다른 글

빅데이터 3  (0) 2017.07.26
데이터베이스 1  (0) 2017.07.24
UX/UI  (2) 2017.07.20