반응형

R studio에 속성 관리자권한으로 체크해야 권한이 없다고 안 뜬다.

 

dplyr 패키지를 이용한  데이터 전처리

dplyr 로 가공하기

 

airquality->자동완성

 

dplyr

 

obs 행-> 관측칙
variables 변수  독립변수
variables object

 

dim(airquality)
summary(airquality)
str(airquality)

#airquality를 이름바꾸기
air <- airquality
air

summary(air)
str(air)

a = 1
a

 

airquality 를 덥어썼으면 끄고 다시시작하기 기본으로 주는 것은 수정할 수 없다.메모리상에서 객체만 존재

 

#dplyr설치
install.packages("dplyr")
library(dplyr)

 

#dependency 필요한것도 같이 가져와서 설치

glimpse()#

str(air)
glimpse(air)#str q보다 직관적이게 보일수 있다.

 

# air에서 month하고 day로 
air1 <- air[,c(5,6)]
air1

air1 <- air[,c(1,3)]
air1

air1 <- air[,c('Ozone','Wind')]
air1

air1 <- air[,c('Ozone','Wind')]
head(air1)

tail(air1)

#1행부터 20행 까지 
air1 <- air[1:20,]
air1

air1 <- air[,1:4]
air1

air1 <- air[,c(-5,-6)]
air1

colnames(air1)# head이름  열
rownames(air1) #row 이름  행
names(air1)#열이 더 중요하다. 

엑셀보다   csv읽는 이유는 크기가 작아서 
rep->복제 

 

x1 <- 1:20
x2 <- rep(c("a","b"),10)
x2
x3 <- sample(1:200,20) #random 데이터 
x3

 

# 1-50  random 10개
x1 <- sample(1:50,10) #random 데이터 
x1
# 1은 안쓰도  default로 되여있다.
x1 <- sample(50,10) #random 데이터 
x1
# 30-50  random 10개
x1 <- sample(30:50,10) #random 데이터 
x1
# 45-50  random 10개
x1 <- sample(45:50,10,replace = TRUE) #'replace = FALSE' 일때는 모집단보다 큰 샘플을 가질 수 없습니다
x1
# 45-50  random 10개
x1 <- sample(45:50,10,replace = TRUE) #random 데이터 뽑는 것 또 뽑는다. 복원추측

 

x1 <- sample(45:50,10,replace = TRUE) #random 데이터 뽑는 것 또 뽑는다. 복원추측 
x1

set.seed(1234)

x1 <- sample(45:50,10,replace = TRUE) #set.seed하고 조회

x1

 

#airquality에서 153개인데 random으로 15개 끄내기
ari1 <- airquality
index <- sample(153,15)
index
air1 <- air1[index,]
air1

 

air1 <- nrow(airquality)
air1
air1 <- ncol(airquality)
air1

 

index <- sample(nrow(airquality),15)
index

 

vector한개  set안에 여러개 연다.

air1 <- airquality
air1
a <- sample(nrow(air1),15)
a[3]# 3번쨰 것 꺼내기 
dim(air1)[1]

#alt+-누르면 된다. <-

#153개 중에서 70%만큰 샘플링으로 나온다.
index1 <- sample(nrow(air1),nrow(air1)*0.7) 
index1
train <- air1[index,]
test <- air1[-index,]

 

 

ls()
rm(air)
rm(a,A)
ls()
rm(list = ls())->모두 지우기

 

R
help(sample)
prob  a vector of probability weights for obtaining the elements of the vector being sampled. 비율
?sample help와 가능이 같다.

 

RStudio f1

head

 

dplyr 패키지를 이용한  데이터 전처리 \
filter(  ) 행 추출 
select(  ) 열(변수) 추출 
arrange(  ) 정렬 
mutate(  ) 변수 추가 
summarise(  ) 통계치 산출 
group_by(  ) 집단별로 나누기 
left_join(  ) 데이터 합치기(열) 
bind_rows(  ) 데이터 합치기(행) 

 

filter 조건 class가 열 
%>% -> ctrl+shift+m %>% 파이프 연산자  Ctrl + Shift + M

 

library(dplyr)
exam <- read.csv("csv_exam.csv")
exam

exam %>% filter(class == 1)# class가 1인것 
exam %>% filter(class != 1)
exam %>% filter(math > 50)#수학점수가 50보다 크다.
exam %>% filter(english >= 80)
exam %>% filter(class == 1 & math >= 50)

exam %>% filter(class == 1 | english >= 90)

exam %>% filter(class == 1 | class == 3 | class == 5)
exam %>% filter(class %in% c(1,3,5))

class1 <- exam %>% filter(class==1)
mean(class1$math)
air <- airquality
air
air %>% filter(Day>20)#20보다 큰 달을 구한다.
air %>% filter(Day>20) %>% filter(Month == 9)
# 1,3 반중에서 80명 이상되는 분 
exam %>% filter( (class == 1 | class == 3) & english >= 80 ) 

#열 추출
exam %>% select(math)
exam$math

exam %>% select(class,math,english)
select(exam, class)#열의 이름을 가져온다.위에것과 같은 원리이다.

exam %>% select(-math)

가독성을 위해서,
%>%(파이프 연산자)에서 줄을 바꾼다.
Enter를 치면 알아서 들여쓰기가 된다.

 

# class가 1인 english 열만 
exam %>% filter(class == 1) %>% select(english)
exam %>% select(english) %>% filter(class == 1)
#atomic과 리스트 타입들에 대해서만 비교(1)가 가능합니다
#같아 보이는데 조금 다르다.

가독성을 위해서,  %>%(파이프 연산자)에서 줄을 바꾼다. 
 
Enter를 치면 알아서 들여쓰기가 된다. 

dplyr 로 가공하기 

 

exam %>% arrange(math)#order by 오름차순
exam %>% arrange(desc(math))#내림 차순

exam %>% arrange(class,math) # 1순위 class 2순위 math


4. 파생변수 추가하기 & 집단별로 요약하기 
4. 파생변수 추가하기 ->앞의 것에서 열의 의하여 새로운 열을 만든다.
mutate->있는데서 변형하는 것이다.
exam %>% mutate(total = math+english+science) %>% 
  head

exam

 

exam %>% mutate(total = math+english+science,
                mean = (math+english+science)/3) %>% 
        head

exam %>% mutate(test = ifelse(science >= 60),"pass","fial") %>% 
         head 

exam %>% mutate(total = math+ english+science) %>% 
        arrange(total) %>% 
        head

 

요약 통계량 함수

mean(  ) 평균 ->r전체에서
sd(  ) 표준편차 ->r전체에서
sum(  ) 합계 ->r전체에서
median(  ) 중앙값 ->r전체에서
min(  ) 최솟값 ->r전체에서
max(  ) 최댓값 ->r전체에서 
n(  ) 빈도 ->summarize만 같이 있을때만 작동한다.

 

summarise( ): 

summarise() is typically used on grouped data created by group_by().

The output will have one row for each group

summarise(data.frame, functions...) 

수치형 값에 대한 "요약" 통계량을 계산하여 출력한다. 
Center: mean(), median() 
 Spread: sd(), IQR(), mad() 
Range: min(), max(), quantile() 
Position: first(), last(), nth(), 

 

exam %>% summarise(mean_math = mean(math))# 수학평균이 얼마인가

exam %>% 
   group_by(class) %>% 
   summarise(mean_math = mean(math))

exam %>% 
  group_by(class) %>% 
  summarise(sd_math = sd(math))

#class별로 평균하였을 경우 
exam %>% 
  group_by(class) %>% 
  summarise(mean_math = mean(math),
            sum_math = sum(math),
            median_math = median(math),
            n = n()) #학생수 

mpg %>% 
  group_by(manufacturer) %>% 
  filter(class == "suv") %>% 
  mutate(tot = (city+hwy)/2) %>% 
  summarise(mean_tot = mean(tot)) %>% 
  arrange(desc(mean_tot)) %>% 
  head(5)

 

R을 활용한 Data Visualizaition

2일차 데이터 시각화 / 전처리

데이터 시각화 / 전처리 
1. 데이터 시각화의 중요
2.  기본 그래픽- 고수준, 저수준 
R 그래픽 도구 
1.  R 기본 그래픽  (R Base Graphics) 
2.  Lattice Graphics 
3.  ggplot2 
Easy    Fast   Beautiful 
1.  R 기본 그래픽  (R Base Graphics) 
내장되여있어서 설치 필요없음
막대그래프, 히스토그램, 파이그래프 등 여러 시각화 방법을 제공 

별도의 설치 및 호출 필요 없고 가벼움     
설정이 다소 복잡하고 아름답지 못하다는 단점 

 

2.  lattice 
한꺼번에 많은 플롯을 생성할 수 있다.  
다차원의 데이터를 사용하여 변수들갂의 관계를 살펴보는데 유리  
순차적으로 그래프 쌓아가는 것이 어려워 직관적이지 못하다 

 

3.  ggplot2 
이전 두 패키지(R Base Graphics, Lattice Graphics)의 장점만 모아 둔 패키지 
 
갂단한 그래프 문법 + 아름다운 고급그래프 + 레이어로 쌓아감 
 
데이터객체, 그래픽객체로 나눌 수 있어 코드의 재사용성이 높다. 

 

Anscombe’s  quartet 

이산변수 점수 단위로 나누어 측정할 수 있는 변수 막대차트,점그패프,원 차트 등을 이용하여 시각화하면 효과적 
연속변수 시간,길이 등 

고수준 그래픽 함수(high level graphic functions) 
 

plot 함수 
데이트를 x-y평면 상에 출력하는 함수

plot(x, y, type = ‘type value’, main=‘title’, col=color) 
# type : plot의 형태로 점, 선 등을 선택할 수 있다. 
# main: 그래프의 제목 설정 
# col : 그래프의 색상 
Type 옵션 
p : 점(points),  l : 선(lines),  b : 점과 선(both points and lines),  c : b옵션에서 점이 빠짂 모습, 
o : 겹친 점과 선(overplotted),  h : 수직선 ,  s : 수평선 우선의 계단 모양 (steps), 
S : 수직선 우선의 계단 모양 (steps),  n : 배경맊 그리고 출력하지는 않음 (no plotting)  

 

mtcars#r자체에 내장되여있다.
?mtcars
str(mtcars)
names(mtcars)

plot(mtcars)
attach(mtcars)

wt
plot(wt)
mpg
plot(wt, mpg)
plot(wt, mpg, main = "wt와 mpg의 관계")
plot(wt, disp, mpg)#

install.packages("scatterplot3d")
library(scatterplot3d) #package ‘scatterplot3’ is not available (for R version 3.6.1)

scatterplot3d(wt, disp, mpg, pch = 16, main="3D Scatter Plot")
scatterplot3d(wt, disp, mpg, pch = 16, highlight.ed= TRUE, type ="h" , main="3D Scatter Plot")

install.packages("rgl")
library(rgl)
plot3d(wt, disp, mpg)
plot3d(wt, disp, mpg, main="wt Vs mpg Vs disp", col ="red", size="10")

고수준 그래픽 함수(high level graphic functions)

plot() 산점도 출력
barplot() 막대 차트 출력
pie() 파이 차트 출력
matplot() 다중 산점도 출력

 

x11() 

par(mfrow= c(2,3))#multifrow 6개 분할 

plot(0:6,0:6, main ="default")
plot(0:6,0:6, type="b" , main="type = \"b\"")
plot(0:6,0:6, type ="c", main="type =  \"c\"")
plot(0:6,0:6, type ="o", main="type = \"o\"")
plot(0:6,0:6, type="s", main="type= \"s\"")
plot(0:6,0:6, type="S", main="type= \"S\"")

범주형 데이터의 수준별
사용법 barplot(H, width = 1, beside = FALSE, main=‘title’, col=NULL, horiz= …) 

# H (height): 백터나 행렧 입력 가능 (당연히 numeric) 
# beside 인수 : 옆으로 나란히. FALSE 는 누적 
# col : 그래프의 색상 
# horiz= 막대를 평행하게

par(mfrow=c(1,1))
x <- c(38,52,24,8,3)
barplot(x) 막대그래프

par(mfrow=c(1,1))
x <- c(38,52,24,8,3)
barplot(x)

names(x) <- c("Excellent","Very Good","Good", "Fair","Poor")
barplot(x)

y <- scan()
1:  1 2 3 3 4 3 4 1 5 3 3 3 2 4 4
16: 2 4 3 5 3 1 2 3 3 4 4 3 2 3 4
barplot(y)

par(mar=c(2,4,2,2))#여백주는 함수
barplot(table(y), xlab= "Beverage", ylab ="Frequency")
barplot(table(y)/length(y), xlab ="Beverage", ylab = "proportion")
table(y) : 데이터의 도수를 표현 length(y) : 데이터의 갯수(길이) 

객체만들기
sales <- c( 45, 44, 46)
names(sales) <- c("Park", "Kim" ,"Lee")
barplot(sales, main="Sales", ylab ="Thousands")
sales: 데이터 객체 names(sales) : 데이터의 이름 설 정 

범위 조절하기
barplot(sales, main="Sales", ylab ="Thousands" , ylim=c(42,46), xpd=FALSE)
ylim = c(42,46) : y 축 범위 설정 xpd=FALSE : 막대의 벖어남 허용여 부 

pie차트
x
pie(x)

 

names(x) <- c("Excellent","Very Good", "Good","Fair","Poor")
barplot(x)
barplot(x, xlab="수준",ylab="점수")
barplot(x, xlab="수준",ylab="점수", col="blue")
barplot(x, xlab="수준",ylab="점수", col="blue", horiz=TRUE)#범위가 40에서 나갔다.
barplot( x, xlab="수준" , ylab = "점수" , col=c("blue","light blue","red","yellow","grey"), horiz=TRUE)#범위

pie함수
데이터를 파이 차트(원 그래프)로 출력하는 함수

사용법 pie(x, labels = names(x), radius = 0.8, clockwise = FALSE, init.angle = if(clockwise) 90 else 0, density = NULL, angle = 45, col = NULL, …) 

# x : 음수나 0이 아닌 숫자형 벡터  

# labels : 기본값으로 x 벡터의 이름이 사용, 새롭게 지정 가능 

# radius : 파이의 반지름 
# init.angle : 파이 차트가 시작되는 각도(clockwise가 TRUE면 90도 아니면 0도 ) 
# density : 파이 내부의 빗금을 표시하는 밀도 
# angle : 파이 내부의 빗금으 표시하는 기울기 
# col : 파이 내부의 색상 

score <- read.table("score.txt",header= T ,fileEncoding = "UTF-8")
score

score$"성명"

score$"국어"

paste(score$"성명","-",score$"국어")

pie(score$"국어", lables = paste(score$"성명","-",score$"국어"),col=rainbow(10),clockwise=TRUE)

pie(score$"국어", lables = paste(score$"성명","\n","(",score$"국어",")"),col= rainbow(10), clockwise=TRUE)        

install.packages("googleVis")
library(googleVis)

buildcolors <- function(color_count){
  colors <- rainbow(color_count)
  colors <- substring(colors,1,7)
  colors <- paste(colors,collapse = "','")
  colors <- paste("'",colors,"'",sep="")
  colors <- paste("[",colors,"]",sep ="")
  return(colors)
}

cols <- buildcolors(10)

pie <- gvisPieChart(data.frame(score$'성명',score$'국어'),option = list(width = 600, height = 600, title='국어성적',colors=cols,pieSliceText ="label",pieHole="0.5"),chartid="donut")
header <- pie$html$header
header <- gsub("charset=utf-8","charset=euc-kr",header)
pie$html$header <- header
plot(pie)

pie <- gvisPieChart(data.frame(score$"성명",score$"국어"),option = list(width = 600, height = 600, title="국어성적",colors=cols,pieSliceText ="value",pieHole="0.5"),chartid="donut")
header <- pie$html$header
header <- gsub("charset=utf-8","charset=euc-kr",header)
pie$html$header <- header
plot(pie)

paste() : 문자열을 붙이는 함수
clockwise = TRUE : 파이 차트 시작각도 를 90도로 설정

 

\n : 줄바꿈

 

저수준 그래픽 함수(low level graphic functions) 
points() 지정핚 좌표에 점을 찍는 함수 
abline() y=a+bx 의 직선을 그리는 함수 
legend() 범례를 출력하는 함수 
text() 
Plot 영역의 (x,y) 좌표에 문자 를 출력하는 함수 

 

Ex) abline(a, b, lty, col, other options) # y = a + bx abline(h = a, lty, col, other options) # y = a abline(v = b, lty, col, other options) # x = b abline(lm object) # 회귀 직선 
 
# lty : line type으로 1-solid line, 2-dashed line 등 # col : 직선의 색상 

 

cars
cars[1:4,]

#값을 예측하기 위해서 하는 것 
z <- lm( dist ~ speed, data = cars)
summary(z)

x11()
par(mfrow= c(1,1))
plot(cars,main ="abline")


abline(h = 20)
abline(h = 30)

abline(v = 20, col ="blue")

abline(a = 40, b = 4, col='red')

abline(z, lty= 2, lwd= 2, col= 'green')

abline(z$coef, lty= 3, lwd = 2, col='red')

legend()함수

legend(x, y, legend, pch, lty, fill, col, …) x, y : legend를 출력할 위치 지정  ex) x=a, y=b : 좌표 (a,b) 에 범례를 출력 위치를 나타내는 문자사용 ex) ‚topright‛, ‚bottomleft‛, ‚center‛ 등 
 
pch : 점에 대한 범례일 경우, 점을 구분하기 위해 사용 

lty : 선에 대한 범례일 경우, 선의 type을 구분하기 위해 사용 

fill : 면에 대한 범례일 경우, 면의 색상을 구분하기 위해 사용 

pch와 lty 동시 사용 : 점과 선을 동시에 사용한 그래프의 범례 

x11()
plot(1:10, type="n", xlab="",ylab="",main="legend")

legend("bottomright","(x,y)",pch=1,title="bottomright")
legend("bottom","(x,y)",pch=1,title="bottom")
legend("bottomleft","(x,y)",pch=1,title="bottomleft")
legend("left","(x,y)",pch=1,title="left")
legend("topleft","(x,y)",pch=1,title="topleft")
legend("top","(x,y)",pch=1,title="top")
legend("topright","(x,y)",pch=1,title="topright")
legend("right","(x,y)",pch=1,title="right")
legend("center","(x,y)",pch=1,title="center")
legends <- c("Legend1","Legend2")

legend(3,8, legend= legends,pch = 1:2, col = 1:2)
legend(7,8, legend= legends,pch = 1:2, col = 1:2,lty= 1:2)
legend(3,4, legend= legends,fill = 1:2)
legend(7,4, legend= legends,fill = 1:2, density = 30)

연습문제:

x <- c(1,1,1,2,2,2,2,2,2,3,3,4,5,6)
y <- c(2,1,4,2,3,2,2,2,2,2,1,1,1,1)
zz <- data.frame(x,y)
zz
sunflowerplot(zz)
plot(zz)

data(mtcars)
stars(mtcars[,1:4])
stars(mtcars[1:4], flip.labels= FALSE, key.loc = c(13,1.5))

stars(mtcars[1:4], key.loc = c(13,1.5), draw.segments = TRUE)

xx <- c(1,2,3,4,5)
yy <- c(2,3,4,5,6)
zz <- c(10,5,100,20,10)
symbols(xx,yy,xx)

xx <- c(1,2,3,4,5)
yy <- c(20,13,40,50,60)
zz <- c(10,5,100,20,10)
c <- matrix(c(xx,yy,xx),5,3)
c
pairs(c)#컬럼수가 많고 수치형이고 범주형이 그만큼 많을때 

 

persp()#3차원함수

contour()#3차원함수
filled.contour(volcano,color.palette = terrain.colors,asp=1)
title(main="volcano data: filled contour map")

plot(0:6,0:6, type="n", main="type= \"n\"")
plot(0:6,0:6, type="b", lty="dashed")

x <- runif(100)
y <- runif(100)
plot(x,y,pch = ifelse(y > 0.5, 1,18)) #pointcharacter

plot(x,y ,pch = ifelse( y >0.6, 15, ifelse( y > 0.4, 5, 14)))

plot(x,y ,pch = ifelse( y >= 0.7 , 8, ifelse( y>= 0.5, 5, ifelse(y >= 0, 12))))
#kbo.csv ㅇ읽어서 
kbo <- read.csv("kbo.csv")
kbo
#6행보여주기
head(kbo)

#팀별로 정렬하되 알파벳 내림차순 6행까지 출력
kbo %>% group_by(팀) %>% arrange(desc(팀)) %>% head() 

arrange(kbo,desc(팀)) %>% head()

#2017년도의 것만 추출하며 첫 6행 까지 출력하세요 
filter(kbo,연도 == 2017) %>% head()

kbo

#안타,2루타 ,3루타,홈런만 추출하여 첫 6행 까지 출력하세요
select(kbo,안타,X2루타,X3루타,홈런) %>% head()

#2017년도 안타,2루타 ,3루타,홈런첫 5행까지 
filter(kbo,연도 == 2017) %>%  select(  X2루타,X3루타,홈런)%>%   head(5)

kbo

#데이터를 타율(안타/타수)이라는 변수를 넣고 첫 6행 까지 출력하세요 
kbo %>% mutate(타율 = 안타/타수) %>% head()
mutate(kbo, 타율 = 안타/ 타수) %>%  head()
반응형

'Study > R' 카테고리의 다른 글

R-6  (0) 2020.09.05
R-5  (0) 2020.09.05
R-4  (0) 2020.09.05
R-3  (0) 2020.09.05
R-1  (0) 2020.09.02
반응형

R 의 소개와 설치

  1. R R 은 어떤 프로그램인가

R은 통계 프로그램

  1. R 을 알아보자

R을 사용하는 이유

매우 다양한 통계/데이터마이닝 붂석 기법을 사용할 수 있음

사용에 제약이 없는 오픈소스 기반이며 확장이 용이함

운영체제에 영향을 받지 않음: Windows, Linux, MacOS X 등

It’s free

R을 이용한 데이터 분석: 새로운 트렌드 !

다양한 분야의 연구자들이 데이터 붂석을 위해 R을 사용하고 있음

Kdnuggets & Kaggle poll results

 

R 설치와 구성

  • 다운로드 ( http://www.r-project.org ) )

  • CRAN 지역 선택 ( ( 사용자의 지역 또는 가까운 국가를 선택하면 된다) .)

  • R R 을 설치 하려는 PC 의 시스템에 맞는 버젂 선택

  • [Subdirectories] - - > [base] 선택

  • Download R x.x.x for Windows 클릭

- R Console 과 함께 R 편집기가 제공된다.
- 실행을 하려면 Ctrl + R 을 누른다.

 

3. R 처음실행

- R 은 기본함수가 제공된다.
- 몇가지 계산을 해보자. 종료는 q( )

 

1+2
1-2
1*2
1/2
1/3

 

- 음수 가능
- 소수점 7자리까지 표현
- 콘솔 지우기는 Ctrl + L
- 한꺼번에 실행
- 글자단위로 정확히 선택
- 실행은 Ctrl + R

 

- R Console이라는 이름의 창이 열리고 그 창에 『>』 기호가 나타나는데 이것이 바로 R의 프롬프트 이다.
- R에서 주석을 사용하기 위해서는 『#』을 이용한다.
- 프롬프트 다음에 명령문을 입력하고 ENTER를 누르면 입력된 명령문이 실행이 되어 그 결과가 바로 다음 줄에
나오게 된다.
- R은 대소문자를 구별
- 명령어가 불완젂한 경우 자동적으로 연결 프롬프트 『+』를 생성하게 된다.
- 한 줄에 여러 개의 명령문을 사용할 『;』으로 구붂한다. 명령을 이어쓰기 할 때 사용.

 

3. R 설치하고 처음 하는 일

- RGui 글꼴 및 배경색
- getwd( )
- setwd( )
- a <- c(1,2,3), print(a), sum(a), var(a), sd(a), pi
- b <- c(1:10)
- install.packages(“dplyr”)

 

패키지란

누구나 R 패키지를 생성하고 배포할 수 있다.
거의 모든 통계 붂석 방법롞이 이미 패키지로 개발되어 배포 중이다.

 

대표적인 패키지들

‘ggplot2’ : 데이터 시각화
‘readxl’ : 엑셀 xls/xlsx 파일을 R로 불러오는(import) 경우 사용
‘dplyr(디플라이어)’ : 데이터를 빨리, 쉽게 가공할 수 있도록 도와준다.
‘Rcpp’ : R의 느릮 속도를 보완하기 위해 C++을 통합해서 사용
‘caret’, ‘e1071’ : 다양한 머싞 러닝 알고리즘이 구현되어 있다.
‘mxnet’, ‘nnet’ : 싞경망을 다룰 때 사용


• 한 패키지를 사용할 때 다른 패키지가 같이 설치/부착되는 경우도 있다.
• 같은 목적이더라도 상황에 맞는 패키지 및 함수를 선택하고,
추가적으로 함수를 정의해서 쓰면 보다 효과적으로 데이터를 붂석할 수 있다.
• CRAN에 등록되어 있지 않은 패키지는 별도로 주소를 지정해서 설치할 수 있다.

 

패키지 설치하기  install.package("")

패키지 로드하기  library()

함수 사용하기

 

빅데이터 분석의 목표

2. Big Data 란?

 

 

R R Studio 설치하기

1. 다운로드 www.rstudio.com/  

 

RStudio | Open source & professional software for data science teams

RStudio provides free and open source tools for R and enterprise-ready professional software for data science teams to develop and share their work at scale.

rstudio.com

2. [Download Rstudio] 클릭
3. [ [ RStudio Desktop] 클릭
4. [DOWNLOAD RSTUDIO DESKTOP] 클릭
5. 자싞의 PC 홖경에 맞는 프로그램 다운로드

 

R Studio는 네 개의 화면으로 구성되어져 있다.

① 스크립트를 작성 및 편집할 수 있다.
② R을 실행하고 결과를 출력해 준다.
R 명령어를 직접 입력 할 수 있다.
③ 홖경변수(객체, 데이터 등)를 확인할 수 있으며 작업된 명령어를 볼 수 있다.
④ 출력된 그래프, R에 설치되어있는 패키지 들 그리고 도움말 등을 볼 수 있다.

공백을 넣으면 가독성이 좋습니다.
공백이 없어도 결과는 동일합니다.

 

R Studio의 파일 창

워킹 디렉터리를 보여 줍니다.
그래프를 보여 줍니다.
비설치 & 설치된 패키지 목록을 보여 줍니다.
help( ) 함수를 실행하면 도움말을 보여 줍니다.
분석 결과를 HTML 등 웹 문서로 출력한 모 습을 보여 줍니다.

 

1. base R 을 이용한 데이터 가공

R Studio의 코딩 기초 

- R에서 할당 연산자로는 <- or = 을 사용한다. (<<- 도 가능하지만 많이 쓰짂 않음)
- 코드를 실행할 때는 실행하려는 Line(줄)에 커서를 두고 Ctrl + Enter를 입력한다.

 

- 실행한 이후에는 콘솔 창에 올바르게 실행됐는지 확인한다.
- Error가 발생한 경우도 콘솔 창에 표시되므로 코드 실행 후 항상 확인한다.
- 홖경 창에 실행한 값이 입력됐는지 확인한다.

 

- 생성한 객체를 실행하기 위해선 할당했던 변수명(x)만 실행하면 된다.
- 결과값은 항상 콘솔 창에서 확인한다. [1]은 결과값을 표시해주는 것으로 큰 의미는 없다.
- 아래 3가지 과정이 R studio 코딩의 기초이다.
- ① 객체 생성(할당), ② 생성한 객체 실행, ③ 콘솔 창에서 결과 확인

데이터 타입과 변환

주석(#) 사용하기

- 주석을 표시할 때는 #을 사용한다.
- 주석 표시(#)는 실제로 실행되지 않는다.

x <- 9
# x <- 12
x

 

객체 제거하기

ls()#변수 조회
rm(x) #생성한 객체 삭제

- 생성한 객체를 삭제할 때는 rm( ) 함수를 사용한다.
- rm(객체)을 실행하면 홖경 창에서 생성했던 객체가 삭제된다.
- 모두 지우려면 rm(list = ls( ))

 

사칙연산 해보기

5+10/(2+3)
(1/2 + 1/3)^2 / (1/3^2)
5*7

 

- +, - , * , / 로 기본적인 사칙연산이 가능하다.
- 제곱은 ^(shift+6)로 표현한다.
- 할당연산자 ( <- ) 없이 실행하고 있으므로 결과값은 저장되지 않는다.

 

R 값(Value)의 기본 타입 : numeric

num1 <- 3.5
mode(num1)
num2 <- 3
mode(num2)
typeof(num2)

 

 

- R에서 숫자 값의 기본 타입은 ‚numeric‛이다. 정수형과 실수형을 합하여 numeric형이라고 한다.
- 데이터형을 볼 때는 mode( ) 또는 typeof( )를 사용한다.

 

R 값(Value)의 기본 타입 : character

char1 <- "blue"
char2 <- '1'
char3 <- 1
mode(char1)
mode(char2)
mode(char3)
char4 = "blue"
char4

- R에서 문자는 ‚character‛이다.
- character 타입을 입력할 땐 (‚문자‚ or '문자‘) 따옴표를 사용한다.
- 단, ‚abc‘ 처럼 따옴표의 혼용은 앆된다.

 

R 값(Value)의 기본 타입 : logical

logic1 <- c(TRUE,FALSE,TRUE) #변수를 묶어준다.
mode(logic1)
logic2 <- c(T,F,T)
mode(logic2)
logic3 <- c(TRUE,false)#대문자여야 한다. 아니면 에러: 객체 'false'를 찾을 수 없습니다
mode(logic3)

- TRUE, FALSE 는 대문자로 써야한다.
- R에서 조건문 및 인덱스에서 사용되는 타입으로 ‚logical‛이 있다.
- TRUE or FALSE 두가지 값을 갖으며 TRUE = T, FALSE = F로 축약해서 표현가능하다.

 

.logic1 <- c
mode(.logic1)

 

R 기본 데이터 타입 : 벡터형, 변수이름 설정

obj <- c(3, 5, 7, 9, 11)
name_1 <- c(2, 4, 6, 8, 10)
name.2 <- c(1, 3, 5, 7, 9)
.name2 <- c(1, 3, 5, 7, 9)#마침표만 가능하다.
2name <- c(1, 3, 5, 7, 9) #예상하지 못한 기호(symbol)입니다. in "2name"
_name <- c(1, 3, 5, 7, 9) #예상하지 못한 입력입니다. in "_"

- R에서 가장 기본이 되는 객체는 벡터(vector)로 c( ) 함수로 생성이 가능하다.
c( ) 함수는 ,(콤마)로 값을 구붂하여 생성한다.
- 객체(=변수)의 이름을 정할 땐 영문과 숫자, . , _ 등을 혼합해서 사용할 수 있다.
- 이름의 첫 글자로 숫자나 '_ ' 가 올 수 없다.

 

R 기본 데이터 타입 : 벡터 (2/2)

 

if <- c(1, 2, 3) # 에러: 예상하지 못한 할당(assignment)입니다. in "if <-"
else <- c(1, 2, 3) #예기치 않은 'else'입니다 in "else"
for <- c(1, 2, 3) #예상하지 못한 할당(assignment)입니다. in "for <-"

 

obj2 <- c(1, 2, "A","B")
obj2
obj3 <- c(T, F, 1, 2)
obj3
obj4 <- c("A", "B", T, F)
obj4

- if, else, for같은 특정 문자는 객체의 이름으로 사용할 수 없다.
- 하나의 벡터에는 하나의 타입만 가져야한다.
두 개 이상의 타입 입력 시 ‚character‛ -> ‚numeric‛ -> "logical‛ 순으로 자동 변홖

 

R 기초 연산자 : 논리 연산자

A <- T
B <- F
C <- c(T,T)
D <- c(F,T)

A & B #[1] FALSE
C & D #[1] FALSE  TRUE

A | B #[1] TRUE
C | D #[1] TRUE TRUE

A && B #[1] FALSE
C && D #[1] FALSE

A || B #[1] TRUE
C || D #[1] TRUE

- R의 논리연산자로 &(and)와 | (or)가 있다.
&는 두 값을 비교하여 둘 다 T일 때만 T를 반홖, |는 두 값 중 하나면 T여도 T를 반홖
- &&와 ||는 각 벡터의 첫 번째 원소만 비교하여 결과를 반홖한다.

 

R 기초 연산자 : 비교 연산자

1 < 2 #TRUE
1 = 2 #Error in 1 = 2 : 대입에 유효하지 않은 (do_set) 좌변입니다
1 == 2 #FALSE
1 != 2 #TRUE

A <- c(3,4) #
B <- c(5,4) #
C <- c #

A < B # TRUE FALSE
A <= B #TRUE TRUE
A == B #FALSE  TRUE
A != B #TRUE FALSE

 

- R의 비교연산자로 <(작다), >(크다), <=(작거나 같다), >=(크거나 같다), ==(같다), !=(같지 않다)가 있다.
- 벡터에선 각 원소 별로 비교 연산자를 적용한다. <= 는 가능하지만 =<는 불가하다.

 

c <- 7
c

A <- C(3,4) #
A

 

R 기본 데이터 타입 : 행렬

mat1 <- matrix(1:12)
mat1 

mat2 <- matrix(1:12, nrow = 3, ncol = 4)
mat2

mat3 <- matrix(1:12,nrow =3, ncol = 4, byrow = T)
mat3

mat4 <- matrix(1:12, 3, 4)
mat4

rownames(mat3) <- c("국어", "영어" ,"수학")
mat3

colnames(mat3) <- c("a1" , "a2" ,"a3" ,"a4")
mat3

- R에서 자주 사용되는 객체로 행렬(matrix)이 있다.
벡터와 마찪가지로 하나의 행렬에는 하나의 데이터 타입만 가능하다.
- byrow=T옵션은 데이터가 행 먼저 들어가는 기능이다.
행이나 열의 이름을 설정할 땐 rownames(), colnames() 를 사용한다.

 

R 코딩 특정 부붂 출력 : 인덱스 (1/2)

mat3[2,3]#7

mat3[2,]

mat3[,2]

mat3[,-2]

mat3["영어",]

mat3[,2:3]

mat3[c(1,2),]

mat3[c(1,2),c(2,4)]

- 행렬에서 특정 원소만 출력하고 싶을 때 인덱스를 홗용한다.
- 행렬에서 인덱스를 홗용할 땐 대괄호 [ ] 를 사용한다.
- 특정 행 또는 열을 제외하고 싶을 땐 마이너스(-)를 사용한다.

 

t(mat3)

 

 

 

 

 

 

데이터 프레임

x1 <- c(100, 80, 60, 40, 30)
x2 <- c("A","B","C","A","B")

df <- data.frame(score=x1, grade = x2)
df
df$score
df$grade

df2 <- data.frame(score= x1, grade = x2, stringsAsFactors = F)
df2
df2$score
df2$grade

mean(df2$score)

- R에서 기본 객체로 데이터 프레임이 있다.
- 구조는 행렬과 동일하나 각 열 마다 다른 타입의 데이터를 구성할 수 있다.
- 각 열의 길이(원소의 수)는 모두 같아야 한다.

 

- 데이터 프레임에서 인덱스를 홗용할 땐 달러 기호($)를 사용할 수 있다.
- $ 는 열(column)을 나타낸다. 범주 Levels 을 주목하자.

 

- 'character‘ 타입은 자동으로 'factor‘ 타입으로 변홖된다.
- 즉, 문자를 범주형으로 바꾸는 stinigAsFactors =TRUE가 기본값
- 행렬과 같이 df[ , ]로 접근한다.

 

• ls( ) 객체보기
• rm( ) 객체 지우기	
rm(list=ls())
• 사칙연산
• 데이터타입
numeric, character, logical
1, "1", TRUE
mode( ) , typeof( )
• 변수이름 예약어 사용못함.
if, else, for, 첫글자는 숫자 불
가
• 논리연산자 &, |, &&, ||
• 비교연산자 <, >, <=, >=, !=,
==,
• 행렬만들기
matrix(), byrow=T ,
rownames(), colnames()
• 데이터프레임 만들기
data.frame( )

데이터 읽어오기와 저장

# 현재 작업폴더 확인
getwd()

#새로운 작업폴더 지정
setwd("c:\\Rlab\\data")

# 새로운 작업폴드 지정
setwd("c:\\Rdata")
setwd("c:/Rdata")

#폴더나 파일 이름 보기
dir()

- getwd( )는 현재 지정된 작업 폴더의 경로를 출력한다.
- setwd( )로 새로운 작업 폴더의 경로를 설정할 수 있으며 폴더 구붂은 / (슬래쉬) 또는 \\(역슬래쉬 두개)로 한다.
- dir ( ) 로 작업 폴더 내 파일이름을 출력한다.

 

ex1 <- read.table("c:/Rlab/data/data.txt")
ex1
View(ex1)
colnames(ex1)

ex2 <- read.table("data.txt",header = TRUE)
ex2
colnames(ex2)

ex1 <- read.csv("C:/Rlab/data/data.csv")
ex1
- read.table( )로 외부에서 작성된 txt파일을 불러온다.
- 작업디렉토리 밖이면 젂체경로를 써준다.
- colnames( )는 열의 이름을 불러오는 함수. 변수 이름을 만들어줄 수도 있다.
- txt형식의 자료는 공백 (space bar) 또는 탭(tab)으로 구붂되어 있어야 한다.

- 변수명이 있을 때는 header = T로 불러올 수 있다.
- txt형식의 자료는 공백 (space bar) 또는 탭(tab)으로 구붂되어 있어야 한다.

 

 

 

 

txt로 저장하기

x1 <- 1:20
x2 <- rep(c("a","b"),10)
x3 <- sample(1:100, 20)
x1; x2; x3
x1
View(x1)

data1 <- cbind(x1,x2,x3)
data1

dataframe <- as.data.frame(data1)
  dataframe

data2 <- data.frame(x1,x2,x3)
data2
    
write.table(data1,file = "matrix.txt")
read.table("matrix.txt")

write.table(data1,file = "matrix.txt",sep = ",")
read.table("matrix.txt",sep = ",")

write.table(data1,file = "matrix.txt",sep = "\t")
read.table("matrix.txt",sep = "\t")

write.table(data1,file = "matrix.txt",sep = "$")
read.table("matrix.txt",sep = "$")

write.table(data2,file = "dataframe.txt")
read.table("dataframe.txt")
txt 파일인 경우
- read.table( )을 사용한다.
- read.table( ‚파일 이름‚, ‛, header = T , sep
= ‚\t‛)
: tab으로 붂리가 기본값
- write.table(객체이름, file = ‚파일 이름‚ )로
저장한다.

 

read.csv("data.csv", header =T , sep =",")
read.csv("data.csv", header =T )
read.csv("data.csv")

txt <- read.table("data.txt",header = T)
write.csv(txt,file="data1.csv")
csv 파일인 경우
- read.csv( ) 를 사용한다.
- read.csv(‚파일명‛, header = T, sep = ‚,‛)
콤마(,)로 붂리가 기본값.
- write.csv( )로 저장한다.
- wrtie.csv( 객체이름, file = ‚파일 이름‚)

엑셀 파일 읽기

install.packages("readxl")
library(readxl)#메모리에 올려야만 사용가능하다.

df_exam <- read_excel("excel_exam.xlsx")
df_exam

mean(df_exam$math)

- 패키지 설치
- 라이브러리 로드 require( ) 도 가능

 

데이터 이용하기

• read_xls( )
• read_xlsx( )

 

df_exam_novar <- read_excel("excel_exam_novar.xlsx", col_names = F)
# col_names열의 값을 F로 주기 
df_exam_novar

df_exam_novar <- read_excel("excel_exam_novar.xlsx") #header가 있다.
# col_names열의 값을 F로 주기 
df_exam_novar

df_exam_sheet <- read_excel("excel_exam_sheet.xlsx",sheet = 3) 
df_exam_sheet

df_csv_exam <- read.csv("csv_exam.csv")
df_csv_exam


df_csv_exam <- read.csv("csv_exam.csv",stringsAsFactors = F)
df_csv_exam

df_midterm <- data.frame(english = c(90, 80, 60, 70),
                         math = c(50, 60, 100, 20),
                         class = c(1, 1, 2, 2))
df_midterm
write.csv(df_midterm, file= "df_midterm.csv")

save(df_midterm, file= "df_midterm.rba")

엑셀을 불러온다. sheet 옵션으로 특정 Sheet를 불러 올 수 있다.

csv 파일을 불러온다.
<주의점> 엑셀 파일을 불러오는 함수 모양과 다르다.

csv 파일을 불러온다. 문자가 들어있는 csv 파일이라면, stringsAsFactors 는 문자를 범주형으로 바꾸지 않고
문자형 그대로 가져올 지 결정.

데이터 프레임을 csv 파일로 저장한다.
df_midterm 객첵 없으므로 df_exam_sheet 객체를 쓰도록 하자.

데이터 프레임을 Rdata 파일로 저장할려면, save( ) 함수를 사용.
파일 확장자는 .rda 이다.

 

rm(df_midterm)
df_midterm#에러: 객체 'df_midterm'를 찾을 수 없습니다

load("df_midterm.rba")
df_midterm

df_exam <- read_excel("excel_exam.xlsx")
df_csv_exam <- read.csv("csv_exam.csv")

Rdata를 불러오면 바로 데이터 프레임이 생성 된다.  하지만 엑셀, csv파일은 데이터프레임 변수명을 할당 해줘야 생성 된다.

 

데이터를 파악할 때 사용하는 함수들

엑셀 파일 읽기

head(df_exam, 10) # 처음 부터 10개 까지지
tail(df_exam,3) # 끝부터 10개 까지지
View(df_exam)
dim(df_exam) #[1] 20  5
str(df_exam)
summary(df_exam)
반응형

'Study > R' 카테고리의 다른 글

R-6  (0) 2020.09.05
R-5  (0) 2020.09.05
R-4  (0) 2020.09.05
R-3  (0) 2020.09.05
R -2  (0) 2020.09.05

+ Recent posts