R 할줄 R지? #8 - IRIS로 데이터 프레임 다뤄보기
- 프로그램언어/R
- 2020. 3. 4.
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를 호출하는 것으로 가능하다
'프로그램언어 > R' 카테고리의 다른 글
R 버전 업그레이드하기 (0) | 2020.05.14 |
---|---|
R 할줄 R지? #9 - 파일 읽기 및 저장 (0) | 2020.04.29 |
R 할줄 R지? #7 - 2차원 다루기, 데이터프레임(Data Frame) (0) | 2020.02.18 |
R 할줄 R지? #6 - 2차원 다루기, 매트릭스(Matrix) (0) | 2020.01.26 |
R 할줄 R지? #5 - 벡터 연산편 (0) | 2019.01.16 |