카테고리 없음

R 1편 / 설치 및 데이터 포맷

개발자_이훈규 2019. 3. 8. 11:06






Install for R


on mac

download page 에서 다운을 받는다.

 

사용방법

libarary확인

> library()

System package path

> .libPaths()

 

Install package

from CRAN(Comprehensive R Archive Network) network

> install.package("package-name")

manual install package

> install.packages("ggplot2", lib = "/data/Rpackages/")
> library(ggplot2, lib.loc="/data/Rpackages")

 

Data format

값 할당은 <-을 사용하거나 =을 사용한다

값 확인은 print 혹은 변수명을 prompt에 적는다.

> a <- "hello"   (character)
> b <- 2.5       (numberic)
> c <- 6L        (integer)
> d <- 1 + 2i    (complex, 복소수)
> e <- TRUE      (logical) 

 

Vector

동일한 유형의 데이터가 1개 이상 존재하는 1차원 데이터 구조

> first <- "boy"
> second <- "girl"
> c(first, second)
[1] "boy"  "girl"
> thirth <- "dog"
> vectorValue <- c(first, second, thirth)
> vectorValue
[1] "boy"  "girl" "dog" 

 

List

다양한 유형의 데이터를 담을 수 있는 구조

> listValue <- list("listSample", c(first, second), vectorValue)
> listValue
[[1]]
[1] "listSample"

[[2]]
[1] "boy"  "girl"

[[3]]
[1] "boy"  "girl" "dog" 

> print(listValue)
[[1]]
[1] "listSample"

[[2]]
[1] "boy"  "girl"

[[3]]
[1] "boy"  "girl" "dog" 

List속에서 값 추출하기

보통 배열의 index가 0부터 시작하는 것과 다르게 1부터 시작한다.

> listValue <- list("listSample", c(first, second), vectorValue)
> listValue[0]
list()
> listValue[1]
[[1]]
[1] "listSample"

> listValue[2]
[[1]]
[1] "boy"  "girl"

> listValue[3]
[[1]]
[1] "boy"  "girl" "dog" 

 

Matrix

2차원 데이터의 집합으로 벡트로 구성되어 있다.

> mtrx = matrix(c(1,2,3,4,5,6,7,8,9,10), nrow=2, ncol=5)
> mtrx
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

 

Array

데이터를 어떤걸 넣어도 되는것 같다. 보통은 array에 matrix을 넣어서 다차원 배열로 활용한다.

형태 : array(vector value, dim = c(row, col, size))

> arr = array(c(4, 5), dim = c(3, 3, 2))
> arr
, , 1

     [,1] [,2] [,3]
[1,]    4    5    4
[2,]    5    4    5
[3,]    4    5    4

, , 2

     [,1] [,2] [,3]
[1,]    5    4    5
[2,]    4    5    4
[3,]    5    4    5

> arr2 = array(c(1, 2, 3), dim = c(2, 4, 3))
> arr2
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    3    2    1
[2,]    2    1    3    2

, , 2

     [,1] [,2] [,3] [,4]
[1,]    3    2    1    3
[2,]    1    3    2    1

, , 3

     [,1] [,2] [,3] [,4]
[1,]    2    1    3    2
[2,]    3    2    1    3

 

Factor

벡터를 이용해 생성하는 R객체. factor을 사용하면 라벨링을 해준다. 라벨링은 통계적 모델링에 유용하게 쓰인다고 한다.

> factValue = c(1, 1, 2, 3, 4, 5, 5)
> fact = factor(factValue)
> fact
[1] 1 1 2 3 4 5 5
Levels: 1 2 3 4 5
> nlevels(fact)
[1] 5

 

데이터프레임

데이터프레임은 표 형태의 데이터 객체로 matrix와 다르게 여러 형식의 데이터를 포함할 수 있다.

데이터 프로엠은 동일한 길이를 갖는 벡터 리스트이다.

사용방법은 data.frame() function을 이용한다.

> dataFrame = data.frame( stockItem = c("samsung", "lg", NA), price = c(50000, 30000, 10000) )
> dataFrame
  stockItem price
1   samsung 50000
2        lg 30000
3      <NA> 10000

 

외부 데이터 읽기

rdatasample.csv

rdatasample.xlsx


파일을 읽기 위해서는 읽을 파일이 있는 경로로 현재 작업 디렉토리를 이동시켜야한다. (using setwd() function)

csv data읽기

> csvData = read.csv("rdatasample.csv")
> csvData
   Symbol                                Name Price..Intraday. Change X..Change  Volume Avg.Vol..3.month. Market.Cap PE.Ratio..TTM.
1     BAC         Bank of America Corporation            28.84  -0.24    -0.83% 41.672M           73.494M   278.559B          11.05
2     ECA                  Encana Corporation             6.98  -0.31    -4.25% 33.594M           31.332M    10.294B           6.29
3      MU             Micron Technology, Inc.            37.93  -2.06    -5.15%  44.89M           35.515M    42.521B           3.13
4     WBA      Walgreens Boots Alliance, Inc.            61.10  -2.30    -3.63% 15.393M            6.301M    57.644B          11.24
5    CELG                 Celgene Corporation            86.58   0.33    0.0038 10.068M           11.274M    60.793B          15.71
6      MS                      Morgan Stanley            41.62  -0.28    -0.67%  7.063M           13.907M     71.12B           8.80
7     DAL               Delta Air Lines, Inc.            49.71  -0.01    -0.02%  8.703M            8.074M    33.631B           8.77
8      ET                  Energy Transfer LP            14.85  -0.10    -0.67%  9.925M           14.027M    38.898B          12.83
9     AKS        AK Steel Holding Corporation             2.79  -0.16    -5.42% 13.572M            11.06M   882.502M           4.73
10    WTW Weight Watchers International, Inc.            20.79  -0.14    -0.67%  3.734M            4.033M     1.392B           6.52
11    BBD                 Banco Bradesco S.A.            10.98  -0.33    -2.96%  12.04M           13.239M    70.243B          15.69
12      X     United States Steel Corporation            20.58  -1.32    -6.03% 11.275M            9.583M     3.565B           3.29
13    DNR              Denbury Resources Inc.             1.76  -0.07    -3.83% 14.363M           11.761M   794.615M           2.48
14    WDC         Western Digital Corporation            48.12  -2.62    -5.16%  7.916M            7.251M    13.996B          17.60
> is.data.frame(csvData)
[1] TRUE
> write.csv(csvData, "cvsData.cvs")

xlsx data 읽기

xlsx을 설치해야한다. install.packages("xlsx")

tar: Failed to set default locale 이 뜬다면,

system('defaults write org.R-project.R force.LANG en_US.UTF-8') 을 입력하고 R studio 재시작한다.

library(xlsx) 을 할때 package or namespace load failed for ‘xlsx’: 이 뜬다면

JRE을 다운받아야한다.

R Studio support

그런데 평소에도 jvm을 써왔다면 터미널에서 $ sudo r 로 들어가서 library(xlsx)을 확인해보자

필자는 root권한으로 실행하니 잘 동작하였다.

(mac의 R studio에서 library(xlsx)을 실행시키는데 난관이 많다. 그냥 터미널로 꼐속 진행한다...)

> exceldata = read.xlsx("rdatasample.xlsx", sheetIndex = 1)
> exceldata
   Symbol                                Name Price..Intraday. Change X..Change
1     BAC         Bank of America Corporation            28.84  -0.24   -0.0083
2     ECA                  Encana Corporation             6.98  -0.31   -0.0425
3      MU             Micron Technology, Inc.            37.93  -2.06   -0.0515
4     WBA      Walgreens Boots Alliance, Inc.            61.10  -2.30   -0.0363
5    CELG                 Celgene Corporation            86.58   0.33    0.0038
6      MS                      Morgan Stanley            41.62  -0.28   -0.0067
7     DAL               Delta Air Lines, Inc.            49.71  -0.01   -0.0002
8      ET                  Energy Transfer LP            14.85  -0.10   -0.0067
9     AKS        AK Steel Holding Corporation             2.79  -0.16   -0.0542
10    WTW Weight Watchers International, Inc.            20.79  -0.14   -0.0067
11    BBD                 Banco Bradesco S.A.            10.98  -0.33   -0.0296
12      X     United States Steel Corporation            20.58  -1.32   -0.0603
13    DNR              Denbury Resources Inc.             1.76  -0.07   -0.0383
14    WDC         Western Digital Corporation            48.12  -2.62   -0.0516
15   <NA>                                <NA>               NA     NA        NA
    Volume Avg.Vol..3.month. Market.Cap PE.Ratio..TTM.
1  41.672M           73.494M   278.559B          11.05
2  33.594M           31.332M    10.294B           6.29
3   44.89M           35.515M    42.521B           3.13
4  15.393M            6.301M    57.644B          11.24
5  10.068M           11.274M    60.793B          15.71
6   7.063M           13.907M     71.12B           8.80
7   8.703M            8.074M    33.631B           8.77
8   9.925M           14.027M    38.898B          12.83
9  13.572M            11.06M   882.502M           4.73
10  3.734M            4.033M     1.392B           6.52
11  12.04M           13.239M    70.243B          15.69
12 11.275M            9.583M     3.565B           3.29
13 14.363M           11.761M   794.615M           2.48
14  7.916M            7.251M    13.996B          17.60
15    <NA>              <NA>       <NA>             NA
> write.xlsx(exceldata, "result.xlsx")

 

URL에서 데이터 받아오기

웹에서 csv 형식으로 데이터를 준다면 url을 채로 데이터를 받을 수 있다.

> url = "csv file url"
> urldata = as.data.frame(read.csv(url))

 

데이터베이스

관계형 데이터베이스, mySQL과 연결해서 사용할 수 있다.

이것도 library.install하는데 수월하게 되진 않는다. 테스트 환경이 구축되지 않았으므로 패스

> mysqlconnection = dbConnect(MySQL(), user = '...', password = '...', dbname = '...', host = '...')
> dbListTables(mysqlconnection)
> result = dbSendQuery(mysqlconnection, "select * from <table name>)
> data.frame = fetch(result)
> data.frame