레이블이 Using R인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Using R인 게시물을 표시합니다. 모든 게시물 표시

2016년 5월 31일 화요일

[Data Analysis] 산포도와 상관계수 - ( degree of scattering & coefficient of correlation )


회사에서 분석을 하게 되면 변수들 간의 어떠한 관계가 있는가에 대한 것으로 시작을 하게 되는 경우가 많다. 우리 매장의 숫자와 매출과의 관계는 어떻되지? 우리 매장의 면적과 매출과의 관계는? 고객수와 매출과의 관계는? 이러한 궁금증 또는 질문들에 대한 답을 들어 보고자 한다면 산포도와 상관계수 값을 확인함으로 해서 그 일을 시작 할 수 있다. 시작할 수 있다고 표현하는 이유는 두 변수의 상관관계는 이것을 포함한 더 추가적인 정보들이 모여서 더 나은 의사결정 또는 다음 작업이 이뤄지는 것을 현업에서 보아 왔기 때문이다.

어찌 되었든 이번에 대한 포스트에선 산포도와 상관계수에 대한 이야기만을 간략하게 해보고자 한다. 산포도는 변수 X와 변수 Y가 만나는 지점을 점으로 표현한 그래프이다.

예제 1(학생정보)
> head(DF, 10)
     name  sex age grade absence bloodtype height weight
1  김길동 남자  23     3      유         O  165.3   68.2
2  이미린 여자  22     2      무        AB  170.1   53.0
3  홍길동 남자  24     4      무         B  175.0   80.1
4  김철수 남자  23     3      무        AB  182.1   85.7
5  손세수 여자  20     1      유         A  168.0   49.5
6  박미희 여자  21     2      무         O  162.0   52.0
7  강수친 여자  22     1      무         O  155.2   45.3
8  이희수 여자  23     1      무         A  176.9   55.0
9  이철린 남자  23     3      무         B  178.5   64.2
10 방희철 남자  22     2      무         B  176.1   61.3

plot(DF)

데이터의 상관관계를 가져보이는 변수들로만 좀더 찾아 보게 되면
> DF2 <- data.frame(DF$height, DF$weight)
> DF3 <- cbind(DF2, DF$age)
> plot(DF3)


상관계수값을 확인 해보자
> cor(weight, height)
[1] 0.6641816


두 변수간의 상관계수를 확인하여 보면 다음과 같다. 우리는 이러한 결과 숫자를 확인하여 보고 어떠한 관계인지 해석 할 수 잇다. 상관계수 값은 -1 < 0 < 1 사이의 값을 표현 한다.


-1의 숫자에 가까울 수록 음의 상관관계를 갔고 있고 1의 숫자에 가까울수록 양의 상관관계를 가지고 있다고 해석할 수 있다. 당연히 0이거나 0에 가까울 수록 두 변수는 아무 상관관계를 가지고 있지 않다고 할 수 있다.


* 산포도 - 통계청-통계용어 지표이해
* 상관계수 - 상관계수란 - 나부랭의의 수학블러그

* 작성자의 공통적인 변
데이터 분석의 전문가는 아니지만 현업에서 기업의 데이터를 활용하여 분석 또는 분석의 전단계 까지의 데이터 정제(클린징)과 데이터의 분석을 위한 탬플릿 또는 모델링을 하게 되는 경우가 많다. 규모가 좀더 크고 인원이 지원되는 회사라면 각 파트별 각 업무별 로직과 조직(인원)이 있을 것이나 그러하지 못한것이 장점이되기도 한다. 회사의 자료를 외부에 오픈 하기 위한 용도나 목적은 아니며 개인적인 업무(지식)에 대한 정리 차원이라고 생각해 주었으면 한다. 어떤 경우 외부에서 검색을 통해 들어와 확인하게 되었다면 나와 같은 일을 하는 또는 하고자 하는 학생들에게 맞보기가 되어 보길 바란다.

2016년 5월 26일 목요일

[Using R] Mac RStudio Plot 출력에 한글이 깨지는 경우

주로 윈도우에서 RStudio를 사용할 때는 잘 몰랐는데 이동성 때문에 Mac Ari/Book에서  사용하는 경우 한글 깨짐현상이 발생 하기도 한다. 이럴때 해야 하는 여러가지 방법이 있는데 그중에 내가 사용한 내용을 공유하고자 한다.

우선은 RStudio에 있는 기본 설정 정보를 UTF-8로 선택하여 기본 인코딩 정보를 수정 한다.


그런다고 plot창에 출력하는 한글은 여전히 깨짐 현상이 발생한다. 위에 설정은 R Console에서의 한글 깨짐현상을 유니코드로 변경하여 해결한 내용이다.

몇몇가지 방법이 있었으나 아래의 방법이 가장 잘 맞았던것 같아 공유한다. 단 마지막 단의 시스템 폰트를 Import 하는 과정에서는 상황에 따라 많은 시간이 소요될 수 있으니 적용하기전 다른 방법들도 점검해 본 후 적절한 방법을 선택하길 바란다.

install.packages("extrafont")
library(extrafont)
font_import()


이미지에서도 확인 할 수 있긴 하지만 시스템에 사용되는 폰트를 R에서도 사용할 수 있도록 Import해주는 작업이다.

간혹 하다 보니 import 과정에서의 에러로 인하여 이 또한 되지 않는 경우가 있을때 뭐 잘 모르겠다. 그냥 고정으로 맞춰 보자

par(family="NanumGothic")

ggplot2 의 테마를 사용하는 경우
theme_set(theme_gray(base_family='NanumGothic'))
구글에서 더 검색을 하시면 개인 테마를 .Rprofile 형태로 생성하여 하는 방법도 있으니 실행할때 자동으로 적용 하길 바란다면 그것을 사용하는 것도 추천을 한다. 사실 나머지 여러가지 폰트에 대한 한글 이름을 영문으로 적용하여 해야 하는데 어떻게 써야 하는지 좀 알아 봐야 할것 같다.


#가져오고자 하는 CSV나 엑셀파일 또는 텍스트에 한글이 포함된 경우  깨질 때

간혹 가져오고자 하는 파일 안에 한글이 있는데 일반적으로 단순하게 불러올 경우 한글 깨짐현상이 있는 경우로 많은 짜증과 에너지를 소비한 경우가 있다.
개인적으로 다음과 같은 내용으로 파일을 가져오면 해결 가능하리라 본다.

DF <- read.csv("~/example.csv"stringsAsFactors = T, na = "-", fileEncoding = "CP949", encoding = "UTF-8")

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.

:: :::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

[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비트로 맞춰야 한다.

2014년 5월 19일 월요일

[Using R] Cook Book Tip - Help & Search

#Command to view the contents of the document
help.start()

#View full help by function
help(function name) 또는 ?function name

#View by simple functions for function arguments
args(function name)

#Run this example by using the function
example(function name)

#Example
install.packages("rpart")
library(rpart)
help(rpart)
args(rpart)
example(rpart)

#Search the documentation
help.search("pattern")
??pattern


#Sample
install.packages("tseries")
library(tseries)

help(adf.test)
help.search("adf.test")

help(package="tseries")
vignette()
vignette(package="package name")
vignette("package name")


# If you need to search through the internet
RSiteSearch("Key Word")


Ref. Paul Teetor의 R Cookbook. Copyright 2011 Paul Teetor, ISBN : 9780596809157


[Using R] R Language Basic #3 - Sample Data

R Language Basic #3 - Sample Data

R Language Basic #1 Review
R Language Basic #2 Review


10. Subset, Transform, Split (데이터 프레임 조작) 
이전 데이터 프레임 샘플을 통해서 데이터프레임을 조건절로 추출하고 제외하는 방법들을 테스트 해봤을 것이다. 좀더 기본적으로 R에서 제공되는 함수를 활용하여 데이터 프레임을 조작하는 방식을 연습해보도록 한다.

> sensory.Training <- subset(sensory, Training == "Yes")
> sensory.Training
  Name Training Sweetness Saltiness
1 토니      Yes         8         4
3 모락      Yes         9         2
5 포쿡      Yes         5         1

> sensory.modified <- transform(sensory, comp=Sweetness/Saltiness)
> sensory.modified
    Name Training Sweetness Saltiness      comp
1   토니      Yes         8         4 2.0000000
2   매드       No         9         2 4.5000000
3   모락      Yes         9         2 4.5000000
4 시추안       No         4         6 0.6666667
5   포쿡      Yes         5         1 5.0000000
6 식당돈       No         5         4 1.2500000


- subset( )함수와 transform( ) 함수의 사용방법은 거의 동일하다. 좀더 세부적인 함수에 대한 내용이 보고 싶다면 help(함수명) 실행하면 함수의 기본적인 설명과 함께 인자값에 대한 내용과 샘플 소스를 얻을 수 있을 것이다. 다시 돌아가서 subset이 하위의 새로운 데이터프레임을 만들기 위한 선택 조건을 인자로 하고 transform이 새로운 변수(열) 생성을 위한 데이터 표현식을 입력인자로 한다는 점만이 틀리다는 것을 확인 할 수 있다.

> Sweetness.group <- split(sensory$Sweetness, sensory$Training)
> Sweetness.group
$No
[1] 9 4 5

$Yes
[1] 8 9 5


- split(sensory$Sweetness, sensory$Training)은 Training 벡터 값(2번째 인자)을 기준으로 Sweetness 값(1번째 인자)을 그룹화시켜 목록(lists)으로 생성하라는 표현 식이다. split( )함수는 2번째 인자를 그룹요인(grouping factor)으로 하여 1번째 인자 데이터를 그룹화한 목록으로 생성한다

> Sweetness.group.No <- sensory$Sweetness[sensory$Training == "No"]
> Sweetness.group.No
[1] 9 4 5



11. Sorting (정렬) 


> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, 4680)
> cost.post <- c(1530, 1650, 1890, 5910, 5310, 8900, 10600)

> sort(cost.pre)
[1] 1100 1560 1570 4680 4980 5300 7780

 - sort(cost.pre)는 단일벡터 cost.pre의 요소를 오름차순으로 정렬시킨 벡터를 결과값으로 출력한다.


> cost.post
[1]  1530  1650  1890  5910  5310  8900 10600

> order(cost.post)
[1] 1 2 3 5 4 6 7

> cost.pre[order(cost.post)]
[1] 1100 1560 1570 5300 4980 7780 4680

 - order(cost.post)은 오름차순으로 정렬된 각 요소의 색인값을 출력하는 함수로 이해 할 수 있다.

> score <- c(32, 12, 45, 54, 98, 23, 4, 56, 12, 15, 65, 23)
> gender <- rep(c("M", "F"), 6)
> age <- c(23, 12, 34, 45, 23, 56, 17, 35, 32, 34, 65, 43)
> freq.score <- data.frame(score, gender, age)

> freq.score
   score gender age
 1     32      M  23
 2     12      F  12
 3     45      M  34
 4     54      F  45
 5     98      M  23
 6     23      F  56
 7      4      M  17
 8     56      F  35
 9     12      M  32
10    15      F  34
11    65      M  65
12    23      F  43

> freq.score[order(freq.score$gender, freq.score$age),]
   score gender age
 2     12      F  12
10    15      F  34
 8     56      F  35
12    23      F  43
 4     54      F  45
 6     23      F  56
 7      4      M  17
 1     32      M  23
 5     98      M  23
 9     12      M  32
 3     45      M  34
11    65      M  65



12. Implicit loops (함수의 반복 적용) 

10명의 검사요원에게 제품의 주요특성 10가지에 대한 강도를 평가하여 데이터프레임 구조(10개의 변수 포함)로 정리된 경우를 가정해보자. 변수 각각의 평균 값을 계산하기 위해서는 앞서 소개했던 mean( )함수에 인자로 “dataframe$variable01”과 같이 변수이름을 바꿔가면서 명령을 내리면 된다. 아직 배우지는 않았지만 R이 프로그래밍언어로서 가지고 있는 for, do while 등의 반복구문을 사용하면 조금은 수고를 덜 수 있을 것이다. 그러나 제일 간단한 방법은 sapply(dataframe, mean) 이라는 함수를 사용해서 dataframe의 10개 변수 각각의 평균(mean)을 계산하는 함축적 반복 구문을 사용하는 것이다.

이와 유사한 작업들의 편리성 증대를 위해 R은 lapply( ), sapply( ), tapply( ), apply( )와 같은 함축적 반복 함수를 제공한다.

> Sourness <- c(8, 12, 3, 8, 9, 11, 9, 8, 4, 1, 14,2)
> Hardness <- c(6, 2, 9, 1, 7, 2, 3, 6, 2, 6, 1, 5)
> RedColor <- c(16, 22, 19, 61, 37, 22, 31, 26, 42, 34, 26, 51)
> Product <- rep(c("A", "B"), 6)
> Result1 <- data.frame(Sourness, Hardness)
> Result1
   Sourness Hardness
1         8        6
2        12        2
3         3        9
4         8        1
5         9        7
6        11        2
7         9        3
8         8        6
9         4        2
10        1        6
11       14        1
12        2        5

> Result2 <- data.frame(Sourness, Hardness, Product)
> Result2
   Sourness Hardness Product
1         8        6       A
2        12        2       B
3         3        9       A
4         8        1       B
5         9        7       A
6        11        2       B
7         9        3       A
8         8        6       B
9         4        2       A
10        1        6       B
11       14        1       A
12        2        5       B

*apply( ) 함수들을 사용할 때는 인자(arguments)로 na.rm=T를 입력해서 NA 데이터는 제외하는 것이 좋다.

> lapply(Result1, mean, na.rm=T)
$Sourness
[1] 7.416667

$Hardness
[1] 4.166667

> sapply(Result1, mean, na.rm=T)
Sourness Hardness
7.416667 4.166667

- lapply( ), sapply( )함수는 1번째 인자(데이터프레임: data frames)에 2번째 인자인 통계 함수를 적용시켜 목록(list: l) 또는 단순 테이블 (simplicity: s) 형태로 계산 결과값을 출력시킨다.

> tapply(Result2$Sourness, Result2$Product, mean)
       A        B
7.833333 7.000000

 - tapply( ) 함수는 1번째 인자(벡터: vector)를 2번째 인자(요인:factor)로 그룹화하여 각 그룹에 3번째 인자인 통계함수를 적용시켜 테이블(table: t) 형태로 결과값을 출력시킨다.


> R.Matrix <- cbind(Sourness, Hardness, RedColor)
> R.Matrix
      Sourness Hardness RedColor
 [1,]        8        6       16
 [2,]       12        2       22
 [3,]        3        9       19
 [4,]        8        1       61
 [5,]        9        7       37
 [6,]       11        2       22
 [7,]        9        3       31
 [8,]        8        6       26
 [9,]        4        2       42
[10,]        1        6       34
[11,]       14        1       26
[12,]        2        5       51

> apply(R.Matrix, 2, sum)
Sourness Hardness RedColor
      89       50      387

- apply( )함수는 1번째 행렬, 2번째 인자(1 = rows, 2 = columns) 방향, 3번째 인자인 통계함수를 적용시켜 그 결과를 출력.


* 데이터 프레임에 대한 데이터 조작은 이후의 포스팅에 sqldf 패키지를 활용한 가공/조작이 가능 합니다. 사실 어느쪽이 편한가는 사용자의 편의에 따라 달라질수 있으니 결국엔 결과값이 같은 내용이라면 본인이 선호하는 것을 선택하게 되어 있습니다. 


[Using R] R Language Basic #2 - Sample Data

R Language Basic #2 - Sample Data

Reference #1 - Sample Data Review 


5.  List (복합 백터 생성함수)
LIST() 함수는 두개의 워크시트에 데이터를 관리한느 방식으로 이해할 수 있다. 예를 들어 현재 운영이 되고 있는 식자재 값과 식자재가 상승한 가격의 데이터를 가지고 입력하는 경우 LIST를 활용할 수 있다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, 9940)
> cost.post <- c(1530, 1650, 2570, 5910, 5310, 8900, 10600)
> cost1 <- list(Before=cost.pre, After=cost.post)
> cost1
$Before
[1] 1100 1560 1570 4980 5300 7780 9940

$After
[1]  1530  1650  2570  5910  5310  8900 10600

> str(cost1)
List of 2
 $ Before: num [1:7] 1100 1560 1570 4980 5300 7780 9940
 $ After : num [1:7] 1530 1650 2570 5910 5310 8900 10600

- cost1의 구조를 살표 보면 나오는 것처럼 값의 접근을 위하여 cost1$Before 를 활용하여 해당하는 열의 값을 불러 올 수 있다.

> summary(cost1)
       Length Class  Mode
Before 7      -none- numeric
After  7      -none- numeric

List() 함수 괄호안에 쓰여지는 TAG = VALUE의 형태는 이후 생성되는 데이터 접금 이름과 값에 대한 설정을 의미 한다. 위의 경우 Before, After 를 사용하였다.


> cost2 <- list(cost.pre, cost.post)
> cost2
[[1]]
[1] 1100 1560 1570 4980 5300 7780 9940

[[2]]
[1]  1530  1650  2570  5910  5310  8900 10600

> str(cost2)
List of 2
 $ : num [1:7] 1100 1560 1570 4980 5300 7780 9940
 $ : num [1:7] 1530 1650 2570 5910 5310 8900 10600

- 상위의 LIST 열에 대한 이름을 지정하지 않는 경우는 cost2$cost.pre 를 활용 할 수 없고 단순히 cost2[1], cost2[2]를 활용하여 읽어 낼 수 있다.

> summary(cost2)
     Length Class  Mode
[1,] 7      -none- numeric
[2,] 7      -none- numeric



6. Data Frames (데이터 프레임)

앞으로 우리의 과정과 데이터 분석을 위한 데이터 저장/수집되는 경우의 가장 많은 부분을 차지하는 형태의 데이터 타입 일 것이다. 데이터 프레임이라는 용어는 DataSet 또는 관계형데이터베이스의 테이블과도 비슷한 형태를 띄게 된다. 동일한 길이의 벡터 또는 요인(Factors)들의 세로방향 목록을 말하는데 각 목록의 동일위치에 있는 데이터는 동일 실험단위 또는 관찰단위에서 얻어진 것이라고 할 수 있다. 데이터 프레임의 한 행을 가리킬 때 CASE나 RECORD라는 용어를 사용하기도 한다.

> dataset.cost1 <- data.frame(Before=cost.pre, After=cost.post)

> dataset.cost1
  Before After
1   1100  1530
2   1560  1650
3   1570  2570
4   4980  5910
5   5300  5310
6   7780  8900
7   9940 10600

> str(dataset.cost1)
'data.frame': 7 obs. of  2 variables:
 $ Before: num  1100 1560 1570 4980 5300 7780 9940
 $ After : num  1530 1650 2570 5910 5310 8900 10600

> summary(dataset.cost1)
     Before         After    
 Min.   :  1100   Min.   : 1530
 1st Qu.:1565   1st Qu.: 2110
 Median :4980   Median : 5310
 Mean   :4604   Mean   : 5210
 3rd Qu.:6540   3rd Qu.: 7405
 Max.   :9940   Max.   :10600


> dataset.cost2 <- data.frame(cost.pre, cost.post)

> dataset.cost2
  cost.pre cost.post
1     1100      1530
2     1560      1650
3     1570      2570
4     4980      5910
5     5300      5310
6     7780      8900
7     9940     10600

> str(dataset.cost2)
'data.frame': 7 obs. of  2 variables:
 $ cost.pre : num  1100 1560 1570 4980 5300 7780 9940
 $ cost.post: num  1530 1650 2570 5910 5310 8900 10600

> summary(dataset.cost2)
    cost.pre      cost.post  
 Min.   :1100   Min.   : 1530
 1st Qu.:1565   1st Qu.: 2110
 Median :4980   Median : 5310
 Mean   :4604   Mean   : 5210
 3rd Qu.:6540   3rd Qu.: 7405
 Max.   :9940   Max.   :10600

DataFrame 은 List와 거의 비슷하게 생성하는 것을 사용할 수 있다. 그러나 이름지정하지 않은 경우 값의 인덱스 위치 값을 입력해야 하는 반면 데이터 프레임은 생성시 사용된 변수(입력된 팩터값 변수)의 이름을 사용하여 가능 하다.


7. Indexing (벡터 요소의 색인화)

위에서 생성된 벡터값을 개별 요소별로 접근하는 것을 색인화(Indexing)이라고 하는데 이 방법을 이요하면 하나의 벡터에서 일부분을 추출하거나 제외 할 수 있는 작업이 가능 하다. R에서 사용되는 소괄호 " () " 은 함수의 인자를 입력할 때 주로 사용하고 대괄호 " [ ] " 은 벡터나 행렬의 구성요소를 가리키는 색인 위치나 조건을 입력할 때 주로 사용한다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, 9940)
> cost.post <- c(1530, 1650, 2570, 5910, 5310, 8900, 10600)

> cost.pre
[1] 1100 1560 1570 4980 5300 7780 9940

> cost.pre[2]
[1] 1560

> cost.pre[c(1, 3, 5)]
[1] 1100 1570 5300

> cost.pre[-c(1, 3, 5)]
[1] 1560 4980 7780 9940

> cost.pre[4:6]
[1] 4980 5300 7780

특정 위치값의 값을 추출할 때는 c() 을 사용하여 해당 색인값을 지정하고 앞에 " - " 를 붙인
cost.pre[-c(1, 3, 5)] 와 같은 것은 1, 3, 5번째 값을 제외한 내용을 추출하라는 명령이다. 기본적인 사항이지만 향후 데이터 가공하는 작업에서는 많이 사용되는 것으로 생각된다. 또한 특정 색인위치의 값을 변경하는 경우에도 사용할 수 있다.

> cost.pre[1] <- 4500


8. Conditional Selection(요소의 조건부 선택) 

대괄호 " [ ] " 안에 관계(비교)연산자와 논리연산자를 사용하여 행렬의 구성요소를 가리키는 조건을 입력할 수 있다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, NA)
> cost.post <- c(1530, 1650, NA, 5910, 5310, 8900, 10600)

> cost.post < 2000
[1]  TRUE  TRUE    NA FALSE FALSE FALSE FALSE

> cost.pre[cost.post < 2000]
[1] 1100 1560   NA

> cost.pre[cost.post > 1500 & cost.post < 7000]
[1] 1100 1560   NA 4980 5300

> length(cost.pre)
[1] 7

> is.na(cost.pre)
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

- 관계형데이터베이스에선 NULL 이라는 용어로 사용되는 값을 의미한다. 값이 존재하지 않을 경우 TRUE 값을 리턴 한다.

> !is.na(cost.pre)
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

- 상위함수에서 " ! " 을 붙이는 경우는 그 반대의 경우로 표현하라고 이해 하면 된다.

> length(cost.pre[!is.na(cost.pre)])
[1] 6

기본적으로 연산자에 대한 부등기호를 한번더 정리 해보도록 하자

- 관계연산자 :
 x < y : x가 y 보다 작은 경우
 x > y : x가 y 보다 큰 경우
 x == y : x와 y가 같은 경우
 x <= y : x가 y 보다 작거나 같은 경우
 x >= y : x가 y 보다 크거나 같은 경우
 x != y : x와 y가 같지 않은 경우

- 논리연산자 : AND/그리고( & ) , OR/또는 ( | ) , NOT/아니다 ( ! )


9. Indexing of Data Frames (데이터프레임 요소의 색인화)

데이터프레임 형태의 구조가 가장 많을 것이라고 기존의 포스팅에서 설명한 바 있다. 데이터프레임 요소의 색인화는 대괄호(" [] " )를 사용하여 2차원 배열과 같은 형태로 이뤄지면 이전에서 설명한 색인화와 동일한 형태이니 간단한 샘플 소스를 보면 이해가 쉬울 것으로 생각 된다.


> Name <- c("토니", "매드", "모락", "시추안", "포쿡", "식당돈")
> Training <- c("Yes", "No", "Yes", "No", "Yes", "No")
> Sweetness <- c(8, 9, 9, 4, 5, 5)
> Saltiness <- c(4, 2, 2, 6, 1, 4)
> sensory <- data.frame(Name, Training, Sweetness, Saltiness)

> sensory
    Name   Training Sweetness Saltiness
1   토니       Yes         8              4
2   매드        No         9               2
3   모락       Yes         9              2
4 시추안       No         4              6
5   포쿡       Yes         5              1
6 식당돈       No         5              4

> str(sensory)
'data.frame': 6 obs. of  4 variables:
 $ Name     : Factor w/ 6 levels "매드","모락",..: 5 1 2 3 6 4
 $ Training : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1
 $ Sweetness: num  8 9 9 4 5 5
 $ Saltiness: num  4 2 2 6 1 4

> summary(sensory)
     Name   Training   Sweetness       Saltiness  
 매드  :1     No :3      Min.   :4.000     Min.   :1.000
 모락  :1     Yes:3    1st Qu.:5.000    1st Qu.:2.000
 시추안:1                Median :6.500   Median :3.000
 식당돈:1                Mean   :6.667    Mean   :3.167
 토니  :1                  3rd Qu.:8.750    3rd Qu.:4.000
 포쿡  :1                  Max.   :9.000     Max.   :6.000

- 샘플 데이터로 만들어진 데이터 프레임을 확인 할 수 있다. str() 함수는 데이터프레임의 각 항목의 데이터 구조 형태를 볼 수 있고 summary() 함수는 데이터프레임의 각항목별 최저/최대값과 중간값, 평균등을 요약형태로 볼 수 있으며 향후 데이터 가공 작업시 유용하게 사용할 수 있다.

> sensory[5, 2]
[1] Yes
Levels: No Yes

> sensory[5,]
  Name Training Sweetness Saltiness
5 포쿡      Yes         5         1

> sensory[, 1]
[1] 토니   매드   모락   시추안 포쿡   식당돈
Levels: 매드 모락 시추안 식당돈 토니 포쿡

> condition <- sensory$Training == "Yes"
> sensory[condition,]
  Name Training Sweetness Saltiness
1 토니      Yes         8         4
3 모락      Yes         9         2
5 포쿡      Yes         5         1

> sensory[sensory$Sweetness > 5,]
  Name Training Sweetness Saltiness
1 토니      Yes         8         4
2 매드       No         9         2
3 모락      Yes         9         2

데이터 프레임의 개별 요소 값을 접근하기 위해서는 기본적인 " [ 행, 열 ] " 이라는 구조로 사용이 가능 하다. 또한 [행, ], [ , 열] 을 사용하여 지정하지 않은 경우는 모든 행과 모든 열을 가리키게 된다.


#3 Sample Data 로 계속

2014년 5월 9일 금요일

[Using R] R Language Basic #1 - Sample Data

* 아래 샘플은 RStudio 에서 실행하여 테스트 하였음을 알려 드립니다.
* R & RStudio Install Information --> Reference Link Clicked



샘플 소스 사용시 기본 확인 내용
실행한 스크립트를 작성하는 곳은 " Script " 패널에서 작성하며 한줄 씩 실행은 Ctrl + Enter 여러 라인을 실행시는 시작과 끝을 Drag & Drap 후 Ctrl + Enter 로 실행 하면 된다.

변수로 만들어서 지정된 내용은 보통 "Workspace"안에 나타나며 나타는 결과(내용)은 이미지 형태로 저장도 가능 하다.


** 데이터 타입에 대한 설명 및 예제 #1
1. Vectors (백터)
2. Functions that create vectors(벡터 생성함수) 
3. Matrices and arrays (행렬과 배열)
4. Factors (요인)


1. Vectors (백터)

 브랜드 6개의 매출과 객수 자료를 가지고 객단가를 계산하고 그 값이 2 만원 보다 큰지 여부에 대한 판정 자료를 생성해 보자

> brand  <- c("토니로마스", "매드포갈릭", "모락", "시추안하우스", "포쿡", "식당돈", "비스트로서울")
> brand
[1] "토니로마스"   "매드포갈릭"   "모락"         "시추안하우스" "포쿡"         "식당돈"       "비스트로서울"
> b.amt <- c(60000,90000,50000,80000,30000,45000,140000)
> b.amt
[1]  60000  90000  50000  80000  30000  45000 140000
> b.cnt <- c(3,3,2,3,2,2,3)
> b.cnt
[1] 3 3 2 3 2 2 3
> b.ct <- b.amt/b.cnt
> b.ct
[1] 20000.00 30000.00 25000.00 26666.67 15000.00 22500.00 46666.67
> ct_over <-  b.ct > 20000
> ct_over
[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
> logical.vector <- c(F, T, T, T, F, T, T)
> logical.vector
[1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE



 - 가장 일반적인 자료 생성 방법은 c() 함수를 사용하는 것이다. 문자인 경우는 "토니로마스" 처럼 따음표("")를 사용해야 한다.

 - R 에서는 brand 와 같은 Character Vector(문자백터), b.amt, b.cnt와 같은 Numerical Vector (숫자백터) 그리고 ct_over 와 같이 Logical Vector(논리벡터)가 있다.

 - 논리 백터값을 만들때는 F 또는 T 로 작성하여도 동일하다. 그러나 따음표("")를 사용할 경우 문자백터로 인식하므로 사용시 주의 해야 한다.


2. Functions that create vectors(벡터 생성함수) 

 일정 증가 또는 감소 값으로 숫자값을 c() 함수로 사용하는 경우는 보통은 없을 것이다. 기본으로 제공하는 생성합수를 활용하면 간단하게 할 수 있는 몇가지를 나열하고자 한다.

> seq(10, 30, 5)
[1] 10 15 20 25 30
> seq(10, 30)
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
> 10:30
 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
> vec <- c(10, 30, 60)
> rep(vec, 3)
[1] 10 30 60 10 30 60 10 30 60
> rep(vec, 2:4)
[1] 10 10 30 30 30 60 60 60 60
> rep(vec, seq(2, 4))
[1] 10 10 30 30 30 60 60 60 60
> rep(vec, c(4, 2, 7))
 [1] 10 10 10 10 30 30 60 60 60 60 60 60 60

  - seq() 함수는 3개의 인자를 사용하는 경우 1번째 시작숫자에서 2번째 숫자까지 3번째 숫자 간격의 숫자들로 백터를 생성한다. 상위 예제에서는 10 를 시작으로 5 값을 증가하여 30까지 출력한 것이다.

 - seq() 함수의 3개 인자값 중 마지막 값이 없는 경우 기본값으로 1씩 증가 한다. 이와 같은 명령은 10:30 이나 c(10:30) 과 동일하다.

 - rep()는 함수는 1번째 인자를 2번째 인자만큼씩 반복해서 백ㅌ를 생성하는데 반복수인 2번째 인자 길이가 1번째 인자보다 길수는 없다.

 - rep(vec, c(4, 2, 7)) = rep(c(10, 30, 60), c(4, 2, 7)) 이것은 같은 결과 인데 역시 10은 4번 반복, 30은 2번 반복 60은 7번 반복 하여 생성한다는 의미 이다.


3. Matrices and arrays (행렬과 배열)

> vector.x <- 1:15
> vector.x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
> dim(vector.x) <- c(3,5)
> vector.x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

- dim()함수를 이용하면 n 차원의 행렬을 생성할 수 있다.


> matrix.y  <- matrix(1:15, nrow=3)
> matrix.y1  <- matrix(1:15, nrow=3, byrow=T)
> matrix.y
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15
> matrix.y1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15


- matrix() 함수를 활용하면 nrow(the number of row)를 지정하는 방식으로 행렬을 생성할 수 있다. 보통 생략된 byrow=F 값을 T로 변경한 경우 값을 우측방향으로 생성하게 된다.

> rownames(matrix.y) <- LETTERS[3:5]
> colnames(matrix.y) <- month.abb[1:5]
> matrix.y
  Jan Feb Mar Apr May
C   1   4   7  10  13
D   2   5   8  11  14
E   3   6   9  12  15

 - rownames, colnames 함수를 활용하여 이름을 지정할 수 있다. 이름을 지정할 때 c()를 활용하여 사용 할 수도 있다.

> matrix.y
  Jan Feb Mar Apr May
C   1   4   7  10  13
D   2   5   8  11  14
E   3   6   9  12  15

> t(matrix.y)
     C  D  E
Jan  1  2  3
Feb  4  5  6
Mar  7  8  9
Apr 10 11 12
May 13 14 15

- transposition 함수 t() 는 행과 열 index를 바꾹 때문에 위의 예와 같이 행과 열의 위치가 변경된다.

> cbind(MA=1:3, MB=4:6, MC=7:9)
     MA MB MC
[1,]  1  4  7
[2,]  2  5  8
[3,]  3  6  9
> rbind(MA=1:3, MB=4:6, MC=7:9)
   [,1] [,2] [,3]
MA    1    2    3
MB    4    5    6
MC    7    8    9

- columnwise 결합 함수 cbind()나 rowwise 결합함수 rbind()를 사용하면 같은 길이의 벡터를 열 또는 행 방향으로 합쳐 행렬을 만들 수 있다. 이 함수는 이후에 데이터프레임을 적용하거나 실제로 유용하게 사용하는 경우가 많으니 기억해두길 바란다.


> month.name[1:12]
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"      "August"    "September" "October"
[11] "November"  "December"
> month.abb[1:12]
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> LETTERS[1:26]
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
> letters[1:26]
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"

- 자료 생성을 위한 참고로 활용



4. Factors (요인)

일반적으로 분석하고자 하는 데이터 형태로 많이 보게될 형태이다. 우리가 흔히 접하게 되는 것들 남자, 여자, 또는 M(male), F(female), 남자=1, 여자=2 으로 구분하여 보게 되는 수준값을 자주 보게 되며 경우에 따라서 수준조합을 수치형태의 코드로 변경을 해야 하는 경우도 발생 한다. 아래의 예제들로 확인해보길 바란다.

> data = c(1,2,2,3,1,2,3,3,1,2,3,3,1)
> fdata = factor(data)
> fdata
 [1] 1 2 2 3 1 2 3 3 1 2 3 3 1
Levels: 1 2 3

 - factor() 라는 함수는 벡터를 Levels을 가지는 Factor로 변환한다.

> rdata = factor(data,labels=c("I","II","III"))
> rdata
 [1] I   II  II  III I   II  III III I   II  III III
[13] I
Levels: I II III

- levels() 함수는 요인의 수준 벡터를 가리키며, 수준값을 다른 문자로 변경 할 수 있다.


2014년 5월 3일 토요일

[Using R] R Install & RStudio Install for Windows


* 설치 환경
 - Windows 7 Professional K 64Bit
 - R 3.1.0
 - RStudio 0.98


1. R 다운로드


2. R Project



윈도우 32/64 Bit 가 모두 포함되어 있는 파일이다. (윈도우용인 경우) 그런데 간혹 자신의 비트에 맞도록 설치하다 보면 (64Bit인경우) 찾을 수 없는 오류가 나는 현상을 많이 보아 왔다. 가급적이면 32/64 비트 관련 파일 체크를 건드리지 말고 설치 하길 바란다. 

이후 진행되는 여러가지 패키지 사용이나 활용을 위해서 한가지 주의 해야 할 부분은 윈도우 설치 시 계정명(사용자명)을 한글로 사용한 경우 기본 워크스페이스가 연결되거나 DLL이 로드될때 오류가 나는 현상을 종종 보아 왔다 설치 하여 사용하는 경우는 계정명을 영문으로 하시길 바란다. 


 3. RStudio Download





설치 후 기본 화면을 구성한다. R 사용을 위해서 반드시 필요 한것은 아니나 여러가지 툴 가장 좋은 기능을 제공하는 것으로 생각된다. 환경에 따라 R Server, RStudio 를 구축 하는 경우 웹환경에서도 사용자별로 제공이 가능 하다. 





동장방식에 대한 설명을 좀더 붙여 보고자 그림을 그리려다 우연히 오래전 자료를 보고 참여하여 그림을 한장 붙인다. 이 그림은 (주)센소메트릭스에서 발행한 "R의 설치 및 기본 사용법"을 참고 하였음을 알린다.

R의 작동 방식


기본적으로 R 시스템은 입력되는 스크립트와 저장되는 변수들을 메모리에 저장하였다가 결과를 보여주는 형태로 이뤄진다. 입력되는 데이터는 로컬에 존재하는 파일(이미지포함) 인 경우도 있고  인터넷 상에 있는 외부 데이터인 경우도 있다. 간혹 로드되는 데이터가 사이즈가 많은 경우 사용하는 클라리언트 메모리 사양에 따라 결과를 확인하지 못하고 정지 되는 경우가 많으므로 이에 따른 적절한 조치가 필요 하다.

* Sample Source
Ref  - http://cran.r-project.org/web/packages/doParallel/index.html

install.package("doParallel")
library("doParallel")

cl <- makePSOCKcluster(2)
registerDoParallel(cl)

m <- matrix(rnorm(9), 3, 3)
foreach(i=1:nrow(m), .combine=rbind)

stopCluster(cl)

2014년 4월 17일 목요일

[Using R] Sentiment Analysis Sample Source

# 아래 내용은 이전 포스팅인
트위터 글(데이터) 수집하기 에서 만들어진것이 R실행 코드에서 연결되어야 실행 가능 합니다.

install.packages("plyr")
library(plyr)

hilton.text <-laply(hilton.tweets,function(t)t$getText())
head(hilton.text,3)

#긍정 단어 파일 스캔
pos.word=scan("positive-words.txt",what="character",comment.char=";")

#부정 단어 파일 스캔
neg.word=scan("negative-words.txt",what="character",comment.char=";")

#수작업으로 추가 할수도 있음 (Sample)
pos.words<-c(pos.word,"upgrade")
neg.words<-c(neg.word,"wtf","wait","waiting","epicfail","mechanical")


#
install.packages("plyr")
install.packages("stringr")
library(plyr)
library(stringr)

score.sentiment =
function(sentences, pos.words, neg.words, .progress='none')
{
  require(plyr)
  require(stringr)

  # we got a vector of sentences. plyr will handle a list
  # or a vector as an "l" for us
  # we want a simple array ("a") of scores back, so we use
  # "l" + "a" + "ply" = "laply":
  scores = laply(sentences, function(sentence, pos.words, neg.words) {
 
    # clean up sentences with R's regex-driven global substitute, gsub():
    sentence = gsub('[[:punct:]]', '', sentence)
    sentence = gsub('[[:cntrl:]]', '', sentence)
    sentence = gsub('\\d+', '', sentence)

    # and convert to lower case:
    sentence = tolower(sentence)
 
    # split into words. str_split is in the stringr package
    word.list = str_split(sentence, '\\s+')

    # sometimes a list() is one level of hierarchy too much
    words = unlist(word.list)
 
    # compare our words to the dictionaries of positive & negative terms
    pos.matches = match(words, pos.words)
    neg.matches = match(words, neg.words)
 
    # match() returns the position of the matched term or NA
    # we just want a TRUE/FALSE:
    pos.matches = !is.na(pos.matches)
    neg.matches = !is.na(neg.matches)
 
    # and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
    score = sum(pos.matches) - sum(neg.matches)
 
    return(score)
  }, pos.words, neg.words, .progress=.progress )

  scores.df = data.frame(score=scores, text=sentences)
  return(scores.df)
}

#함수 실행
hilton.text<-hilton.text[!Encoding(hilton.text)=="UTF-8"]
hilton.scores=score.sentiment(hilton.text,pos.words,neg.words,.progress='text')

#실행결과 값을 히스토그램으로 표현
hist(hilton.scores$score)
hilton.scores$hotel='Hilton'
hilton.scores$code='HL'


[Using R] R을 사용하여 트위터 데이터 수집하기 - Twitter Oauth for R

트위터에 대한 데이터를 기준으로 간단한 감성분석 샘플을 만들어 보자. 참고된 스크립트는 데이터베이스 진흥원 빅데이터 아카데미에서 사용한 샘플 소스 임을 밝힌다. 트위터에 있는 글을 수집하기 위해서는 어플리케이션을 하나 임시로 만들어서 데이터 가져오기 위한 준비를 몇가지 해야 한다. 샘플은 영문으로 된 것을 기준으로 하며 한글로 된 데이터를 가져오는 부분은 추가로 포스팅에 업데이트 될 예정이다. 크게 다리지는 않지만 몇가지 작업들이 추가 된다.

1. twitter 계정 만들기 ( 별도 계정 생성은 설명을 붙이지 않는다 )

2. twitter에 접속 한 후 application 생성이 필요

    https://apps.twitter.com/ 접속 후 로그인


3. "Create New App" 클릭 




"Create your Twitter application" Click 

## 2016년 3월 - 기존 트위터 계정에서 모바일 번호 인증이 되어 있지 않으면 하지 못하도록 변경된 것 같다. 결국에 또 정보 제공 해주고 나서야 다시 가능 
그래서 첨부된 이미지에 이름이 달라졌습니다. " ozzang98_RTest " 로 등록 


4. 생성된 Application 정보를 참고하여 R 스크립트에 적용 한다. 


 * 최근에 Access Token 버튼이 추가 되어 Create New Access Token 을 추가 하여야 한다. 추가 하고 나면 아래의 그림과 같이 활성화가 된다. 

5. 설정이 끝나고 나면 이 정보를 가지고 R 에서 스크립트를 실행한다. 

* 실행환경 윈도우7 64비트, R 3.2.0, RStudio 0.98.1103 

# 기본적인 패키지 설치를 위한 구문 
install.packages("twitteR")
library(twitteR)
library(ROAuth)
library(RCurl)

#트위터 접근을 위한 정보 설정을 아래와 같이 함 
requestURL= "https://api.twitter.com/oauth/request_token"
accessURL= "https://api.twitter.com/oauth/access_token"
authURL ="https://api.twitter.com/oauth/authorize"


#상위의 4번 첨부 그림안에 있는 API KEY (본인의 설정에 따라 값이 다름) 
consumerKey="izSShtegtepjWqL1dTWZPg"  

#상위의 4번 첨부 그림안에 있는 API secret 값 
consumerSecret="u03nOZBzqsLrPEVWM2iFbCbDAkbrixPLsTpzZ1MQQ4"


twitCred=OAuthFactory$new(consumerKey=consumerKey,
                                          consumerSecret=consumerSecret, 
                                          requestURL=requestURL, 
                                          accessURL=accessURL, authURL=authURL)

#저장위치 수동지정(기본 Workspace 위치) 
setwd("C:/Users/John/Downloads")
download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")
twitCred$handshake(cainfo="cacert.pem")

#이 단계에서 콘솔에 출력되는 URL을 입력하고 어플리케이션 승인을 해야 한다. 


# [그림 참조] PIN 번호 입력을 하고 나면 그 다음 스크립트를 실행 가능 함 


## 입력은 Console 창에서 입력하기 바란다. 

##save(list="twitCred",file="twitteR_credentials")
##load("twitteR_credentials")

registerTwitterOAuth(twitCred) #True 인증 완료 




## 2016년 3월 25일 추가 변경 
## 인증 방법 및 적용이 변경된 것 같으나 정확한 사유는 확인 하지 못했습니다. 
하여 혹시 관련 내용을 적용하시고자 하신다면 하단 내용으로 진행하시길 권장 합니다. 
#install.packages("twitterR")
#install.packages("ROAuth")
#install.packages("base64enc")
library(twitteR)
library(ROAuth)
library(base64enc)

consumer_key <- '3esVC69GlJcmxL4VezZ7CdKwu'
consumer_secret <- 'gwtwk1oMqQvi6ZfqPphQb9uJctCDIIldGxYymU9OcCAJDbkouQ'
access_token <- '133360027-x7e4FuoCVA4AsEFBMjhs4kvx3HN86ajsRQmG7mwJ'
access_secret <- 'ak2qVw9ioIXyLmUw1UqWHNHohJRRPfWzlDtABaHRYzJIr'

setup_twitter_oauth(consumer_key,consumer_secret,access_token,access_secret)


# 트위터글을 검색하여 트윗정보를 가져온다 
hilton.tweets <- searchTwitter("@hilton",n=50,cainfo="cacert.pem")

length(hilton.tweets)
class(hilton.tweets)
hilton.tweets[1:5]
tweet<-hilton.tweets[[1]]
tweet$getScreenName()
tweet$getText()

twitteR 패키지에 대한 메뉴얼을 하단의 링크를 참조 하시길 바랍니다. 



2014년 1월 13일 월요일

[System] R and RStudio Server x64 on Linux CentOS 6

데이터 분석 스터디 그룹을 위한 RStudio Server RPM 버전 설치 작업  #1
#패키지 다운로드   
[root@ ~] yum install R
#만일 위에서 설치 중 TCL 관련 패키지가 요구되는 경우 아래와 같이 진행 한다.
yum [root@ ~]  install tcl
[root@ ~]  sudo yum clean all
[root@ ~]  sudo yum install R
  
#RStudio 설치 - 버전에 따라 다를 수 있으니 항상 최신 버전 확인 후 설치  
[root@ ~]  sudo yum install --nogpgcheck rstudio-server-0.97.551-x86_64.rpm

#RStudio 시작, 종료, 재시작 확인 사항 
[root@ ~]  /etc/init.d/rstudio-server start | stop | restart

 #리눅스 방화벽에 해당 포트 접속 승인 추가 8787 
[root@oracle ~] vi /etc/sysconfig/iptable  
#서비스 재시작 
[root@oracle ~] service iptables restart  

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...