#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)

'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

+ Recent posts