'r plot'에 해당되는 글 2건

Code/R 프로그래밍

R공부_그래프, 함수

반응형
#0717

#hist(데이터셋)
hist(iris$Sepal.Width, freq = FALSE)
lines(density(iris$Sepal.Width))

plot(density(iris$Sepal.Width))
#중첩된 데이터를 추가하고싶을 때는 
rug(jitter(iris$Sepal.Width))

# 파이차트(pie) : 데이터의 비율을 알아볼 때 적합한 그래프. 
x <- c(110, 200, 330, 400, 550, 600, 130)
pie(x)

cut(iris$Sepal.Width, breaks=10)

rep(c("A","B","C"),1:3)
table(cut(iris$Sepal.Width, breaks=10)) # 테이블함수를 통해서 cut한 벡터를 파이 그래프로 그릴 수 있음
pie(table(cut(iris$Sepal.Width, breaks=10)))
    
pie(x,init.angle=90,col=rainbow(length(x)),labels = c("월","화","수","목","금","토","일"))
legend("topright",c("월","화","수","목","금","토","일"),cex=0.7,fill=rainbow(length(x))) # fill 색 넣고 범례 만들기.

week <- c("월","화","수","목","금","토","일")
ratio <- round(x/sum(x)*100,1)  # -> round : 반올림 , 1 : 소수 첫쨋자리에서 반올림 하세요 /비율계산
label <- paste(week,"\n",ratio,'%') # -> 붙여주기 : 요일 줄 띄우고 비율 넣고 % 첨부

pie(x,init.angle=90,col=rainbow(length(x)), labels=label)
legend("topright",c("월","화","수","목","금","토","일"),cex=0.7,fill=rainbow(length(x))) # fill 색 넣고 범례 만들기.


# 3d pie 차트
install.packages("plotrix")
library(plotrix)

pie3D(x,col=rainbow(length(x)), labels=label) 
legend("topright",c("월","화","수","목","금","토","일"),cex=0.7,fill=rainbow(length(x))) # fill 색 넣고 범례 만들기.

pie3D(x,col=rainbow(length(x)), labels=label, explode = 0.1) 
legend("topright",c("월","화","수","목","금","토","일"),cex=0.7,fill=rainbow(length(x))) # fill 색 넣고 범례 만들기.


# 모자이크 플롯(mosaicplot)
# 범주형(R에서는 팩터로 표현) 다변량 데이터(하나 이상의 변수가 있는 데이터)를 표현하는 데 
# 적합한 그래프다. 모자이크 플롯에는 사각형들이 그래프에 나열되며, 
# 각 사각형의 넓이가 각 범주에 속한 데이터의 수에 해당한다.

# 타이타닉호 생존자의 정보를 담고 있는 titanic 데이터를 사용함
# 
# 변수명   변수명 설명
# survival   Survival (0 = No; 1 = Yes)
# pclass   Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd) 객실 등급
# name   Name
# sex   Sex
# age   Age
# sibsp   Number of Siblings/Spouses Aboard
# parch   Number of Parents/Children Aboard
# ticket   Ticket Number
# fare   Passenger Fare
# cabin   Cabin
# embarked   Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton)


titanic <- read.csv("C:/Users/User/Desktop/Data/titanic/train2.csv", header = T, as.is=T)
str(titanic)
str(Titanic)

class(titanic)


mosaicplot(Titanic, color=TRUE)
# 변수가 너무 많음 복잡함 객실타입과 성별 만으로 다시 만들어 보자
mosaicplot(~Class + Survived, data = Titanic, color=TRUE)

# 산점도 행렬(pairs) : 다변량 데이터에서 변수들간의 상관도를 그린 그래프
pairs(~ Sepal.Width + Sepal.Length + Petal.Width + Petal.Length, data=iris,col=c("red","green","blue")[iris$Species], pch=c(1, 2, 3)[iris$Species])


levels(iris$Species)
#a 범주를 numeric으로d 바꾸어 추출하라
as.numeric(iris$Species)


# 투시도 -> 3차원 데이터를 마치 투시한 것 처럼 그린 그래프
# persp()
# outer(x,y,함수) : 외적으로 그린다
outer(1:5, 1:3, function(x, y) { x + y })

xx <- seq(-3,3, length=50)
yy <- seq(-4,4, length=60)
f <- function(x,y){x^2+y^2+x*y}
y = outer(xx,yy,f)
persp(y)


install.packages("mvtnorm")
library(mvtnorm)
x <- seq(-3, 3, 0.1)
y <- x
f <-function(x,y){dmvnorm(cbind(x,y))}

persp(x,y,outer(x,y,f), theta = 30, phi = 30)
# theta : 기울어진 각도 

# 등고선 그래프 : 투시도와 유사하지만 튜시한 3차원 그림 대신 값이 같은 곳들을 선으로
# 연결한 등고선을 이용해데이터 표시
contour(x,y,outer(x,y,f))


#기초 통계분석

###머신러닝의 기본단계

# 1단계: 데이터 수집
# 2단계: 입력 데이터 준비
# 3단계: 데이터 분석
# 4단계: 알고리즘 선택 및 훈련
# 5단계: 알고리즘 테스트
# 6단계: 사용하기 (운영 및 배포)

# 합계 : sum(데이터)
# 사분위수 : quantile(데이터)
# 기초통계량 : summary()
# 다섯개의 통계값을 추출하주는 함수: fivenum(데이터)

library(ggplot2)
cafe<-read.csv("C:/Users/User/Desktop/R/Data/cafe/data.csv")
sort(cafe$Coffees,decreasing = T)[1] # 정렬하기 

mode(cafe$Coffees)

table(cut(cafe$Coffees,breaks = 5))


#난수생성 분포함수
# R에서는 난수를 발생시키는 다양한 함수를 제공한다.
# 일반적으로 이 함수명들은 R 뒤에 분포명을 붙인 이름을 갖는다.
#rbinom() 이항분포
#rf() F분포
#rgeom()  기하분포
#rnorm()  정규분포
#rpois()  포아송분포
#rt() t분포
#runif() 균일분포
#rhyper() 초기하분포

a<-rnorm(100,0,10) #평균이 0이고 표준편차가 10인 정규분포 100개 난수 발생
b<-pnorm(1) #정규분포의 누적분포
c<-qnorm(0.5) #분위수를 구할때
d<-dnorm(1000,0,10) #정규분포의 확률 밀도 

plot(d)





fibo<-function(n){
    if(n==1|n==2){
        return(1)
    }
    return(fibo(n-1)+fibo(n-2))
}
fibo(1)
fibo(5)


f<- function(x,y){
    print(x)
    print(y)
}
f(1,2)

f(y=1,x=2)


f<- function(x,y){
    print(x)
    g<-function(y){
        print(y)
    }
    g(y)
}

f(1,2)


#scope(범위, 영역)

n<-1
f<-function(){
    print(n)
}
f()

n<-2
f()

n<-100

f<-function(){
    print(n)
}
f()


rm(list=ls()) #  환경 지우기
f<-function(){
    x<-1
    print(x)
}

f()
x

library(ggplot2)
library(dplyr)
# cty => city, hwy => highway
# rename은 dplyr 패키지가 필요하다.
str(mpg)

mpg2<-mpg
mpg2 <- rename(mpg2, city=cty)
mpg2 <- rename(mpg2, highway=hwy)

#mpg2 의 통합 연비를 구하여라
mpg2
mpg2$mpg_total <- mpg2$city + mpg2$highway
mpg2$mpg_total

# 각 자동차의 모델의 연비를 이용하여 전체 자동차의 기준 연비를 구한 후
# 고연비합격 판정을 위한 파생변수 mpg_check를 생성하여 그 값으로 'pass', 'fail'


summary(mpg2$mpg_total/2)

# 연비에 따른 등급을 부여한다.
# 파생변수는 grad
# 등급은 연비가 30이상이면 'a',20~29이면 'b', 29미만이면 'c'


##깜짝 시험

#ggplot2 패키지에 포함되어 있는 데이터셋 중 midwest를 이용하여 다음 주어진 작업을 수행하시오
#midwest 데이터셋은 미국 437개 지역의 인구통계 정보를 가지고 있는 자료

#1. midwest 데이터를 데이터 프레임 형태로 불러온 다음 데이터의 특징을 파악하시오.
#2. poptotal(전체인구)변수를 total, popasian(아시아 인구) 변수를 asian으로 수정하시오.
#3. total,asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율'을 담을 파생변수를 생성하고,
#    히스토그램을 만들어 도시들이 어떻게 분포 되어 있는지 파악하시오.
#4. 아시아 인구 백분율 전체 평균을 구하고, 평균을 초과하면 "large" , 그외 "small"을  부여하는 
#    파생변수를 만들어 담으시오
#5. "large"와 "small"에 해당하는 지역이 얼마나 되는지 빈도표와 빈도 막대 그래프를 작성하여 분석하시오


str(midwest)
#1. midwest 데이터를 데이터 프레임 형태로 불러온 다음 데이터의 특징을 파악하시오.
west <- as.data.frame(ggplot2::midwest)
west <- west

west
# pid, county, state, area, poptotal, ,,,,

#2. poptotal(전체인구)변수를 total, popasian(아시아 인구) 변수를 asian으로 수정하시오.
west <- rename(west, total=poptotal)
west <- rename(west, asian=popasian)
west

#3. total,asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율'을 담을 파생변수를 생성하고,
#    히스토그램을 만들어 도시들이 어떻게 분포 되어 있는지 파악하시오.

west$per_asian<-(west$asian/west$total)*100
west
hist(west$per_asian)


#4. 아시아 인구 백분율 전체 평균을 구하고, 평균을 초과하면 "large" , 그외 "small"을  부여하는 
#    파생변수를 만들어 담으시오

avg <- mean(west$per_asian)

west$total_avg <- ifelse(west$per_asian >= avg, "large","small")  # if eles 문으로 평균 값 확인 

#5. "large"와 "small"에 해당하는 지역이 얼마나 되는지 빈도표와 빈도 막대 그래프를 작성하여 분석하시오
a<-table(west$total_avg)
a
barplot(a)

# 석준 코드

data(midwest)
str(midwest)
midwest <- midwest %>% mutate(category = factor(category),
                              state = factor(state),
                              county = factor(county))
summary(midwest)

midwest <- rename(midwest, total = poptotal,
                  asian = popasian)
midwest <- midwest %>% mutate(rate = asian/total)
ggplot(data = midwest, aes(x = rate)) +
    geom_histogram(bins = 13)
# 대부분의 도시들의 아시아인 비율이 2%를 넘지 못한다.

midwest <- midwest %>% 
    mutate(check = factor(ifelse(rate > mean(rate),
                                 "large", "small")))
table(midwest$check)
barplot(table(midwest$check))

# 
# 6.popadults는 해당 지역의 성인 인구, poptotal은 전체인구를 뜻한다.
# midwest 데이터에 "전체 인구 대비 미성년 인구 백분율" 변수를 추가하여 파생변수를 생성
# 7.미성년 인구 백분율이 가장 높은 상위 5개 country(지역)의 미성년 인구 백분율을
# 추출하시오
# 8.popasian은 해당 지역의 아시아인 인구를 나타냈다.
# "전체 인구 대비 아시아인 인구 백분율" 변수를 추가하고, 하위 10개 지역의
# state(),country(지역), 아시아인 인구 백분율을 추출
#



#6.popadults는 해당 지역의 성인 인구, poptotal은 전체인구를 뜻한다.
# midwest 데이터에 "전체 인구 대비 미성년 인구 백분율" 변수를 추가하여 파생변수를 생성
west$per_notadult <- (west$total - west$popadults)/west$total*100
west

# 7.미성년 인구 백분율이 가장 높은 상위 5개 country(지역)의 미성년 인구 백분율을
# 추출하시오
sort(west$per_notadult,decreasing=TRUE)[1:5]


#8.popasian은 해당 지역의 아시아인 인구를 나타냈다.
# "전체 인구 대비 아시아인 인구 백분율" 변수를 추가하고, 하위 10개 지역의
# state(),country(지역), 아시아인 인구 백분율을 추출
west$per_asian<- (west$asian / west$total) *100
aa <- subset(west[order(west$per_asian), ],select=c(state,county, per_asian))
tail(aa,n=10)

반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R공부_참고 사이트  (1) 2019.07.18
R 공부_db연동, 그래프그리기  (0) 2019.07.18
R 공부_데이터 처리  (0) 2019.07.18
R 공부_txt 파일 불러오기  (0) 2019.07.18
R공부_Day1_5. 제어문과 함수  (0) 2019.07.18
Code/R 프로그래밍

R 공부_db연동, 그래프그리기

반응형
#-----------------------------------------------------------------------------------
# db연동 oracle과 연동

install.packages("rJava")
install.packages("DBI")
install.packages("RJDBC")

library(rJava)
library(DBI)
library(RJDBC)
library(dplyr)

drv <- JDBC("oracle.jdbc.driver.OracleDriver","파일 경로/ojdbc6.jar")
# DB connect
conn <- dbConnect(drv, "jdbc:oracle:thin:@//localhost:1521/(xe/orcl 맞는 것으로)", "id", "password")
#쿼리 입력
rst <- dbGetQuery(conn, "SELECT * FROM SCORE")
#출력
rst



# 77page
score <- c(80,60,70,50,90)
score

mean(score)
avg <- mean(score)
avg

# 88page
fruit <- data.frame(제품 = c("사과","딸기","수박"),
                      가격 = c(1800,1500,3000),
                      판매량 = c(24,38,13))
fruit
avgprice <- mean(fruit$가격)
avgcell <- mean(fruit$판매량)
avgprice
avgcell


#R과 mysql 연동
install.packages("rJava")
install.packages("DBI")
install.packages("RMySQL")
library(rJava)
library(DBI)
library(RMySQL)

#db connection
conn <- dbConnect(MySQL(),user="root",password="mysql비밀번호",dbname="db이름")

#db list 출력
print(dbListTables(conn))

score <- dbGetQuery(conn, "select count(*) from score")
score

#테이블 필드 목록
dbListFields(conn, "score")

# 테이블에 레코드를 삽입하는 작업
dbSendQuery(conn,"insert into score value (6,85,95,100)")

score <- dbGetQuery(conn, "select * from score")
score

# DDL(정의어) : CREATE , ALTER, DROP
# DML(조작어) : SELECT, DELETE, UPDATE, INSERT
#   execQuery() -> 테이블 바꾸지 않고 데이터 가져오는 것
#   execUpdate() -> 테이블의 내용이 바뀔 수 있는 것
# DCL(제어어) : GRANT(권한부여), REVOKE(권한제거), COMMIT(성공적인 종료), ROLLBACK(비정상정 종료)

dbGetQuery(conn, "update score set math = 90 where student_no = 6")

#dbDisconnect(conn) -> db연결 종료

# RMySql 패키지
# sqldf
install.packages("sqldf")
install.packages("chron") # 라이브러리 할 필요 없음

library("sqldf")

# sql문을 사용할 수 있도록 해주는 것 
detach("package:RMySQL", unload=TRUE)  
# RMySQL 이 메모리에서 제거되지 않으면 실행이 안될수도 있기 때문에 꺼줄때 사용하는 구문.
sqldf("select * from iris")

# 문제1
# setosa에 속하는 데이터에서 sepal.length의 평균 계산
sqldf('select avg("Sepal.Length") from iris where "Species"="setosa"')

# 문제2
# 각 품종별 sepal.length의 평균 구하시오
# db에는 . 쓸수있는데 여기선 _ 로 사용
sqldf('select avg("sepal.length") from iris group by species')

#apply(행렬 or 데이터, 방향, 함수)
# 방향 - 1 행, 2 열
d <- matrix(1:9, ncol = 3)
d

apply(d, 1, sum)
apply(d,2,sum)

head(iris)
apply(iris[,1:4], 2, sum )
# 위와 같은 뜻
colSums(iris[,1:4])

# lapply(벡터 or 리스트, 함수) : l은 list 약자
# 이때 x는 벡터, 데이터프레임, 리스트이고, 
# 함수는 x내 각 요소에 적용할 함수이다. 
# lapply()함수의 결과는 리스트로 반환된다.
# lapply()는 인자로 벡터를 받을 수 있다.
# 1~3까지의 숫자에 2를 곱한 값들을 리스트로 만든다.
result <- lapply(1:3, function(x){x*2})
result
class(result)  # 리스트 형태
#리스트 형태를 벡터로 변환하는 작업
class(unlist(result))  # numeric

x <- list(a=1:3, b=4:6)
x
lapply(x, mean) # -> list
lapply(x,sum)

# 평균 구하는 함수
colMeans(iris[,1:4])  #-> numeric

# sapply() 는 lapply()와 비슷하지만 행렬, 벡터등으로 결과를 반환함
lapply(iris[, 1:4], mean)   
sapply(iris[, 1:4], mean)
is.vector(sapply(iris[, 1:4], mean)) # vector

y <- sapply(iris[, 1:4], mean)
as.data.frame(y) # 데이터 프레임으로 변환
as.data.frame(t(y))

split(iris, iris$Species)
lapply(split(iris$Sepal.Length, iris$Species), mean) # 품종별로 sepal.length의 평균 구함 # list
sapply(split(iris$Sepal.Length, iris$Species), mean) #vector

#그래프
#R에서 사용되는 그래픽스 기능은 크게 graphics,lattice,ggplot 패키지가 있다

#1.graphics 패키지
#R에서 가장 기본이 되는 시각화 기능을 지원한다
#전체 함수의 목록은 library(help="graphics")

#산점도(산포도)
methods("plot")

install.packages("mlbench")
library(mlbench)

data(Ozone)
?Ozone


#축이름(xlab,ylab)
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone")

#점의 종류(pch)
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone",pch=20)
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone",pch="+")

#점의 크기(cex)
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone",pch=20,cex=1) 

#색상(col)
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone",pch=20,cex=1,col="red") 

# 좌표측 값의 범위(xlim, ylim)
# c(최솟값, 최댓값)
max(Ozone$V8)
max(Ozone$V8, na.rm=TRUE)  # 결측값 제거하고 최댓값 구하라
plot(Ozone$V8, Ozone$V9, xlab="Sanburg Temperature", ylab="어느도시 온도", main="Ozone",
     xlim=c(0,100), ylim=c(0,90))


# type - 그래프의 종류, p(점), l(선), b(점과 선)
data("cars")
str(cars)
head(cars)
# cars를 그리기
plot(cars, type="o", cex = 0.5)

# 같은 주행속도에 대해 두개이상의 제동거리를 가지고 있다
#  tapply(벡터, 요인, 함수) : 요인(factor) 변수를 기준으로 해서 그룹별로 나누어서 통계 분석을 하고자 할 때 유용하게 쓸 수 있는 함수입니다
# speed별로 묶어서 dist의 평균 계산

plot(tapply(cars$dist, cars$speed, mean), type = "o", xlab="speed", ylab="dist")

# 그래프 배열(mfrow)  : 그래프 여러개 그리기

# par( )를 호출하면 이전에 저장된 par 설정이 반환된다. 따라서 par(mfrow=c(nr, nc)) 호출 시
# 반환 값을 opar 변수에 저장했다가 코드의 마지막에서 par(opar)를 호출하면, mfrow 지정 이전
#의 par 설정으로 환경을 되돌릴 수 있다.

opar <- par(mfrow=c(1,2))  # 그래프를 nr개의 행, nc개의 컬럼으로 배열한다.
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone1",pch=20,cex=1,col="red")
plot(Ozone$V8,Ozone$V9,xlab="Sanburg Temperature",ylab="ElMonte Temperature",
     main="Ozone2",pch=20,cex=1)
par(opar)

# 지터 jitter : 데이터 값에 약간의 노이즈를 추가하는 방법을 말한다.
# 노이즈를 추가하면 데이터 값이 조금씩 움직여서 같은 값을 가지는 데이터가 
# 그래프에 여러 번 겹쳐서 표시되는 현상을 막아준다.

Ozone[,]

plot(Ozone$V6, Ozone$V7, xlab="Windspeed", ylab="Humidity", main="Ozone", pch=20, cex=.5)
plot(jitter(Ozone$V6), jitter(Ozone$V7), xlab="Windspeed", ylab="Humidity", main="Ozone",pch=20, cex=0.5)

# points() : 이미 생성된 plot에 점을 추가하여 그리는 옵션
# 처음꺼 위에 다음꺼 추가하고 싶을 때 라벨이나 상단 제목 제외
plot(iris$Sepal.Width, iris$Sepal.Length, cex=0.5,
     pch=10, xlab="width", ylab="length", main="iris1")
points(iris$Petal.Width, iris$Petal.Length, cex=0.5,
     pch="+", col="red")

# lines( )는 points( )와 마찬가지로 plot( )으로
#새로운 그래프가 시작된 뒤 그 위에 꺾은선을 추가하여 그리는 목적으로 사용한다

x <- seq(0, 2*pi, 0.1)
y <- sin(x)
plot(x, y, cex=.5, col="red")
lines(x, y)

example(lines)


# abline( )은 y = ax + b 형태의 직선이나 y=h 형태의 가로로 그은 직선 
# 또는 x=v 형태의 세로로 그은 직선을 그래프에 그린다. abline( )이 그리는 것은 
# 꺾이지 않고 그어진 일직선이다. 따라서 lines( )가 주어진 (x, y) 좌표들을 연결하는
# 꺾은선을 긋는 것과는 차이가 있다.

plot(cars, xlim=c(0, 25))
abline(a=-5, b=3.5, col="red")

# 선의 유형(linetype, lty)
# a & b : 함수식 y=a+bx 에서 a는 절편, b는 기울기를 의미합니다.
# h : 수평선 위치를 나타냅니다.
# v : 수직선 위치를 나타냅니다.

plot(cars, xlim=c(0, 25))
abline(a=-5, b=3.5, col="red")
abline(h=mean(cars$dist), lty=2) # y=h 형태의 수평선을 그릴 때 지정
abline(v=mean(cars$speed), lty=2) # x=v 형태의 수직선을 그릴 때 지정 # 2는 dashed로 점선 의미

# 곡선 (curve) curve(표현식, 구간 시작점, 구간 끝점)
curve(sin, 0, 2*pi)

#문자열(text) : 그래프에 문자를 그리는데 사용하는 함수
#text(x좌표,y좌표,내용)
plot(cars,cex=0.5)
text(cars$speed,cars$dist, cex=0.5,pos=4)

# 그래프에 그려진 데이터의 식별(identify)
# 이 십자 커서로 그래프에서 특정 점을 클릭하면 클릭된 점과 가장 가까운 데이터에 레이블을 표시한다
plot(cars,cex=0.5)
identify(cars$speed,cars$dist)

# 범례 (legend)
# legend(x,y,option)
# bottomright, bottomleft,bottom,left,right,center,top, topleft, topright

plot(iris$Sepal.Width, iris$Sepal.Length, pch=20, xlab="width", ylab="length")
points(iris$Petal.Width, iris$Petal.Length, pch=43, col="#FF0000")
legend("topright", legend=c("Sepal", "Petal"), pch=c(20, 43),col=c("black", "red"), bg="gray")

# 행렬에 저장된 데이터 그리기(matplot, matlines, matpoints)
# matplot, matlines, matpoints
# -2pi ~ 2pi
x <- seq(-2*pi, 2*pi, 0.01)
x

y <- matrix(c(cos(x), sin(x)), ncol=2)  # -> cos, sin의 값을 그래프로 나타내기 위해
matplot(x,y,col=c("red","blue"),cex=0.1)
abline(h=0, v=0)  # 가운데 축 보여주기 위해

# 상자 그림(boxplot)
# 데이터의 분포를 보여주는 그림으로 가운데 상자는 제1사분위수, 중앙값, 제3사분위수9를 보여준다
# 상자의 좌우 또는 상하로 뻗어나간 선(whisker라고 부름)
# 그래프에 보이는 점들은 이상치outlier에 해당
boxplot(iris$Sepal.Width)
boxstats<- boxplot(iris$Sepal.Width)
boxstats<- boxplot(iris$Sepal.Width, horizontal = TRUE)
text(boxstats$out, rep(1, NROW(boxstats$out)), labels=boxstats$out, pos=c(1, 1, 1, 1))

sv <- subset(iris, Species=="setosa" | Species=="versicolor")  # or 연산
sv$Species <- factor(sv$Species)
boxplot(Sepal.Width ~ Species, data=sv, notch=TRUE) # 그래프 오목하게 그려짐 / subset이 비록 두 개의 Species만 선택하는 역할
# 그래프 꺽인 구간 -> 중 앙값에 대한 일종의 신뢰구간
# setosa와 versicolor의 notch가 겹치지 않으므로 이 두 그룹의 중앙값은 서로 다르다고 결론을 내릴 수 있다.

# 히스토그램 : 값의 범위마다 빈도를 표시한 그래프
x <- hist(iris$Sepal.Width)
x <- hist(iris$Sepal.Width, freq=T)
ㅐ
반응형

'Code > R 프로그래밍' 카테고리의 다른 글

R공부_참고 사이트  (1) 2019.07.18
R공부_그래프, 함수  (0) 2019.07.18
R 공부_데이터 처리  (0) 2019.07.18
R 공부_txt 파일 불러오기  (0) 2019.07.18
R공부_Day1_5. 제어문과 함수  (0) 2019.07.18

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :