Chapter4(데이터 분석) – 제1장_데이터 분석 개요(제3절~제4절)

제 3절 분석 환경 이해와 기본 사용법

1. 분석 환경의 이해

가. 통계 패키지 R

설치방법 ← 클릭시 페이지로 이동합니다.

2. 기본 사용법

가.   R언어와 문법

1) R스튜디오 설명

rstudio

①스크립트 : R명령어를 입력하는 창
②콘솔 : 스크립트 창에서 실행한 명령문이 실행되는 것을 볼 수 있는 곳
③워크스페이스 : 할당된 변수와 데이터가 나타나는 곳
④설치된 패키지들과 help 등을 볼 수 있는 곳

데이터 구조

(1) 스칼라, (2) 벡터, (3) 요인, (4) 행렬, (5) 배열, (6) 데이터프레임, (7) 리스트

  1. 스칼라
    구성인자가 하나인 벡터를 말한다.
  2. 벡터
    벡터는 동일한 유형의 데이터가 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조를 말한다.

    (벡터 중에서 구성인자가 1개인 것을 ‘스칼라‘라고 한다)

  3. 요인
    범주형(명목형 또는 순서형)의 데이터 구조를 요인(Factor)라고 한다.
  4. 행렬
    행렬은 동일한 유형의 2차원 데이터 구조를 말한다. (쉽게 말해 m x n 형태의 표 형태의 데이터)

    참고로, 벡터는 동일한 유형의 1차원 데이터 구조 (쉽게 말해, 가로로 늘어선 한 줄 데이터)

  5. 배열
    배열(Array)은 동일한 유형의 데이터가 2차원 이상으로 구성된 구조를 말한다.

    참고로, 행렬은 동일한 유형의 2차원 데이터 구조라고 했지요. 따라서 배열은 쉽게 말해 행렬이라는 방을 층 층이 쌓아놓은 아파트라고 생각

  6. 데이터프레임
    데이터 프레임데이터 유형에 상관없이 2차원 형태의 데이터 구조를 말한다.

    참고로, 행렬동일한 유형의 데이터가 2차원 형태로 구성

  7. 리스트
    리스트는 벡터, 행렬, 배열, 데이터 프레임 등과 같은 서로 다른 구조의 데이터를 모두 묶은 객체를 말한다.

2) 변수와 벡터 생성

문자형 값을 넣을 경우, 숫자형과는 다르게 “”을 써줘야 문자형 값으로 인식된다.


a = 1
 [1] 1

print(a)
 [1] 1

x = c(“fee”, “fie”, “foe”, “fum”)
 print(x)
 [1] "fee", "fie", "foe", "fum"

함수 내에서 연산을 할 수 있다.


c(1*3,2*3,3*3)
[1] 3 6 9

논리형 값은 “”가 필요없다.


c(Ture,Ture,FALSE)
[1] Ture Ture FALSE

수열


1:5
[1] 1 2 3 4 5

  • seq(from=시작점, to =끝점, by = 간격)

//sep(from="시작점", to="끝점", by=간격)

sep(form=0, to=10, by=2)
[1] 0 2 4 6 8 10

//sep(from="시작점", to="끝점", length="시작과끝사이에 들어갈 스칼라의 개수")

sep(from=0, to=10, length=3)
[1] 0 5 10

 

  • rep(반복할 내용, 반복수)
    똑 같은 값이 단순 반복되는 특별한 수열은 인자를 반복하는 rep함수를 이용

rep(1, times=5)
[1] 1 1 1 1 1

  • 데이터 유형
    numeric은 숫자 형태의 데이터이다. 정수인 integer와 소수점이 있는 double이 있다.
    logical은 Ture(T), False(F)가 있다.
    character는 ‘a’와 같은 문자와, ‘abc’와 같은 문자열이 있다.
  • paste(“붙일 내용”, “붙일 내용”, sep=””)
    붙일 내용을 seperator를 사이에 두고 붙이는 함수다.

paste("a","b",sep=" ")
[1] a b
paste("a","b",sep="")
[1] ab
paste("a","b",sep="-")
[1] a-b

 

  • substr(문자열, 시작, 끝)
    시작과 끝에 해당하는 하위 문자열을 추출

substr("kwangwoonUNI",1,4)
[1] "kwang"
  • 논리값
    R에는 두 개의 논리값인 TRUE와 FLASE가 있다. / T, F로 써도 된다.

a=4
b=3

a>b
[1] Ture
a<b
[1] FALSE

  • 행렬
    matrix(이름, 행 수, 열 수)
    dim(행렬) : 행렬의 행과 열 수를 반환 한다.
    diag(행렬) : 행렬의 대각선에 있는 값을 반환한다.
    [1, ] : 1행
    [ ,3] : 3열

data=c(1,2,3,4,5,6)
mat=matrix(data,2,3)
mat
    [,1] [,2] [,3]
[1,]   1    3   5
[2,]   2    4   6

mat[1, ]
[1, ] 1 3 5

mat[ ,3]
[,3] 5 6

dim(mat)
[1] 2 3

diag(mat)
[1] 1 4

  • colnames() : 열 네임을 조회한다.
    rownames() : 행 네임을 조회한다.

data=c(1,2,3,4,5,6)
mat=matrix(data,2,3)
mat
    [,1] [,2] [,3]
[1,]   1    3   5
[2,]   2    4   6

colnames(mat) = c("SKT", "KT", "LGU")
rownames(mat) = c("3g","4g")

mat
     SKT   KT LGU
  3g   1    3   5
  4g   2    4   6

 
  • list
    벡터에서 모든 원소는 같은 모드를 갖고 있어야 하지만, 리스트에서 원소들은 다른 모드여도 된다.

//벡터
x=c(1,2,3)
x
[1] 1 2 3

y="test"
y
[1] "test"

z=c("test",1,2,3)
z
[1] "test" "1" "2" "3"

//리스트
lst=list(2016,"10월",sum)
lst
[[1]]
[1] 2016

[[2]]
[1] "10월"

[[3]]
function (..., na.rm = FALSE) .Primitive("sum")

 

 

  • 접근 방법리스트명[[1]]  : 리스트안에서 첫 번째 속성에 접근
    리스트명[[1]][2]  :리스트 안에서 첫 번째 속성에서 2번째 속성에 접근(상세 값에 접근)

수열= 1:10
행렬= matrix(1:9,3,3)
문자열= c("SKT", "KT", "LGU")

testlist=list(수열,행렬,문자열)
testlist
[[1]]
 [1] 1 2 3 4 5 6 7 8 9 10

[[2]]
 [,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

[[3]]
[1] "SKT" "KT" "LGU"

//list에 네이밍
testlist=list("수열"=a,"행렬"=b,"문자열"=c)
testlist
$수열
 [1] 1 2 3 4 5 6 7 8 9 10

$행렬
 [,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

$문자열
[1] "SKT" "KT" "LGU"


testlist$수열
[1] 1 2 3 4 5 6 7 8 9 10

testlist[[1]]
[1] 1 2 3 4 5 6 7 8 9 10

testlist[[1]][2]
[1] 2

 

 

  • 데이터 프레임행렬(Matrix)와 데이터 프레임(Data Frame)는 형태는 비슷하나 속성이 다르다.
    행렬의 경우, 같은 형태(mode)의 객체를 가진다.
    데이터프레임의 경우, 각 열은 다른 형태(mode)의 객체를 가질 수 있다.rbind(dfrm1, dfrm2): 두 데이터프레임의 행을 쌓으려면 rbind를 사용한다.
    cbind(dfrm1,dfrm2) : 두 데이터프레임의 열을 이어 붙이려면 cbind를 사용한다.
    subset(dataframe, select = 열 이름) : 데이터세트에서 조건에 맞는 내용을 조회한다.
    merge(df1, df2, by=” df1와 df2의 공통된 열의 이름”) 하나의 공통된 열로 데이터프레임 병합
dim(iris)
[1] 150 5
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

//rbind

addrow=data.frame(Sepal.Length=3.0, Sepal.Width=3.1, Petal.Length=1.3, Petal.Width=0.3, Species="newsetosa")
addrow
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1             3         3.1          1.3         0.3  newsetosa


iris=rbind(iris,addrow)


dim(iris)
[1] 151 5
tail(iris)
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
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.1          1.3         0.3 newsetosa


//cbind

addcol=1:151
iris=cbind(iris,addcol)
dim(iris)
[1] 151 6
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species addcol
1          5.1         3.5          1.4         0.2  setosa      1
2          4.9         3.0          1.4         0.2  setosa      2
3          4.7         3.2          1.3         0.2  setosa      3
4          4.6         3.1          1.5         0.2  setosa      4
5          5.0         3.6          1.4         0.2  setosa      5
6          5.4         3.9          1.7         0.4  setosa      6

//subset
subset(iris, select=Species, subset=(Petal.Length>1.7))
      Species
25     setosa
45     setosa
51 versicolor
52 versicolor
53 versicolor

//merge
test1=head(cbind(iris[,1:3]))
 Sepal.Length Sepal.Width Petal.Length
1         5.1         3.5          1.4
2         4.9         3.0          1.4
3         4.7         3.2          1.3
4         4.6         3.1          1.5
5         5.0         3.6          1.4
6         5.4         3.9          1.7
test2=head(cbind(iris[,3:5]))
  Petal.Length Petal.Width Species
1          1.4         0.2  setosa
2          1.4         0.2  setosa
3          1.3         0.2  setosa
4          1.5         0.2  setosa
5          1.4         0.2  setosa
6          1.7         0.4  setosa

merge(test1, test2, by="Petal.Length")
//합쳐야할 열은 핵심키어야 한다.
 

 

  • 자료형 데이터 구조 변환
    as.data.frame(x) : 데이터프레임 형식으로 변환한다.
    as.list(x) : 리스트 형식으로 변환한다.
    as.matrix(x) : 행렬 형식으로 변환한다.
    as.vector(x) : 벡터 형식으로 변환한다.
    as.factor(x) : 팩터 형식으로 변환한다.

1) 변환이 잘 적용되지 않는 다면 NA 값으로 나타난다.

2) 논리값을 숫자값으로 변환할 때는 FALSE를 0으로, TRUE를 1로 바꾼다.


as.numerix("foo")
[1] NA

as.numerix(FALSE)
[1] 0
as.numerix(TURE)
[1] 1
 

 

  • 문자열을 날짜로 변환
    Sys.Date(): 현재 날짜를 반환한다.
    as.Date(): 날짜 객체로 변환한다.
  • 날짜를 문자열로 변환
    format(날짜, 포맷)
    as.character()

date="2016-10-10"
date
newdate=as.Date(date)
newdate
date+1
Error in date + 1 : non-numeric argument to binary operator
newdate+1
[1] "2016-10-11"

newdate=as.character(newdate)
newdate+1
Error in date + 1 : non-numeric argument to binary operator
 
  • 벡터의 기본 연산
    mean():평균
    sum():합
    average():평균
    median():중앙값
    log():로그
    sd():표준편차
    var():분산
    cov():공분산
    cor():상관계수
    length():변수의 길이 값 반환

 

  • 알아두면 유용한 기타 함수들
    write.csv(변수이름, “지정할 파일이름.csv”)
    read.csv(“저장된 파일이름.csv”)
    save(변수이름, file=”지정할 데이터 파일이름.Rdata”)
    load(“저장된 파일이름.Rdata”)
    rm()
    rm(a) 변수 a 제거
    rm(list=Is(all=TRUE))   ## 모든 변수 제거

    summary()  : 간단한 통계량들을 데이터세트 열마다 요약

    head()   : 데이터세트의 6번째 행까지 조회해준다.

    install.packages(“패키지 이름”) : R 패키지를 설치하는 함수

    library(패키지이름) : R에 패키지를 불러오는 함수

    vignette(“알고 싶은 package이름 “): 해당 library에 대한 요약본 내용을 알고 싶은 경우

    ?명령어 : 도움말이 필요할 때 사용한다.

    ??명령어:명령어 검색이 필요할 때 사용한다

     

 

답글 남기기