[혼공R이] #4. 데이터 다루기
4. 데이터 다루기
1) 데이터 수집하기
2) 데이터 관측하기
3) 데이터 탐색하기
1) 데이터 수집하기
(1) TXT 파일 가져오기
- read.table("원시 데이터", header=TRUE, skip=0, nrows=-1, sep=",", ...)
* 원시 데이터: 저장된 파일 경로를 작성하며, 슬래시(/)를 사용함
* header: 첫 번째 행이 변수명인지 아닌지 판단함
(변수명이 없다면, col.names를 사용하여 변수명을 지정)
* skip: 특정 행 이후부터의 데이터를 가져옴
* nrows: 특정 행까지의 데이터를 가져옴
* sep: 구분자를 지정함
(2) CSV 파일 가져오기
- read.csv("원시 데이터")
* 옵션을 설정하지 않아도 자동으로 1행을 변수명으로 가져옴
(3) 엑셀 파일 가져오기
- install.packages("readxl") 패키지 설치 후, 엑셀 파일을 가져올 수 있음
- read.excel("원시 데이터")
- 다른 탭 시트 데이터를 가져오려면, sheet = 3을 옵션으로 지정해야 함
* 옵션을 설정하지 않아도 자동으로 1행을 변수명으로 가져옴
(4) XML 파일 가져오기
- 사용자가 <> 괄호로 직접 정의한 태그에 데이터 내용이 들어있는 파일
- install.packages("XML") 패키지 설치 필요
- xmlToDataFrame("원시 데이터")
(5) JSON 파일 가져오기
- 데이터 속성과 값이 쌍으로 이루어진 중첩 데이터 구조의 파일, 가장 많이 사용
- install.packages("jsonlite") 패키지 설치 필요
- fromJSON("원시 데이터")
- 데이터 프레임으로 가져오는 함수가 아니라서, 실행 결과는 str( ) 함수로 확인
2) 데이터 관측하기
(1) 데이터 전체 확인하기
- data( ) 함수로 내장된 데이터 세트 목록을 전부 확인할 수 있음
(2) 데이터 구조 확인하기
- str( ) 함수로 데이터 구조를 확인할 수 있음
* 150개의 관측치 및 5가지 컬럼으로 구성됨
* $는 컬럼명, num은 숫자형 데이터, Factor 자료형에 3가지 범주로 구성됨을 의미함
열 개수 확인 | 행 개수 확인 | 행 및 열 개수 확인 |
ncol( ) 함수 | nrow( ) 함수 | dim( ) 함수 |
ncol(iris) [1] 5 |
nrow(iris) [1] 150 |
dim(iris) [1] 150 5 |
컬럼명 확인 | 앞부분 데이터 확인 | 뒷부분 데이터 확인 |
ls( ) 함수 | head( ) 함수 | tail( ) 함수 |
ls(iris) [1] "Length" "Width" |
head(iris) Length Width 1 5.1 3.5 2 4.9 3.0 ... 6 5.4 3.9 |
tail(iris, n = 3) Length Width 148 6.5 3.0 149 6.3 3.4 150 5.9 3.0 |
(3) 기술통계량 확인하기
평균 | 중앙값 |
mean( ) 함수 | median( ) 함수 |
mean(iris$Length) [1] 5.843333 |
median(iris$Length) [1] 5.8 |
최솟값 | 최댓값 | 범위 |
min( ) 함수 | max( ) 함수 | range( ) 함수 |
min(iris$Length) [1] 4.3 |
max(iris$Length) [1] 7.9 |
range(iris$Length) [1] 4.3 7.9 |
사분위수 | 분산 | 표준편차 |
quantile( ) 함수 | var( ) 함수 | sd( ) 함수 |
quantile(iris$Length) 0% 25% 50% 75% 100% 4.3 5.1 5.8 6.4 7.9 quantile(iris$Length, probs=0.8) 80% 6.52 |
var(iris$Length) [1] 0.685935 |
sd(iris$Length) [1] 0.8280661 |
첨도 (뾰족한 정도) | 왜도 (대칭 정도) |
kurtosi( ) 함수 | skew( ) 함수 |
install.packages("psych") library(psych) kurtosi(iris$Length) [1] -0.6058125 # 완만한 분포 |
install.packages("psych") library(psych) skew(iris$Length) [1] 0.3086407 # 오른쪽 긴 꼬리 분포 |
(4) 빈도분석하기
- install.packages("descr") 패키지 설치 필요
- freq(변수명) 함수
* plot = F는 막대 그래프 출력이 제외되는 옵션
3) 데이터 탐색하기
(1) 막대 그래프
- 빈도 분포를 확인할 때 사용하는 그래프
- table(변수명)
- barplot(변수명, ylim=c(y축 범위), main="제목", xlab="x축 제목", ylab="y축 제목", names=c("변수명", ...), col=c("색상", ...), ...)
* ylim: 출력할 y축 범위 지정
* main: 그래프 제목을 지정
* col: 그래프 색상을 지정
table( ) 함수 | barplot( ) 함수 |
> dist_sex <- table(data1$SEX) > dist_sex > barplot(dist_sex) |
> barplot(dist_sex, ylim=c(0, 14), main="BARPLOT", xlab="SEX", ylab="FREQUENCY", names=c("Female", "Male"), col=c("pink", "blue")) |
F M 12 8 ![]() |
![]() |
(2) 상자 그림
- 데이터 분포 or 이상치 판단 시에 사용하는 그래프
- boxplot(변수명)
> boxplot(data1$Y20_CNT, data1$Y21_CNT, ylim=c(0, 60), main="boxplot", names=c("20년건수", "21년건수"), col=c("green", "yellow"))
(3) 히스토그램
- 일정 구간별 관측치의 분포를 확인할 때 사용하는 그래프
- hist(변수명)
막대 그래프, barplot( ) | 히스토그램, hist( ) |
이산형 | 연속형 |
성별, 지역 등 | 키, 나이, 금액 등 |
막대 그래프가 분리되어 있음 | 막대 그래프가 붙어 있음 |
> hist(data1$AGE, xlim=c(0, 60), ylim=c(0, 7), main="AGE분포")
(4) 파이차트
- 데이터 빈도 비율을 활인할 때 사용하는 그래프
- pie(변수명)
> data(mtcars)
> pie(table(mtcars$gear))
(5) 줄기 잎 그림
- 변수 값을 자릿수로 분류하여 시각화 (큰 자릿수는 줄기, 작은 자릿수는 잎)
- stem(변수명, scale = 1)
* scale은 줄기의 수, 데이터를 나누는 구간을 의미
x <- c(1, 2, 3, 4, 7, 8, 8, 5, 9, 6, 9) | ||
> stem(x) | > stem(x, scale = 2) | > stem(x, scale = 0.5) |
![]() |
![]() |
![]() |
(6) 산점도
- 두 변수 간의 관계를 점으로 나타낸 그래프, 우상향 형태는 상관관계가 있음을 의미함
- plot(x, y)
> data(iris)
> plot(x=iris$Sepal.Length, y=iris$Petal.Width)
- 산점도 행렬: 산점도를 행렬로 표현한 그래프, pairs(변수명), paris.panel( ) 함수
> data(iris) > pairs(iris) |
> install.packages("psych") > library(psych) > data(iris) > pairs.panels(iris) |
![]() |
![]() |
※ 데이터 유형에 따른 그래프 추천: From data to Viz 홈페이지(https://www.data-to-viz.com)
4주차. 기본 미션
p169의 iris 내장 데이터 세트의 데이터 구조 출력하고 인증하기
4주차. 선택 미션
p191 상자 그림 그래프의 각 요약 값 정리하기