ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2020_하계_모각코] 03주차(07/07)
    [CNU] Mogakco 2020. 7. 7. 17:07

    WISET R프로그래밍 1~4

     

    2.1 변수

     

    일반적인 프로그래밍 언어에서 흔히 사용되고 있는 정수, 부동소수, 문자열 등은 R에서도 기본적으로 지원된다. 또한, 자료처리에 적합한 자료구조인 Vector, Matrix, Data frame, List도 사용이 가능

     

    R에서 사용되는 변수에 대해 살펴보면, R의 변수명은 문자, 숫자, '-', '.'로 구성되며, 첫 글자는 문자 또는 '.' 또한 '.'로 시작을 하면 작업 영역에 변수가 저장되지 않음

     

    R문장 사용 형식

     

    1. R콘솔창에 직접 R명령어를 입력할 경우에는 default prompt (>)  다음에 명령어를 입력
    2. 할당문 객체(변수)에 값을 할당할 때에는 <-, =, -> 기호를 사용
    3. Comment는 # 사용
    4. R 명령어가 한 줄 이상에 걸쳐서 들어올 때 연속 기호를 사용
    5. 한 줄에 여러 개의 R 명령어 문장 사용 시 semi-colon으로 구분
    6. 이전 문장 불러들이기는 소스편집기에 R 명령어만 입력하면 R 콘솔창에서 실행

     

    > a<-3
    
    > b<-4
    
    > c = a+b
    
    > print(c)
    
    [1] 7
    
    
    
    > a<-"hello"
    
    > print(a)
    
    [1] "hello"
    
    > x = "Seoul"
    
    > print(x)
    
    [1] "Seoul"
    
    
    
    > TRUE & TRUE
    
    [1] TRUE
    
    > TRUE & FALSE
    
    [1] FALSE
    
    > TRUE | TRUE
    
    [1] TRUE
    
    > TRUE | FALSE
    
    [1] FALSE
    
    > !TRUE
    
    [1] FALSE
    
    > !FALSE
    
    [1] TRUE

     

     

    진리값 : True와 False는 예약어이기 때문에 T에 False를 할당하는 것은 가능하지만 True에 False를 할당하는 것은 불가능함

     

    요인 : factor를 범주형 변수로 취급 (*범주형 변수 : 순서를 정하고 측정할 수 있는 양적 변수 또는 속성 변수라고도 함. 범주형 변수의 값은 여러 범주 또는 그룹으로 분류할 수 있음. 범주형 데이터는 논리적 순서를 가지거나 가지지 않을 수도 있음

     

    데이터는 크게 명목형 또는 순서형의 범주형 데이터와 연속형 데이터로 구분

    R에서는 범주형 데이터를 요인형 데이터 구조라고 부르고 있으며, 순서가 있는 경우는 순서형 요인이라고 해서 구분

    통계기법 도수분포표, 교차분할표, 카이제곱 검정, 로지스틱회귀분석, 그래프 막대그림, 원그림, 그림 등의 경우 범주형 변수로 변환을 해야만 하며, 데이터 탐색시 범주형 변수로 변환하여 분포 형태나 집단간 비교를 해야

     

    깊이 순서가 있는 경우라면 순서형 변수로 만들기 위해서는 "ordered()"라는 명령어를 사용을 하고 "factor()"를 호출할 때에는 반드시 "ordered=TRUE"라고 지정

     

    2.2 벡터

     

    > x <- c("a", "b", "c", "d")
    > x[2]
    [1] "b"
    > x[4]
    [1] "d"
    > x <- c("a", "b", "c", "d")
    > x[-3]
    [1] "a" "b" "d"
    > x[c(1,3)]
    [1] "a" "c"
    > x[c(2,4)]
    [1] "b" "d"
    > x[c(1:4)]
    [1] "a" "b" "c" "d"
    > length(x)
    [1] 4
    > nrow(x)
    NULL
    > NROW(x)
    [1] 4
    > "c" %in% c("a", "b", "c", "d")
    [1] TRUE
    > "e" %in% c("a", "b", "c", "d")
    [1] FALSE
    > x = 1:4
    > y = c(1, 3, 5)
    > z = c(1, 2, 3, 3, 4)
    > setequal(x, z)
    [1] TRUE
    > setequal(y, z)
    [1] FALSE
    > seq(1, 10)
     [1]  1  2  3  4  5  6  7  8  9 10
    > seq(1, 10, 2)
    [1] 1 3 5 7 9
    > 1:10
     [1]  1  2  3  4  5  6  7  8  9 10
    > rep (1:3, 5)
     [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
    > rep(1:3, each = 3)
    [1] 1 1 1 2 2 2 3 3 3
    > sequence(c(2, 5, 3))
     [1] 1 2 1 2 3 4 5 1 2 3

    2.3 모드

     

    > mode(3.1415)
    [1] "numeric"
    > mode(c(2.7182, 3.1415))
    [1] "numeric"
    > mode("big")
    [1] "character"
    > mode(list("big", "data"))
    [1] "list"
    > x = 1:7;x
    [1] 1 2 3 4 5 6 7
    > x<7
    [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
    > x>3
    [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
    > x>1 & x<7
    [1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
    > x>1 && x<7
    [1] FALSE
    > x>1 | x<7
    [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
    > x>1 || x<7
    [1] TRUE
    > x == 5
    [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
    > x != 5
    [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
    > !x == 5
    [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
    > mode(pi);typeof(pi);storage.mode(pi)
    [1] "numeric"
    [1] "double"
    [1] "double"
    > a=3.14159; mode(a)
    [1] "numeric"
    > mode(5>8)
    [1] "logical"
    > 국가 = "대한민국"; mode(국가)
    [1] "character"
    > mode(T);mode(TRUE);mode(FALSE)
    [1] "logical"
    [1] "logical"
    [1] "logical"
    > mode(1+5)
    [1] "numeric"
    > #데이터에 값이 존재하지 않으면 NA를 사용
    > #NA를 말 그대로 값이 없음을 의미하고, 손실된 값을 주로 나타낼 때 사용
    > #NA가 결측치, 데이터 존재하지 않는다는 것이고, NULL은 NULL객체, 초기화되지 않는 값, 즉 객체를 정의되지 않은 상태로 만들고자 할 때 사용

     

    BOJ 파이썬으로 2문제 이상 풀기 (DP)

     

    백준

     

    11052 카드 구매하기

    #BOJ 11052
    
    N = int(input())
    pack = list(map(int, input().split()))
    dp = []
    dp.insert(0, 0)
    dp.insert(1, pack[0])
    for i in range(2, N+1) :
        dp.insert(i, pack[i-1])
        for j in range(1, i) :
            ans = max((dp[i-j]+pack[j-1]), pack[i-1])
            if dp[i] < ans :
                dp.insert(i, ans)
    print(dp[N])

     

    1010 다리 놓기

     

    #BOJ 1010
    
    T = int(input())
    case = []
    for i in range(T) :
        N, M = map(int, input().split(' '))
        n = 1
        m = 1
        for j in range(1, N+1) :
            n *= j
        for j in range(M, M-N, -1) :
            m *= j
        case.append(m//n)
    for i in case :
        print(i)

     

    03주차 회고록

    오늘은 WISET에서 제공하는 R프로그래밍 강의를 수강한 후 직접 실습해 보았다. 빅데이터의 중요성이 커져감에 따라서 데이터를 다루는데 주로 사용하는 R 언어 또한 주목받고 있다. 예전에 책으로 독학한 적도 있어서 실습은 크게 어렵지 않았고, 관심 분야에 주로 사용되는 새로운 언어를 배울 수 있어서 좋았다. 백준 알고리즘에서는 DP 문제들을 풀었는데 갑자기 확 난이도가 상승해서 어려웠다... DP는 수학적 사고 또한 수반되어야 해결할 수 있어서 알고리즘을 구상하는데 오랜 시간이 걸리는 것 같다. 일단 DP를 마스터하고 나머지 문제들도 차근차근 해결하여 알고리즘 해결 능력을 증진시키는 것이 목표인만큼, 오랜 시간이 걸려도 성실하게 문제를 풀어야겠다는 다짐을 새로이 할 수 있었다!

    댓글

Designed by Tistory.