R 할줄 R지? #8 - IRIS로 데이터 프레임 다뤄보기

    IRIS 데이터


    인공지능을 하는 사람이면 가장 자주 보는 범용적인 데이터 셋의 2개가 있는데 하나는 손글씨 이미지 집합들인 MNIST이고, 분류 문제를 하는 간단하고 쉬운 데이터 집합으로 IRIS가 존재한다. IRIS하면 아무래도 드라마를 생각하거나 인간의 홍채를 생각할 수 있는데 인공지능에서 사용하는 이 데이터셋은 특정 꽃을 뜻한다.


    이 꽃이 아이리스(한글명 붓꽃)이다


    IRIS 데이터는 데이터프레임으로 구성되어 있으며 매우 심플하고, 사이즈가 작기 때문에 알고리즘을 이해하기가 상당히 쉽다. 다만 데이터가 작기 때문에 딥러닝과 같이 데이터 많을수록 유리한 알고리즘에서는 검증하기가 애매한 면이 있긴 하다.



    IRIS 데이터셋 구조


    R에서는 IRIS 데이터가 내장이 되어 있어서 별도로 호출을 할 필요가 없다. 


    IRIS 데이터 구조 확인

    > iris

        Sepal.Length Sepal.Width Petal.Length Petal.Width

    1            5.1         3.5          1.4         0.2

    2            4.9         3.0          1.4         0.2

    3            4.7         3.2          1.3         0.2

    4            4.6         3.1          1.5         0.2

    5            5.0         3.6          1.4         0.2

    6            5.4         3.9          1.7         0.4

    7            4.6         3.4          1.4         0.3

    8            5.0         3.4          1.5         0.2

    9            4.4         2.9          1.4         0.2

    10           4.9         3.1          1.5         0.1

    11           5.4         3.7          1.5         0.2

    12           4.8         3.4          1.6         0.2

    13           4.8         3.0          1.4         0.1

    14           4.3         3.0          1.1         0.1

    15           5.8         4.0          1.2         0.2

    16           5.7         4.4          1.5         0.4

    ...


    내장이 되어 있기 때문에 다이렉트로 사용할 수 있다. R입력창에 "iris"라고 입력을 하면 iris 데이터의 구조를 볼 수 있다.


    컬럼명

    의미

    Species

    - iris의 종류. setosa, versicolor, virginica로 이루어져 있음

    Sepal.Width

    - 꽃받침 너비

    Sepal.Length

    - 꽃받침 길이

    Petal.Width

    - 꽃잎 너비

    Petal.Length

    - 꽃잎 길이


    데이터의 컬럼을 보면 알겠지만, IRIS 데이터는 한마디로 꽃받침의 너비, 길이와 꽃잎의 너비, 길이로 붓꽃의 3가지 품종 세토사(setosa), 버시칼라(versicolor), 버지니카(virginica)를 분류할 수 있게 만드는 데이터 셋이다.


    순서대로 세토사, 버시칼라, 버지니카



    데이터프레임의 구조 확인 방법



    행수

    > nrow(iris)

    [1] 150



    컬럼수

    > ncol(iris)

    [1] 5



    행과 컬럼 수

    > 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



    일부 보기(뒷부분)

    > tail(iris)

        Sepal.Length Sepal.Width Petal.Length Petal.Width   Species

    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



    요약하여 파악

    > str(iris)

    'data.frame': 150 obs. of  5 variables:

     $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

     $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...

     $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...

     $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...

     $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...


    요약된 내용을 보면 알겠지만, iris는 데이터프레임(data.frame)으로 구성되어 있으며, 150개 관측(Observation)과 5개의 변수로 되어 있으며, 각각의 변수에는 소수점 포함한 실수형으로 되어 있다. Length와 Width 형태의 변수는 num 형태이고, Species 변수는 Factor 형인것을 알 수 있다.



    중복 제거

    > unique(iris[,5])

    [1] setosa     versicolor virginica 

    Levels: setosa versicolor virginica

    > unique(iris[,"Species"])

    [1] setosa     versicolor virginica 

    Levels: setosa versicolor virginica


    데이터를 중복 제거하기 위해서 unique라는 명령어를 사용하고, 데이터를 인자값으로 넣는다. iris[,5]의 값은 마지막 품종의 값을 불러오고 현재 품종은 3가지가 있기 때문에, unique(iris[,5])를 할 경우, 3가지의 품종 값들이 출력되는 것을 확인할 수 있다. iris[,5]와 iris[,"Species"]은 둘다 품종을 출력하는 명령어기 때문에 둘의 결과는 동일하다.



    개수 출력

    > table(iris[,5])

        setosa versicolor  virginica 

            50         50         50 

    > table(iris[,"Species"])

        setosa versicolor  virginica 

            50         50         50


    개수를 확인하는 방법으로 table이라는 명령어가 있다. 그러면 중복 제거를 한 개수를 출력하는 방법은 어떻게 하면 될 까?



    중복제거를 한 개수 출력

    > table(unique(iris[,5]))

        setosa versicolor  virginica 

             1          1          1 

    > table(unique(iris[,"Species"]))

        setosa versicolor  virginica 

             1          1          1 


    중복제거를 한 후 개수를 출력하는 방법은 table의 인자값에 다시 unique를 호출하는 것으로 가능하다



    댓글

    Designed by JB FACTORY