본문 바로가기

R

1. 데이터/데이터 분석이란?

데이터 자료 구조

(1) 벡터

- 하나 이상의 문자 / 숫자 등의 덩어리 = 집합

- 동일한 데이터의 유형

- 1차원 데이터 자료 구조 -> ''로만 구성됨

 

벡터 만들기

① 함수 c() 이용  x <- c(1, 2, 3, 4, 5)

② 콜론(:) 사용   x <- 1:7

③ seq함수 from부터 to까지 by만큼 증가하며 벡터 생성  x <- seq(from=1, to=10, by=2)

④ rep함수 데이터를 time횟수만큼 반복해 벡터를 생성 x <- rep("elice", time=3)

**함수() 괄호 안에 있는 걸 인자(argument)라고 함

 

인덱스 [ ]

- 벡터가 호텔이라면 인덱스는 호수, 투숙객은 값

- R의 인덱스는 1부터 시작

- [n]은 n번째 값을 불러오라는 의미

- x <- c(1, 2, 3, 4, 5) 라고 하면, x[2]=2, x[c(3,5)]=3,5

- 데이터이름[앞부분(행=관측치), 뒷부분(열=변수)]

-> 관측치를 불러오고 싶은 거라면 order[c(1, 3, 5),] 로 써야 하고, 변수를 불러오고 싶은 거면 order[, c(1, 3, 5)]라고 해야 함

 

(2) 행렬

- 한 가지 데이터 타입으로 통일

- 행(row)과 열(column)로 구성된 2차원 구조

- 벡터와 행렬의 차이는 자료 구조(차원)

 

(3) 데이터 프레임

- 행(row)와 열(column)로 구성된 2차원 구조

- 숫자 / 문자 등 다양한 유형의 데이터 저장 가능

- 행렬과의 차이는 데이터 유형

 

데이터 프레임 만들기

- 변수 <- data.frame(벡터, 벡터)

- 입력한 벡터 데이터의 순서대로 열이 추가되며 데이터 프레임이 생성됨

- 변수를 각각 만들고 데이터 프레임으로 합치기

- 순서가 중요함!

- 데이터 프레임과 데이터 프레임을 합칠 때에는 rbind() 사용

 

(4) 배열 = array

- 2차원 데이터 구조를 쌓아 올린 형태

- 행렬 형태의 데이터를 겹겹이 쌓아올린 형태

- 동일한 데이터 유형!

 

(5) 리스트

- 벡터, 행렬, 데이터 프레임, 배열과 같은 다양한 데이터 자료 구조를 모두 섞어서 저장 가능

 

데이터의 자료 구조 비교

 

데이터 분석이란?

- 데이터에서 인사이트를 찾아내는 과정

- 문제점을 찾고 데이터를 분석해 해결 방법을 찾아내는 과정

- 데이터를 분석해 비즈니스 의사 결정을 지원하는 것

- 데이터를 분석해 최적화 / 자동화를 지원하는 것

 

데이터 분석 과정

- 일반적으로는 데이터 수집 - 탐색/전처리 - 요약/모델링 - 평가

 

1) 연구/실험

- 주제 설정 

- 데이터 수집

- 탐색(EDA)/전처리 : 지저분한 데이터를 수정, 가공, 변형하는 과정

- 요약/모델링

- 시각화

 

2) 실무

- 데이터 수집/탐색 : 실무에서는 데이터가 먼저 주어지는 경우가 많음

- 주제 설정

- 전처리

- 요약/모델링

- 시각화

 

EDA

- Exploratory Data Analysis  탐색적 데이터 분석 

- 데이터 탐색/전처리 단계에서 데이터를 이해하기 위해 실행

  • 문제 정의 : 목적과 가설 설정, 분석 계획 설정
  • 데이터 탐색 : 데이터 값을 요약하거나 요약된 값을 시각화
  • 전처리 : 데이터를 수집하고 가공, 변형하는 과정

- EDA는 문제정의 - 데이터 탐색 - 전처리 전 과정에서 반복적으로 이뤄진다.

 

 

데이터 분석 도구

- Excel

- SPSS, SAS, STATA, MATLAB : 통계 패키지, 통계 프로그램

- R, Python : 객체지향 언어, 오픈소스 기반 무료 프로그램

 

 

데이터 전처리

데이터를 분석하기 전에 필요한 변수를 추출하거나 조건에 따라 데이터를 처리하거나 결측치를 제거하거나 데이터를 변환 및 가공하는 일련의 과정

 

데이터 작업공간 확인

- getwd() : 현재 작업 경로 확인하기 

- setwd(드라이브 이름/폴더이름) : 특정 작업 경로를 지정하기

- wd = working directory. 내가 작업하고 있는 공간

 

데이터 불러오기

1) read.table("파일명.txt")

- 테이블 형식의 데이터프레임으로 만드는 함수

- 인자로 header(열=변수 정보)와 sep을 추가할 수 있음. sep은 데이터 값이 어떻게 구분되어 있는지를 의미 ex) sep= ","

 

2) read.csv("파일명.csv")

- csv파일을 데이터프레임으로 만드는 함수

- 인자로 header와 na.strings가 있다. na.strings는 결측치를 지정하는 인자. 보통 결측값을 NA라고 표현하는데, 다르게 표현하고 싶으면 na.strings="결측치 표현하고 싶은 값"이라고 쓰면 됨

 

3) read.xlsx("파일명", sheet=번호) 

- xlsx파일(엑셀 파일)을 데이터프레임으로 만드는 함수

- openxlsx 패키지 필요

install.packages("package name") # 패키지 설치
library("package name") # 패키지 불러오기

- 인자의 종류

  • sheet : 엑셀 시트의 번호를 넣어주는 인자
  • colNames : header와 동일한 의미. 변수의 유무에 따라 colNames = TRUE/FALSE
  • startRow : 관측치가 몇 번째 행부터 시작하는지. 

 

데이터 확인

- head() : 데이터의 처음 6행을 출력

- tail() : 데이터의 마지막 6행 출력

- dim() : 데이터의 차원/구조를 출력. 행과 열이 순서대로 출력됨

- str() : 데이터의 속성 출력. 데이터 구조, 변수 개수, 변수명, 데이터 개수, 처음 10행을 보여줌

- summary() : 데이터의 변수 별 요약 통계량 출력. 변수 별 최소값, 최대값, 평균값, 중간값 등을 출력

- View() : 데이터 전체를 새 창으로 출력 

 

데이터 추출

1) 데이터프레임 이름[,c(변수 열의 숫자)]

-> 쉼표 뒤의 정보는 열(변수)의 데이터

- 특정 열의 정보만 가지고 오고 싶을 때

- 행에 대한 조건을 쓰지 않으면 행은 무조건 전부 출력됨

 

2) 데이터프레임 이름[, -c(변수 열의 숫자)]

- 특정 열만 빼고 가지고 오고 싶을 때 사용

- 빼고 싶은 변수가 가지고 오고 싶은 변수보다 적을 때에 쓰기 편함

 

결측치 처리

 

결측치(missing value)의 종류

  • NA : not available. 데이터 수집 과정에서 오류, 무응답 혹은 의미 없는 값. 있어야 하는데 없어.
  • NaN : not a number. 수학적으로 계산이 불가능한 수
  • inf : infinite. 무한 ex) 1/0.     *음의 무한대는 -inf
  • NULL : 값이 존재하지 않는 상태. 혹은 입력되지 않은 미정의 값

- NA는 값이 있어야 하는데 빠진 상태이고, NULL은 아직 값이 정해지지 않은 상태

 

결측치 확인 방법

1) is.na(데이터프레임 이름$변수명)

- NA가 있으면 TRUE, 없으면 FALSE로 출력됨

- sum(is.na(데이터프레임명$변수명)으로 합계를 구하기도 함

 

2) complete.cases(데이터프레임 이름$변수명)
- TRUE가 나오면 NA가 없다. FALSE가 나오면 NA가 있다는 의미

- 완벽한 케이스니? 라는 질문

 

결측치 처리

1) NA값이 있는 자체가 한번에 제거하기

na.omit(데이터프레임 이름)

 

2) NA값을 평균값으로 처리

데이터프레임 이름$변수명[is.na(데이터프레임 이름$변수명)] <- mean(데이터프레임 이름$변수명, na.rm = TRUE)

 

- NA값을 제외한 나머지값으로 평균을 계산해서 NA값에 넣어달라는 명령

- TRUE를 하면 mean값을 NA값에 넣어달라는 말이고, FALSE를 하면 NA값을 그대로 남겨달라는 말

 

3) NA값을 중간값으로 처리하는 방식

데이터프레임 이름$변수명[is.na(데이터프레임 이름$변수명)] <- median(데이터프레임 이름$변수명, na.rm = TRUE)

 

ex)

- star 데이터 프레임에 visit 변수를 만들어 재방문한 곳에는 Y, 재방문하지 않은 곳에는 N으로 표기. 1, 3번째 음식점은 방문했고, 4번째는 방문하지 않음. 나머지는 결측치

star$visit <- c("Y",NA,"Y","N",NA) #NA를 따옴표 안에 넣으면 문자로 인식하게 됨

- star 데이터 프레임에서 결측치가 있는 행을 제거하기

star <- na.omit(star) #원본 데이터에 적용을 시켜줘야 함

 

데이터 변환/가공

파생 변수

- 데이터 분석 전 기존 변수의 형태를 변경하거나 변수의 데이터를 계산해 새로운 변수로 저장한 것

데이터 프레임 이름$파생 변수 이름 <- 데이터

 

조건에 따라 데이터 처리

ifelse(조건, 명령어A, 명령어B)

- 조건을 만족하면 명령어A 작업을 실행하고 조건을 만족하지 않으면 명령어B 작업을 실행하라

 

 

예제

ex1. 

1) map$road_bus가 1이면 값을 NA로 수정

map$road_bus <- ifelse(map$road_bus == 1, NA, 0)
2) map$road_m이 0이면 값을 NA로 수정
 
map$road_m[map$road_m == 0] <-NA

3) map$road_m 변수에 *3을 해서 파생변수 time_spend 만들기

map$time_spent <- map$road_m *3

4) 1번과 2번에서 결측값으로 수정한 값을 모두 제거

map <- na.omit(map)

 

ex2. 

# 다이어리 내용 데이터
year <- c(2014:2017)
text <- c(NA,"뭐여","이따가 햐","그려")

diary <- data.frame(year, text)

1) diary에 결측값을 제외해 prac1에 저장하기

2) 몸무게가 155 이상치인 모든 관측치(년도, 키, 몸무게)를 모두 NA값으로 수정, prac2에 저장하기

3) 조건문으로 할머니가 맞으면 "우리 할머니", 할머니가 아니면 "늑대야!" 출력해 prac3에 저장하기

'R' 카테고리의 다른 글

4. 비정형 데이터와 텍스트마이닝  (0) 2022.07.15
3. 패키지_ggplot2  (0) 2022.07.14
2. 패키지_dplyr  (0) 2022.07.14
1-3. 데이터 형식  (0) 2022.06.25