# 아래 내용은 SAF(SUNATFOOD) 데이터분석과정 중 통계학 관련 정보 중 기초적으로 이해하고자 하는 부분을 간략하게 정리하기 위해서 만든 자료임.
# 참고된 자료는 하단의 참고링크 및 내역에 공유한다.
관측되거나 측정, 수집된 자료는 서로 다른 것들과는 구분되는 특성을 가지게 되는데, 척도(Scale)는 이러한 자료의 특성을 정의하는 구분자로 말할 수 있다. 통계학에서 사용하는 척도로는 명목, 순위, 간격, 비 척도의 네가지로 구분된다.
* 범주형 자료(Categorical Data) = 질적자료(Qualiative Data)
* 연속형 자료(Numerical Data) = 양적자료(Quantitative Data)
1. 명목척도(nominal scale)
설명(남,여), 객층구분(성인, 어린이, 외국인), 직군구분(홀-FOH, 주방-BOH) 등 자료를 구성하는 값들이 특정 상태를 지정할 경우 명목 척도 자료라고 한다. 범주형(Category) 자료이기 때문에 사칙연산이나 수학적인 함수 사용에 대한 조작이 불가능 하다.
2. 순위척도(ordinal scale)
매출순위(1위~30위), 쿠폰반응(좋음, 보통, 나쁨) 등과 같이 자료를 구성하는 특성 상태와 순위정보도 가지고 있는 경우를 말한다. 명목 척도와 같이 범주형자료 임. 그러나 1위, 2위 처럼 순위를 구분하기 위한 숫자가 쓰여 있긴 하지만 숫자에 대한 의미보다는 구분을 위한 표현이라고 할 수 있다. 명목척도와 같이 순위 척도는 사칙연산에 활용할 수 없지만 특성의 값을 무시하거나 좋음, 보통, 나쁨을 숫자형 자료로 환산하여 1, 0, -1 등으로 활용한다면 활용은 가능하다.
3. 간격척도(interval scale)
거리척도라고도 한다. 특정한 상태의 지칭이나 대소관계 개념 외에도 측정치간의 간격에 의미를 부여할 수 있을 때 이러한 변수를 간격척도라고 한다. 온도의 경우 20도와 30도의 차이가 10도인것과 같이 90도와 100도의 차이가 10도는 동일하다고 할 수 있다. 수학적인 덧샘과 뺄샘은 가능하나 곱셈과 나눗셈은 불가능하다는 특징을 가지고 있다. 위의 명목, 순위척도와 달리 연속형 자료이다. 평균, 중앙값 등과 같은 기술 통계량을 계산할 수 있다.
4. 비율 척도(ratio scale)
절대 영점을 가지고 있으며, 자연계에서 관측되거나 측정되는 거의 모든 수치가 비 척도로 표시 된다. 예를들어 체지방량이 20인 사람과 40인사람의 경우 20만큼의 체지방량의 차이가 있다고 할수 있다. 또한 체지방량이 2배라고도 할 수 있다. 일상생활에서 자주 보는 연속형 자료에 해당이 된다. 또한 자료 변환을 통하여 명목척도나 간격척도로도 활용이 가능하다.
20여년간 외식전문기업에서 디지털전화과 혁신에 관한 일을 하면서 경험하게 된 다양한 이야기를 나만의 방식으로 풀어 내고자 한다. 외식기업 뿐 아니라 소상공인 모두 지속가능한 성장을 위해서 이제는 반드시 필요 한 것이 디지털 기술의 활용이며 우리의 변화가 필요 하다.
2014년 6월 10일 화요일
2014년 6월 2일 월요일
[SAF] 데이터분석 과정 2주차 - 기초 실습
#1 - 변수 값 할당
##대입연산자 <- 단축키 ( Alt + - )
a <- 1
x <- 3
print(a)
## [1] 1
print(x)
## [1] 3
#2 - 변수를 출력하는 방식 - print()
x <- c("TR", "MG", "SH", "KR")
print(x)
## [1] "TR" "MG" "SH" "KR"
#3 - 변수 연산
print(c(1*pi, 2*pi, 3*pi, 4*pi))
## [1] 3.142 6.283 9.425 12.566
#4 - 변수 논리값
c(TRUE, FALSE, TRUE, FALSE)
## [1] TRUE FALSE TRUE FALSE
c(true, false, true)
## Error: 객체 'true'를 찾을 수 없습니다
#5 - 변수 결합
v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
v3 <- c(v1, v2)
v3
## [1] 1 2 3 4 5 6
#6 - 수열
1:5
## [1] 1 2 3 4 5
b <- 2:10
b
## [1] 2 3 4 5 6 7 8 9 10
10:19
## [1] 10 11 12 13 14 15 16 17 18 19
19:10
## [1] 19 18 17 16 15 14 13 12 11 10
e <- 10:2
e
## [1] 10 9 8 7 6 5 4 3 2
#7 - seq(from=시작점, to=끝점, by=간격)
seq(from=0, to=20, by=2)
## [1] 0 2 4 6 8 10 12 14 16 18 20
seq(from=0, to=20, length.out=5)
## [1] 0 5 10 15 20
# 소수점의 표기가 있는 경우
seq(from=1.0, to=20.0, length.out=5)
## [1] 1.00 5.75 10.50 15.25 20.00
seq(0, 20, by=2)
## [1] 0 2 4 6 8 10 12 14 16 18 20
seq(0, 10, length=20)
## [1] 0.0000 0.5263 1.0526 1.5789 2.1053 2.6316 3.1579 3.6842
## [9] 4.2105 4.7368 5.2632 5.7895 6.3158 6.8421 7.3684 7.8947
## [17] 8.4211 8.9474 9.4737 10.0000
#8 - rep(반복할 내용, 반복할 수)
rep(1, time=5)
## [1] 1 1 1 1 1
rep(1:2, each=2)
## [1] 1 1 2 2
c <- 1:5
c
## [1] 1 2 3 4 5
rep(c,5)
## [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(c, each=5)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
#9 - paste(" 붙일 내용붙일 내용 " , sep= '''')
A <- c( " a" , "b" , "c")
A
## [1] " a" "b" "c"
paste( "a" , "b" , sep="")
## [1] "ab"
paste(A , c("d", "e"))
## [1] " a d" "b e" "c d"
f <- paste( A, 10)
f
## [1] " a 10" "b 10" "c 10"
paste(A , 10, sep= "")
## [1] " a10" "b10" "c10"
paste(A,1: 10, sep="_" )
## [1] " a_1" "b_2" "c_3" " a_4" "b_5" "c_6" " a_7" "b_8"
## [9] "c_9" " a_10"
paste("Everybody" , "loves" , "cats.")
## [1] "Everybody loves cats."
#10 - Substr(문자열 , 시작, 끝)
substr ("BigDat aAnalys i s" , 1,4)
## [1] "BigD"
ss <- c( "Moe ", "Larry", "Cur ly")
substr (ss , 1, 3)
## [1] "Moe" "Lar" "Cur"
#11 - 논리값 & 논리연산자
a <- 3
a == pi
## [1] FALSE
a != pi
## [1] TRUE
a < pi
## [1] TRUE
a <= pi
## [1] TRUE
a > pi
## [1] FALSE
a >= pi
## [1] FALSE
#12 - Matrix
# matrix( 이름, 행 수, 열 수)
# dim() 행렬의 행과 열 수를 반환
theData<- c(1.1, 1.2, 2.1, 2.2, 3.1,3.2)
mat<-matrix(theData ,2, 3)
mat
## [,1] [,2] [,3]
## [1,] 1.1 2.1 3.1
## [2,] 1.2 2.2 3.2
dim(mat)
## [1] 2 3
diag(mat)
## [1] 1.1 2.2
#diag( 행렬) 행렬의 대 각선 에 있는 값을 반환
#t() Matrix Transpose
t(mat)
## [,1] [,2]
## [1,] 1.1 1.2
## [2,] 2.1 2.2
## [3,] 3.1 3.2
help(t)
## starting httpd help server ... done
# colnamesO 열 네임을 조회
# rownamesO 행 네임을 조회
mat
## [,1] [,2] [,3]
## [1,] 1.1 2.1 3.1
## [2,] 1.2 2.2 3.2
colnames(mat) <- c(" IBM" , "MS", "GOOGLE" )
rownames(mat) <- c( "IBM" , "MS")
mat[1,] #첫째 행
## IBM MS GOOGLE
## 1.1 2.1 3.1
mat[,3] #셋째 열
## IBM MS
## 3.1 3.2
A <- matrix(0, 4,5)
A <- matrix(1:20 ,4, 5)
A
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
#1행, 4행, 2열, 3열 조회
A[c(1, 4), c(2, 3)]
## [,1] [,2]
## [1,] 5 9
## [2,] 8 12
#값을 대체
A[c(1 , 4) , c(2 ,3)] <- 1
#13 - List() 리스트에서 원소들은 다른 모드
lst <- list(3.14, "Mode", c(1 , 1.2, 3), mean)
lst
## [[1]]
## [1] 3.14
##
## [[2]]
## [1] "Mode"
##
## [[3]]
## [1] 1.0 1.2 3.0
##
## [[4]]
## function (x, ...)
## UseMethod("mean")
## <bytecode: 0x00000000085711a0>
## <environment: namespace:base>
a <-1:10
b <- matrix(1:10, 2, 5)
c <- c("name1", "name2")
alst <- list(a=a , b=b , c=c)
alst
## $a
## [1] 1 2 3 4 5 6 7 8 9 10
##
## $b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
##
## $c
## [1] "name1" "name2"
str(alst)
## List of 3
## $ a: int [1:10] 1 2 3 4 5 6 7 8 9 10
## $ b: int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10
## $ c: chr [1:2] "name1" "name2"
alst$a
## [1] 1 2 3 4 5 6 7 8 9 10
alst$b
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
alst$c
## [1] "name1" "name2"
alst[[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
alst[[1]][[2]]
## [1] 2
#14 - Dataframe
a <- c(1 , 2, 4, 6, 3,4)
b <- c(6 , 4 , 2, 4, 3.2 , 4)
c <- c(7 , 6 , 4, 2, 5,6)
d <- c(2 , 4 , 3, 1, 5, 6)
e <- data.frame(a , b, c, d)
e
## a b c d
## 1 1 6.0 7 2
## 2 2 4.0 6 4
## 3 4 2.0 4 3
## 4 6 4.0 2 1
## 5 3 3.2 5 5
## 6 4 4.0 6 6
# rbind(dfrml, dfrm2) 두 데이터 프레임의 행을 추가 할 때 사용
# cbind(dfrml, dfrm2) 두 데이터 프레임의 열을 추가 할 때 사용
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
newRow <- data.frame (Sepal.Length=3.0, Sepal.Width=3.2, Petal.Length=1.6, Petal.Width=0.3, Species="newsetosa")
newRow
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 3 3.2 1.6 0.3 newsetosa
iris <- rbind(iris , newRow)
iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 "aperm" virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
## 151 3.0 3.2 1.6 0.3 newsetosa
dim(iris)
## [1] 151 5
newcol <- 1:151
iris <- cbind(iris , newcol)
name <- c("john" , "peter" , "jennifer" )
gender <- factor (c( "m" , "m" , "f" ))
hw1 <- c(60, 60 ,80)
hw2 <- c( 40 , 50 ,30)
grades <- data.frame(name , gender , hw1 , hw2)
grades
## name gender hw1 hw2
## 1 john m 60 40
## 2 peter m 60 50
## 3 jennifer f 80 30
grades[1 , 2]
## [1] m
## Levels: f m
grades[ , "name"]
## [1] john peter jennifer
## Levels: jennifer john peter
grades$name
## [1] john peter jennifer
## Levels: jennifer john peter
grades[grades$gender=="m",]
## name gender hw1 hw2
## 1 john m 60 40
## 2 peter m 60 50
# subset(dataframe, select=열이름) : 데이터세 트에 서 조건에 맞는 내용을 조회
subset(iris , select=Species, subset=(Petal.Length> 1.7))
## Species
## 25 setosa
## 45 setosa
## 51 versicolor
## 52 versicolor
## 53 versicolor
## 54 versicolor
## 55 versicolor
## 56 versicolor
## 57 versicolor
## 58 versicolor
## 59 versicolor
## 60 versicolor
## 61 versicolor
## 62 versicolor
## 63 versicolor
## 64 versicolor
## 65 versicolor
## 66 versicolor
## 67 versicolor
## 68 versicolor
## 69 versicolor
## 70 versicolor
## 71 versicolor
## 72 versicolor
## 73 versicolor
## 74 versicolor
## 75 versicolor
## 76 versicolor
## 77 versicolor
## 78 versicolor
## 79 versicolor
## 80 versicolor
## 81 versicolor
## 82 versicolor
## 83 versicolor
## 84 versicolor
## 85 versicolor
## 86 versicolor
## 87 versicolor
## 88 versicolor
## 89 versicolor
## 90 versicolor
## 91 versicolor
## 92 versicolor
## 93 versicolor
## 94 versicolor
## 95 versicolor
## 96 versicolor
## 97 versicolor
## 98 versicolor
## 99 versicolor
## 100 versicolor
## 101 virginica
## 102 virginica
## 103 virginica
## 104 virginica
## 105 virginica
## 106 virginica
## 107 virginica
## 108 virginica
## 109 virginica
## 110 virginica
## 111 virginica
## 112 virginica
## 113 virginica
## 114 virginica
## 115 virginica
## 116 virginica
## 117 virginica
## 118 virginica
## 119 virginica
## 120 virginica
## 121 virginica
## 122 virginica
## 123 virginica
## 124 virginica
## 125 virginica
## 126 virginica
## 127 virginica
## 128 virginica
## 129 virginica
## 130 virginica
## 131 virginica
## 132 virginica
## 133 virginica
## 134 virginica
## 135 virginica
## 136 virginica
## 137 virginica
## 138 virginica
## 139 virginica
## 140 virginica
## 141 virginica
## 142 virginica
## 143 virginica
## 144 virginica
## 145 virginica
## 146 virginica
## 147 virginica
## 148 virginica
## 149 virginica
## 150 virginica
subset(iris, select=c(Sepal.Length, Petal.Length, Species), subset=c(Sepal.Width==3.0 & Petal.Width==0.2))
## Sepal.Length Petal.Length Species
## 2 4.9 1.4 setosa
## 26 5.0 1.6 setosa
## 39 4.4 1.3 setosa
#with(dataframe , 열 이름)
head(with(iris , Species))
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica newsetosa
help(with)
#merge(dfl, df2 , by="dfl와 df2의 공통된 열의 이름")
name<-c("TR", "MG", "SH", "PK")
year.born<-c(1995 , 2000, 2009, 2013)
place.born<-c ( "USA" , "KR" , "CHI" , "KR")
born <- data.frame(name, year.born, place.born)
born
## name year.born place.born
## 1 TR 1995 USA
## 2 MG 2000 KR
## 3 SH 2009 CHI
## 4 PK 2013 KR
name<-c("TR" , "MG" , "SH")
year.died<-c(2100 , 2300 , 2500)
died <- data.frame(name, year.died)
died
## name year.died
## 1 TR 2100
## 2 MG 2300
## 3 SH 2500
#데이터프레인 두가지를 이름 항목으로 조합하는 예
merge(born , died , by="name")
## name year.born place.born year.died
## 1 MG 2000 KR 2300
## 2 SH 2009 CHI 2500
## 3 TR 1995 USA 2100
help(merge)
#15 - Sample Source
install.packages("ggplot2")
## Error: trying to use CRAN without setting a mirror
library(ggplot2)
data(movies)
head(movies)
## title year length budget rating votes r1 r2 r3
## 1 $ 1971 121 NA 6.4 348 4.5 4.5 4.5
## 2 $1000 a Touchdown 1939 71 NA 6.0 20 0.0 14.5 4.5
## 3 $21 a Day Once a Month 1941 7 NA 8.2 5 0.0 0.0 0.0
## 4 $40,000 1996 70 NA 8.2 6 14.5 0.0 0.0
## 5 $50,000 Climax Show, The 1975 71 NA 3.4 17 24.5 4.5 0.0
## 6 $pent 2000 91 NA 4.3 45 4.5 4.5 4.5
## r4 r5 r6 r7 r8 r9 r10 mpaa Action Animation Comedy Drama
## 1 4.5 14.5 24.5 24.5 14.5 4.5 4.5 0 0 1 1
## 2 24.5 14.5 14.5 14.5 4.5 4.5 14.5 0 0 1 0
## 3 0.0 0.0 24.5 0.0 44.5 24.5 24.5 0 1 0 0
## 4 0.0 0.0 0.0 0.0 0.0 34.5 45.5 0 0 1 0
## 5 14.5 14.5 4.5 0.0 0.0 0.0 24.5 0 0 0 0
## 6 14.5 14.5 14.5 4.5 4.5 14.5 14.5 0 0 0 1
## Documentary Romance Short
## 1 0 0 0
## 2 0 0 0
## 3 0 0 1
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
#title 변수에서 skies가 들어간 행 + title , year, rating 변수열 6줄을 조회했다.
#grep(조회할 문자패 턴, data)
head( movies [grep("skies" , movies$title, ignore.case=T) ,c( "title" , "year" , "rating" )] )
## title year rating
## 38 'Neath Canadian Skies 1946 5.4
## 39 'Neath the Arizona Skies 1934 4.6
## 853 Ace Eli and Rodger of the Skies 1973 5.7
## 6512 Blue Montana Skies 1939 5.8
## 6527 Blue Skies 1946 6.3
## 6528 Blue Skies Again 1983 4.9
pattern = "^Summer.*?"
ndx <- grep(pattern , movies$title )
grep(pattern , movies$title )
## [1] 49825 49826 49827 49828 49829 49830 49831 49832 49833 49834 49835
## [12] 49836 49837 49838 49839 49840 49841 49842 49843 49844 49845 49846
## [23] 49847 49848 49849 49850 49851 49852 49853 49854 49855 49856 49857
## [34] 49858 49859 49860 49861 49862 49863 49864 49865 49866 49867 49868
## [45] 49869 49870 49871
head(movies[ndx , "title"])
## [1] "Summer" "Summer Blues" "Summer Camp"
## [4] "Summer Camp Girls" "Summer Camp Nightmare" "Summer Catch"
#벡터에 있는 원소 선택
fib<-c(0 , 1, 1, 2, 3, 5, 8, 13 , 21 , 34)
fib
## [1] 0 1 1 2 3 5 8 13 21 34
fib[1]
## [1] 0
fib[3]
## [1] 1
fib[1:3]
## [1] 0 1 1
fib[c(1 , 2, 4, 8)]
## [1] 0 1 2 13
fib[-1]
## [1] 1 1 2 3 5 8 13 21 34
fib[-c(1:3)]
## [1] 2 3 5 8 13 21 34
fib < 10
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
fib[fib<10]
## [1] 0 1 1 2 3 5 8
fib%%2==0
## [1] TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE
fib[fib%%2==0]
## [1] 0 2 8 34
# as.data. frame(x): 데이터 프레임 형식으로 변환
# as.list(x) 리스트 형식으로 변환.
# as.matrix(x): 행 렬 형 식 으로 변환
# as.vector(x) 벡터 형식으로 변환
# as.factor(x): 팩터 (factor) 형식으로 변환
as.numeric("3.14")
## [1] 3.14
as.integer(3.14)
## [1] 3
as.numeric("Foo")
## Warning: 강제형변환에 의해 생성된 NA 입니다
## [1] NA
# NA or NULLL
as.character(101)
## [1] "101"
as.numeric(FALSE)
## [1] 0
as.numeric(TRUE)
## [1] 1
#문자열을 날짜로 변환
# Sys. Date(): 현재 날짜를 반환
# as.Date(): 날짜 객체로 변환
Sys.Date( )
## [1] "2014-06-02"
as.Date("2013-08-13")
## [1] "2013-08-13"
as.Date("08/13/2013")
## Error: character string is not in a standard unambiguous format
as.Date("08/13/2013", format="%m/%d/%Y")
## [1] "2013-08-13"
#날짜를 문자열로
#format(날짜, 포뱃)
as.Date("08/13/2013", format="%m/%d/%Y")
## [1] "2013-08-13"
format(Sys.Date())
## [1] "2014-06-02"
format(Sys.Date(), format="%m/%d/%Y")
## [1] "06/02/2014"
format(Sys.Date(), '%a')
## [1] "월"
format(Sys.Date(), '%b')
## [1] "6"
format(Sys.Date(), '%B')
## [1] "6월"
format(Sys.Date(), '%d')
## [1] "02"
format(Sys.Date(), '%m')
## [1] "06"
format(Sys.Date(), '%y')
## [1] "14"
format(Sys.Date(), '%Y')
## [1] "2014"
#Missing
a <- 0/0
a
## [1] NaN
is.nan(a)
## [1] TRUE
b <- log(0)
b
## [1] -Inf
is.finite(b)
## [1] FALSE
c <- c(0:4, NA)
is.na(c)
## [1] FALSE FALSE FALSE FALSE FALSE TRUE
# 데이터를 삭제 하는 rm()
rm(a)
rm(list=ls(all=TRUE))
data(iris)
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.30 Min. :2.00 Min. :1.00 Min. :0.1
## 1st Qu.:5.10 1st Qu.:2.80 1st Qu.:1.60 1st Qu.:0.3
## Median :5.80 Median :3.00 Median :4.35 Median :1.3
## Mean :5.84 Mean :3.06 Mean :3.76 Mean :1.2
## 3rd Qu.:6.40 3rd Qu.:3.30 3rd Qu.:5.10 3rd Qu.:1.8
## Max. :7.90 Max. :4.40 Max. :6.90 Max. :2.5
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
head(iris, 10)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
#install.packages("party")
#library(party)
# vignette("알고 싶은 package 이 름")
#vignette("party")
#q()
#Data 를 저장하고 읽어들이기
data(iris)
iris <- as.matrix(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## [1,] "5.1" "3.5" "1.4" "0.2" "setosa"
## [2,] "4.9" "3.0" "1.4" "0.2" "setosa"
## [3,] "4.7" "3.2" "1.3" "0.2" "setosa"
## [4,] "4.6" "3.1" "1.5" "0.2" "setosa"
## [5,] "5.0" "3.6" "1.4" "0.2" "setosa"
## [6,] "5.4" "3.9" "1.7" "0.4" "setosa"
dim(iris)
## [1] 150 5
#setwd("D:/SysData/GoogleDrive/빅데이터/Education/SAF_Education/saf_example")
#rm(iris)
#write.csv(iris, file='iris.csv')
#iris <- read.csv("D:/SysData/GoogleDrive/빅데이터/Education/SAF_Education/saf_example/iris.csv")
#summary(iris)
#iris <- as.data.frame(iris)
#str(iris)
#a <- iris$Species
#save(a,file="exercise.Rdata")
2014년 5월 28일 수요일
[Using R] Operator Syntax and Precedence
Ref. Paul Teetor의 R Cookbook. Copyright 2011 Paul Teetor, ISBN : 9780596809157
연산자에 대한 우선순위를 잘못쓰는 경우는 정말 자주 발생을 하게 된다. 내 스스로가 프로그래밍을 하면서도 많이 격게되는 실수도 아주 지극히 사소한 부분에서 발생 하는 경우가 많은 것은 동일 선상에 있는 경우와 같다. 사소한 부분을 챙기는 것이 기초가 된다는걸 누구보다 공감한다.
#아래와 같은 예제를 보자
> n <- 10
# 0 에서 부터 n-1 = 9 까지 숫자를 생성할 것이라 생각했다면? 오류다.
> 0:n-1
[1] -1 0 1 2 3 4 5 6 7 8 9
R은 주어진 식을 ( 0 : n ) - 1 로 인식하기 때문이다.
R은 또한 %...% 기호사이의 문자를 이항연산자로 해석한다.
1) %% - 나머지 연산자
2) %/% - 정수나눗셈 (나머지를 버리고 몫만 취하는 나눗셈
3) %*% - 행렬곱셈
4) %in% - 왼쪽 피연산자가 오른쪽 피연산자에 나타나면 TRUE를 반환
Web Site Ref --> http://stat.ethz.ch/R-manual/R-patched/library/base/html/Syntax.html
The following unary and binary operators are defined.
They are listed in precedence groups, from highest to lowest.
연산자에 대한 우선순위를 잘못쓰는 경우는 정말 자주 발생을 하게 된다. 내 스스로가 프로그래밍을 하면서도 많이 격게되는 실수도 아주 지극히 사소한 부분에서 발생 하는 경우가 많은 것은 동일 선상에 있는 경우와 같다. 사소한 부분을 챙기는 것이 기초가 된다는걸 누구보다 공감한다.
#아래와 같은 예제를 보자
> n <- 10
# 0 에서 부터 n-1 = 9 까지 숫자를 생성할 것이라 생각했다면? 오류다.
> 0:n-1
[1] -1 0 1 2 3 4 5 6 7 8 9
R은 주어진 식을 ( 0 : n ) - 1 로 인식하기 때문이다.
R은 또한 %...% 기호사이의 문자를 이항연산자로 해석한다.
1) %% - 나머지 연산자
2) %/% - 정수나눗셈 (나머지를 버리고 몫만 취하는 나눗셈
3) %*% - 행렬곱셈
4) %in% - 왼쪽 피연산자가 오른쪽 피연산자에 나타나면 TRUE를 반환
Web Site Ref --> http://stat.ethz.ch/R-manual/R-patched/library/base/html/Syntax.html
The following unary and binary operators are defined.
They are listed in precedence groups, from highest to lowest.
:: ::: | access variables in a namespace |
$ @ | component / slot extraction |
[ [[ | indexing |
^ | exponentiation (right to left) |
- + | unary minus and plus |
: | sequence operator |
%any% | special operators (including %% and %/% ) |
* / | multiply, divide |
+ - | (binary) add, subtract |
< > <= >= == != | ordering and comparison |
! | negation |
& && | and |
| || | or |
~ | as in formulae |
-> ->> | rightwards assignment |
<- <<- | assignment (right to left) |
= | assignment (right to left) |
? | help (unary and binary) |
2014년 5월 27일 화요일
[Using R] R Cook Book #2 Sample - seq(), rep()
기본적으로 생성함수인 c() 함수를 활용하나 일일이 값을 넣어 주는 경우는 극히 드물것이라 생각이 든다. 아래의 수열생성하기에 활용되는 seq(), rep() 함수를 활용한 예제를 볼 수 있다.
# 0 부터 20 까지 값 2씩 증가 하여 생성
> seq(from=0, to=20, by=2)
[1] 0 2 4 6 8 10 12 14 16 18 20
# 0 부터 20 까지 5개의 변수를 생성
> seq(from=0, to=20, length.out=5)
[1] 0 5 10 15 20
# 0 부터 100 까지 5개의 변수를 생성
> seq(from=0, to=100, length.out=5)
[1] 0 25 50 75 100
# 0 부터 20 까지 5개의 변수를 생성 (단, 소수점 추가)
> seq(from=1.0, to=100.0, length.out=5)
[1] 1.00 25.75 50.50 75.25 100.00
# rep() 반복을 의미 함 PI값을 5번 반복 생성
> rep(pi, times=5)
[1] 3.141593 3.141593 3.141593 3.141593 3.141593
#예제 활용 값 생성
> fib <- c(0, 1, 1, 2, 3, 4, 5, 8, 13, 21, 34)
> fib
[1] 0 1 1 2 3 4 5 8 13 21 34
# 백터값 원소를 접근하는 방식 첫번째에서 부터 세번째 값 까지 접근
> fib[1:3]
[1] 0 1 1
# 백터값 원소를 접근하는 방식 첫번째, 세번째, 다섯번째 값 접근
> fib[c(1,3,5)]
[1] 0 1 3
# 백터값 원소 중 첫번째를 제외한 모든 값
> fib[-1]
[1] 1 1 2 3 4 5 8 13 21 34
#중앙값 보다 큰 모든 원소를 선택
> fib[ fib > median(fib)]
[1] 5 8 13 21 34
# 상하위 5%안에 있는 모든 원소를 선택
> fib[ (fib < quantile(fib, 0.05)) | (fib > quantile(fib, 0.95)) ]
[1] 0 34
# 평균에서 +_ 표준편자를 넘는 모든 원소를 선택
> fib[ abs(fib-mean(fib)) > 2*sd(fib)]
[1] 34
#NA나 NULL이 아닌 모든 원소 선택
> fib[ !is.na(fib) & !is.null(fib)]
[1] 0 1 1 2 3 4 5 8 13 21 34
# 백터값 생성 후 개별적으로 이름을 줄수도 있다.
> year <- c(1979, 1980, 2011, 2012)
> names(year) <- c("John", "Umsh", "JunSeok", "BeomSeok")
> year
John Umsh JunSeok BeomSeok
1979 1980 2011 2012
#이름을 통한 원소 접근이 가능 하다.
> year["John"]
John
1979
# Sample Source - NA value
> x <- c(0, 1, 1, 2, 3, NA)
> mean(x, na.rm=TRUE)
[1] 1.4
> sd(x, na.rm=TRUE)
[1] 1.140175
** Reference Book
** R Cookbook - ISBN 9780596809157
# 0 부터 20 까지 값 2씩 증가 하여 생성
> seq(from=0, to=20, by=2)
[1] 0 2 4 6 8 10 12 14 16 18 20
# 0 부터 20 까지 5개의 변수를 생성
> seq(from=0, to=20, length.out=5)
[1] 0 5 10 15 20
# 0 부터 100 까지 5개의 변수를 생성
> seq(from=0, to=100, length.out=5)
[1] 0 25 50 75 100
# 0 부터 20 까지 5개의 변수를 생성 (단, 소수점 추가)
> seq(from=1.0, to=100.0, length.out=5)
[1] 1.00 25.75 50.50 75.25 100.00
# rep() 반복을 의미 함 PI값을 5번 반복 생성
> rep(pi, times=5)
[1] 3.141593 3.141593 3.141593 3.141593 3.141593
#예제 활용 값 생성
> fib <- c(0, 1, 1, 2, 3, 4, 5, 8, 13, 21, 34)
> fib
[1] 0 1 1 2 3 4 5 8 13 21 34
# 백터값 원소를 접근하는 방식 첫번째에서 부터 세번째 값 까지 접근
> fib[1:3]
[1] 0 1 1
# 백터값 원소를 접근하는 방식 첫번째, 세번째, 다섯번째 값 접근
> fib[c(1,3,5)]
[1] 0 1 3
# 백터값 원소 중 첫번째를 제외한 모든 값
> fib[-1]
[1] 1 1 2 3 4 5 8 13 21 34
#중앙값 보다 큰 모든 원소를 선택
> fib[ fib > median(fib)]
[1] 5 8 13 21 34
# 상하위 5%안에 있는 모든 원소를 선택
> fib[ (fib < quantile(fib, 0.05)) | (fib > quantile(fib, 0.95)) ]
[1] 0 34
# 평균에서 +_ 표준편자를 넘는 모든 원소를 선택
> fib[ abs(fib-mean(fib)) > 2*sd(fib)]
[1] 34
#NA나 NULL이 아닌 모든 원소 선택
> fib[ !is.na(fib) & !is.null(fib)]
[1] 0 1 1 2 3 4 5 8 13 21 34
# 백터값 생성 후 개별적으로 이름을 줄수도 있다.
> year <- c(1979, 1980, 2011, 2012)
> names(year) <- c("John", "Umsh", "JunSeok", "BeomSeok")
> year
John Umsh JunSeok BeomSeok
1979 1980 2011 2012
#이름을 통한 원소 접근이 가능 하다.
> year["John"]
John
1979
# Sample Source - NA value
> x <- c(0, 1, 1, 2, 3, NA)
> mean(x, na.rm=TRUE)
[1] 1.4
> sd(x, na.rm=TRUE)
[1] 1.140175
** Reference Book
** R Cookbook - ISBN 9780596809157
[Using R] Cannot load rJava.dll error
"KoNLP"는 한글에 관한 텍스트 마이닝(text mining package) 을 사용하기 위해서 라이브러리를 로딩하다 보면 기본적으로 " rJava " 패키지를 로딩하게 된다. 그런데 아래와 같은 상황이 발생 하는 경우 몇가지 체크하고 처리 해 줘야 할 것들이 있다.
* Error Log Display
> library(rJava)
Error : .onLoad failed in 'loadNamespace' for 'rJava'
Error: package/namespace load failed for 'rJava'
Error in inDL(x, as.logical(local), as.logical(now), ...) :
unable to load shared library
'C:/Program Files/R/R-3.1.0/library/rJava/libs/x64/rJava.dll':
LoadLibrary failure: The specified module could not be found.
** Operation Env.
1) Windows 7 64Bit
2) R version 3.1.0 (2014-04-10)
3) Java 1.7.55
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
** 해결방안
1) 환경변수에 JAVA_HOME 추가
JAVA_HOME=C:\Program Files\Java\jre7\bin
2. 환경변수 PATH에 값을 잘아 줌
Path=%PATH%;C:\Program Files\Java\jre7\bin\server\;C:\Program Files\R\R-3.1.0\bin\x64
* 이것이 아니어도 몇가지 맞춰야 할 정보들이 있다면 JDK 또는 JRE의 Bit 를 맞춰야 한다. R을 64비트 인경우 Java도 64비트로 설치하고 32비트 인경우 32비트로 맞춰야 한다.
* Error Log Display
> library(rJava)
Error : .onLoad failed in 'loadNamespace' for 'rJava'
Error: package/namespace load failed for 'rJava'
Error in inDL(x, as.logical(local), as.logical(now), ...) :
unable to load shared library
'C:/Program Files/R/R-3.1.0/library/rJava/libs/x64/rJava.dll':
LoadLibrary failure: The specified module could not be found.
** Operation Env.
1) Windows 7 64Bit
2) R version 3.1.0 (2014-04-10)
3) Java 1.7.55
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
** 해결방안
1) 환경변수에 JAVA_HOME 추가
JAVA_HOME=C:\Program Files\Java\jre7\bin
2. 환경변수 PATH에 값을 잘아 줌
Path=%PATH%;C:\Program Files\Java\jre7\bin\server\;C:\Program Files\R\R-3.1.0\bin\x64
* 이것이 아니어도 몇가지 맞춰야 할 정보들이 있다면 JDK 또는 JRE의 Bit 를 맞춰야 한다. R을 64비트 인경우 Java도 64비트로 설치하고 32비트 인경우 32비트로 맞춰야 한다.
2014년 5월 26일 월요일
[Private Story] Start My Story - #2 남달랐던 유년기 시절
#My Story #2 - 남달랐던 유년기 시절
이 글은 스스로를 돌아 보며 생각하는 글이기도 하면서 먼 훗날 나의 사랑하는 두 아들 밝음이와 맑음이가 글을 읽고 지금의 아빠를 그때의 너희가 이해할 수 있길 바라면서 남기는 미리쓰는 편지로 남았으면 한다. 너희 할아버지가 돌아가시고 나서 아빠는 할아버지의 흔적을 책장에 있는 책 몇권에 남겨진 사인이 전부란 사실에 가슴이 너무나 아팠다. 그리고 안타까웠다. 그래도 마지막 서명에 남겨진 할아버지의 뜻을 가슴으로 받았단다.
내 이야기를 다시 이어간다. 나는 유년시절 참 말썽꾸러기 아이였던 것으로 기억이 되고 또 시골 어르신들의 기억속에도 크게 다르지 않다. 시골에서 자란 나는 온동네에 있는 외양간, 그리고 논과 밭이 나의 놀이터 였고 또 내 어린 시절의 추억의 현장이기도 했었지. 하지만 그 때 내 기억속의 아버지는 무섭기만 한 존재였고 어렴풋이 기억나는건 지팡이를 들고 계시던 할아버지의 모습만 흐릿하게 기억에 남아 있다. 운동을 좋아 했고 달리기를 보통보다는 좀더 나아가 400미터 계주로 부락(이게 국어사전의 표준어 인지는 모르겠다) 대표로 나갔었다. 자랑거리 아닌 자랑거리가 되었던 어린시절 난 아마도 운동선수는 되지 못하더라도 레져 스포츠 선생님이나 그쪽 분야에 분명 가 있을 것이라고 처음 미래에 대한 단꿈을 꾸웠었다.
그런데 나에게 첫 시련(? - 지나고 보니 시련이라기 보단 전환점)이 생겼다. 중학교 시절 즈음이었던 것으로 기억이 난다. 매일 매일 저녁마다 피곤함을 이기지 못했다. 당연히 앉아서 가만히 있던 성격이 아닌 대부분의 시간을 운동을 하거나 밖에서 뛰어 논 것이 전부 였던 나 였으니 몸이 피곤한 것이라고 생각을 했지 나의 몸에 이상이 있을 것이라곤 생각도 하지 못했다. 가까운 병원에 가서 피검사 결과 더 큰 병원에 가길 권했다. 어린나이에 뭐가 뭔지도 모르고 시내로 나간다는 즐거움이 더 컸을까? 기억해보면 내 자신의 상태를 정확히 알지 못했던것 같다. 내가 느낀건 부모님 두분의 얼굴이 심각했다는 것 이었다. 그리고 그 이후로 전국에 몸에 좋다는 민간요법의 것을을 무진 찾아서 해주셨다. 이후에 알았는데 그 당시 치료제가 존재하지 않았다고 한다. 대부분 임상실험 중이었고 실제로 상용화 되기엔 시간이 필요 했다.
그 이후 많은 것들이 달라 졌다. 친구들과는 다른 삶을 살아야 했다. 다른 시간이 학교에 가고 다른 시간에 집에 가며 같은 공간에 있지만 다른 생각을 하고 다른 행동을 해야 했다. 내 학창 시절에 가장 힘든 시기 였던것 같다. 왜 나만 그래야 하는지 다르다는걸 인정 할 수 없었다. (물론 성적이 다르다는건 참으로 인정을 빨리도 그리고 진심으로 했다. ). 그 당시엔 생각하지 못했지만 지나고 보니 내가 달라지는 계기(?)가 되었다. 아니 인생에 전환점 이었다고 기억에 남아 있다.
사는것 인생이란 단어에 큰 의미를 부여한 적도 생각해본적도 사실 없었다. 부끄럽단 생각을 하게 되었던 끝을 알 수 없는 병원 생활의 시작에서 난 장르를 불문한 독서를 하게 된 계기가 되었다. 주로 시집을 읽게 되었다. 글씨가 너무나 많은 책들을 처음부터 접하기 참 힘들었고 알수 없는 끓어 오름이라는 그 무언가는 사랑에 목말라 있었다. 누구는 삼류 사랑 타령이란 시집부터 고전에 이르기 까지 아낌없이 읽고 또 읽었다.
( 그 당시 읽다 보니 쓰고 싶어 졌고 쓰다 보니 내 책을 내보고 싶단 생각도 했던것 같다. 아쉽게도 20살 혈기 왕성할 때 모두 불태워 버리거나 친구녀석(?)을 줬는데 아마도 다 버렸을 것으로 생각이 된다. )
중간 중간 학기가 시작이 되면 난 다시 퇴원을 했고 방학이면 입원을 했다. 병원생활 해본 사람은 알겠지만 그렇게 재미난 경험은 아니라는 것. 난 학창시절을 그런 반복속에 살아 갔다. 그 당시 내 병실엔 나보다도 한참이나 나이 많으신 분들이 많으셨다. 심하게 안좋으신 분들도 계셨고 피로가 누적되 그냥 몇일 쉬다가 가시는 분들도 계셨고 부족한 나의 사회성을 그 병실 자그마한 곳에서 새롭게 배워가고 있었다. 자그마한 6평 남짓한 곳엔 세상이 있었다. 각자의 인생을 풀어 내는 보따리가 항상 가득했다. 삶에 대한 후회도 있었고 나이가 지긋했지만 앞으로의 희망도 있었다. 하루종일 난 한마디 없이 그분들의 이야기를 오롯이 듣기만 했다. 문득 그런 생각이 들었다.
내일 당장 내가 여기서 죽는 다면 난 내 짧은 인생(삶)에 대해서 뭐라 말을 해야 할까? 이렇게 그냥 아무 생각 없이 끝내고 싶거나 죽고 싶지 않다는 생각을 하게 되었다. 남아 있는 삶이 얼마인지 모르나 순간 순간에 최선을 다 해야 겠단 생각을 그리고 나만 생각하고 살지 않길 스스로에게 다짐하는 기회가 되었다. 그것이 다분히 착하게 살아야 겠다는 아니었다.
그 당시에 난 많은 것을 배운것 같다. 왜 살아 가는 하루 하루가 소중한지 알았고 정성을 다해 열심히 살지 않으면 안되는지 그리고 내가 처해진 상황에 대한 것을 진실되게 받아 들이지 않는다면 힘들어 지는건 나 하나 뿐 아니라 내 주변에 모든 사랑하는 사람들이 함께 아파 한다는 것을 말이다. 그래서 그 당시의 나는 가장 많이 성장한 시기이자 전환점이었다 생각을 한다. 너희들에게도 분명 나와 같은 시기와 비슷한 경험을 하게 되리라 생각된다. 분명 살면서 힘든 시기는 반드시 온다. 하지만 그때 꼭 기억하길 바란다. 가장 힘든시기에 가장 많은 기회와 본질적인 마음의 성장을 너희에게 가져다 줄 것이다. 피하려고만 하지 말길 바란다. 그것을 받아 들이 돼 진심으로 받아 들이고 마음에 새기고 새로운 네가 아닌 성장한 네가 되길 진심으로 바란다.
책을 읽는 것을 게을리 하지 말거라. 그곳엔 답이 없지만 앞으로 살아가야 할 너희들이 선택한 인생에 대한 답을 만들어 줄 것이다. 그리고 어떤 사람이든 너의 주변에게 너에게 말하든 그렇지 않든 모든 말에 새겨 들어라 그 모든 말들은 너희들의 생각에 좋은 영향과 나쁜 영향을 함께 주면서 어떤 말들이 올바른 선택을 위한 말인지 잘못된 말인지 구분할 수 있는 능력을 만들어 줄 것이다.
오늘 하루도 잠시전 그 시간도 후회없는 삶을 살길 바란다. 또한 나에게 남은 많은 시간들을 나도 그렇게 보내기 위해 오늘도 노력하고 노력하겠노라 약속 하마.
이 글은 스스로를 돌아 보며 생각하는 글이기도 하면서 먼 훗날 나의 사랑하는 두 아들 밝음이와 맑음이가 글을 읽고 지금의 아빠를 그때의 너희가 이해할 수 있길 바라면서 남기는 미리쓰는 편지로 남았으면 한다. 너희 할아버지가 돌아가시고 나서 아빠는 할아버지의 흔적을 책장에 있는 책 몇권에 남겨진 사인이 전부란 사실에 가슴이 너무나 아팠다. 그리고 안타까웠다. 그래도 마지막 서명에 남겨진 할아버지의 뜻을 가슴으로 받았단다.
내 이야기를 다시 이어간다. 나는 유년시절 참 말썽꾸러기 아이였던 것으로 기억이 되고 또 시골 어르신들의 기억속에도 크게 다르지 않다. 시골에서 자란 나는 온동네에 있는 외양간, 그리고 논과 밭이 나의 놀이터 였고 또 내 어린 시절의 추억의 현장이기도 했었지. 하지만 그 때 내 기억속의 아버지는 무섭기만 한 존재였고 어렴풋이 기억나는건 지팡이를 들고 계시던 할아버지의 모습만 흐릿하게 기억에 남아 있다. 운동을 좋아 했고 달리기를 보통보다는 좀더 나아가 400미터 계주로 부락(이게 국어사전의 표준어 인지는 모르겠다) 대표로 나갔었다. 자랑거리 아닌 자랑거리가 되었던 어린시절 난 아마도 운동선수는 되지 못하더라도 레져 스포츠 선생님이나 그쪽 분야에 분명 가 있을 것이라고 처음 미래에 대한 단꿈을 꾸웠었다.
그런데 나에게 첫 시련(? - 지나고 보니 시련이라기 보단 전환점)이 생겼다. 중학교 시절 즈음이었던 것으로 기억이 난다. 매일 매일 저녁마다 피곤함을 이기지 못했다. 당연히 앉아서 가만히 있던 성격이 아닌 대부분의 시간을 운동을 하거나 밖에서 뛰어 논 것이 전부 였던 나 였으니 몸이 피곤한 것이라고 생각을 했지 나의 몸에 이상이 있을 것이라곤 생각도 하지 못했다. 가까운 병원에 가서 피검사 결과 더 큰 병원에 가길 권했다. 어린나이에 뭐가 뭔지도 모르고 시내로 나간다는 즐거움이 더 컸을까? 기억해보면 내 자신의 상태를 정확히 알지 못했던것 같다. 내가 느낀건 부모님 두분의 얼굴이 심각했다는 것 이었다. 그리고 그 이후로 전국에 몸에 좋다는 민간요법의 것을을 무진 찾아서 해주셨다. 이후에 알았는데 그 당시 치료제가 존재하지 않았다고 한다. 대부분 임상실험 중이었고 실제로 상용화 되기엔 시간이 필요 했다.
그 이후 많은 것들이 달라 졌다. 친구들과는 다른 삶을 살아야 했다. 다른 시간이 학교에 가고 다른 시간에 집에 가며 같은 공간에 있지만 다른 생각을 하고 다른 행동을 해야 했다. 내 학창 시절에 가장 힘든 시기 였던것 같다. 왜 나만 그래야 하는지 다르다는걸 인정 할 수 없었다. (물론 성적이 다르다는건 참으로 인정을 빨리도 그리고 진심으로 했다. ). 그 당시엔 생각하지 못했지만 지나고 보니 내가 달라지는 계기(?)가 되었다. 아니 인생에 전환점 이었다고 기억에 남아 있다.
사는것 인생이란 단어에 큰 의미를 부여한 적도 생각해본적도 사실 없었다. 부끄럽단 생각을 하게 되었던 끝을 알 수 없는 병원 생활의 시작에서 난 장르를 불문한 독서를 하게 된 계기가 되었다. 주로 시집을 읽게 되었다. 글씨가 너무나 많은 책들을 처음부터 접하기 참 힘들었고 알수 없는 끓어 오름이라는 그 무언가는 사랑에 목말라 있었다. 누구는 삼류 사랑 타령이란 시집부터 고전에 이르기 까지 아낌없이 읽고 또 읽었다.
( 그 당시 읽다 보니 쓰고 싶어 졌고 쓰다 보니 내 책을 내보고 싶단 생각도 했던것 같다. 아쉽게도 20살 혈기 왕성할 때 모두 불태워 버리거나 친구녀석(?)을 줬는데 아마도 다 버렸을 것으로 생각이 된다. )
중간 중간 학기가 시작이 되면 난 다시 퇴원을 했고 방학이면 입원을 했다. 병원생활 해본 사람은 알겠지만 그렇게 재미난 경험은 아니라는 것. 난 학창시절을 그런 반복속에 살아 갔다. 그 당시 내 병실엔 나보다도 한참이나 나이 많으신 분들이 많으셨다. 심하게 안좋으신 분들도 계셨고 피로가 누적되 그냥 몇일 쉬다가 가시는 분들도 계셨고 부족한 나의 사회성을 그 병실 자그마한 곳에서 새롭게 배워가고 있었다. 자그마한 6평 남짓한 곳엔 세상이 있었다. 각자의 인생을 풀어 내는 보따리가 항상 가득했다. 삶에 대한 후회도 있었고 나이가 지긋했지만 앞으로의 희망도 있었다. 하루종일 난 한마디 없이 그분들의 이야기를 오롯이 듣기만 했다. 문득 그런 생각이 들었다.
내일 당장 내가 여기서 죽는 다면 난 내 짧은 인생(삶)에 대해서 뭐라 말을 해야 할까? 이렇게 그냥 아무 생각 없이 끝내고 싶거나 죽고 싶지 않다는 생각을 하게 되었다. 남아 있는 삶이 얼마인지 모르나 순간 순간에 최선을 다 해야 겠단 생각을 그리고 나만 생각하고 살지 않길 스스로에게 다짐하는 기회가 되었다. 그것이 다분히 착하게 살아야 겠다는 아니었다.
그 당시에 난 많은 것을 배운것 같다. 왜 살아 가는 하루 하루가 소중한지 알았고 정성을 다해 열심히 살지 않으면 안되는지 그리고 내가 처해진 상황에 대한 것을 진실되게 받아 들이지 않는다면 힘들어 지는건 나 하나 뿐 아니라 내 주변에 모든 사랑하는 사람들이 함께 아파 한다는 것을 말이다. 그래서 그 당시의 나는 가장 많이 성장한 시기이자 전환점이었다 생각을 한다. 너희들에게도 분명 나와 같은 시기와 비슷한 경험을 하게 되리라 생각된다. 분명 살면서 힘든 시기는 반드시 온다. 하지만 그때 꼭 기억하길 바란다. 가장 힘든시기에 가장 많은 기회와 본질적인 마음의 성장을 너희에게 가져다 줄 것이다. 피하려고만 하지 말길 바란다. 그것을 받아 들이 돼 진심으로 받아 들이고 마음에 새기고 새로운 네가 아닌 성장한 네가 되길 진심으로 바란다.
책을 읽는 것을 게을리 하지 말거라. 그곳엔 답이 없지만 앞으로 살아가야 할 너희들이 선택한 인생에 대한 답을 만들어 줄 것이다. 그리고 어떤 사람이든 너의 주변에게 너에게 말하든 그렇지 않든 모든 말에 새겨 들어라 그 모든 말들은 너희들의 생각에 좋은 영향과 나쁜 영향을 함께 주면서 어떤 말들이 올바른 선택을 위한 말인지 잘못된 말인지 구분할 수 있는 능력을 만들어 줄 것이다.
오늘 하루도 잠시전 그 시간도 후회없는 삶을 살길 바란다. 또한 나에게 남은 많은 시간들을 나도 그렇게 보내기 위해 오늘도 노력하고 노력하겠노라 약속 하마.
2014년 5월 23일 금요일
[Movie #1] 영화 역린을 보다. - 현빈을 다시 보다
[사진 출처 - 네이버 영화]
아이들 둘 낳고 키우다 보니 극장에서 마음놓고 영화를 보는 일이 흔하지 않은건 우리들 만의 일은 아니다. 아내의 생일이기도 했고 또 왠지 가끔 한번씩 이렇게 나와서 영화를 보는것도 좋겠다. 싶어 오게 되어 선택한 역린이란 영화는 뜨거운 가슴과 여운을 몇일이 지난 지금도 남아 있다.
주변에서 영화에 대한 좋고/나쁨이 확연하게 구분되어져서 사뭇 놀라기도 하고 영화/연기를 전공한 친구 까지 별로라는 대답을 했을 땐 그냥 그저 그런영화 이구나 싶었다. 그런데 끝나고 나서 쉬이 자리를 일어나지 못했다. 미안한 마음과 죄송한 마음 그리고 그것이 한꺼번에 찾아 온것이다. 혹평을 한 전문가나 기자나 평론가들의 기준이 무엇인지 잘 모르겠으나 영화의 주된 내용을 소품이나 중간 중간의 억지스러운 전개가 있다고 하기엔 평가 자체가 좀 억지스러운것 아니었을까?
정조에 대한 암살 사건에 대한 24시간이 숨막히게 돌아가고 있는것에서 과거의 회상 신들이 나타나며 지금의 모습의 설명을 덧붙여 주고 있다. 어떤 이들은 이것이 중심을 잡지 못한 이유로 꼽고 있으나 개인적인 생각으론 공감되지 않는 트집으로 밖에 안보인다. 난 몰입도가 끝날 때 까지 좋았는데... 뭐 개인적인 사람들 간의 차이가 있을수 있으니 뭐라 말하기엔 어렵지 않을까 싶기도 하고 말이다.
어찌 되었든 영화를 보고 나서 밀려오는 지금 이 순간의 대한 민국이 떠오르지 않았다면 아마도 그는 역린이란 영화를 보고 혹평을 쏟아 낼 지 모르겠다. 정조의 마지막 대사로 나오는 중용의 23장에 대한 말이 계속 깊은 가슴을 두두리는 것은 우리가 그렇게 살아 가지 못한 미안함과 또 우리가 그렇게 살아야 할것이라는 메세지를 주는 것은 아니었나 싶다. 이 시나리오를 보고 받아 들인 현빈이 얼굴만 잘생기고 몸매만 좋은 것이 아니라 현빈이란 배우를 새롭게 다시보게 된 영화가 아닐 수 없다.
" 오직 세상에 지극히 정성을 다하는 사람만이 나와 세상을 변하게 할 수 있는 것이다. "
잊지 말자...
- 기억에 남는 부분이자 역린의 시작과 끝인 부분은 바로 중용의 23쪽을 아는가?
其次(기차)는 致曲(치곡)이니 曲能有誠(곡능유성)이니
誠則形(성즉형)하고
形則著(형즉저)하고
著則明(저즉명)하고
明則動(명즉동)하고 動則變(동즉변)하고
變則化(변즉화)하니
唯天下至誠 (유천하지성)이야 爲能化(위능화)니라.
작은 일도 무시하지 않고 최선을 다해야 한다.
작은 일에도 최선을 다하면 정성스럽게 된다.
정성스럽게 되면 겉에 베어 나오게 되고
겉에 베어 나오면 겉으로 들어나고
겉으로 들어나면 이내 밝아지고
남을 감동시키면 이내 변하게 되고
변하면 생육 된다
그러니 오직 세상에 지극히 정성을 다하는 사람만이
나와 세상을 변하게 할 수 있는 것이다.
피드 구독하기:
글 (Atom)
다양한 채널의 블로그 작성으로 집중이 좀 안되기도 하고 나의 회사를 운영하고 관리 하다 보니 회사의 블로그로 작성 해보는 것은 어떤가 하고 하나로 옮겨 봅니다. (주)다이닝웨이브 - 블로그 바로가기
-
웹/앱 리뉴얼 프로젝트를 진행 중에 내부에서 처리해야할 프로세스상 로직이 있었는데 오라클(데이터베이스) 단계에서 처리가 곤란하게 되어 외부서비스(웹)의 특정 URL/URI를 호출해야 되는 경우가 생겼다. 구글링으로 검색을 해도 상세히 설명 된 곳이 별...
-
# Reference URL - http://struts.apache.org/docs/tutorials.html 아래 문서는 내부 구성원을 위한 간략한 설정 및 설치를 위한 정보 공유에 목적이 있으며 IT의 구성 환경에 따라 달라 질 수 있으...
-
주로 윈도우에서 RStudio를 사용할 때는 잘 몰랐는데 이동성 때문에 Mac Ari/Book에서 사용하는 경우 한글 깨짐현상이 발생 하기도 한다. 이럴때 해야 하는 여러가지 방법이 있는데 그중에 내가 사용한 내용을 공유하고자 한다. 우선은 RS...