Rstudio(3) 데이터 전처리 위한 준비

hyukstory 혁스토리·2020년 8월 22일
0

Rstudio

목록 보기
4/16

< 3 > 데이터 전처리를 위한 준비

함수 작성 후 바로 결과 보는 법

1. ;(세미콜론) ex. x1 <- seq(1,10,by =2) ; x1

2. 함수 앞 뒤에 () ex. (x1 <- seq(1,10,by =2) )

3-0) 연산자

1==3 # 같다
1!=3 # 같지않다
TRUE & TRUE #  and
TRUE | False # or

3-1) 다양한 기본 함수

seq(x,y,z) : x부터 y까지 공차z

x1 <- seq(1,10,by =2) ; x1
x2 <- seq(1,10,3) ; x2

sample(x , y) : 1~x 중에서 y개 랜덤으로 추출

sample(10,2) 
sample(5,1)
sample(100,1)

runif(n) 0~1 사이 난수 n개 추출

(x3 <- runif(2) )

set.seed() : 난수 고정하는 함수

#(인수는 뭐가 들어가도 상관 없음)
#(runif()함수와 같이 실행해야 고정됨)
set.seed(1)
x1 <- runif(20)

round(a, b) : a를 소수b째 자리까지 반올림

round(runif(1),2)
round(131.08, -1) # 1의 자리에서 반올림

rnorm(난수 개수, 평균, 표준편차)

install.packages("ggplot2")
library(ggplot2)
x4<- rnorm(60, 50, 3) ; x4 

rep(x, times=y) / rep(x, each=y) : 같은 값 반복

rep("a", 5)
rep(c("a", "b"), 5)
rep(c("a","b"), each=3)

unlist() : List 데이터 계산 방법

v <- c(1,2,3)
l <- list(1,2,3) ;l
v
l
v[1]
l[1]
l[[1]] #배열의 원소값

klist <- list(9,2,3) ;klist
klist + 100 # 오류
unlist(klist)
unlist(klist)+100 # 연산 계산 위해 unlist
klist[1]
klist[1]+10
klist[[1]]+10

names(klist)
LETTERS[1:8] # 알파벳 대문자들
names(klist) <- LETTERS[1:3]
klist
klist[[3]]
klist["3"] # 오류
klist$C

3-2) 행렬 관련 함수

rbind,cbind :데이터셋 합치기

array1 <- c(1,2,3)
array2 <- c(4,5,6)
array3 <- c(7,8,9)

mat1 <- rbind(array1, array2, array3) 
mat2 <- cbind(array1, array2, array3)

apply() : 행렬에서 특정 방향으로 함수계산

apply(데이터, 적용방향, 함수)
- 적용방향 : 1.가로방향, 2. 세로방향
head(iris)
apply( iris[,1:4], 2, mean)
apply( iris[,1:4], 2, max)
apply( iris[,1:4], 2, min)
apply( iris[,1:4], 2, sum)

colnames () 열이름 변경

colnames(mat1) <- c("A", "B", "C") 
mat1

3-3) 변수명 변경하는 법, 파생 변수 생성하기

install.packages("dplyr")
library(dplyr)

rename() : 변수명 변경

rename( 데이터 세트, 신 변수명 = 구 변수명)

파생변수 생성하기

1) 데이터 세트$새 파생 변수명 <- 데이터 세트$기존 변수명 ~ 연산

2) 데이터 세트$새 파생 변수명 <- ifelse(조건절, 참일때, 거짓일 때)

Q. 변수명 변경, 파생 변수 생성 연습문제

#ggplot2 패키지에는 미국 동북중부 43개 지역의 인구 통계 정보를 담은 midwest라는 데이터가 포함되어 있습니다.
#midwset 데이터를 사용해 데이터 분석 문제를 해결해보세요.
#1) ggplot2의 midwest 데이터를 데이터프레임 형태로 불러와서 데이터의 특성을 파악하세요.
#2) poptotal(전체인구)을 total로 popasian(아시아인구)을 asian으로 변수명을 수정하세요.
#3) total, asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율' 파생변수를 만들고, qplot 그래프를 완성하시오.
#4) 아시아 인구 백분율 전체의 평균을 구하고 평균을 초과하면 "large", 그외에는 "small"을 부여하는 파생변수를 만들어보세요.
#5) "large"와 "small"에 해당하는 지역이 얼마나 되는지, 빈도표와 qplot그래프를 완성하시오.

#1)
install.packages("ggplot2")
library(ggplot2)
install.packages("dplyr")
library(dplyr)

midwest_1 <- as.data.frame(midwest)
str(midwest_1)
#2)
midwest_1 <- rename(midwest_1, "total" = "poptotal", "asian" = "popasian")
#3)
midwest_1$percentage_asian <- (midwest_1$asian/midwest_1$total)*100
qplot(midwest_1$percentage_asian)
#4)
mean_percasian <- mean(midwest_1$percentage_asian)
midwest_1$meanVSpercasian <- ifelse(midwest_1$percentage_asian > mean_percasian, "large", "small")
#5)
table(midwest_1$meanVSpercasian)
qplot(midwest_1$meanVSpercasian)

3-4) 날짜, 시간 관련 함수

as.Date("날짜", "format") - 날짜와 날짜형식 맞춰야함. (Y는 대문자 m,d는 소문자)

출력 값의 형식은 항상 "YYYY-MM-DD"

as.Date("2018-01-10")
as.Date("15.09.1994", "%d.%m.%Y")
as.Date("1994/09/15", "%Y/%m/%d")
as.Date("09-15-1994", "%m-%d-%Y")

#미국식 표기로 바꾸는 법
us_date <- format(as.Date("1994-09-15", "%Y-%m-%d"), "%d/%m/%Y") ;us_date 
## 단, 이거는 date 아니고 character로 저장됨 (date로 저장하는 법은 모르겠다...)
str(us_date) 



Sys.time() # 오늘의 날짜와 시간
Sys.Date() # 오늘의 날짜


today <- Sys.Date()
today

format(today, format = "%Y/%m/%d%a") # 형식 바꾸기

Sys.setlocale("LC_TIME","English") # 요일 영어로 바꾸는 법
format(today, format = "%Y/%m/%d%a")

Sys.setlocale("LC_TIME","Korean") # 요일 다시 한글로 바꾸는 법
weekdays(today + 1) # 요일 나타내는 함수
weekdays(today + 1:8)


seq(today, by = 1, length.out = 7) # 오늘부터 하루 간격으로 7개 날짜
seq(today, by = 7, length.out = 7) # 오늘부터 7일 간격으로 7개 날짜


3-5) 결과값 보는 함수

str(iris)
summary(iris) ## 결과 요약
head(iris)  ## 위에서 6개 추출
tail(iris)  ## 아래에서 6개 추출

3-6) 결측치(NA) 발생 했을 때 방법

x <- NA
sum(1,2,x) # 오류

방법 1 : na.rm = T (결측치 아예 제거)

sum(1,2,x, na.rm=T) 

방법 2 : 결측치 발생 시 0으로 값 주기

x[is.na(x)] <- 0 
sum(1,2,x)

outlier <- data.frame(sex = c(1,2,1,NA,2,1),
                      score = c(5,4,3,4,2,NA))

outlier_nomiss <- outlier %>% filter(!is.na(score))

방법 3 : na.omit()

na.omit(outlier)

3-7) 특정 데이터 조회

벡터에서 데이터 조회하기

var3 <- c("멸치깡", "맛깡", "양파깡", "맛짱", "빙구")
var3[2] # 특정 데이터 호출 
var3[-2] # 특정 데이터만 빼고 조회
var3[2:4] # 범위(2부터4까지) 주고 조회
var3[-2:-4] # 범위(2부터4까지) 제외하고 조회

%in% : 특정 데이터 조회

var5 <- c(1,3,5,7,9)
3 %in% var5 # var5 안에 3이 있는가?
4 %in% var5 # var5 안에 4가 있는가?
Fruit <- c("사과", "단감", "귤", "파인애플", "apple")
"감" %in% Fruit
"p" %in% Fruit
profile
문돌이의 고군분투 개발 공부

0개의 댓글