IT기술/BigData

데이터 핸들링 하기

dobbby 2014. 2. 19. 12:16
반응형

데이터  프레임  사용하기

데이터  프레임이란  배열과  비슷하지만  차이점은  각  컬럼별로  데이터  형태가  다를  수  있다는  점입니다.  

즉  RDBMS  에서  테이블과  비슷한  형태라고  생각하면  됩니다.

일반  DBMS  에서는  컬럼이라고  부르는  것을  R  에서는  라벨이라고  부릅니다.

일반  DB에서  컬럼을  통해  데이터  접근이  가능하듯이  R  에서도  라벨을  이용해서  데이터  제어가 가능합니다.


No  Name  Price  Qty

1  Apple  500  5

2  Banana  200  2

3  Peach  200  7

4  Berry  50  9


위와  같은  형태를  R  에서는  데이터  프레임이라고  하며  직접  R  에서  만들  수도  있고  외부  파일에서  읽어와서  데이터를  생성할  수도  있습니다.


1. R  에서  데이터  프레임  생성하기

1)  벡터로  부터  데이터  프레임  생성하기


> no <- c(1,2,3,4)

> name <- c("Apple", "Banana", "Peach", "Berry")

> price <- c(500,200,200,50)

> qty <- c(5,2,7,9)

> fruits <- data.frame (NO=no, NAME=name, PRICE=price, QTY=qty)

> fruits

  NO   NAME PRICE QTY

1  1  Apple   500   5

2  2 Banana   200   2

3  3  Peach   200   7

4  4  Berry    50   9


위  그림을  주의깊게  보면  각  컬럼(라벨)별로  먼저  생성  한  후  data.frame  라는  명령으로  모든  컬럼(라벨)을  합쳐서  데이터  프레임을  생성함을  알  수  있습니다.  


> x <-matrix(

+  c(1,"이순신",180,80,

+    2,"일지매",175,75,

+    3,"홍길동",170,70,

+    4,"유관순",165,55),4,by=T)

> people <- data.frame(x)

> people

  X1     X2  X3 X4

1  1 이순신 180 80

2  2 일지매 175 75

3  3 홍길동 170 70

4  4 유관순 165 55


> names(people) <- c("NO","NAME","HEIGHT","WEIGHT")

> people

  NO   NAME HEIGHT WEIGHT

1  1 이순신    180     80

2  2 일지매    175     75

3  3 홍길동    170     70

4  4 유관순    165     55


2.  외부  파일에서  데이터를  읽어서  데이터  프레임  생성하기
1) txt  파일에서  데이터  읽기


위와  같은  txt  파일을  읽어서  R  에서  데이터  프레임으로  생성  해  보겠습니다.

> fruit2 <- read.table("d:/yul/temp/fruits.txt", header=T, sep="")
> fruit2
  no   name price qty
1  1  apple   500   5
2  2 banana   200   2
3  3  peach   200   7
4  4  berry    50   9

위와  같이  read.table  이라는  함수를  이용해서  데이터를  R  로  불러들일  수  있습니다.
이  함수에  있는  옵션  중  Header  라는  파라미터는  원본  데이터에  컬럼  이름이  있을  경우  Header 부분이  있다는  의미이며  
공백으로  구분되어  있기에  sep  로  구분자를  공백("")  으로  지정했습니다.
만약  원본  파일에  아래와  같이  Header  부분이  없을  경우는  header  항목을  생략하며  
그  때는  R 이  자동으로  컬럼에  라벨명을  지정해서  아래  그림과  같이  됩니다.

  V1     V2    V3  V4
1 no   name price qty
2  1  apple   500   5
3  2 banana   200   2
4  3  peach   200   7
5  4  berry    50   9

# 으로 주석이 되어있다면 해당 라인은 저장하지 않습니다.


> fruit2 <- read.table("d:/yul/temp/fruit.txt,sep="",skip=3)

skip 은 첫줄부터 건너뛸 줄 수를 선택하는 옵션입니다.


> fruit2 <- read.table("d:/yul/temp/fruit.txt,sep="",nrows=3)

nrows 는 skip 과 반대로 출력할 줄 수를 지정합니다.


csv 처럼 구분자가 ,(콤마) 인 경우는 read.csv 를 사용하는 방법이 간편합니다.

> fruit3 <- read.csv("d:/yul/temp/fruit3.csv")


만약 소스 파일에 컬럼명이 없다면 수동으로 지정해주어야 합니다.

> fruit4 <- read.csv("d:/yul/temp/fruit4.csv", header=F)


> lname <- c("NO", "NAME", "PRICE", "QTY")

> fruit4 <- read.csv("d:/yul/temp/fruit4.csv",header=F,col.names=lname)

> fruit4

  NO   NAME PRICE QTY

1  1  apple   500   5

2  2 banana   200   2

3  3  peach   200   7

4  4  berry    50   9


위의  방법으로  csv  파일을  R  로  불러들여서  데이터  프레임을  생성할  수  있으며  

만약  tab  으로  구분된  파일이라면  read.delim( )  함수를  이용하여  동일한  방법으로  파일을  호출하면  됩니다.


2) xls (Microsoft Office Excel)  파일로  부터  데이터  프레임  생성하기

이  기능은  R  에  기본적으로는  없으며  이  기능을  지원하는  패키지를  추가로  설치해야  합니다.

만약  R  이  32bit  용  이라면  RODBC  를  아래와  같이  설치하면  되고  64bit  용  R  일  경우 XLConnect   라는  패키지를  설치해야  합니다.


32bit 용 RODBC 설치 화면

> install.packages("RODBC")

Installing package into ‘C:/Users/stu/Documents/R/win-library/3.0’

(as ‘lib’ is unspecified)

--- Please select a CRAN mirror for use in this session ---

trying URL 'http://cran.nexr.com/bin/windows/contrib/3.0/RODBC_1.3-10.zip'

Content type 'application/zip' length 829130 bytes (809 Kb)

opened URL

downloaded 809 Kb


package ‘RODBC’ successfully unpacked and MD5 sums checked


The downloaded binary packages are in

        C:\Users\stu\AppData\Local\Temp\Rtmp0oVA5L\downloaded_packages


64 bit 용 XLConnect 패키지 설치 화면

> install.packages("XLConnect")

Installing package into ‘C:/Users/stu/Documents/R/win-library/3.0’

(as ‘lib’ is unspecified)

trying URL 'http://cran.nexr.com/bin/windows/contrib/3.0/XLConnect_0.2-7.zip'

Content type 'application/zip' length 17998766 bytes (17.2 Mb)

opened URL

downloaded 17.2 Mb


package ‘XLConnect’ successfully unpacked and MD5 sums checked


The downloaded binary packages are in

        C:\Users\stu\AppData\Local\Temp\Rtmp0oVA5L\downloaded_packages

> library(XLConnect)

XLConnect 0.2-7 by Mirai Solutions GmbH

http://www.mirai-solutions.com ,

http://miraisolutions.wordpress.com


테스트를 위해 아래와 같은 xls 파일을 생성한 후 저장합니다.




> setwd("d:/yul/temp")

> require(XLConnect)

> ex1=loadWorkbook("fruits.xls",create=T)

> exdata=readWorksheet(ex1,sheet="sheet1",startRow=1,endRow=10,startCol=1,endCol=10)

> exdata

  Col1   Col2  Col3 Col4

1   no   name price  qty

2    1  apple   500    5

3    2 banana   200    2

4    3  peach   200    7

5    4  berry    50    9


> exdata=readWorksheet(ex1,sheet="sheet1",startRow=1,endRow=10,startCol=2,endCol=3)

> exdata
  Col1   Col2
1   no   name
2    1  apple
3    2 banana
4    3  peach
5    4  berry

> exdata=readWorksheet(ex1,sheet="sheet1",startRow=1,endRow=3,startCol=3,endCol=4)
> exdata
   Col1  Col2
1  name price
2 apple   500

컬럼이나 로우를 얼마든지 원하는 대로 선택해서 조회할 수 있습니다.


3) 클립보드의 내용을 사용해서 데이터 프레임 생성하기


먼저  윈도에서  엑셀  창에서  원하는  부분을  선택  한  후  Ctrl+c  로  복사를  합니다.

그  후에  R  에  와서  아래와  같이  수행하면  복사  내용이  입력이  됩니다.


> fruits7 <- read.delim("clipboard",header=T)

> fruits7

  no   name price qty

1  1  apple   500   5

2  2 banana   200   2

3  3  peach   200   7

4  4  berry    50   9



3. 데이터 프레임 안의 내용을 집계하기


> fruits7

  no   name price qty

1  1  apple   500   5

2  2 banana   200   2

3  3  peach   200   7

4  4  berry    50   9

> summary(fruits7)

       no           name       price            qty      

 Min.   :1.00   apple :1   Min.   : 50.0   Min.   :2.00  

 1st Qu.:1.75   banana:1   1st Qu.:162.5   1st Qu.:4.25  

 Median :2.50   berry :1   Median :200.0   Median :6.00  

 Mean   :2.50   peach :1   Mean   :237.5   Mean   :5.75  

 3rd Qu.:3.25              3rd Qu.:275.0   3rd Qu.:7.50  

 Max.   :4.00              Max.   :500.0   Max.   :9.00  



4. 데이터 프레임 저장하기


> fruits7

  no   name price qty

1  1  apple   500   5

2  2 banana   200   2

3  3  peach   200   7

4  4  berry    50   9

> write.table(fruits7,"d:/yul/temp/fruits7.txt",quote=F,append=F)



반응형