[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 : 2020년 02월 21일

 정보

  • 업무명     : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화

  • 작성자     : 이상호

  • 작성일     : 2020-02-21

  • 설   명      :

  • 수정이력 :

 

 내용

[특징]

  • 네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인 소스 코드 현행화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

  • 추가로 2020년 03월 30일04월 30일 현행화 버전을 보내드리오니 참고하시기 바랍니다.

 

 

[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) : 2020년 03월 30일

정보 업무명 : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (2) 작성자 : 이상호 작성일 : 2020-03-30 설 명 : 수정이력 : 내용 [특징] 네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인..

shlee1990.tistory.com

 

[지식iN] R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3) : 2020년 04월 30일

정보 업무명 : R 프로그래밍 관련 질문&답변 (Q&A) 및 소스 코드 현행화 (3) 작성자 : 이상호 작성일 : 2020-04-30 설 명 : 수정이력 : 내용 [특징] 네이버 지식iN에서 R 프로그래밍 관련 답변을 위해서 체계적인..

shlee1990.tistory.com

 

 

[기능]

  • R 프로그램 관련 "질문&답변 (Q&A)" 소개

  • "#"를 기준으로 질문에 대한 답변 및 "소스 코드" 첨부

     

[활용 자료]

  • 질문자가 제공하신 입력 자료 (.sav, .xlsx, .txt, .csv)

INPUT.zip
9.52MB

 

[자료 처리 방안 및 활용 분석 기법]

  • 없음

 

[사용법]

  • 소스 코드 참조

 

[사용 OS]

  • Window 10

 

[사용 언어]

  • R v3.6.2

  • R Studio v1.2.5033

 

 소스 코드

[네이버 지식iN]

  • "질문&답변 (Q&A)" 소개

 

 

[전체]

  • "#"을 기준으로 질문에 대한 답변 및 "소스 코드" 첨부

  • 2020년 02월 21일 업로드

#=============================================================================================== 
# Routine : Main R program
# 
# Purpose : NAVER 지식iN
# 
# Author : MS. Sang-Ho Lee
# 
# Revisions: V1.0 February 21, 2020 First release (MS. Sang-Ho Lee)
#===============================================================================================

# Set Option 
options(digits = 10)
memory.limit(size = 9999999999999)


# 
xAxis = seq(0, 10)
yAxis = seq(0, 10)
yAxis2 = seq(0, 10) + 2
yAxis3 = seq(0, 10) + 4
yAxis4 = seq(0, 10) + 6
yAxis5 = seq(0, 10) + 8

plot(xAxis, yAxis, xlim = c(0, 10), ylim=c(0, 20))
points(xAxis, yAxis2, col = "red")
points(xAxis, yAxis3, col = "blue")
points(xAxis, yAxis4, col = "green")
points(xAxis, yAxis5, col = "orange")

# 
A = matrix(1:20, 5, 4)

# 
# 라이브러리 읽기
library(tidyverse)

mpg %>%
    dplyr::filter(year == 2008) %>%
    dplyr::summarise(number = n())

mpg %>%
    dplyr::filter(class == "compact") %>%
    dplyr::group_by(manufacturer) %>%
    dplyr::summarise(number = n()) %>%
    dplyr::arrange(desc(number))

# 
# 라이브러리 읽기
library(tidyverse)

st = data.frame(state.x77)

colnames(st) = c("popul", "income", "illit", "lifeExp", "murder", "hsGrad", "frost", "area")

# 문제1에 대한 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::mutate(maxLifeExp = max(lifeExp, na.rm = T)) %>%
    dplyr::filter(lifeExp == maxLifeExp)

mt = data.frame(mtcars)

#  문제 2에 대한 답변
mt %>%
    tibble::rownames_to_column() %>%
    dplyr::mutate(maxMpg = max(mpg, na.rm = T)) %>%
    dplyr::filter(mpg == maxMpg)

# 문제 3에 대한 답변
mt %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(gear == 4) %>%
    dplyr::mutate(minMpg = min(mpg, na.rm = T)) %>%
    dplyr::filter(mpg == minMpg)


air = data.frame(airquality)

# 문제 4에 대한 답변
air %>%
    dplyr::mutate(maxTemp = max(Temp, na.rm = T)) %>%
    dplyr::filter(Temp == maxTemp) %>%
    dplyr::select(Month, Day)

# 문제 5에 대한 답변
air %>%
    dplyr::group_by(Month) %>%
    dplyr::summarise(maxWind = max(Wind, na.rm = T)) %>%
    dplyr::filter(Month == 6)

# 문제 6에 대한 답변
air %>%
    dplyr::group_by(Month) %>%
    dplyr::summarise(meanOzone = mean(Ozone, na.rm = T)) %>%
    dplyr::filter(Month == 5)


# 문제 7에 대한 답변
air %>%
    dplyr::filter(Ozone > 100) %>%
    dplyr::summarise(number = n())



sw = data.frame(swiss)

# 문제 8에 대한 답변
sw %>%
    tibble::rownames_to_column() %>%
    dplyr::mutate(maxAgri = max(Agriculture, na.rm = T)) %>%
    dplyr::filter(Agriculture == maxAgri)

# 문제 9에 대한 답변
sw %>%
    tibble::rownames_to_column() %>%
    dplyr::arrange(desc(Agriculture ))

# 문제 10에 대한 답변
sw %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(Catholic >= 80) %>%
    dplyr::summarise(meanAgri = mean(Agriculture, na.rm = T))

# 문제 11에 대한 답변
sw %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(Examination < 20 && Agriculture < 50) %>%
    dplyr::select(rowname, Agriculture, Examination)

nNrorm =  rnorm(n = 100, mean = 0, sd = 1)
hist(nNrorm)


nNrorm =  rnorm(n = 100, mean = 0, sd = 10)
hist(nNrorm)

# 
class(a)
class(st)

st[[1,3]]

x = c(9, 0, 6, 7, 2)
x = c(10, 1, 10, 1, 10)
x = c(10, 10, 10, 10, 10)


v1 = 10:100

v1.a = v1[25:30]

length(v1.a)
mean(v1.a, na.rm = T)



x = c(1:10)

boxplot(x)
abline(h = boxplot.stats(x, 0.75)$conf[2], col = "red")


# 1번 답변
x = c(9, 0, 6, 7, 2)

which((x %% 2) == 1)

# 2번 답변
xRef = c(10, 10, 10, 10)

x = c(1, 10, 1, 10)
setequal(x, xRef)

x = c(10, 10, 10, 10)
setequal(x, xRef)


#

a = list("이상혁", "클리드", "칸")
b = list("에포트", "테디", "이상혁")

result = append(a, b)


# 패키지 설치
install.packages("measurements")

# 패키지 읽기
library(measurements)

# 1 파운드를 1 kg으로 환산
conv_unit(1, "lbs", "kg")

# 
library(xtable)
library(magrittr)
library(moonBook)
library(snakecase)

options(xtable.floating="FALSE")
options(xtable.time="FALSE")

options(ztable.type="html")
options(ztable.type="html")

a = mytable(head(iris))

print(xtable(a), type="html")


str_cars = capture.output(str(iris))
xtable(data.frame(str_cars))


a = diag(3)

a[1,2] = 2

data <- c(25,-2,4,-2,4,1,4,1,9)
Sigma <- matrix( data = data, nrow = 3, ncol = 3, byrow = FALSE)

t(Sigma) %*% Sigma
cov(data)

b = diag(3)


Sigma %*% b
a[]

diag (X) <- 1

# 행렬 X의 대각 성분을 모두 1로한다.

diag(X) = 1
diag (X) <- c (1, 2)


# 

library(dplyr)
library(ggplot2)


airquality %>%
    ggplot(aes(x = Month, y = Temp)) +
    geom_boxplot()

# 

# 연도
year = seq(2010, 2015)

# 자살 건수
value = c(30, 40, 50, 60, 65, 70)

# 그래프 결과
plot(year, value)

# 

# 패키지 설치 
install.packages("gtools")

# 패키지 읽기
library(gtools)

nEven = even(1:100)

which(nEven)


install.packages("dplyr")

library(ggiraphExtra)
library(maps)
library(mapproj)
library(ggplot2)
library(tibble)


crime = rownames_to_column(USArrests, var = "state")
crime$state = tolower(crime$state)
states_map = map_data("state")

crime %>% 
    ggChoropleth(aes(fill = Murder, map_id = state), map = states_map)

# 


# 변수 초기화 및 설정
d1 = c(8, 8, 9, 10, 10)
d2 = c(10, 5, 3, 12, 21)


# 함수 정의
sum1 = function(d1, d2) {
    
    result = d1 + d2
    
    return (result)
}

sum2 = function(d1) {
    
    result = sum(d1)
    
    return (result)
    
}


sum1(d1,d2)
sum2(d1)

# 
value = c(1:100)

hist(value)



data = c(2,3,16,23,14,12,4,1,2,0,0,0,6,28,31,14,4,8,2,5)

stem(data, scale = 2)



data = c(71, 84, 68, 75, 91, 87, 63, 77, 81, 98, 57, 73, 74, 85, 50, 
         62, 66, 78, 65, 59, 75, 89, 94, 93, 86, 61, 87, 74, 70, 67)

table(cut(data, 6))

hist(data, breaks = seq(50, 98, 8), freq = F)
lines(density(data), col = "red")






library(dplyr)


midwest %>% 
    dplyr::mutate(ratio_child = popadults/poptotal * 100) 



getValue = c("경기도", "경기")        

setValue = replace(getValue, 1, c("경기"))

x = seq(-3, 3, 0.1)
y = dnorm(x, 0, 1)

plot(x, y, type = 'l', ylim=c(0, max(y)), ylab = "", main = "Probability Density Function")



x = seq(-pi, pi, 0.01)

plot(x, sin(x), col = "black", type = "l", ylab = "sin (x), cos (x), tan (x)", ylim = c(-1, 1))
lines(x, cos(x), col = "red")
lines(x, tan(x), col = "blue")

x = seq(-1, 1, length.out = 100)
y = x^2

plot(x, x, pch = "*", ylab =  expression("x"^2))
lines(x, y, col = "red")


library(lubridate)

interval(
    start = ymd("2018-1-16"),
    end = ymd("2018-1-31")
)

dtStartDate = lubridate::ymd("2017/1/1")
dtEndDate = lubridate::ymd("2018/1/1")

dtDayDiff = lubridate::interval(dtStartDate, dtEndDate)

dtDayDiff/days(1)


iValue = c(1:10)
class(iValue)

nValue = as.numeric(iValue)
class(nValue)


paris(iris[1:4], main="Title", pch=20, bg=c("red","green3","blue")
      [unclass(iris$Species)])




unclass(iris$Species)


library(ggplot2)
library(dplyr)

cars %>%
    ggplot(aes(x = speed, y = dist)) + 
    geom_point() + 
    scale_x_continuous(breaks=c(5, 6, 7, 9, 10, 15, 20, 25)) + 
    scale_y_continuous(breaks=c(0, 50, 65, 75, 150))



# install.packages("primes")
library(primes)


?is_prime

generate_primes(min = 0, max  = 100)


aa = 
    function (x) 
    {
        is_prime_vector(x)
    }

is_prime(0:100)


Is_Prime_Number = function(n) {
    if (n >= 2) {
        x = seq(2, n)
        prime_nums = c()
        for (i in seq(2, n)) {
            if (any(x == i)) {
                prime_nums = c(prime_nums, i)
                x = c(x[(x %% i) != 0], i)
            }
        }
        return(prime_nums)
    } else {
        stop("Input number should be at least 2.")
    }
} 

Is_Prime_Number(100)

nValue = seq(1, 10, 0.1)
sample(nValue, 10)


library(ggplot2)
library(dplyr)

diamonds %>%
    dplyr::filter(price >= 10000) %>%
    dplyr::sample_n(10)

install.packages("arules")
library(arules)

load("product_by_user.RData")

trans = as(product_by_user $Product, "transactions")

trans


orders <- data.frame(
    transactionID = sample(1:500, 1000, replace=T),
    item = paste("item", sample(1:50, 1000, replace=T),sep = "")
)



iYear = seq(1993, 2001)
nPersonal = c(13.6, 13.7, 12.5, 11.9, 11.7, 11.5, 11.7, 13.3, 14.2)
nGroup = c(17.6, 18.4, 19.4, 18.8, 20.0, 20.3, 26.9, 21.5, 26.0)

maxY = max(nPersonal, nGroup)
minY = min(nPersonal, nGroup)

plot(iYear, nPersonal, ylim = c(minY, maxY), col = "black", type = "l", xlab = "연도", ylab = "가입자 수 [단위 : 100만]")
points(iYear, nGroup, col = "blue", type = "l")


install.packages("quadprog")
library(quadprog)

# optimal portfolio for investing in 3 stocks# beta_i : ratio of investment, nonnegative and sum to 1
# x: daily return for stocks: 0.002, 0.005, 0.01
# D: variability in the returns (covariance)

A = cbind(rep(1,3), diag(rep(1,3)))
D = matrix(c(.01,.002,.002,.002,.01,.002,.002,.002,.01), nrow=3)
x = c(.002,.005,.01)
b = c(1,0,0,0)

solve.QP(2*D, x, A, b, meq=1)# optimal strategy: invest 10.4%, 29.2%, 60.4% for stocks 1,2,3# optimal value is 0.002


x = 156
y = 1178

x2 = 1262
y2 = 69390

xy = 9203

r = (xy - ((x * y)/20)) / ((x2-((x^2)/20))*(y2-((y^2)/20)))
r

install.packages("rlang")
library(rlang)


library(dplyr)

bmi = function(height, weight) {
    round(weight / (height / 100)^2, digits = 2)
}

data = data.frame(
    height = c(179, 161, 165, 185, 158)
    , weight =  c(75, 72, 60, 98, 65)
    
)
data

data %>%
    dplyr::mutate(bmi = bmi(height, weight)
                  , result = case_when(
                      bmi > 25 ~ "비만"
                      , TRUE ~ "정상"
                  )
    )

library(plyr)

iData = sample(1:6, 7, replace = TRUE)
iData

fData = factor(iData)
fData

rsData = plyr::mapvalues(fData, from = c(1:6), to = c("one", "two", "three", "four", "five", "six"))
rsData

table(rsData)


library(tidyverse)
library(readxl)
library(scales)

blank_theme = theme_minimal()+
    theme(
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        panel.border = element_blank(),
        panel.grid=element_blank(),
        axis.ticks = element_blank(),
        plot.title=element_text(size=14, face="bold")
    )

df_life = read_excel("INPUT/sample_data.xlsx", sheet = "생활상태")

dplyr::glimpse(df_life)
dplyr::tbl_df(df_life)


# 성별에 대한 빈도
dfData = df_life %>%
    dplyr::group_by(Gender) %>%
    dplyr::summarise(nNumber = n()) %>%
    dplyr::mutate(type = case_when(
        Gender == 1 ~ "남자"
        , Gender == 2 ~ "여자"
        , TRUE ~ "null"
    )) 

ggplot(data = dfData, aes(x = "", y = nNumber, fill = type)) +
    geom_bar(width = 1, stat = "identity") +
    coord_polar("y", start = 0) +
    blank_theme +
    theme(axis.text.x=element_blank()) +
    geom_text(aes(y = nNumber/2.0 + c(0, cumsum(nNumber)[-length(nNumber)]), 
                  label = percent(nNumber/100)), size = 5)

# 연령에 대한 빈도
df_life %>%
    dplyr::group_by(Age) %>%
    dplyr::summarise(nNumber = n()) %>%
    dplyr::mutate(type = case_when(
        Age == 1 ~ "1-40세 이하"
        , Age == 2 ~ "41-64세"
        , Age == 3 ~ "65세 이상"
        , TRUE ~ "null"
    )) %>%
    ggplot(aes(x = "", y = nNumber, fill = type)) +
    geom_bar(width = 1, stat = "identity") +
    coord_polar("y", start = 0) +
    blank_theme +
    theme(axis.text.x=element_blank()) +
    geom_text(aes(y = nNumber/3 + c(0, cumsum(nNumber)[-length(nNumber)]), 
                  label = percent(nNumber/100)), size = 5) 


# 학력에 대한 빈도
df_life %>%
    dplyr::group_by(Study) %>%
    dplyr::summarise(nNumber = n()) %>%
    dplyr::mutate(type = case_when(
        Study == 1 ~ "고졸이하"
        , Study == 2 ~ "전문대졸"
        , Study == 3 ~ "대졸"
        , Study == 4 ~ "대학원졸"
        , TRUE ~ "null"
    )) %>%
    ggplot(aes(x = "", y = nNumber, fill = type)) +
    geom_bar(width = 1, stat = "identity") +
    coord_polar("y", start = 0) +
    blank_theme +
    theme(axis.text.x=element_blank()) +
    geom_text(aes(y = nNumber/4 + c(0, cumsum(nNumber)[-length(nNumber)]), 
                  label = percent(nNumber/100)), size = 5)

# 월 소득에 대한 빈도
df_life %>%
    dplyr::group_by(Income) %>%
    dplyr::summarise(nNumber = n()) %>%
    dplyr::mutate(type = case_when(
        Income == 1 ~ "1-200 만원 이하"
        , Income == 2 ~ "200-300 만원"
        , Income == 3 ~ "300-500 만원"
        , Income == 4 ~ "500 만원 이상"
        , TRUE ~ "null"
    )) %>%
    ggplot(aes(x = "", y = nNumber, fill = type)) +
    geom_bar(width = 1, stat = "identity") +
    coord_polar("y", start = 0) +
    blank_theme +
    theme(axis.text.x=element_blank()) +
    geom_text(aes(y = nNumber/4 + c(0, cumsum(nNumber)[-length(nNumber)]), 
                  label = percent(nNumber/100)), size = 5)

# 가정생활, 직업생활, 문화생활 만족도에 대한 평균과 표준편차
df_life %>%
    dplyr::summarise(meanHome = mean(Home_life, na.rm = T)
                     , meanJob = mean(Job_life, na.rm = T)
                     , meanCulture = mean(Culture_life, na.rm = T)
                     , sdHome = sd(Home_life, na.rm = T)
                     , sdJob = sd(Job_life, na.rm = T)
                     , sdCulture = sd(Culture_life, na.rm = T)
    ) 

# Boxplot 그리기
df_life %>%
    tidyr::gather(-c(1:5), key = "key", value = "value") %>%
    ggplot(aes(x = key, y = value, fill = key)) +
    geom_boxplot(alpha=0.7) +
    scale_x_discrete(name = "Type") +
    theme_bw() +
    theme(plot.title = element_text(size = 14, family = "Tahoma", face = "bold"),
          text = element_text(size = 12, family = "Tahoma"),
          axis.title = element_text(face="bold"),
          axis.text.x=element_text(size = 11),
          legend.position = "bottom") +
    scale_fill_brewer(palette = "Accent") +
    labs(fill = "Type")


# 가정생활, 직업생활, 문화생활 만족도의 평균값을 전반적인 만족도 추가
df_life2 = df_life %>%
    dplyr::mutate(meanHome = mean(Home_life, na.rm = T)
                  , meanJob = mean(Job_life, na.rm = T)
                  , meanCulture = mean(Culture_life, na.rm = T)
    ) 
df_life2


Sys.which("R")
options(error)
options(show.error.messages = TRUE)
options(showErrorCalls = TRUE)


library(pracma)
library(numbers)

# 최대공약수
pracma::gcd(1, 24)

# 최소공배수
pracma::Lcm(12, 24)

# 3의 배수
seq(1, 100, 2)


library(numbers)

# 1번 답 (1)
iNumber = 0
iSum = 0
for (iCount in 1:100) {
    if (iCount %% 3 == 0) {
        iNumber = iNumber + 1
        iSum = iSum + iCount
    }
}

cat(iNumber, " ", iSum)

# 1번 답 (2)
nData = which(seq(1, 100, 1) %% 3 == 0)
cat(length(nData), " ", sum(nData, na.rm = T))

# 2번 답
for (iCount in 101:200) {
    if ((iCount %% 3 == 0) && (iCount %% 4 == 0)) {
        cat(iCount, "\n")
    }
}

# 3번 답
numbers::divisors(24)

# 4번 답
iSum = 1
for (iCount in 1:10) {
    iSum = iSum * iCount
}

cat(iSum)

# 5번 답 
for (iCount in 1:100) {
    if (iCount %% 3 == 0) {
        rsResult = "*"
    } else {
        rsResult = iCount
    }
    
    cat(rsResult, "\n")
}

x <- rnorm(20,0,1)
y <- rnorm(25,1,4)


t_test <- function(x,y,delta0,alter) {
    
    delta0 = 0
    alter = 1
    
    meanx <- mean(x)
    meany <- mean(y)
    n1 <- length(x)
    n2 <- length(y)
    sdx <- sd(x)
    sdy <- sd(y)
    
    sp <- sqrt(((n1-1)*(sdx^2) + (n2-1)*(sdy^2)) / (n1+n2-2))
    
    if (sdy/sdx > 1/2 | sdy/sdx < 2) {
        t <- ((meanx-meany)-delta0) / (sp*sqrt(1/n1+1/n2))
        df <- n1+n2-2
    } else {
        t <- ((meanx-meany)-delta0) / (sqrt((sdx^2)/n1+(sdy^2)/n2))
        df <- min(n1-1,n2-1)
    }
    
    if (alter==1) {
        p <- pt(t,df,lower.tail=F)
    } else if (alter==2) {
        p <- pt(t,df,lower.tail=T)
    } else {
        p <- 2*pt(abs(t),df,lower.tail=F)
    }
    
    data <- c(meanx,meany,sdx,sdy,t,NA,df,NA,p,NA)
    table <- matrix(data,ncol=5,nrow=2)
    
    colnames(table) <- c("m","s.d","t","df","p")
    rownames(table) <- c("A","B")
    
    print(table, na.print = "")
    
} 


t_test(x,y,0,1)
t_test(x,y,0,2)
t_test(x,y,0,3)



install.packages("asbio")
library(asbio)

Y1 = rnorm(100, 15, 2)
Y2 = rnorm(100, 18, 3.2)
chi.plot(Y1, Y2)


install.packages("mvoutlier")
library(mvoutlier)

data(humus)
res = chisq.plot(log(humus[,c("Co","Cu","Ni")]))
res$outliers # these are the potential outliers


class <- c(rep(1,40),rep(1,43),rep(1,67),rep(1,50))
class <- c(40,43,67,50) 


data = data.frame(
    
    
)



library(dplyr)
library(ggplot2)

data = dplyr::tibble(
    key = c(1, 2, 3, 4)
    , value = c(40, 43, 67, 50)
    , name = c("1학년", "2학년", "3학년", "4학년")
)

plot(data$key, data$value)

data %>%
    ggplot2::ggplot(aes(x = key, y = value, colour = name)) +
    ggplot2::geom_point()


data$value





liData = list(
    rep(1, 40)
    , rep(1, 43)
    , rep(1, 67)
    , rep(1, 50)
)

class = c()
for (iCount in 1:length(liData)) {
    iNumber = length(liData[[iCount]])
    
    class = c(class, iNumber)
    cat(iNumber,  "\n")
}

class


library(tidyverse)
library(gapminder)

# 1번 답
CarData = data.frame(mtcars)

CarData %>%
    ggplot(aes(x = disp, y = mpg)) +
    geom_point() +
    geom_smooth(method = "lm")

CarData %>%
    arrange(hp, desc(cyl))


# 2번 답 
CData = data.frame(gapminder)

CData %>%
    dplyr::filter(continent == "Asia") %>%
    dplyr::filter(year == 2007) %>%
    dplyr::mutate(maxLifeExp = max(lifeExp, na.rm = T)) %>%
    dplyr::filter(lifeExp == maxLifeExp)

CData %>%
    dplyr::filter(continent == "Europe") %>%
    dplyr::filter(year == 2007) %>%
    dplyr::mutate(maxLifeExp = max(lifeExp, na.rm = T)) %>%
    dplyr::filter(lifeExp == maxLifeExp)

CData %>%
    dplyr::filter(year == 1997) %>%
    dplyr::mutate(maxLifeExp = max(lifeExp, na.rm = T)) %>%
    dplyr::filter(lifeExp == maxLifeExp)

CData %>%
    dplyr::filter(continent == "Asia") %>%
    dplyr::filter(year == 1992) %>%
    dplyr::summarise(meanLifeExp = mean(lifeExp, na.rm = T))

CData %>%
    dplyr::filter(year == 2007) %>%
    ggplot(aes(x = gdpPercap, y = lifeExp)) +
    geom_point() + 
    geom_smooth(method = "lm")


dataL1 = CData %>%
    dplyr::filter(year == 2007)
lmFit = lm(dataL1$lifeExp ~ dataL1$gdpPercap)
lmFit


#
library(tidyverse)

data = read.csv("INPUT/출산율.csv")

# dplyr::glimpse(data)

# 연도별 평균 출산율
data %>%
    dplyr::group_by(연도) %>%
    dplyr::summarise(nMeanBirthRate = mean(출산율, na.rm = TRUE))


# 지역별 평균 출산율
dataL1 = data %>%
    dplyr::group_by(지역) %>%
    dplyr::summarise(nMeanBirthRate = mean(출산율, na.rm = TRUE))

dataL1

# 지역별 평균 출산율에서 출산율 최대/최소 지역
dataL1 %>%
    dplyr::filter(nMeanBirthRate == max(nMeanBirthRate, na.rm = TRUE)
                  | nMeanBirthRate == min(nMeanBirthRate, na.rm = TRUE))


#
library(tidyverse)

data = read.csv("INPUT/진료비.csv")

# 성별에 따른 평균 진료비
data %>%
    dplyr::group_by(성별) %>%
    dplyr::summarise(nMeanCost = mean(진료비, na.rm = TRUE))

# 지역구에 따른 평균 내원환자수
data %>%
    dplyr::group_by(지역구) %>%
    dplyr::summarise(nMeanPatient = mean(내원환자수, na.rm = TRUE))

#
library(tidyverse)
library(readxl)

data = read_excel("INPUT/satis.xlsx")

# 성별에 대한 빈도
dataL1 = data %>%
    dplyr::mutate(
        sGender = case_when(
            x1 == 1 ~ "남성"
            , x1 == 2 ~ "여성"
            , TRUE ~ "null"
        )
        , sUniv = case_when(
            x2 == 1 ~ "S대"
            , x2 == 2 ~ "Y대"
            , x2 == 3 ~ "K대"
            , x2 == 4 ~ "A대"
            , x2 == 5 ~ "B대"
            , x2 == 6 ~ "H대"
            , x2 == 7 ~ "M대"
            , TRUE ~ "null"
        )
        , sGrade = case_when(
            x3 == 1 ~ "1학년"
            , x3 == 2 ~ "2학년"
            , x3 == 3 ~ "3학년"
            , x3 == 4 ~ "4학년"
            , TRUE ~ "null"
        )
        , sPeriod = case_when(
            x4 == 1 ~ "5년 미만"
            , x4 == 2 ~ "5~10년"
            , x4 == 3 ~ "10~15년"
            , x4 == 4 ~ "15~20년"
            , x4 == 5 ~ "20년 이상"
            , TRUE ~ "null"
        )
        , sLifeStyle = case_when(
            x5 == 1 ~ "통합"
            , x5 == 2 ~ "하숙 및 자취"
            , x5 == 3 ~ "학교 기숙사"
            , x5 == 4 ~ "기타"
            , TRUE ~ "null"
        )
        , sSatType = case_when(
            x6 == 1 ~ "전혀 만족하지 않는다"
            , x6 == 2 ~ "만족하지 않는다"
            , x6 == 3 ~ "보통이다"
            , x6 == 4 ~ "만족한다"
            , x6 == 5 ~ "매우 만족한다"
            , TRUE ~ "null"
        )
    )



dplyr::glimpse(dataL1)

# 성별에 따른 대학생활의 전반적 만족도의 차이를 검증하시오.
dataL1 %>%
    dplyr::group_by(sGender) %>%
    dplyr::summarise(nSatType = mean(x6, na.rm = TRUE))

# 소속대학별 대학생활의 전반적 만족도의 차이를 검증하시오.
dataL1 %>%
    dplyr::group_by(sUniv) %>%
    dplyr::summarise(nSatType = mean(x6, na.rm = TRUE))

# 학년별 대학생활의 전반적 만족도의 차이를 검증하시오.
dataL1 %>%
    dplyr::group_by(sGrade) %>%
    dplyr::summarise(nSatType = mean(x6, na.rm = TRUE))

# 대학생활의 만족 정도에 대한 각각의 상관관계를 구하고
# 각 변수간에서 상관관계(0.4이상)가 있는 변수를 구하시오
dataL1 %>%
    dplyr::select(x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) %>%
    cor %>%
    as.data.frame() %>%
    tibble::rownames_to_column() %>%
    dplyr::mutate(
        sRowName = case_when(
            rowname == "x6" ~ "대학생활의 전반적 만족 정도"
            , rowname == "x7" ~ "지역문화의 만족도"
            , rowname == "x8" ~ "통학수단의 만족도"
            , rowname == "x9" ~ "시내 교통의 만족도"
            , rowname == "x10" ~ "소속대학의 만족도"
            , rowname == "x11" ~ "전공의 만족도"
            , rowname == "x12" ~ "물가의 만족도"
            , rowname == "x13" ~ "전세(월세)등의 만족도"
            , rowname == "x14" ~ "치안의 만족도"
            , rowname == "x15" ~ "먹을거리, 음식 만족도"
            , TRUE ~ "null"
        )
    ) %>%
    dplyr::select(sRowName, x6) %>%
    dplyr::filter(x6 >= 0.4)

#
library(alr3)

lmFit = lm(Fertility ~ ., data = swiss)

# 분산팽창지수
vif(lmFit)

# 공차한계
1.0/vif(lmFit)

#
VX = 83416.66666667

# 소수점 2자리까지 표시
round(VX, 2)

nValue = c(20160809103050)
nValue

# 숫자로 표시
format(nValue, scientific = FALSE)

# RData 저장
save(mtcars, file = "mtcars.RData")

# RData 읽기 
load("mtcars.RData")

# RData를 csv로 변환 
write.csv(mtcars, file = "mtcars.csv")


#

# 현재 작업 디렉터리 읽기
getwd()

# 현재 작업 디렉터리 셋팅
setwd(getwd())

# 파일 읽기 (현재 작업 디렉터리 하위에 위치)
df = read.csv(paste0(getwd(), "/", "파일이름"), header = TRUE)

# 
library (haven)

haven01 <- read_sav("6areaeng.sav")

saveRDS(dataL1, file = "my_data.rds")





#====================================================================
#   내 PC
#====================================================================

dfDataA = data.frame(
    stretch    = c(46, 54, 48, 50, 44, 42, 52)
    , distance = c(183, 217, 189, 208, 178, 150, 249)
)

dfDataB = data.frame(
    stretch    = c(25, 45, 35, 40, 55, 60)
    , distance = c(71, 196, 127, 187, 249, 291)
)

minStretch  = min(dfDataA$stretch, dfDataB$stretch)
maxStretch  = max(dfDataA$stretch, dfDataB$stretch)

minDistance  = min(dfDataA$distance, dfDataB$distance)
maxDistance  = max(dfDataA$distance, dfDataB$distance)

plot(dfDataA$stretch, dfDataA$distance, xlab = "stretch", ylab = "distance", pch = "a", xlim = c(minStretch, maxStretch), ylim = c(minDistance, maxDistance))
points(dfDataB$stretch, dfDataB$distance, pch = "b")



var1 <- c(1:5)
var2 <- c(1,2,3)
var3 <- c("문자","숫자")
var4 <- c("1","5")



library(GISTools)
data(georgia)

# 
# auto.shading
# 
# Compute a rate for mapping and put it in a variable - re-scale to avoid
# a profusion of zeros
incomes <- georgia$MedInc/1000
# Create a shading scheme
shades <- auto.shading(incomes, n = 6, cutter = rangeCuts, cols = brewer.pal(6, "Greens"))
# Draw a map based on this scheme
choropleth(georgia, incomes, shades)
# Add a legend based on this scheme
choro.legend(-82, 34.87, shades, fmt = "%4.1f", title = "Median Income (1000$'s)")
# Add a title to the map
title("Median Income in Georgia (1990)")
# ... and a little more explanatory text
text(-85.3, 30.4, "Source: US Census")
# ... and a north-point arrow
north.arrow(-80.9, 30.4, 0.1)
# and draw a box around it
box(which = "outer")







library(dplyr)
library(tibble)

st = data.frame(state.x77)

# 11번 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(rowname == "Texas") %>%
    dplyr::select(rowname, Area)

# 12번 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(rowname == "Ohio") %>%
    dplyr::select(rowname, Population, Income)

# 13번 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(Population >= 5000) %>%
    dplyr::select(rowname)



# 14번 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(Income >= 4500) %>%
    dplyr::select(rowname, Population, Income, Area)


# 15번 답변
st %>%
    tibble::rownames_to_column() %>%
    dplyr::filter(Income >= 4500) %>%
    dplyr::summarise(count = n())


library(ggplot2)
library(dplyr)


carData = data.frame(mtcars)

carData %>%
    ggplot(aes(x = disp, y = mpg)) +
    geom_point()


carData %>%
    arrange(desc(hp), desc(cyl))



data = data.frame(
    x = c(1360, 1940, 1750, 1550, 1790, 1750, 2230, 1600, 1450, 1870, 2210, 1480)
    , y = c(278.5, 375.7, 339.5, 329.8, 295.6, 310.3, 460.5, 305.2, 288.6, 365.7, 425.3, 268.5)
)

xAxis = data$x
yAxis = data$y


# 상관계수
sumX = sum(xAxis, na.rm = T)
sumY = sum(yAxis, na.rm = T)
sumXY = sum(xAxis * yAxis, na.rm = T)
sumX2 = sum(xAxis^2, na.rm = T)
sumY2 = sum(yAxis^2, na.rm = T)

iNumber = length(xAxis)

step1 = (iNumber * sumXY) - (sumX * sumY)
step2 = (iNumber * sumX2) - (sumX * sumX)
step3 = (iNumber * sumY2) - (sumY * sumY)
step4 = sqrt(step2 * step3)

rsCor = step1 / step4
rsCor

# 공분산
meanX = mean(xAxis, na.rm = T)
meanY = mean(yAxis, na.rm = T)

anomalyX = xAxis - meanX
anomalyY = yAxis - meanY

rsCov = sum(anomalyX * anomalyY, na.rm = T) / (iNumber - 1)
rsCov


data = data.frame(
    id = seq(1, 20, 1)
    , age = c("10대", "10대", "20대", "20대", "10대", "20대", "20대", "30대", "30대", "10대"
              , "10대", "20대", "10대", "20대", "30대", "30대", "20대", "20대", "30대", "10대")
    , drink = c("A", "D", "D", "C", "D", "B", "B", "B", "C", "A"
                , "D", "D", "C", "D", "B", "A", "C", "C", "A", "B")
)
data

table(data$age)
table(data$age, data$drink)


# 현재 작업환경 경로 확인
getwd()

# 현재 작업환경 경로 설정
setwd("/Users/^^/Desktop")

# 현재 함수에 대한 옵션값 확인
read.csv

# 현재 함수에 대한 도움말 기능
?read.csv


library(tidyverse)

data = read_delim(file = "zipIncome.csv", delim = ',')

v = data %>% 
    select(MeanEducation, MeanHouseholdIncome) #pick the variable 

# set up cut-off values 
breaks = c(0,2,4,6,8,10,12,14,16,18,20)

# specify interval/bin labels
tags = c("[0-2)","[2-4)", "[4-6)", "[6-8)", "[8-10)", "[10-12)","[12-14)", "[14-16)","[16-18)", "[18-20)")

# bucketing values into bins
group_tags = cut(v$MeanEducation, breaks = breaks, include.lowest = TRUE, right = FALSE, labels=tags)

# inspect bins
summary(group_tags)

ggplot(data = as_tibble(group_tags), mapping = aes(x=value)) + 
    geom_bar(fill="bisque",color="white",alpha=0.7) + 
    stat_count(geom="text", aes(label=sprintf("%.4f",..count../length(group_tags))), vjust=-0.5) +
    labs(x='mean education per house') +
    theme_minimal() 



library(tidyverse)

df_raw <- data.frame(var1 = c(1, 2, 1), var2 = c(2, 3, 2))

df_raw %>%
    dplyr::rename(v2 = var2)

mpg %>%
    dplyr::mutate(total = (cty + hwy) / 2) %>%
    dplyr::select(total)




# 데이터 (data)에서 만족도 (sat)에 대한 평균 및 분산은 다음과 같다.
library(tidyverse)

data %>%
    dplyr::summarise(meanSat = mean(sat, na.rm = T)
                     , varSat = var(sat, na.rm = T)
    ) 


library(ggplot2)

usedcars

graphics::text

curve(dnorm(x, mean = 0, sd = 1), from = -4, to = 4)


#========================================================
# 4a 답변 
#========================================================
zValue = qnorm(0.05) # 5 %
zValue

# 저변 직선 부의 좌표
x = seq (-4, zValue, length = 50) # x 값을 50 분할
y = rep (0, 50) # y 좌표는 모두 0

# 확률 밀도 곡선의 좌표
revx = rev (x) # x 좌표를 반대 방향으로 정렬
dx = dnorm (revx) # x 좌표에 해당하는 곡선의 값 (y 좌표)
# 직선 부와 곡선 부의 좌표를 합병
xvals = c(x, revx)
yvals = c(y, dx)

# 표준 정규 분포를 그려 다각형을 채우기 추가
curve(dnorm(x, mean = 0, sd = 1), -4, 4)
polygon (xvals, yvals, col = "gray") # 왼쪽 2.5 % 기각 영역 채우기

# 오른쪽 5 % 영역
xvals = c(seq(4, -zValue, length = 50), seq(-zValue, 4, length = 50))
yvals = c(rep(0, 50), dnorm(seq(-zValue, 4, length = 50), mean = 0, sd = 1))
polygon(xvals, yvals, col = "gray")
text (-3, 0.1, "5 %")
text (3, 0.1, "5 %")

#========================================================
# 4b 답변
#========================================================
zValue = qnorm(0.025) # 2.5 %
zValue

# 저변 직선 부의 좌표
x = seq (-4, zValue, length = 50) # x 값을 50 분할
y = rep (0, 50) # y 좌표는 모두 0

# 확률 밀도 곡선의 좌표
revx = rev (x) # x 좌표를 반대 방향으로 정렬
dx = dnorm (revx) # x 좌표에 해당하는 곡선의 값 (y 좌표)

# 직선 부와 곡선 부의 좌표를 합병
xvals = c(x, revx)
yvals = c(y, dx)

# 표준 정규 분포를 그려 다각형을 채우기 추가
curve(dnorm(x, mean = 0, sd = 1), -4, 4)
polygon (xvals, yvals, col = "gray") # 왼쪽 2.5 % 기각 영역 채우기

# 오른쪽 2.5 % 영역
xvals = c(seq(4, -zValue, length = 50), seq(-zValue, 4, length = 50))
yvals = c(rep(0, 50), dnorm(seq(-zValue, 4, length = 50), mean = 0, sd = 1))
polygon (xvals, yvals, col = "gray")
text (-3, 0.1, "2.5 %")
text (3, 0.1, "2.5 %")


iris$Species

unclass(iris$Species)

library(tidyverse)


x = c("a", "b", "b", "b", "c", "c")

table(x)

y = table(x)

sort(y)

tData = sort(y, decreasing=T)
tData

tData[order(as.factor(names(tData)))]




library(dplyr)

bmi = function(height, weight) {
    round(weight / (height / 100)^2, digits = 2)
}

data = data.frame(
    height = c(250, 180, 165, 185, 130)
    , weight =  c(75, 60, 60, 98, 95)
    
)
data


data %>%
    dplyr::mutate(bmi = bmi(height, weight)
                  , result = case_when(
                      bmi <= 18.5 ~ "저체중"
                      , 18.5 < bmi & bmi <= 24.9 ~ "정상"
                      , 25 <= bmi &  bmi <= 29.9 ~ "과체중"
                      , 30 <= bmi ~ "비만"
                      , TRUE ~ "NULL"
                  )
    )



dfData = data.frame(
    a = rnorm(10),
    b <- rnorm(10)
)

dfData


library(RmecabKo)

install_mecab("c:/mecab")

x = ('반갑습니다. 오늘 정말 날씨가 좋습니다. 전국공공노조협의회')
pos(x)


data = data.frame(
    height = c(100, 150, 200, 250, 300)
    , weight =  c(80, 60, 70, 80, 50)
    
)

xAxis = data$height
yAxis = data$weight

lmFit = lm (yAxis ~ xAxis)
nPred = predict(lmFit, data, interval="prediction")

# 예측구간
nFit = nPred[ , 1]

# 하단 신뢰구간
nLwr = nPred[ , 2]

# 상단 신뢰구간
nUpr = nPred[ , 3]

plot(xAxis, yAxis, ylim = c(0, 150))
abline(lmFit, lwd = 2, col = "blue")
lines(xAxis, nLwr, col = "red")
lines(xAxis, nUpr, col = "red")


library(dplyr)


data = c(16, 25, 32, 15, 2, 1)
data

nIndex = which(data == max(data, na.rm = T))
data[nIndex] = 20
data

data = c(10, 20, 30, NA)
data

mean(data, na.rm = T)

# 

install.packages("rattle.data")
library(rattle.data)

rattle.data::weather$Cloud3pm

# 
# install.packages("DBI")
# install.packages("RMySQL")
library(DBI)
library(RMySQL)

sqlType = dbDriver("MySQL")

dbCon = dbConnect(sqlType, dbname="test", user="root", password="root")

result = dbGetQuery(dbCon, "select * from employees")

head(result)

dbDisconnect(dbCon)

# 
data = data.frame(
    addr = c("서울특별시 금천구 가산동"
             , "서울특별시 금천구 가산1동"
             , "서울특별시 금천구 가산1"
             , "서울특별시 금천구 가산"
    )
    
)

nRowCount = grep("*동$", data$addr)

grepl$addr[1]
aa = gregexpr("\\s", as.character(data$addr[1]))

names(aa)

# 1 5
# 7 9
# 11 13
nchar(as.character(data$addr[1]))

require(stringi)
require(stringr)

stri_length(data$addr[1])

as.character(data$addr[1])

string

gsub("*동$", data$addr[nRowCount])

data$addr[nRowCount]

match("*동$", data$addr)



# 

install.packages("ggplot2")

library(ggplot2)

qplot


#
library(tidyverse)

data = data.frame(
    sDate = c("2017-01-03", "2017-01-04", "2017-01-05")
    , nValue = c(149.32, 154.73, 156.60)
)

dataL1 = data %>%
    dplyr::mutate(dtDate = as.Date(sDate, "%Y-%m-%d"))

dplyr::glimpse(dataL1)

lmFit = lm(nValue ~ dtDate, data = dataL1)

plot(dataL1$dtDate, dataL1$nValue)
abline(lmFit, col = "red")


#
install.packages("openxlsx")

library(openxlsx)

data = read.xlsx("INPUT/his.xlsx")

hist(data$medal, ylim = c(0, 300))

# 
library(tidyverse)

data = data.frame(
    sRowNames = c("X2008", "X2009", "X2010")
)

data

dataL1 = data %>%
    dplyr::mutate(year = str_replace(sRowNames, "X", ""))

dataL1          


#
library(tidyverse)

data = data.frame(
    sLiist = c("함부르크 대학교", "함부르크 대학교", "함부르크 대학교", "동경외국어대학교", "동경외국어대학교")
)

data

data %>%
    group_by(sLiist) %>%
    summarise(iNumber = n())

# 


# 워드클라우드
names(data_cnt)

# 단어들의 빈도
freq=data_cnt

# 글자의 크기
scale=c(5,1)

# 90도로 회전된 각도로 출력되는 단어의 비율
rot.per=0.5

# 출력될 단어의 초소 빈도
min.freq=7

# TRUE이면 랜덤으로 단어 출력, FALSE이면 빈도수가 큰 단어일수록 중앙에 배치
random.order=F

# TRUE이면 단어색은 랜덤순으로 정해지고, FALSE이면 빈도순으로 정해짐
random.color=T

# 가장 작은 빈도부터 큰 빈도까지의 단어색
colors=palete

# 
data = data.frame(
    nAge = c(20, 23, 25)
    , nHeight = c(170, 180, 190)
    , nValue = c(149.32, 154.73, 156.60)
)

lmFit = lm(nValue ~ nAge + nHeight, data = data)
lmFit

#
nValue = rbinom(c(1:60000), size = 60000, prob = 0.2)
hist(nValue)

summary(nValue)

# nValue 변수에 대한 최대값이 12433이기 때문에 발생 확률은 0 %
pbinom(12589, size = 60000, prob = 0.2, lower.tail = F)

#
library(tidyverse)

data = data.frame(
    sDate = c("2018-11-01", "2018-11-02", "2019-12-01", "2019-12-02", "2019-12-03")
    , nValue = c("중국", "미국", "중국", "미국", "중국")
)

dataL1 = data %>%
    dplyr::mutate(dtDate = as.Date(sDate, "%Y-%m-%d")
                  , sYear = format(dtDate, "%Y")
                  , sMonth = format(dtDate, "%m")
                  , sDay = format(dtDate, "%d")
    )

# 월별, 국가별에 따른 빈도
dataL2 = dataL1 %>%
    group_by(sYear, sMonth, nValue) %>%
    summarise(iNumber = n())

dataL2

# 연도별, 국가별에 따른 빈도
dataL3 = dataL1 %>%
    group_by(sYear, nValue) %>%
    summarise(iNumber = n())

dataL3

#
nValue = rbinom(c(1:60000), size = 60000, prob = 0.2)


# 
library(ggplot2)

diamonds %>%
    ggplot()

#
library(openxlsx)

data = read.xlsx("INPUT/satis.xlsx")




#
library(stringr)

veSeq = seq(1, 1000, 1)

vTmpList = gsub("3|6|9", "짝", veSeq)
vList = gsub("0|1|2|4|5|7|8", "", vTmpList)

vList

# 
veList = seq(600, 2130, 15)
veList

veConvList = floor(veList / 100) * 100
veConvList

# 
data = data.frame(
    game = c(1, 2 ,3)
    , result = c(3, 3, 3)
    , audience = c(13262, 6052, 3843)
)

plot(data$result, data$audience
     , main = "메달과 엘리트 선수 증가수의 산점도"
     , xlab = "result", ylab = "audience")

#
plot(iris$Species, iris$Sepal.Width
     , xlab = "", ylab = "Width")

# 
getwd()
setwd(getwd())

# 
library(plyr)

data = c(1, 1, 1, 2, 2)

faData = factor(data)

rsData = plyr::mapvalues(faData, from = c(1:2), c("사과", "바나나"))

table(rsData)


#
library(ggplot2)

qplot

#
library(tidyverse)
library(nycflights13)

flights

#
library(dplyr)

mtcars %>%
    dplyr::select(mpg)

#
library(jsonlite)
library(data.table)

jsData = fread("INPUT/News_Category_Dataset_v2.json", header = FALSE, sep = "]")

dfData = data.frame()

# for (iCount in dim(jsData)[1]) {
for (iCount in 1:5) {
    sRowData = paste0("[", jsData[iCount], "]")
    
    dfRowData = fromJSON(sRowData)
    
    dfData = dplyr::bind_rows(dfData, dfRowData)
}

#
library(readtext)

data = readtext("INPUT/Test.txt", text_field = "texts")

data

#
nn=49 ; dt=0.1

u=rnorm(1:51)

u[1]=1

# u[1.5]=u[1]+1/2*dt*(u[1]+1)

u[2]=u[1]+dt*(u[1]+1/2*dt*(u[1]+1)+1)

for (i in 1:(nn)) {
    
    u[i+2]=u[i]+2*dt*(u[i+1]+1)
    
    print(u[i+2])
    
}

#
dfData = data.frame(
    sDate = c("2019-01-03", "2019-01-05")
    , nValue = c(210, 219.3)
)

dfDataL1 = dfData %>%
    dplyr::mutate(dtDate = as.Date(sDate, "%Y-%m-%d"))

plot(dfDataL1$dtDate, dfDataL1$nValue)

#
xminusxbar = matrix(0,150,4)
ma = matrix(0,150,1)

for(i in 1:nrow(xminusxbar)){
    xminusxbar[i,] = as.matrix(df[i,] - cm)
    
    ma[i,1] = xminusxbar[i,] %*% cr %*%  t(t(xminusxbar[i,]))
}

#
library(tidyverse)

dfData = data.frame(
    x1 = c(1, 2, 3, 4, 5)
)

dfData

dfData %>%
    dplyr::mutate(x1 = "Mark")

#
nSum = 0

for (iCount in 1:10) {
    
    veList = seq(1, iCount, 1)
    nTmpSum = sum(veList, na.rm = TRUE)
    nSum = nSum + nTmpSum
    
    cat(nTmpSum, " = ", veList, "\n")
}

cat(nSum)

#
library(textreadr)
library(rvest)
library(tidyverse)
library(xml2)
library(magrittr)

meta_data_all = data.frame()

page_url = "http://www.yes24.com/24/category/bestseller?CategoryNumber=001&sumgb=09&year=2019&month=1&PageNumber=1"
page_url = "http://www.yes24.com/Product/Goods/66997133"

bookg_page = read_html(page_url)

aa = #category_layout tr").eq(0).find(".goodsTxtInfo > p > a
    
    
    bookg_page %>%
    html_nodes("#category_layout:eq(0) > .goodsTxtInfo > p > a:eq(0)") %>%
    html_text()

bookg_page %>% 
    html_nodes(".goodsTxtInfo > p > a") %>%
    html_text() 

toString(bookg_page %>% html_nodes("td.goodsTxtInfo > p > a") 
         
         %>% html_text_collapse)


dd = bookg_page %>%
    html_nodes("td.goodsTxtInfo > p > a") %>%
    html_text() %>%
    str_replace("개", "")


# 
library(tidyverse)
library(readxl)
library(stringr)

data = read_excel("INPUT/휴대폰 보유(2014_2018년).xlsx")

dataL1 = data %>%
    tidyr::gather(key = tmpType, value = "value", -type, -typeAtcl) %>%
    tidyr::separate(tmpType, into = c("typeNumber", "year"), sep = "_")

dataL2 = dataL1 %>%
    tidyr::spread(key = "typeNumber", value = "value") %>%
    dplyr::mutate(number = str_replace(number, ",", "")) %>%
    dplyr::mutate_at(vars(year), funs(as.numeric)) %>%
    dplyr::mutate_at(vars(number), funs(as.numeric)) %>%
    dplyr::mutate_at(vars(isYes), funs(as.numeric)) %>%
    dplyr::mutate_at(vars(isNo), funs(as.numeric)) %>%
    dplyr::mutate(nYesNumber = number * isYes)

# 연도별 성별에 따른 휴대폰 보유 수
dataL2 %>%
    dplyr::filter(type == "성별") %>%
    dplyr::group_by(year, typeAtcl) %>%
    dplyr::summarise(nSumYesNumber = sum(nYesNumber, na.rm = TRUE))

# 연도별 연령에 따른 휴대폰 보유 수
dataL2 %>%
    dplyr::filter(type == "연령") %>%
    dplyr::group_by(year, typeAtcl) %>%
    dplyr::summarise(nSumYesNumber = sum(nYesNumber, na.rm = TRUE))


# 연도별 직업에 따른 휴대폰 보유 수
dataL2 %>%
    dplyr::filter(type == "직업") %>%
    dplyr::group_by(year, typeAtcl) %>%
    dplyr::summarise(nSumYesNumber = sum(nYesNumber, na.rm = TRUE))


#

# Clear plots
if (! is.null(dev.list())) {
    dev.off()
}

# Clear console
cat("\014") 

# Clear Workspace
rm(list=ls())

a = c(1,3,10) 

b = c(3,4,5) 

a %in% b

! (a %in% b)

#
library(tidyverse)

census.data = read.csv("INPUT/101_DT_1IN1002_F_2010.csv", header = TRUE, skip = 2, fileEncoding = "euc-kr")               
names(census.data) = gsub("[[:punct:]]+","_", gsub("[[:punct:]]$","", names(census.data)))               
names(census.data)               

dplyr::glimpse(census.data)

dfDataL1 = census.data %>%
    dplyr::mutate_if(is.factor, as.character) %>%
    dplyr::mutate(
        C행정구역별_읍면동 = str_trim(C행정구역별_읍면동, side = c("both"))
        , 행정구역별_읍면동 = str_trim(행정구역별_읍면동, side = c("both"))
        , C행정구역별_읍면동 = str_replace(C행정구역별_읍면동, "'", "")
    ) %>%
    dplyr::filter(nchar(C행정구역별_읍면동) == 5)

dplyr::glimpse(dfDataL1)

# 0 <- 39개가 나와야 맞는데....

dfDataL2 = dfDataL1 %>%
    dplyr::filter(행정구역별_읍면동 %in% c("동부","읍부","면부"))

nrow(dfDataL2)


# 302 <- 263개가 나와야 하는데...
dfDataL2 = dfDataL1 %>%
    dplyr::filter(! 행정구역별_읍면동 %in% c("동부","읍부","면부"))

nrow(dfDataL2)



# 

shout = function() {
    
    sReturn = "HELLO"
    
    return (sReturn)
}

shout()

# 

vSeq = seq(-pi, pi, 0.01)

plot(vSeq, sin(vSeq), type = 'l', xlab = "xlab", ylab = "ylab")
points(vSeq, cos(vSeq))
legend("topright"
       , c("sin", "cos")
       , col = c("black", "black")
       , pch = c(1, NA)
       , lty = c(NA, 1)
       , cex = 0.8
)


# 
data = data.frame(
    xAxis = c(1, 2, 3)
    , yAxis = c(1, 2, 4)
)

plot(data$xAxis, data$yAxis
     # 각 점의 모양
     , pch = 0
     # x축과 y축의 라벨
     , xlab = "X", ylab = "Y"
)


#
library(tidyverse)

dfData = data.frame(
    sType = c("남", "남", "남", "남", "여", "여", "여")
    , nAge = c(36, 60, 40, 80, 10, 15, 20)
)

dfData %>%
    dplyr::group_by(sType) %>%
    dplyr::summarise(nMedAge = median(nAge, na.rm = TRUE))

# 
howfar = function(x, y) {
    nReturn = sqrt(x^2 + y^2)
    
    return(nReturn)
}

howfar(3, 4)

#
x = sample(c(0, 1), 7, replace = TRUE)
x

iNumber = length(x) - 2

for (iCount in 1:iNumber) {
    
    iEndCount = iCount + 2
    isTrue = all(x[iCount:iEndCount] == c(0, 0, 0))
    
    cat(paste0(iCount, "-", iEndIndex, " : "), isTrue, "\n")
}

#

fnResult = function(x) {
    
    if ((x %% 2) == 0) {
        nValue = x / 2
    } else {
        nValue = (x + 1) / 2
    }
    
    return(nValue)
}

fnResult(31)

# 

library(tidyverse)

lab = scan("")

lab %>%
    as.data.frame() %>%
    dplyr::mutate(y = ifelse(lab >= 0, 1, -1))


# 
dfData = OrchardSprays

# 
# (1) 자료형태 : data.frame
class(dfData)

# (2) 변수 개수 : 4개
ncol(OrchardSprays)

# (3) 관측 개수 : 64개
nrow(OrchardSprays)

# 
# install.packages("tm")  # for text mining
# install.packages("SnowballC") # for text stemming
# install.packages("wordcloud") # word-cloud generator 
# install.packages("RColorBrewer") # color palettes

library(wordcloud)
library(tm)
library(SnowballC)
library(RColorBrewer)

filePath = "http://www.sthda.com/sthda/RDoc/example-files/martin-luther-king-i-have-a-dream-speech.txt"

my1.txt = readLines(filePath)

# 행의 수 : 46
length(my1.txt)

# 빈도수 상위 5개 단어 : "will", "freedom", "ring", "dream", "day"

# 코퍼스로 데이터 읽기
docs = Corpus(VectorSource(my1.txt))

# 문서 내용 검사
inspect(docs)

#  텍스트 변환 (특수문자를 공백으로 변경 )
toSpace = content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs = tm_map(docs, toSpace, "/")
docs = tm_map(docs, toSpace, "@")
docs = tm_map(docs, toSpace, "\\|")

# 텍스트 전처리
# Convert the text to lower case
docs = tm_map(docs, content_transformer(tolower))
# Remove numbers
docs = tm_map(docs, removeNumbers)
# Remove english common stopwords
docs = tm_map(docs, removeWords, stopwords("english"))
# Remove your own stop word
# specify your stopwords as a character vector
docs = tm_map(docs, removeWords, c("blabla1", "blabla2")) 
# Remove punctuations
docs = tm_map(docs, removePunctuation)
# Eliminate extra white spaces
docs = tm_map(docs, stripWhitespace)

# 워드클라우드를 위한 문서 행렬 작성
dtm = TermDocumentMatrix(docs)
m = as.matrix(dtm)
v = sort(rowSums(m),decreasing=TRUE)
d = data.frame(word = names(v),freq=v)

# 상위 5개 단어
head(d, 5)

# 워드 클라우드 생성
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

# 
dfData = quakes

# 
# (1) 자료형태 : data.frame
class(dfData)

# (2) 변수 개수 : 5개
ncol(dfData)

# (3) 관측 개수 : 1000개
nrow(dfData)

# (4) 직선관계
lmFit = lm(long ~ mag, data = dfData)
coef(lmFit)[1]
nCor = cor(dfData$mag, dfData$long)
sMain = paste("R = ", round(nCor, 2)
              , ","
              , "Y = ", round(coef(lmFit)[2], 2), "x + ", round(coef(lmFit)[1], 2)
)

plot(dfData$mag, dfData$long, main = sMain)
abline(lmFit, col = 'blue')

# 
library(MASS)

dfData = UScrime

# (1) 자료형태 : data.frame
str(dfData)

# (2) 변수 개수 : 16개
ncol(dfData)

# (3) 관측 개수 : 47개
nrow(dfData)

# (4) 상관계수 : 0.1773206
cor(dfData$U2, dfData$y)

# (5) 실업률의 평균 : 33.97872
mean(dfData$U2, na.rm = TRUE)

# 
# (6) 상관계수 : 0.7459248
xAxis = dfData$U1
yAxis = dfData$U2

cor(xAxis, yAxis)
lmFit = lm(yAxis ~ xAxis)

plot(xAxis, yAxis)
abline(lmFit, col = 'blue')

# (7) 최대값 : 168, 최소값 : 3
max(dfData$Pop, na.rm = TRUE)
min(dfData$Pop, na.rm = TRUE)

# (8) 상관계수 : 0.4413199
xAxis = dfData$GDP
yAxis = dfData$y

cor(xAxis, yAxis)
lmFit = lm(yAxis ~ xAxis)

plot(xAxis, yAxis)
abline(lmFit, col = 'blue')

# (9) 상관계수 비교 : 0.7459248 vs 0.4413199
cor(dfData$U1, dfData$U2)
cor(dfData$GDP, dfData$y)

# (10) 상관계수 : -0.3899229
cor(dfData$Ed, dfData$Prob)

# 
dfData = data.frame(
    nHeight = c(179, 161, 165, 185, 158)
    , nWeight =  c(75, 72, 60, 98, 65)
)


# $ : 데이터 프레임에서 변수 추출
dfData$nHeight

library(dplyr)

# %>% : 파이프 연산자로서 dplyr에서 "그리고"와 동일
#       즉 dfData 그리고 (1줄) nHeight 변수 추출 (2줄)
dfData %>%
    dplyr::select(nHeight)


# 
library(tidyverse)

mtcars %>% 
    data.frame() %>%
    ggplot(aes(x = mpg)) +
    geom_histogram(binwidth = 0.01) +
    annotate(
        "rect"
        , xmin = -0.02
        , xmax = 0.02
        , ymin = 0
        , ymax = sum(mpg == 0, na.rm = TRUE) * 1.1
        , alpha=0.3
        , fill="red") +
    xlab(NULL)

# 
lm(formula = as.numeric(a$income) ~ as.numeric(a$hours), data = a)

# 
library(TTR)
macd = MACD(price, nFast=15, nSlow=30,nSig=9,maType=SMA, percent = FALSE)



library(quantmod)

library(PerformanceAnalytics)

getSymbols("^NSEI")

chartSeries(NSEI, TA = NULL)

data = NSEI[,4]

# NA 제거
dfDataL1 = na.omit(data)

macd = MACD(dfDataL1, nFast=12, nSlow=26,nSig=9,maType=SMA,percent = FALSE)

plot(macd$macd - macd$signal)

# 
Sys.setlocale("LC_ALL", "korean")

# 
# 현재 R 프로그램에서 예약어로 사용중인 논리형 변수 (T/F)를 paramT로 변경함
BSM = function(S, paramT, K, sigma, Rf) {
    D1 = (log(S / K, base = exp(1)) + paramT * (Rf + 0.5 * sigma^2)) / sigma * paramT^0.5
    D2 = D1 - sigma * paramT^0.5
    print(S * pnorm(D1) - K * exp(-Rf * paramT) * pnorm(D2))
}

BSM(100, 0.5, 100, 0.1, 0.04)

install.packages("devtools")

# 
dfData = data.frame(
    학교명 = c("강릉원주대학교", "강릉원주대학교1")
    , isTure = c(TRUE, FALSE)
)

nIndex = which(dfData$학교명 == "강릉원주대학교")
dfData[nIndex, ]

#
library(tidyverse)

dfData = data.frame(
    nCount = seq(1, 1000, 1)
)


dfDataL2 = dfData %>%
    dplyr::mutate(
        isType = case_when(
            (nCount %% 3) == 0 ~ TRUE
            , TRUE ~ FALSE
        )
    )

dplyr::tbl_df(dfDataL2)

# 

data = read.csv(file = "INPUT/csv_exam.txt", sep = " ", header = FALSE)

data

# 

library(foreign)

dfData = read.spss(
    file = "INPUT/SPSS_Dataset.sav"
    , use.value.label = TRUE
    , to.data.frame = TRUE
)

head(dfData)

# 

# 빈 목록 만들기
liList = list() 

# 4 회
for (i in 1:4) {
    # 정규 난수가 벡터 생성성
    nRnorm = rnorm(10) 
    
    # liList의 끝에 추가
    liList = c(liList, list(nRnorm)) 
}

liList


# 요소 수가 4개의 목록을 표시
str(liList)

# 
library(KoNLP)

# 

# 현재 라이브러리 경로 확인
.libPaths()

# 현재 라이브러리 경로 추가
.libPaths(c("C:/Users/indisystem/Documents/R/win-library/3.6"
            , "C:/Program Files/R/R-3.6.2/library")
)


# 

# 소수점 셋째 자리 숫자가 5인 경우 R은 항상 가장 가까운 짝수로 반올림합니다. 
# 예를 들어 round(1.5) 및 round(2.5)는 모두 2를 반환하나 round(-4.5)는 -4를 반환합니다.

round(1.5)
round(2.5)
round(-4.5)

# 

dfData = data.frame(
    sKey = c("국어", "수학", "영어")
    , nValue = c(70, 100, 85)
)

xAxis = 1:nrow(dfData)
xAxisLabel = dfData$sKey
yAxis = dfData$nValue

plot(xAxis, yAxis, xaxt = "n", type = "b", xlab = "", ylab = "점수")
axis(1, at = xAxis, labels = xAxisLabel)


# 
library(ggplot2)

dfData = data.frame(
    nXaxis = c(1, 2, 3, 4)
    , nYaxis = c(1, 4, 3, 4)
)


ggplot(data = dfData, aes(x = nXaxis, y = nYaxis, size = nYaxis)) +
    geom_point()

#
library(ggplot2)
library(sf)

mapShp = sf::read_sf("INPUT/CTPRVN_201905/TL_SCCO_CTPRVN.shp")


ggplot() +
    geom_sf(data = mapShp, aes(fill = CTP_ENG_NM), color = "black")


#
library(ggplot2)
library(tidyverse)

dfData = data.frame(
    xAxis = c(1:19)
    , nClass1 = c(2.2, 2, 4.5, 6, 3, 7, 2.5, 2, 1.5, 1, 3, 3, 3.5, 2, 3, 2, 2.5, 2.8, 2)
    , nClass2 = c(2, 2.8, 3, 4, 5, 4, 3, 4, 3, 4, 3, 2, rep(NA, 7))
    , nClass3 = c(3.1, 3, 3.5, 3.9, 3.1, 3.3, 3.4, 4, 4.3, 4.2, 4.1, 4, 4.5, 4.5, 3.8, 3.5, 3, rep(NA, 2))
)

dfDataL1 = dfData %>%
    tidyr::gather(key = type, value = "value", -xAxis)

ggplot(data = dfDataL1, aes(x = xAxis, y = value, colour = type)) +
    geom_point() +
    geom_line()

dfDataL2 = dfDataL1 %>%
    dplyr::group_by(type) %>%
    dplyr::summarise(nMeanValue = mean(value, na.rm = TRUE))

ggplot(data = dfDataL2, aes(x = type, y = nMeanValue)) +
    geom_point()

# 
library(NIADic)
library(rJava)
library(KoNLP)
# useNIADic()
library(memoise)
library(dplyr)

# install.packages("devtools")
# library(devtools)
# install_github('haven-jeon/NIADic/NIADic', build_vignettes = TRUE)

extractNoun("대한민국의 영토는 한반도와 그 부속도서로 한다")

# 

library(ggplot2)

dfData = data.frame(
    xAxis = c(1:19)
    , nClass1 = c(2.2, 2, 4.5, 6, 3, 7, 2.5, 2, 1.5, 1, 3, 3, 3.5, 2, 3, 2, 2.5, 2.8, 2)
    , nClass2 = c(2, 2.8, 3, 4, 5, 4, 3, 4, 3, 4, 3, 2, rep(NA, 7))
    , nClass3 = c(3.1, 3, 3.5, 3.9, 3.1, 3.3, 3.4, 4, 4.3, 4.2, 4.1, 4, 4.5, 4.5, 3.8, 3.5, 3, rep(NA, 2))
)


for (iCount in 1:3) {
    sColName = colnames(dfData)[iCount + 1]
    
    ggplot(data = dfData, aes(x = xAxis, y = !!as.name(sColName))) +
        geom_point() +
        geom_line() +
        ggsave(filename = paste0("FIG/", sColName, ".png"))
    
}

# 

# 현재 작업 디렉터리 읽기
getwd()

# 현재 작업 디렉터리 셋팅
setwd(getwd())

# 파일 읽기 (현재 작업 디렉터리 하위에 위치)
dfData = read_excel(paste0(getwd(), "/data/data_ex1.xlsx"), header = TRUE)

# 

library(ggplot2)
library(sf)
library(tidyverse)
library(fs)
library(leaflet)

dfData = data.frame(
    sCity = c("서울특별시", "인천광역시", "경기도", "강원도", "대전광역시", "세종특별자치시", "충청남도", "충청북도", "광주광역시", "전라남도", "전라북도", "부산광역시", "울산광역시", "대구광역시", "경상남도", "경상북도", "제주특별자치도")
    , nVal = c(0.1, 0.5, 0.1, 0.5, 0.5, 0.1, 0.5, 0.5, 0.1, 0.1, 0.1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.1)
)

mapShp = sf::read_sf("INPUT/CTPRVN_201905/TL_SCCO_CTPRVN.shp", options = "ENCODING=CP949")

mapShpL1 = mapShp %>%
    dplyr::left_join(dfData, by = c("CTP_KOR_NM" = "sCity"))


ggplot(data = mapShpL1) +
    geom_sf(aes(fill = nVal), color = "black") 


mapShpL2 = st_transform(mapShpL1, "+init=epsg:4326")
nVal = mapShpL1[["nVal"]]
fnPal = colorNumeric(palette = "viridis", domain = nVal)

leaflet::leaflet() %>%
    addTiles() %>%
    addPolygons(
        data = mapShpL2
        , color = fnPal(nVal)
        , label = as.character(nVal)
        , stroke = FALSE
    ) %>% 
    addLegend(pal = fnPal
              , values = nVal
              , title = "Value"
    )

# R프로그래밍에서 빈이라는게 뭔가요??

dfData = data.frame()

dfData

length(dfData)

# reorder이 순서를 어떻게 바꾸는건가요??

library(dplyr)

dfData = iris

dplyr::tbl_df(dfData)

# "Sepal.Length"를 기준으로 오름차순 정렬
dfData %>%
    dplyr::arrange(Sepal.Length) %>%
    tbl_df()

# "Sepal.Length"를 기준으로 내림차순 정렬
dfData %>%
    dplyr::arrange(desc(Sepal.Length)) %>%
    tbl_df()

# filter(flights, month %in% c(11,12))에서 (11,12)앞에붙은 c는 뭔가요??

library(dplyr)
library(nycflights13)

dfData = flights

dplyr::tbl_df(dfData)

# 11월 및 12월에 해당하는 데이터 정제
dfData %>%
    dplyr::filter(month %in% c(11, 12))

# 내용을 정정하눈 단축어라는데 뭘고치는거고 Cmd는 뭔가요? 명령프롬프트약자아닌가요...?
ctrl+alt+down
ctrl+alt+down
ctrl+alt+down
ctrl+alt+down
ctrl+alt+down

# 두번째 사진은 보기랑 비교해서 풀이 해주세요 ㅜㅜ
A = cbind(
    c(1, 2, 3)
    , c(4, 5, 6)
    , c(7, 8, 9)
)

colnames(A) = c("A", "B", "C")
rownames(A) = c("r1", "r2", "r3")

A[ , "A"]
A[ , "A"]
A[-c(2,3), ]
A[ , -c(2:3)]

# "황소걸음" 2019 데이터 분석 준전문가 한 권으로 끝내기 P.241 에 해당하는 배깅 부분입니다.
# 교재에 나와있는 것과 똑같이 했는데 계속 에러가 뜨는데 어떻게 해결해야 할지 모르겠네요,,,

library(adabag)
library(rpart)

data(iris)

set.seed(1)


train = c(
    sample(1:50, 25)
    , sample(51:100, 25)
    , sample(101:150, 25)
)


iris.bagging = bagging(
    formula = Species ~ .
    , data = iris[train, ]
    , mfinal = 10
    , control = rpart.control(maxdepth = 1)
)

iris.bagging



f = function(x, a) {
    return((x - a) ^ 2)
}

f(1:2, 3)


# 여기서 .[[1]]이 뭔가요??

library(stringr)

dfData = "albcld" %>%
    str_split("\\/")

dfData[1]


# 9번 어떻게 하는건가요?
d1 = 1:50
d2 = 51:100

nSortD1 = sort(d1)[1:10]
nSortD2 = sort(d2)[1:10]

d3 = c(nSortD1, nSortD2)
d3    

# 6-12모르겠어요ㅜㅜ

v1 = 51:90

# 6번
for (iCount in v1) {
    if ((iCount %% 7) == 3) {
        cat(iCount, "\n")
    }
}

# 7번 
for (iCount in 1:length(v1)) {
    iVal = v1[iCount]
    if ((iVal %% 7) == 0) {
        
        iVal = 0
    }
    
    cat(iVal, "\n")
}

# 8번
iSum = 0
for (iVal in v1) {
    if ((iVal %% 2) == 0) {
        iSum = iSum + iVal
    }
}

cat(iSum, "\n")



# 12번
for (iCount in v1) {
    if ((iCount %% 7) != 0) {
        cat(iCount, "\n")
    }
}

# 혼자 공부 중인데 잘 모르겠어요
# 도와주세요ㅜㅜ

library(tidyverse)

dfData = data.frame(
    sKey = c("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
    , iVal = c(10, 8, 14, 15, 9, 10, 15, 12, 9, 7, 8, 7)
)

# (1) 풀이
dfData %>%
    dplyr::summarise(iSum = sum(iVal, na.rm = TRUE))

# (2) 풀이
dfData %>%
    dplyr::filter(sKey == "MAR")

# (3) 풀이
dfData %>%
    dplyr::filter(sKey %in% c("JUL", "SEP"))

# (4) 풀이
dfData %>%
    dplyr::filter(sKey %in% c("JAN", "FEB", "MAR", "APR", "MAY", "JUN")) %>%
    dplyr::summarise(iSum = sum(iVal, na.rm = TRUE))

# (5) 풀이
dfData %>%
    dplyr::filter(! sKey %in% c("JAN", "FEB", "MAR", "APR", "MAY", "JUN")) %>%
    dplyr::summarise(iSum = sum(iVal, na.rm = TRUE))

# 근데 제가 아직 if나 for이런 부분을 공부하지 않아서요ㅜㅜ
# 명령어를 간단하게 해주실 수 있을까요?

# 조건문 : if, else
# 조건에 따라 분류할 경우 if문, else문을 사용해야 합니다. 
# "조건식"은 TRUE 또는 FALSE 논리 값을 하나만 반환하는 식을 넣어야 합니다.

x = 2

# if (조건식) 
if (x > 0) {      
    
    # 조건 표현식이 TRUE 일 때 실행되는 부분
    sum(1:x, na.rm = TRUE)                   
} else {
    
    # 조건식이 FALSE 때 실행되는 부분 
    x = -x                    
    sum(1:x, na.rm = TRUE)
}

# 반복문 : for
# for (변수 in 목록)에서 목록 요소가 순차적으로 수행된다.
# 따라서 반복 횟수는 "목록의 개수"가 된다.

x = 0             
# for (변수 in 목록) 
for (i in c(1:5)) {
    
    # 벡터와리스트의 요소가 비우지 않는 한 표현식이 반복된다
    x = x + 1                   
}

x

# 산점도안에 결정계수(R-square)가 있고 R-square를 표현하는 line을 만드는 방법이 궁금합니다!

dfData = data.frame(
    iCal = c(1, 2, 3, 4, 5)
    , iVal = c(3, 6, 8, 10, 11)
)

xAxis = dfData$iCal
yAxis = dfData$iVal

# 산점도 
plot(xAxis, yAxis)

# 선형 회귀선
oLmFit = lm(yAxis ~ xAxis)
abline(oLmFit, col = "red")

# 범례 생성
oSummary = summary(oLmFit)

nRsquare = oSummary$adj.r.squared
nPvalue = oSummary$coefficients[2,4]

oLegend = vector("expression", 2)
oLegend[1] = substitute(expression(R^2 == nRsquareList), 
                        list(nRsquareList = format(nRsquare, digits = 3)))[2]
oLegend[2] = substitute(expression(P-Value == nPvalueList), 
                        list(nPvalueList = format(nPvalue, digits = 2)))[2]

legend("bottomright", legend = oLegend, bty = "n")


# R을 설치하고 dplyr 패키지를 설치하던 중 하기와 같은 메세지가 뜨면서 설치가 안되네요.
# Error in if (any(diff)) { : TRUE/FALSE가 필요한 곳에 값이 없습니다.



# r로 웹페이지 크롤링
# 이런 자료를 크롤링해서 엑셀로 정리하고싶은데 어떻게 해야하나요? 이게 1페이지인데 끝 페이지까지요

library(rvest)
library(tidyverse)
library(data.table)

Sys.setlocale("LC_ALL", "English")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")

sUrl = paste0("https://franchise.ftc.go.kr/user/extra/main/62/firMst/list/jsp/LayOutPage.do?column=&search=&searchFirRegNo=&selUpjong=&selIndus=&srow=999999&spage=1")

dfData = xml2::read_html(sUrl) %>%
    rvest::html_nodes(xpath = paste0('//*[@id="txt"]/table')) %>%
    rvest::html_table()

dfDataL1 = dfData[[1]]

dplyr::tbl_df(dfDataL1)

# Write Using L3 Data Frame 
data.table::fwrite(
    dfDataL1
    , sep = ","
    , file = paste0("OUTPUT/dfDataL1_", format(Sys.time(), "%Y%m%d%H%M%S"), ".csv")
    , append = FALSE
    , row.names = FALSE
    , col.names = TRUE
    , dateTimeAs = "write.csv"
    , na = NA 
)

# https://franchise.ftc.go.kr/user/extra/main/62/firMst/list/jsp/LayOutPage.do?column=&search=&searchFirRegNo=&selUpjong=&selIndus=&srow=999999&spage=1
# 여기 정보공개서의 영업표지나 상호를 누르면 링크가 있어서 타고 연결이 되는데 그건 같이 못하나요? 같이 크롤링 되게요!

library(rvest)
library(tidyverse)
library(data.table)

Sys.setlocale("LC_ALL", "English")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")

fnGetUrlHref = function(sUrl, sXpath) {
  xml2::read_html(sUrl) %>%
    rvest::html_nodes(xpath = paste0(sXpath)) %>%
    rvest::html_attr("href") 
}

sUrl = paste0("https://franchise.ftc.go.kr/user/extra/main/62/firMst/list/jsp/LayOutPage.do?column=&search=&searchFirRegNo=&selUpjong=&selIndus=&srow=9999&spage=1")

dfData = xml2::read_html(sUrl) %>%
  rvest::html_nodes(xpath = paste0('//*[@id="txt"]/table')) %>%
  rvest::html_table()

dfDataL1 = dfData[[1]] %>%
  dplyr::mutate(
    sNameLink = paste0("https://franchise.ftc.go.kr", fnGetUrlHref(sUrl, '//*[@id="txt"]/table/tbody/tr[*]/td[2]/a'))
    , sCompLink = paste0("https://franchise.ftc.go.kr", fnGetUrlHref(sUrl, '//*[@id="txt"]/table/tbody/tr[*]/td[3]/a'))
    )


dplyr::tbl_df(dfDataL1)



# library(rvest)
# library(pforeach)
# 
# i = 1
# 
# npforeach(i=1:2, .c=rbind)({
#   cat(i, "\n")
#   url <- sprintf("http://lain.gr.jp/voicedb/profile/list/cid/%d", i)
#   
#   # Sys.sleep(10)
#   html <- html(url)
#   
#   li_nodes <- html %>% html_nodes(xpath = '/html/body/div/div/div[2]/ul/li')
#   
#   url <- li_nodes %>% html_nodes(xpath = "a") %>% html_attr("href")
#   name <- li_nodes %>% html_nodes(xpath = "a") %>% html_text %>% iconv("utf8", "cp932")
#   sex <- li_nodes %>% html_nodes(xpath = "img") %>% html_attr("title") %>% iconv("utf8", "cp932")
#   
#   data.frame(url=url[-(1:4)], name=name[-(1:4)], sex)
# }) -> result


# 인터넷에 올라온 웹스크래핑 설명을 본 후 제가 직접 활용해보려 하니 바로 막혀버렸습니다 ㅠㅠ
# 지금 맞닥뜨린 문제는 입력해야 할 url의 소스 코드가 뭔지 모르겠다는 것입니다.
# 크롬 개발자 도구에서 해당 페이지 html의 어떤 태그를 html_nodes()에 넣어야 하고, 이 태그가 어떤 원리 또는 이유에서 선택되는지가 궁금합니다. 
# 설명글에서는 그냥 크롬 개발자 도구 스크린샷 찍은 것을 보여준 후 이러이러 하니 "searchCont라는 클래스가 붙은 디비전(divisodn) 아래 링크가 들어 있다"와 같이 간단히 언급하고 넘어가서, 개발자 도구를 봐도 어떤 태그를 선택해야 하는지 모르겠습니다.. 흑
# 제가 해본 코드는 다음과 같습니다. 
# 오유 시사게시판 게시글 내용을 스크래핑 해보려 했는데 망이네요 ㅜ
# 일단, 첫 번째 페이지 url의 html을 불러온 부분( html <- read_html(urls[1]) )부터 설명글과 달리 저는 xml_document가 아닌 html_document가 뜹니다 ; 
# html2, html3 리스트에는 아무것도 들어가지 않은 걸로 뜨고요.

library(foreach)
library(rvest)
library(tidyverse)
library(data.table)
library(dplyr)

Sys.setlocale("LC_ALL", "English")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")

# Option
iPage = 10

fnGetUrlText = function(sUrl, sXpath) {
    read_html(sUrl) %>%
        html_nodes(xpath = paste0(sXpath)) %>%
        html_text() 
}

dfDataL1 = data.frame()

foreach::foreach(iCount = 1:iPage, .combine=c) %do% {
  
  cat(iCount, "\n")
  sUrl = paste0("http://www.todayhumor.co.kr/board/list.php?table=sisa&page=", iCount)
  
  dfData = data.frame(
    arrNumber = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[1]/a')[1:30]
    , arrTitle = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[3]/a')
    , arrsName = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[4]/a')
    , arrDate = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[5]')
    , arrCount = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[6]')
    , arrRecom = fnGetUrlText(sUrl, '/html/body/div[4]/div/div/table/tbody/tr[*]/td[7]')
  )
  
  dfDataL1 = dplyr::bind_rows(dfDataL1, dfData)
}
  
dplyr::tbl_df(dfDataL1)


# RA_gbm05 <- gbm(label ~ ., RA, distribution = "bernoulli", n.trees = 50, cv.folds=5)
# GBM 분석 코드를 작성을 하였고요.
# 이것을 토대로 교차 검증 값에 대한 점수 값을 구하려 합니다.
# 어떻게 해야 할 까요???
# 파이썬에서는"cross_val_score" 이런 코드를 사용 하던데,
# R 코드로는 어떻게 작성을 해야 할 까요???

library(rsample)      # data splitting 
library(gbm)          # basic implementation
library(xgboost)      # a faster implementation of gbm
library(caret)        # an aggregator package for performing many machine learning models
library(h2o)          # a java-based platform
library(pdp)          # model visualization
library(ggplot2)      # model visualization
library(lime)         # model visualization

# Create training (70%) and test (30%) sets for the AmesHousing::make_ames() data.
# Use set.seed for reproducibility

set.seed(123)
ames_split = initial_split(AmesHousing::make_ames(), prop = 0.7)
ames_train = training(ames_split)
ames_test  = testing(ames_split)

# for reproducibility
set.seed(123)

# train GBM model
gbm.fit = gbm(
  formula = Sale_Price ~ .,
  distribution = "gaussian",
  data = ames_train,
  n.trees = 10000,
  interaction.depth = 1,
  shrinkage = 0.001,
  cv.folds = 5,
  n.cores = NULL, # will use all cores by default
  verbose = FALSE
)  

# print results
print(gbm.fit)
## gbm(formula = Sale_Price ~ ., distribution = "gaussian", data = ames_train, 
##     n.trees = 10000, interaction.depth = 1, shrinkage = 0.001, 
##     cv.folds = 5, verbose = FALSE, n.cores = NULL)
## A gradient boosted model with gaussian loss function.
## 10000 iterations were performed.
## The best cross-validation iteration was 10000.
## There were 80 predictors of which 45 had non-zero influence.


# get MSE and compute RMSE
sqrt(min(gbm.fit$cv.error))
## [1] 29133.33

# plot loss function as a result of n trees added to the ensemble
gbm.perf(gbm.fit, method = "cv")


# R을 설치하고 dplyr 패키지를 설치하던 중 
# 하기와 같은 메세지가 뜨면서 설치가 안되네요.
# Error in if (any(diff)) { : TRUE/FALSE가 필요한 곳에 값이 없습니다.
# 우찌 해야 될까요?

# R v3.4에서 발생되는 오류로 판단됩니다.

install.packages("tidyverse",dependencies = TRUE,repos = "http://cran.us.r-project.org")

# https://stackoverflow.com/questions/38948664/error-when-install-package-dplyr-in-r-error-in-install-packages-missing-value/44160760


library(KoNLP)

Sys.setenv(JAVA_HOME="C:\\Users\\jmpark\\AppData\\Local\\Programs\\AdoptOpenJDK\\")
Sys.getenv("JAVA_HOME")

useSejongDic()

sSentence = "아버지가 방에 스르륵 들어가신다."

extractNoun(sSentence)

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com

 

 

 

 

 

 

본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음