R 기본 문법

연산


1+1
22+35
532-145
35*6
8/5
8%%5
8%/%5 
3**4 
9**2 
round(1.4)  # 반올림
round(1.9)
ceiling(3.6)  # 올림
floor(3.6)   # 내림
sqrt(16)   # 루트 씌워라 

log(100)  # 로그 e에 100
log(8, base = 2)  # 로그 2(밑수)에 8
log2(8)
log10(100)  # 로그 10에 100

a <- 100  # a를 100 이라고 하자 
b <- 120
a-b
a+b

비교 연산자

10==10
5==7
3 <=  8
5 >=  6

벡터연산

a <- c(1,2,3,4)  # 벡터 만들기
b <- c(5,6,7,8)

a+b
a-b
a/b
a*b

c<- c(9,10,11)
a+c

mean(a)
median(a)
max(b)
min(b)
range(a)
var(a)  # 분산
sd(a)  # 표준편차
sqrt(var(a))

벡터 생성


x  <- 1:200 # x 는 위의 숫자 집합이라고 하자
str(x)  # 데이터의 구조를을 알려줘
length(x)  # 벡터의 길이를 알려줘

seq(1,10,2)  # 1부터 10까지, 2 간격으로 넣어줘라
seq(0.1, 1.0, 0.2)  # 0.1부터 1.0까지, 0.2 간격으로
seq(3,30,3)
rep(1, times=10)  # 1을 10번 해라
rep(1:3, times=3)  # 1부터 3까지, 3번
rep(1:5, times=3) # 1부터 5까지를 3번   
rep(c(1,3,5), times=3)  # 1,3,5를 3번 반복
rep(1:3, each=3) # 1부터 3까지 각각 3번 

sample(1:10, 4)  # 4개를 랜덤하게 뽑아라 

data structure

x1 <- c("hello", "skk student")
x2 <- c("1", "2")
x3 <- c(3,4,5)
str(x1)  # 데이터 유형을 보여줘 
str(x2)   # 1,2는 숫자가 아니라 문자 유형이다.  
str(x3)   # 3,4,는 숫자 유형. 
x2+x3
paste(x1,x2)  # 변수를 붙여줘
paste(x3,x2)

x <- c(1,3,5,7,9)
x[1]  # x 변수의 1번째 원소를 알려줘
x[4]
x[6]
x[1:3]  # 1번째부터 3번째까지 원소를 알려줘

x1 <- c(2,4,6,8,10)
x1[-2]  # 2번째 원소는 제외하고 알려줘
x1[-c(3:4)]  # 3,4번째 원소는 제외하고 알려줘

bookpage example

bookpage <- c(300,250,330,270,280,310,275,290)  # c안의 숫자집합을 bookpage라고 하자
hist(bookpage)  # 히스토그램 
mean(bookpage)
median(bookpage)
quantile(bookpage)  # 1/4 지점, 1/2지점, 3/4지점의 값
IQR(bookpage)
var(bookpage)  #분산을 구해라
sd(bookpage)   # 표준편차를 구해라 standard deviation 
range(bookpage)  # 최소값/ 최대값을 구해라 
diff(range(bookpage))  # 최소값 최대값의 차이  
summary(bookpage)  # ()데이터를 요약해줘

row, column

x <- list("Tom", 20, c(850, 890))
x
x[2]  # 2번째 원소를 꺼내줘 
x[3]

x <- list(name= "Tom", age= 20, toeic= c(850, 890))
x
x$name  # x 오브젝트에서 name 을 알려줘 
x$age
x$toeic

x1 <- matrix(1:20, nrow=4, ncol=5) # 1부터20까지, 4행5열 만들어 
x1
x2 <- matrix(1:20, nrow=4, ncol=5, byrow = T) #행 방향으로
x2

x <- 1:4 
y <- 5:8
n1 <- cbind(x,y) #열 방향 column x, y를 합해줘 
n1
n2 <- rbind(x,y)  #행 방향 row x, y를 합해줘
n2

x1[2,3]   # 2행3열은 뭐야
x1[1,]    # 1행 모든 숫자
x1[,4]    # 4열 모든 숫자 
x1[2,1:3]  # 2행, 1부터 3열
x1[1,c(2,4)] # 1행, 2열과 4열   
x1[,c(2,4)]   # 2열 4열에 있는 모든 행 

matrix

score <-matrix(c(100,80,75,77,83,90,70,60,95,88,98,82),nrow=4, ncol=3)  #c 안의 숫자로 매트릭스 만들어, 4행 3열
score
rownames(score) <- c("세현","규리","나영","민정") #각 행의 이름 
colnames(score) <- c("math","english","coding")  #각 열의 이름 
score

str(score)

정렬

//byrow = T/ False/ True 명령어
x <- c(3,6,4,8,2,9,7)
sort(x)  # x 변수를 오름차순으로 정렬해
sort(x, decreasing=T)  # 내림차순으로 정렬해
sort(x, decreasing=F)  # 오름차순으로 정렬해

score example

score <- matrix(c(100,80,75,77,83,90,70,60,95,88,98,82),nrow=4, ncol=3)  #c 안의 숫자로 매트릭스 만들어, 4행 3열
rownames(score) <- c("세현","규리","나영","민정") #각 행의 이름 
colnames(score) <- c("math","english","coding")  #각 열의 이름 
score
str(score)  # 스코어 오브젝트의 구조?? 

score["나영","coding"]  # 나영이의 코딩점수
score["민정",]     # 민정이의 모든 열 점수
score[,"coding"]   # 모든 학생의 코딩 점수를 알려줘 
grade <- matrix(c("a","b","c","a","a","d"), nrow = 2, ncol = 3)
grade  
rownames(grade) <- c("세현","규리") #각 행의 이름 
colnames(grade) <- c("math","toeic","R")  #각 열의 이름 
seq(10,100,10)
score <- matrix(seq(10,100,10),nrow=5, ncol=2) 
rownames(score) <- c(1:5) #각 행의 이름 
colnames(score) <- c("소연","온유")

Soyeon <- c(10,20,30,40,50)
Ohnyou <- c(60,70,80,90,100)
score <- cbind(Soyeon, Ohnyu)
score

apply(score,1,sum) # 각 행의 sum 을 구해
apply(score,1,mean) # 각 행의 mean 을 구해
apply(score,2,sum) # 각 열의 sum 을 구해
apply(score,2,mean) # 각 열의 mean을 구해

데이터 프레임

x1 <- c(1,2,3,4)
x2 <- c(90,80,70,60)
a <- data.frame(x1,x2)  # x1,x2 로 이루어진 데이터프레임 만들어라 
a
str(a)   # a의 구조는??
dim(a)   # 4행 2열의 데이터프레임

colSums(a)  # 열에 있는 수를 sum 해라
colMeans(a) # 열에 있는 수 평균을 구해라 
rowSums(a)  # 행에 있는 수를 sum 하라
rowMeans(a)  # 행에 있는 수 평균을 구해라  

name <- c("유민","윤주","일범","효준") # c 안의 이름을 name 안에 
age <- c(19,22,20,25)    # c 안에 숫자를 age 안에
major <- c("문헌","문헌","융합","사회")  # c 안의 전공을 major에 
r.class <- data.frame(name, age,major)
# name, age,major으로 이루어진 데이터프레임(행렬) 만들어줘 
r.class
str(r.class)
View(r.class)  # 새 창에 데이터
r.class[2,]        # 2행, 모든 열을 보여줘
r.class[,"major"]  # 모든 행, major 열을 보여줘
r.class$major      # r.class 데이터의 major 변수를 보여줘

열 추가

r.class$toeic <- c(900, 910, 920, 930)
r.class

sw <- (list("승원", 24, "글경", 950))  # 추가하려는 리스트 
r.class <- rbind(r.class,sw)  #rbind 행을 합해줘 
r.class
r.class$age <- NULL  # age 열 삭제하기 

name <- c("윤혁","지운","재홍","채윤","수민","대우")  # 문자벡터
bloodtype <- c("a","b","o","ab","o","a")  # 문자벡터 
BT <- data.frame(name, bloodtype)  
# 이름, 혈액형으로 데이터 프레임을 만들어라
BT
table(BT)  # blood type으로 빈도표를 만들어줘 

major <- c("컬쳐","경영","데융","문헌","수학","글경")
BT$major <- c("컬쳐","경영","데융","문헌","수학","글경")
BT

내장 데이터

View(cars)
str(cars)   # 구조: 데이터프레임
dim(cars)
names(cars)  # 각 변수의 이름?? 
mean(cars$speed)
mean(cars$dist)
hist(cars$speed)
plot(cars$speed, cars$dist) # 산점도
abline(cars$speed, cars$dist, col="red")  # 데이터에 기반한 직선(회귀선)

state.x77   # 내장데이터, 매트릭스
View(state.x77)  #state.x77를 별도의 탭에서 보여줘
dim(state.x77)  # 몇행 몇열?
head(state.x77) # 맨위에 6줄 
names(state.x77)  # 매트릭스라 안보임. df로 변환해줘야 함
class(state.x77)  # 데이터 형태 알려줘

state <- data.frame(state.x77)   
# state.x77을 데이터프레임 형태로 변환해서 state 이라고 저장해줘 
names(state)   # 변수 이름은 뭐야?(열에 해당되는 변수)
colMeans(state)  # 모든 열의 평균값
mean(state$Income)   # 미국 주의 소득의 평균
max(state$Income) # 소득이 가장 높은 주의 소득?
min(state$Income)
str(state)
plot(state$HS.Grad, state$Income)
abline(state$HS.Grad, state$Income, col="red")

조건문

if else: 가장 많이 쓰이는 명령어
a <- 10
b <- 9
if(a>5 & b> 10){
  print(a+b)
} else {
  print(a-b)
}

if(a>5 & b> 10) {print(a+b)} else {print(a-b)}

score <- 75
if(score >= 90) {
  grade <- "A"
} else if (score >= 80) {
  grade <- "B"
} else if (score >= 70) {
  grade <- "C"
} else {
  grade <- "D"
}
grade

for문

for (i in list)
{명령어}

for(i in 1:10){
  print(i)
}

for(i in 3:7){
  x<- 10-i
  print(x)
}

for(i in 1:10){
  i<- i+2
  print(i)   # 윗줄 좌변에 덮어 씌워진 i 를 출력해라 
  

  
for(i in 1:10){
    if(i%%2==0){    # i 나누기 2 했을때 나머지가 0이라면
      cat(i, "even", "\n")
    } else {        # 그렇지 않다면
      cat(i, "odd", "\n")
    }
  }  
}
# 문자를 쓸때는 print 대신 cat, 엔터 넣을 때는 "\n" 넣어줘야
for(i in 1:10){
  if(i%%2==0){    # i 나누기 2 했을때 나머지가 0이라면
    cat(i, "even")
  } else {        # 그렇지 않다면
    cat(i, "odd")
  }
}  

# while문 
i <- 1
while(i<=10){  # i가 10보다 작거나 같은 한
  i <- i+3
  print(i)
}

repeat문

계속 반복되므로 break 명령어로 멈추게해야.
repeat print("hello")

i <- 1
repeat{
  print(i)
  if(i>=10){
    break
  }
  i <- i+1
}

for (i in 1:10){
  if (i==5){
    break
  }
  print(i)
}

사용자 정의 함수

Y <- function(y){    # 함수 y를 Y 라고 하자
  Y <- y+10
  return(Y)
}
Y(20)   # y가 20일때 함수값은??
Y(35)

Y <- function(y){    # 함수 y를 Y 라고 하자
  Y <- y+10
  return(Y)
y(20)

Y <- function(y){    # 함수 y를 Y 라고 하자
  Y <- y+10
  return(Y)
}

y(20)
y(35)

multi <- function(x,y){    # 함수 x,y를 multi 라고 하자
  multi <- x*y   # 함수의 정의: x * y
  return(multi)
}
multi(10,20)
multi(15,7)
multi(15,15)

abc <- function(a,b,c){   # 함수 a,b,c를 abc 라고 하자
  abc <-  a+b+c
  return(abc)
}
abc(10,30,50)
abc(3,7,90)

addsub <- function(a,b){
  add <-  a+b
  sub <-  a-b
  return(c(add, sub))
}
addsub(8,46)
addsub(20,10)

BMI <- function(kg,m){     # 함수 kg, m을 BMI 라고 하자 
  BMI <- kg/(m*m)  # (m**2)
  return(BMI)
}
BMI(60, 1.7)
BMI(60, 1.8)

논리연산자

x <- c(1:10)  # 1부터 10까지 수를 x라고 하자 
result1 <-  3<x & x<9  # 3초과 and 9 미만의 수를 저장해라
result1
x[result1]

result2 <-  3<x | x<9  # 3초과 or 9 미만의 수를 저장해라
result2   # 1부터 10까지 모든 수는 3초과 또는 9 미만에 해당
x[result2]

내장데이터,기본 그림 그리기

그래프- hist, barplot, pie, boxplot, plot, 버블차트

colors()   # 657개의 R 컬러 이름을 알 수 있다. 

Orange
mean(Orange$age)
mean(Orange$circumference)
hist(Orange$circumference, col = "turquoise")
plot(Orange$age, Orange$circumference) # 산점도 
plot(Orange)   # 모든 변수끼리의 관계

cars
plot(cars$speed, cars$dist)
plot(cars)
cars$dist
hist(cars$dist)
hist(cars$dist, 
     main = "자동차 제동거리",   # 그래프의 제목 
     xlab= "제동거리", ylab= "빈도수",   # x,y축의 이름
     border="blue",   # 막대의 테두리 
     col="gold",     # 막대의 색깔
     breaks=10)   # n개의 막대로 나타내라

iris
table(iris$Species)
a <- table(iris$Species)
pie(a)
pie(a,
    main = "species of iris")  # 그래프의 제목
barplot(a)  # 막대그래프
barplot(a,
        main = "species of iris",
        xlab = "species", ylab = "number")

iris1 <- iris[, c(1:4)]
boxplot(iris1)
boxplot(iris$Sepal.Length, iris$Sepal.Width, 
        col = "yellow")

boxplot(Sepal.Length~ Species, # Species에 따른 분포를 그려라
        data = iris,   # 데이터는 iris를 쓴다
        main= "Length result",   # 그래프 제목
        col= c("red", "blue", "purple"))  # color 지정하기

box plot

x <- c(1:10)
boxplot(x)
x <- c(1:10, 20,21)
median(x)
boxplot(x)

선그래프

x <- c(100, 200, 180, 150, 160)
y <- c(220, 300, 280, 190, 240)
z <- c(310, 330, 320, 290, 220)
plot(x, type = "o", col="red", 
     ylim=c(0,400), axes = F, ann = F)
# type = "o",  # 점과 선의 형태
# col="red",   # red 색을 칠해라
# ylim=c(0,400),   # y축의 범위는 0부터 400까지
# axes = F, ann = F  # x,y 축의 테두리 없애라, 제목 없애라  

axis(1, at=1:5, 
     lab=c("A","B","C","D","E"))
# (1, at=1:5,   # x 축의 범위는 1부터 5까지 
axis(2, ylim=c(0,400))  # y축의 범위는 0부터 400까지
lines(y, type = "b", pch=17, col="green", lty=5)  # 추가
lines(z, type = "b", pch=11, col="blue", lty=5)  # 추가
# lines: 선을 더 추가할때는 lines 명령어
# pch: 0~25번까지. 점의 모양
# col =  color를 지정
# lty: 1~6번까지 선의 종류
title(main="book page",    # 제목
      col.main="purple")   # 제목의 색깔
title(xlab="book", ylab="Page",   # x, y 축의 이름 
      col.lab="grey")             # 라벨의 색깔

legend(4.5,400,  #legend   #주석을 달아라  좌표 4, 400 위치에
       c("sci","Eng","math"), # 각 선의 이름은 과학 영어 수학
       cex=1.0, # 글자크기는 1.0
       col = c("red","green","blue"),  # 각 선의 색깔
       pch = 21,   # (주석 내) 점의 모양은 21번
       lty=1)   # 선의 모양은 1번 

x <- 1:10
y1 <- log(x)
y2 <- sqrt(x)
plot(x, y1, 
     type = "l", col= "red")   # 선을 그어라
lines(x, y2, 
     lty= 5, col= "blue")    # 선을 추가해라
range(y1)
range(y2)

plot(x, y1, 
     ylim = c(0,4),   # y축의 범위 0~4까지 설정 
     type = "l", 
     col= "red")
lines(x, y2, 
      lty= 5, col= "blue")    # 선을 추가해라

View(Titanic)  # 내장데이터 타이타닉 
class <- margin.table(Titanic, 
                      margin = 1)  # 1열 기준 누적테이블 
class
pie(class)
pie(class, 
    labels = c(325, 285, 706, 885),
    main = "Titanic passengers")   # 그래프 제목
text(0.5, 0.2, "1등석")  # x,y축 좌표찍고 문자작성 
text(0.2, 0.6, "2등석")
text(-0.5, 0.1, "3등석")
text(0.1, -0.3, "crew")

barplot(class)
barplot(class,
        xlab = "Ferry Class", ylab= "number",  # x,y축 이름
        main = "Passengers by Class")   # 그래프 제목 
barplot(class, 
        horiz= T,  # 수평(가로)막대그래프
        xlab = "number", ylab= "Ferry Class",
        main = "Passengers by Class")

survive.by.class <- margin.table(Titanic, 
                                 margin = c(4,1))  # 4열, 1열, 2차원테이블

survive.by.class 
barplot(survive.by.class)  # 수직배열 no 막대하부, yes 막대상부
barplot(survive.by.class, 
        beside = T)  # 수평배열 no 왼쪽막대, yes 오른쪽막대
barplot(survive.by.class,
        beside = T,
        col = c("black", "green"),  # 막대 색 지정
        legend= T,  # 범례표시
        names.arg = c("1등석","2등석","3등석","선원"))#막대이름

state <- data.frame(state.x77)  # 데이터 프레임 형태
View(state)
barplot(state$Income)
barplot(state$Murder)
head(state$Income)   # 6행만 보여줘
barplot(head(state$Income), col= "brown")
axis(1, at=1:6,    # x축 지정
     lab=c("Alba","Alas","Arizo","Arkan","Cali", "Colo"))  
barplot(head(state$Murder), 
        col= rainbow(6)) # rainbow 팔레트 n개 써라
axis(1, at=1:6,    # x축 지정
     lab=c("Alba","Alas","Arizo","Arkan","Cali", "Colo"))  
state[c(3,5,7,9),1]  # 3,5,7,9행의 1열만 보여줘
a <- state[c(3,5,7,9),1]  # a에 넣는다
barplot(a)

버블차트 그리기

symbols(state$HS.Grad,state$Income,
        circles = state$Population,  #원은 인구를 의미
        inches = 0.7,  # 표준 0.7 크기
        fg="black",   # 원 테두리 색깔
        bg="salmon",   # 원 색깔
        lwd= 1,         # 원 테두리 굵기
        xlab = "고졸비율",   # x축
        ylab = "1인당 소득",  # y축
        main= "고졸비율과 소득")  # 그래프의 제목 
text(state$HS.Grad, state$Income,
     rownames(state),   # 열의 이름을 넣어라
     cex= 0.7,   # 글씨 크기
     col = "blue")

plot 화면분할하기

plot(1:20)  # 1부터 20까지 
plot(20:1)
par(mfrow=c(2,1))  # 가로2 세로 1의 비율로 그래프 만들어라
plot(1:20)
plot(20:1)
par(mfrow=c(1,3))  # 가로1 세로 3 비율로 그래프 만들어라
plot(1:20)
plot(20:1)
plot(5:1)

par(mfrow=c(2,2))  # 가로 2 세로 2개 
barplot(1:5, col = "blue")
barplot(1:5, col = "yellow")
barplot(1:5, col = "red")
barplot(1:5, col = "purple")
par(mfrow=c(1,1))  # 분할화면 원상태로 되돌리기
# plot 화면분할하기
plot(1:20)  # 1부터 20까지 
plot(20:1)
par(mfrow=c(2,1))  # 가로2 세로 1의 비율로 그래프 만들어라
plot(1:20)
plot(20:1)
par(mfrow=c(1,3))  # 가로1 세로 3 비율로 그래프 만들어라
plot(1:20)
plot(20:1)
plot(5:1)

par(mfrow=c(2,2))  # 가로 2 세로 2개 
barplot(1:5, col = "blue")
barplot(1:5, col = "yellow")
barplot(1:5, col = "red")
barplot(1:5, col = "purple")
par(mfrow=c(1,1))  # 분할화면 원상태로 되돌리기

ggplot2

install.packages("ggplot2")
library(ggplot2)
search()   # 패키지가 잘 깔렸는지 확인 

Orange

산점도

ggplot(Orange, aes(age, circumference))+ # orange 데이터, x,y축
  geom_point(color= "Red")   # 점을 red로 해줘 

ggplot(Orange, 
       aes(age, circumference))+ # orange 데이터, x,y축
  geom_point()+               # 점그래프 그려줘
  stat_smooth(method = 'lm')  # 추세선(회귀선)을 그어라

ggplot(Orange, 
       aes(Tree,circumference, color= Tree))+ # 각 tree에 따라 점 색 달라짐
  geom_point()     

ggplot(Orange, 
       aes(Tree,circumference))+ # 각 tree의 평균둘레
  geom_bar(stat='identity',   # 일반 막대그래프-y축 데이터의 값을 높이로
           fill= "orange")    # 막대를 채워라

cars
ggplot(cars, aes(speed, dist))+  # cars 데이터, x y 축
  geom_point()+                # 점그래프 그려줘
  stat_smooth(method = 'lm')  # 추세선(회귀선)을 그어라

히스토그램

ggplot(cars, aes(x= dist))+     # cars 데이터, x y 축
  geom_histogram(fill= "skyblue")  # 막대의 색깔

ggplot(iris, aes(x=Petal.Length, fill= Species))+
  geom_histogram(position='identity',  # 막대 중첩표현
                 binwidth=0.3)  # 막대의 넓이  

막대그래프

ggplot(iris, aes(x= Species))+
  geom_bar(fill= 'salmon')+
  ggtitle("Frequency by Species")

ggplot(iris, aes(x= Species))+
  geom_bar(fill= 'salmon')+
  coord_flip()  # 가로 막대그래프 만들어줘 

species<- c("setosa", "versicolor", "virginica")
freq <- c(50, 50, 50)
a<-  data.frame(species, freq)  # 빈도표 형태의 데이터프레임
a

ggplot(a, aes(x= "species", y= freq, fill= species))+
  geom_bar(stat = "identity")+   # 막대를 만들어줘
  coord_polar("y")+   # 파이로 만들어줘 
  geom_text(aes(label= paste0(round(freq/1.50,2), "%")), # 나눗셈하고 소수점 둘째자리까지 표시
            position = position_stack(vjust= 0.5)) # 텍스트의 위치는 부채꼴의 가운데에 위치 

박스플랏

ggplot(iris, aes(x= Species, y= Sepal.Length))+
  geom_boxplot(color= "red")    # 테두리를 "" 색으로 

ggplot(iris, aes(x= Species, y= Sepal.Length))+
  geom_boxplot(fill= "red")+
  ggtitle("Sepal.Length by Species")  # 그래프 제목

View(mpg)   # ggplot에 내장된 데이터
ggplot(mpg, aes(drv, hwy))+
  geom_boxplot()+ 
  ggtitle("고속도로 연비 by drv")  # 주행거리?  

ggplot(mpg, aes(drv, hwy))+
  geom_boxplot(fill= c("purple", "green", "navy"), # 3가지 색
               width= 0.5)+    # 막대의 넓이 
  ggtitle("고속도로 연비 by drv") +  # 그래프 제목
  coord_flip()   # 가로 방향 그래프

선그래프 : 시계열자료에 자주 쓰임

View(economics)
ggplot(economics, aes(date, unemploy))+
  geom_line()   # 기본 선그래프

ggplot(economics, aes(date, unemploy))+
  geom_line(size=2,   # 선 굵기
            lty= 1,   #라인 타입
            color= "gold")+     # 선의 색깔
  ggtitle("unemplyment")+       # 그래프 제목
  geom_hline(yintercept=mean(economics$unemploy), 
             lty= 2)            # 평균값 가로선을 넣어라

ggplot(economics, aes(date, pop))+
  geom_line(size=2,   # 선 굵기
            lty= 1,   # 라인 타입
            color= "gold")+  # 선의 색깔
  ggtitle("population")      # 그래프 제목
# 일반함수처럼 선을 하나씩 추가하는 형식이 아님. 
# 데이터프레임 안에서 가공하고 그룹핑하는 형태 

막대그래프

View(Titanic)  # 타이타닉 table 형태. DF로 만들어야함 
class.type <- c(1,2,3,"crew")
passenger <- c(325, 285, 706, 885)
total <-  data.frame(class.type, passenger)
total   # 데이터프레임 형태로 만들어줘야  

ggplot(total, aes(x= class.type, y=passenger))+
  geom_bar(stat= "identity", 
           fill= 'darkgreen')+
  ggtitle("Passengers by Class")

ggplot(total, aes(x= class.type, y=passenger))+
  geom_bar(stat= "identity", 
           fill= 'darkgreen')+ 
  coord_flip()  # 가로 막대그래프 만들어줘 

ggplot(total, 
       aes(x= "class.type", y= passenger, 
           fill= class.type))+   # 데이터에 따라 색칠
  geom_bar(width= 1,
           stat = "identity")+   # 막대그래프 --> 원그래프 
  coord_polar("y")+   # 파이로 만들어줘 
  ggtitle("Passengers by Class")+   # 그래프 제목
  geom_text(aes(label= paste0(round(passenger/22.01,2), "%")),
            position = position_stack(vjust= 0.5))
# fill= class.type 없으면 색깔이 안나옴
# 나눗셈하고 소수점 둘째자리까지 표시한 숫자
# 부채꼴의 중간 지점에 텍스트를 넣어줘

sum(total$passenger)

class.type <- c(1,2,3,"crew", 1,2,3,"crew")
num <- c(122,167,528,673, 203, 118, 178, 212)
survived <- c("d", "d", "d", "d", "s", "s", "s", "s")
survive.by.class  <-  data.frame(class.type, num, survived)
survive.by.class   # 데이터프레임 형태로 만들어줘야 함 

ggplot(survive.by.class, 
       aes(x= class.type, y=num, 
           fill= survived))+      # 생존 여부에 따라 색칠 
  geom_bar(stat= "identity")+     # 기본 막대로 데이터 표현
  ggtitle("Passengers by Class")  # 그래프 제목

ggplot(survive.by.class, 
       aes(x= class.type, y= num, 
           fill= survived))+
  geom_bar(stat= "identity", 
           position= position_dodge())+ # 막대를 각각 분리해라
  ggtitle("Passengers by Class")

state <- data.frame(state.x77)  # 데이터 프레임 형태
View(state)
barplot(state$Income)
barplot(state$Murder)
head(state$Income)   # 6행만 보여줘
barplot(head(state$Income), col= "brown")

state <- data.frame(state, Name= rownames(state))  # Name 변수 추가
state$Name <- rownames(state)   # 위와 똑같은 결과(열 추가)
View(state)   # 50개 주 이름으로 된 열

ggplot(state, 
       aes(x= Name, y= Income))+
  geom_bar(stat= "identity",
           fill= "darkgreen")+
  ggtitle("미국 주별 소득")

state5 <- state[c(2,4,6,8,10),c(2,9)] 

ggplot(state5,   # 데이터만 바꿔주기  
       aes(x= Name, y= Income))+
  geom_bar(stat= "identity",
           fill= "yellow")+
  geom_text(aes(label= Income))+   # 값을 막대에 표시해줘 
  ggtitle("미국 주별 소득")
ggplot(big3,     # 데이터: 인구많은 주 3개  
       aes(x= Name, y= Income))+ 
  geom_bar(stat= "identity",
           fill= "plum",
           width = 0.5)

# names.arg / axis 용법

barplot(big3$Income, col= "brown")
axis(1, at=1:3,    # x축에 눈금 1,2,3을 그어라
     lab=c("Cal", "NY", "Tex"))   # 눈금에 캘리 뉴욕 텍사스

barplot(big3$Income, col= "brown",
        names.arg= c("Cal", "NY", "Tex")) # 막대그래프에 캘리 뉴욕 텍사스 이름을 붙여줘라 

# ggplot에서 fill(면) / color(점, 선, 테두리) 차이 
ggplot(iris, aes(x=Petal.Length, fill= Species))+
  geom_histogram(position='identity',  # 막대 중첩표현
                 binwidth=0.3,  # 히스토그램 구간, 막대넓이
                 alpha= 0.6)  # 막대 색의 투명도

ggplot(iris, aes(x=Petal.Length, color= Species))+ # 테두리
  geom_histogram(position='identity',  # 막대 중첩표현
                 binwidth=0.3,
                 alpha= 0.7)

# 점/선그래프, 여러 색깔로 나타내기
ggplot(Orange, aes(age, circumference))+
  geom_point(size=2)

ggplot(Orange, aes(age, circumference, 
                   color = Tree))+       # 점의 색
  geom_point(size=2)

ggplot(Orange, aes(age, circumference, 
                   color = Tree))+       # 선의 색     
  geom_line(size=2)+          # 선그래프
  theme(panel.background = element_blank())  # 배경을 없애라

트리맵

install.packages("treemap")
library(treemap)
search()   # 어떤 패키지가 깔렸는지 확인
treemap(state,     # state 데이터를 써 
        index= c("Name"),   # 주 이름을 넣어줘
        vSize= "Area",   # 크기가 클수록 area 크다
        vColor= "Murder",  # 색깔 진할수록 murder 많음
        type= "value",    # 컬러링 방법
        title= "The US Murder")    # 제목 

treemap(state,             # state 데이터를 써 
        index= c("Name"),  # 주 이름을 넣어줘
        vSize= "Income",   # 크기가 클수록 소득이 크다
        vColor= "Population",    # 색깔 진할수록 인구 많음
        type= "value",     # 컬러링 방법
        title= "미국 인구와 소득")    # 제목

data cleaning

결측값

NA, 값이 없는 빈 부분

x <- c(1,2,3,4, NA, 6,7, NA,9)
sum(x)     # 결측값이 있어서 계산이 안됨
is.na(x)   # 데이터에 na가 있는지 확인
sum(is.na(x))    # data에 na가 몇개인가?
sum(x, na.rm = T)   # na를 제외하고 계산해줘 

y <- c(1,2,3,4, NA, 6,NA)
y1 <- as.vector(na.omit(y))  # NA를 제거하고 새 집합 y1을 만들어줘
y1
y[is.na(y)] <- 0    # na에 0을 넣어 바꿔줘
y

women
women[1,2]  <- NA
women[10,1] <- NA
women[13,2] <- NA    # 일부러 결측값을 만들어줌
women
colSums(is.na(women))  # women데이터 각 열에 결측값?
rowSums(is.na(women))  # women데이터 각 행에 결측값?
sum(is.na(women))      # women데이터 총 결측값 몇개?

outlier 값

iris                        
hist(iris$Sepal.Width)
median(iris$Sepal.Width)   # 가운데 굵은 선
mean(iris$Sepal.Width)
boxplot(iris$Sepal.Width)  # 꽃받침의 넓이를 박스플랏으로
boxplot.stats(iris$Sepal.Width)$out  # 아웃라이어어 값이 뭐야?
out.value <- boxplot.stats(iris$Sepal.Width)$out   
# 특이값 추출
iris$Sepal.Width[iris$Sepal.Width %in% out.value] <- NA    
# sepal width에 있는 특이값을 NA로 바꿔라
iris.new <- iris[complete.cases(iris),]   
# NA가 포함된 행 제거
boxplot(iris.new$Sepal.Width)   # na 제거된 박스플랏 
hist(iris.new$Sepal.Width)

데이터프레임, 특정 변수 기준으로 정렬하기

a <- c(3,1,10,8,9)
order(a)   # 크기 순서대로 순위를 매겨라
order(a, decreasing = T)
sort(a)                 # 오름차순 정렬
sort(a, decreasing = T) # 내림차순 정렬

View(state)
sort(state$Income)    # 낮은 주부터 높은 주까지
order(state$Income)   # 낮은 주부터 높은주까지(행번호)
which.max(state$Income)   # 소득 가장 높은주?
which.min(state$Income)   # 소득 가장 낮은주?
rownames(state[24,])  # n행의 이름
rownames(state[2,])  # n행의 이름
rownames(state[c(24,4,18,31,48),])  # c( )행의 이름
rownames(state[c(2,7,20,30,28),])  # c( )행의 이름

sort(state$Population)  # 오름차순
sort(state$Population, decreasing = T)    # 인구 많은 주부터 낮은 주까지
order(state$Population)  # 오름차순
order(state$Population, decreasing = T)   # 인구 많은 주부터 낮은 주까지(행번호)
rownames(state[c(5,32,43,38,13),])  # 인구 많은 주

bigstate <- state[order(state$Population, decreasing = T), ]
bigstate
head(bigstate)

big3 <- state[c("California", "New York", "Texas"), c("Income", "Name")]  # 원하는 주만 뽑아서 분석 
big3

데이터 자르기/ 붙이기

x1 <- split(iris, iris$Species)  # 품종별(Species)데이터 분리
x1                               
x1$virginica               # virginica 품종 데이터 확인
x1$setosa
x1$versicolor

subset(iris, Species == "versicolor")  # versicolor만 출력
subset(iris, Petal.Width > 2.0)     # 조건에 맞는 값만 출력
subset(iris, Petal.Width > 2.0 & Petal.Length > 5.5)

subset(state, Income< 4000)  # 소득 4000 이하
subset(state, Income> 5000)  # 소득 5000 이상

a <- data.frame(id=c(1,2,3), math1=c(80,70,95))
b <- data.frame(id=c(1,2,3), math2=c(55,40,20))
a
b
merge(a,b, by = "id")  # id 를 기준으로 a b 를 병합해

좋은 웹페이지 즐겨찾기