ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3주 2일차 TIL 정리
    웅진 STARTERS 부트캠프 2023. 2. 21. 18:03

    3주 2일차에는 R의 활용과 데이터 핸들링, 대략적인 시각화에 대해 학습하였다.


    연산자


    1. 산술 연산자
      - 더하기: +
      - 빼기: -
      - 곱하기: *
      - 나누기: /
      - 제곱: ^
      - 나머지: %%
      - 몫: %/%

     

    2. 비교 연산자: 파이썬과 동일

     

    3. 논리 연산자

      - 벡터화된 논리곱

    c(T,T) & c(F,T)

      - 벡터화되지 않은 논리곱

    c(T,T) && c(F,T)

      - 벡터화된 논리합

    c(T,T) | c(F,T)

      - 벡터화되지 않은 논리합

    c(T,T) || c(F,T)

      - 논리부정

    !T

    * 벡터화요소끼리 비교함

    eg) c(1,2,3)과 c(4,5,6)이 있으면 1,4 2,5, 3,6을 비교해 3개의 결과 출력

    벡터화되지 않은 논리곱을 실행할 때 다음과 같은 오류메시지도 같이 떴다.

    4. 벡터 / 매트릭스의 연산

    c(1,2,3) + c(4,5,6)

    ※ 조건문 ※


    1. if문: if, else if, else 사용

    if(flight[i]>mean(flight)){
          result <- c(result,airline[i])
    }

     

    2. 삼항연산자( ifelse )

    score <- c(30,80,65, 95)
    result <- ifelse( score >= 50, '합격', '불합격')
    print(result)

     

    3.  switch문: 입력값과 비교값이 같으면 실행          //   비교값 부분엔 문자만 들어갈 수 있다.

    x = "age"
    y = "bye"
    switch(x,'hi'='hello','age'=25,'3'='숫자','NULL')
    switch(y,'hi'='hello','age'=25,'3'='숫자','NULL')

    4.  which문: 조건에 해당하는 입력 벡터 내부 값의 인덱스 출력

    score <- c(30,90,75,82)
    which(score == 90)
    which(score >= 50)

    - which문을 활용한 특정 데이터 추출

    # 샘플데이터
    data <- airquality
    
    # 7월 31일 데이터
    data[which((data$Month==7)&(data$Day=31)),]


    반복문


    1. for: python과 문법 상에서 차이가 있다. (괄호치는 조건이 다름)

    for(i in c(1,2,3)){
      print(i)
    }

    2. while: python과 문법 상에서 차이가 있다. (괄호치는 조건이 다름)

    while (i < 100){
      i <- i * 2
      print(i)
    }


    기타 함수


    1. 결측치가 있는 데이터 파악: is.na( 데이터 ) (논리형으로 반환)

    # 샘플데이터 불러오기
    data <- airquality
    
    # 결측치 여부 확인( T / F )
    is.na(data7$Ozone)
    
    # 결측치 개수 파악
    sum(is.na(data7$Ozone))

    2. 작업경로 찾기: getwd()

    3. 작업 경로의 파일 리스트 보기: dir()

    getwd()       # 작업경로 찾기
    dir()         # 작업경로의 파일들 보기

    4. 데이터 형식 보기: class( 데이터 )

    5. 크기 보기(데이터 차원 보기): dim( 데이터 )

    class(data)
    dim(data)

    6. 마지막 차원의 데이터개수: length( 데이터 )

    7. 데이터프레임 정보: str( 데이터 )

    length(data)    # 마지막 차원의 데이터개수
    str(data)       # 크기, 미리보기 값 제공

    8. 데이터 표로 보기: View( 데이터 )         * V 대문자 주의

    View(data)  # 표로 데이터 볼 수 있음

    새로운 탭으로 열린다.


    사용자 정의 함수


    - 함수 선언

    함수명 <- function( 변수 ){ 내용 } 이 기본구조이다.

    # D_Day계산하는 함수
    
    D_Day <- function(year, month, day){
      today <- Sys.Date()
      inputDayString <- paste(year,month,day,sep='-')
      inputDay <- as.Date(inputDayString)
      Ddays <- difftime(today, inputDay)
    return(as.integer(Ddays))
    }
    print(D_Day(2022, 01, 01))

     


     데이터 불러오기


    1. txt 불러오기: read.table(파일명, header=T, sep="",col.names=c(),na.string="")

      - header: 데이터 첫 행에 열 변수명이 있으면 TRUE, 없으면 FALSE

      - sep: 구분자 지정

      - col.names: 열 변수명의 임의 설정(header가 TRUE이면 할 필요 없음)

      - na.string: 결측치를 의미하는 문자가 어떤 것인지 지정

     

    2. csv 불러오기: read.csv(파일명, header=T,col.names=c(),na.string="")

      - header, col.names, na.string이 read.table과 동일.

     

    3. excel 불러오기: read.xlsx( )

      - readxl패키지를 인스톨해 사용해야 불러오기 가능.

      - sheet가 여러 개인 경우, sheet명 지정(미지정시 첫 번째 sheet)

      - range: 데이터를 불러올 범위

      - col_names: 위의 header와 동일

      - col_types: 위의 col_names와 동일

      - na: 위의 na.string과 동일


    데이터프레임의 추출


    - 데이터프레임의 행을 기준으로 모든 열 추출:

      데이터프레임 [ 행, ]

    # 7월 31일 데이터
    data[which((data$Month==7)&(data$Day=31)),]

    - 데이터프레임 열을 기준으로 모든 행 추출:

      데이터프레임 [ ,열 ]

    # Ozone데이터
    data[,'Ozone']

    - 데이터프레임 모두 지정해 추출

      데이터프레임 [ 행, 열 ]

    # 7월 31일의의 Ozone, Solar.R
    data[which((data$Month==7)&(data$Day=31)),c('Ozone','Solar.R')]

    or

    data[which((data$Month==7)&(data$Day=31)),c(1,2)]

     


    ※ 그래프 그리기 ※


    1. 산점도와 직선그래프: plot( )

    plot(1:length(data),                     # x축 값
         data,                               # y축 값
         type='l',                           # 그래프 타입(p: 점, l: 선, b: 점&선)
         main="1991-1998 Europe Stock Daily Closing Price",        # 그래프제목
         xlab ='day',                        # xlabel
         ylab = 'price',                     # ylabel 
    #    ylim = c(90,180)                    # y축의 값 범위
    #    xlim = c(1990,2000)                 # x축의 값 범위
         )

    - 다음과 같이 plot으로 설정을 해둔 다음 line을 이용해 다중그래프를 그릴 수도 있다.

    data <-  as.numeric(AirPassengers)
    
    length(data)
    y1949 <- data[1:12]
    y1950 <- data[13:24]
    
    plot(y1949,type='o',pch=19,col='red',ylim=c(90,180),xlab='Month',ylab='passengers')
    
    # lines로 다중그래프 그리기 가능
    lines(y1950,type='o',pch=19,col='blue')
    
    # 범례 표시
    legend('topright',legend=c('1949y','1950y'),fill=c('red','blue'))

    2. 파이 차트pie( )

    data <- c(40,23,34)
    label <- c('A','B','C')
    
    pie(data,
        label=label     # 레이블 지정
    #   init.angle=0    # 시작각도 조정
    #   radius=1        # 원의 크기 조절
    )
    
    # 범례 표시
    legend('topright',legend=label,fill=c('white','skyblue','pink'))

    3. 히스토그램hist( )

    data <- airquality
    hist(data$Temp,      # 들어갈 데이터
        breaks=20,       # 범주 개수
        freq=F           # 결과 출력값 기준(T: 횟수 / F: 비율(density))
    )

    4. 박스플롯: boxplot( )

    data = c(2,1,4,5,6,7,8,23,3,4,46,4,17,6,9,12,35,56,7,8,23,2,12,21)
    
    boxplot(data,
    #       boxwex=NULL       # 상자 넓이 조정
    )


    ※ 그룹 토의 및 멘토링 내용 정리


    1. 멘토링에서 질문한 내용은 이번 주엔 없었다.

     

    2. 그룹 토의에서 나온 내용: 이중그래프에서 축을 공유할 경우 x축을 안 쓰고 y축만 작성해도 되는 것으로 생각하던 조원이 있어 이에 대해 토의해 보았는데, 결과적으로는 축을 0부터 쓸 경우 공유해도 문제가 없는 것이었다. 해당 그래프는 x축이 연도이다 보니 1900정도부터 시작했는데, 함께 그려진 line그래프는 x축이 0에 가까이 있어 표시되었지만 xlim때문에 잘려서 보였던 것이었다.

     

    3.리뷰: 멘토링 내용으로 다양한 실습을 진행했고, 본문 내용에 동시에 첨부하였다! 양이 방대하다 보니 정리가 필요했는데, 멘토링 시간에 진행한 간략한 핵심 정리가 큰 도움이 되었다. R과 파이썬이 겹치는 내용이 많다 보니 학습하기에 어려움은 크게 없었지만, 미묘하게 다른 부분들을 신경쓰다 보니 오히려 어려운 부분도 있었던 것 같다. 이후 실습 부분을 해가며 점진적으로 체화시키고자 한다.

    댓글

Designed by Tistory.