# [R] 탐색적 데이터 분석: 단일변수 데이터 분석

## 단일변수 범주형 자료

---

- 관측값들의 종류별로 개수를 세는 것

**도수분포표**

```javascript
table(벡터)             # 도수분포표
table(벡터)/length(벡터) # 비율
```

**막대그래프**

- 단일변수 범주형 자료가 포함하는 있는 정보 파악

```javascript
barplot(dataset, main = '제목')
```

**원그래프**

- 각 자료값이 차지하는 비율

```javascript
pie(dataset, main='제목')
```

**숫자로 표현된 범주형 자료**

- 범주형 자료를 문자/문자여링 아닌 숫자로 표현하는 경우도 있다.

**예시**

- 타이타닉호의 승객들이 어떤 선실에 묵었는지 알아보기

- carData 패키지의 TitanicSurvival 데이터셋 사용

    - 탑승객의 성별, 연령대, 탑승 선실, 생존 여부 등을 담은 다중변수 데이터

```javascript
install.packages('carData')
library(carData)

# (1) 데이터 준비
room.class <- TitanicSurvival$passengerClass # 선실 정보
room.class

# (2) 도수 분포 계산
tbl <- table(room.class)
tbl
sum(tbl) # 전체 탑승객수

# (3) 막대그래프 작성
barplot(tbl, main = '선실별 탑승객', 
        xlab = '선실 등급',
        ylab = '탑승객수',
        col = c('blue', 'green', 'yellow'))

# (4) 원그래프 작성
tbl/sum(tbl)
par(mar=c(1, 1, 4, 1))
pie(tbl, main='선실별 탑승객',
    col = c('blue', 'green', 'yellow'))
par(mar=c(5.1, 4.1, 4.1, 2.1))
```

## 단일변수 연속형 자료

---

**평균, 중앙값**

- **평균 mean**: 자료의 값들을 모두 합산한 후 값들을 개수로 나눈 값

    - $\overline x = \frac{1}{n} \sum^n_{i=1}x_i$

    - 하나의 값으로 전체 데이터의 값들을 대표할 수 있기 때문에 중요하다.

- **중앙값 median**: 자료의 값들을 크기 순으로 일렬로 세웠을 때 가장 중앙에 위치하는 값

    - 이상치의 영향을 받지 않는다.

- **절사평균 trimmed mean**: 자료의 관측 값들 중에서 작은 값들의 하위 n%와 큰 값들의 상위 n%를 제외하고 중간에 있는 나머지 값들만 평균을 계산하는 방식

```javascript
mean(data)             # 평균값
median(data)           # 중앙값
mean(data, trim=0.n)   # 절사평균
```

**사분위수 quantile**

- 주어진 자료에 있는 값들을 크기 순으로 나열했을 때 이것을 4등분하는 지점에 있는 값들

    - 1사분위수(Q1), 2사분위수(Q2), 3사분위수(Q3), 4사분위수(Q4)

```javascript
quantile(data)
quantile(data, (0;10)/10) # 10% 구간으로 나누어 계산
```

**산포 distribution**

- 주어진 자료에 있는 값들이 퍼져있는 정도

- **분산 variance, 표준편차 standard deviation**로 파악 가능

    - 분산: $s^2 = \frac{1}{n-1} \sum^n_{i=1}(x_i - \overline X^2)$

    - 표준편차: $s = \sqrt {s^2}$

```javascript
var(data)          # 분산
sd(data)           # 표준편차
range(data)        # 값의 범위
diff(range(data))  # 최댓값, 최솟값 차이
```

**히스토그램 histogram**

- 막대그래프와 비슷한 그래프로 연속형 자료의 분포를 시각화할 때 사용

```javascript
hist(dataset, main = '제목')
```

**상자그림 boxplot**

- 상자 수염 그림 box and whisker plot

- 사분위수를 시각화하여 그래프 형태로 나타낸 것

```javascript
boxplot(dataset, main = '제목')
boxplot(y~x, data=dataset, main='제목') # 그룹이 있는 자료의 상자그림
boxplot.stats(dataset)                  # 상자그림의 정확한 값들
```

**예시**

```javascript
# (1) 데이터 준비
grad <- state.x77[, 'HS Grad']
grad

# (2) 사분위수
summary(grad)
var(grad) # 분산
sd(grad)  # 표준편차

# (3) 히스토그램
hist(grad, main = '주별 졸업률',
     xlab='졸업률', 
     ylab = '주의 개수',
     col = 'orange')

# (4) 상자그림
boxplot(grad, main='주별 졸업률', 
        col = 'orange')

# (5) 졸업률이 가장 낮은 주
idx <- which(grad==max(grad))
grad[idx]

# (6) 졸업률이 가장 높은 주
idx <- which(grad == max(grad))
grad[idx]

# (7) 졸업률이 평균 이하인 주
idx <- which(grad<mean(grad))
grad[idx]
```

For the site tree, see the [root Markdown](https://slashpage.com/yerim-devnote.md).
