반응형

     정보

    • 업무명     : 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

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기