ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R]_31일차_06.04
    프로그래밍/R 2021. 6. 6. 00:17

    토요일 일정

    • 졸업작품 최종 발표

    결측치 제거 방법

    • filter() 함수
      • 결측치가 있는 행 제거 가능
    • na.omit() 함수
      • 결측치가 있는 행 한번에 제거

    결측치 제외하기

    • na.rm 옵션
      • na.rm = T (결측치 제외하고 함수 적용)

    결측치 확인

    • table() 함수
      • 빈도표 생성

    boxplot 통계치 출력하기 (176p)

    boxplot(mpg$hwy)$stats # boxplot 통계치 출력

    결측 처리하기

    # 12~37 벗어나면 NA 할당
    mpg$hwy <- ifelse(mpg$hwy < 12 | mpg$hwy > 37, NA, mpg$hwy)
    table(is.na(mpg$hwy))

    간단한 분석

    mpg %>%
        group_by(drv) %>%
        summarise(mean_hwy = mean(hwy, na.rm = T)

    요약

    # 1. 결측치 정제하기
    
    # 결측치 확인
    table(is.na(df$score))
    
    # 결측치 제거
    df_nomiss <- df %>% filter(!is.na(score))
    
    # 여러 변수 동시에 결측치 제거
    df_nomiss <- df %>% filter(!is.na(score) 
    
    # 함수의 결측치 제외 기능 이용하기
    mean(df$score, na.rm = T)
    exam %>% summarise(mean_math = mean(math, na.rm = T))
    
    # 2. 이상치 정제하기
    
    # 이상치 확인
    table(outlier$sex)
    
    # 결측 처리
    outlier$sex <- ifelse(outlier$sex == 3, NA, outlier$sex)
    
    # boxplot으로 극단치 기준 찾기
    boxplot(mpg$hwy)$stats
    
    # 극단치 결측 처리
    mpg$hwy <- ifelse(mpg$hwy < 12 | mpg$hwy > 37, NA, mpg$hwy)
    

    DB와 연결하기


    JDBC 사용

    • 문법은 R 문법 사용

    ※ SELECT만 가능 (INSERT, DELETE, UPDATE 불가능)

    mySQL

    ###   DB 연결하기 (mySQL)(RJDBC)
    install.packages("rJava")
    install.packages("RJDBC")
    
    library(rJava)
    library(RJDBC)
    
    # 데이터베이스 연결 설정
    jdbcDriver <- JDBC(driverClass="com.mysql.jdbc.Driver"
                       , classPath="C://Database/mySQL/mysql-connector-java-5.1.46.jar")
    
    conn <- dbConnect(jdbcDriver, 
                      "jdbc:mysql://localhost:3306/jspbookdb", "root", "1234")
    
    # sql을 사용해서 r로 데이터 가져오기
    r <- dbGetQuery(conn, "SELECT * FROM member")
    class(r)
    str(r)
    r

    해당 오류 발생시 해결 방법

    library(RJDBC)
    필요한 패키지를 로딩중입니다: rJava
    Error: package or namespace load failed for ‘rJava’:
     .onLoad가 loadNamespace()에서 'rJava'때문에 실패했습니다:
      호출: inDL(x, as.logical(local), as.logical(now), ...)
      에러: 공유된 객체 'C:/Program Files/R/R-3.6.2/library/rJava/libs/x64/rJava.dll'를 로드 할 수 없습니다:
      LoadLibrary failure:  지정된 모듈을 찾을 수 없습니다.
    
    에러: 패키지 ‘rJava’는 로드되어질 수 없습니다
    추가정보: 경고메시지(들): 
    1: 패키지 ‘RJDBC’는 R 버전 3.6.3에서 작성되었습니다 
    2: 패키지 ‘rJava’는 R 버전 3.6.3에서 작성되었습니다
    # 해결 방법
    # R 콘솔 창에 해당 명령어 입력 
    # 경로는 본인이 java를 다운받은 경로(폴더)로 설정할 것!!!!
    Sys.setenv(JAVA_HOME="C:/jdk1.8")

    Oracle

    #r 실행 버젼유의
    #64비트에서 실행해야 에러가 적게남
    # 첨부된 ojdbc6.jar 파일을 다운로드 받아서 C:\ 아래에 두세요.
    install.packages("rJava") # 패키지 설치
    install.packages("RJDBC")  
    
    library(rJava) # 패키지 불러오기
    library(RJDBC)  
    
    #데이터베이스 연결 설정
    jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver"
                       , classPath="C://Database/oracle_db/ojdbc6.jar") # jar 파일의 경로
    
    conn <- dbConnect(jdbcDriver, # 본인 oracleDB 계정 id, pw 입력
                      "jdbc:oracle:thin:@localhost:1521/xe", "scott", "tiger")
    
    #sql을 사용해서 r로 데이터 가져오기
    r <- dbGetQuery(conn, "SELECT * FROM scott.emp") 
    class(r)
    str(r)
    r
    ########################################################
    #거의 모든 sql문이 가능
    sql <- "select deptno, count(*) as cnt   
           from scott.emp   group by deptno
            order by deptno   "
    r <- dbGetQuery(conn, sql)
    r
    ########################################################
    #job_id별 salary의 합계는?
    
    sql <- "select job, sum(sal) as sum_sal   
           from emp   group by job   
           order by job desc   "
    r <- dbGetQuery(conn, sql)   
    r 
    #########################################################

    CH08_그래프 만들기


    ggplot2 레이어 구조

    • 1단계 : 배경 설정(축)
    • 2단계 : 그래프 추가(점, 막대, 선)
    • 3단계 : 설정 추가(축 범위, 색 표식)

    geom_point()

    • 산점도를 그리는 함수

    산점도 그래프

    1. 배경 설정 + 데이터 설정

    # x축은 displ, y축은 hwy로 지정해 배경 생성
    ggplot(data = mpg, aes(x = displ, y = hwy))

    2. 배경에 산점도 추가

    # 2. 배경 설정 + 데이터 설정 + 그래프 그리기
    ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point()

    3. 축 범위를 조정하는 설정 추가하기

    # x축 범위 3-6으로 지정
    ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point() + xlim(3, 6)
    
    # x축 범위 3-6, y축 범위 10-30으로 지정
    ggplot(data =mpg, aes(x = displ, y = hwy)) + 
      geom_point() + 
      xlim(3, 6) +
      ylim(10, 30)

    막대 그래프

    • 집단 간 차이를 표현할 때 주로 사용 (ex. 성별 소득 차이)

    mpg 데이터를 이용한 막대 그래프

    library(dplyr)
    
    df_mpg <-  mpg %>% 
      group_by(drv) %>% # 구동 방식
      summarise(mean_hwy = mean(hwy)) # 고속도로 연비
    
    df_mpg
    
    ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()
    
    # 크기 순으로 정렬하기
    # 배경 및 데이터 설정, x y축 설정 및 정렬, 산점도 그래프 설정
    ggplot(data = df_mpg, 
           aes(x = reorder(drv, -mean_hwy),  # 정렬
               y = mean_hwy)) + 
      geom_col()

    빈도 막대 그래프

    • 하나의 변수(x축) 만 지정 (y축은 count로 자동 생성)
    • 개수로 막대의 길이를 표현한 그래프
    • geom_bar() 사용
    ggplot(data =  mpg, aes(x = drv)) + geom_bar()

    원래의 데이터로 초기화 (ex. mpg 데이터)

    mpg <- as.data.frame(ggplot2::mpg)

    선 그래프

    • 시간에 따라 달라지는 데이터를 표현할 때 주로 사용
    • 시계열 데이터 란? (Time Series Data)
      • 일정 시간 간격을 두고 나열된 데이터
    • 시계열 그래프 란? (Time Series Chart)
      • 시계열 데이터를 선으로 표현한 그래프

    economics 데이터

    • 미국의 경제 지표들을 월별로 나타낸 데이터
    pce : 수십억 달러의 개인 소비 지출 (personal consumption expenditures)
    pop : 총 인구 (total population)
    psavert : 개인 저축률 (personal saving rates)
    uempmed : 실업 기간 중앙값, 주 단위, (median duration of unemployment, in weeks)
    unemploy : 수천 명의 실업자 수 (number of unemployed in thousands)
    # 선 그래프
    economics
    ?economics
    ggplot(data = economics, 
           aes(x = date, y = unemploy)) + 
      geom_line()

    Box plot

    • 데이터의 분포 (퍼져있는 형태)를 직사각형 상자 모양으로 표현한 그래프
    • 분포를 알 수 있어 데이터의 특성을 더 자세히 이해 가능
    drv : 구동 방식
    hwy : 고속도로 연비.
    ggplot(data = mpg, aes(x = drv, y = hwy)) + geom_boxplot()

    8장 정리

    # 1.

    CSV 파일 DB에 삽입하기

    Oracle

    • GUI 프로그램 (developer) 에서 테이블 선택 - 우클릭 - Import

    mySQL

    • cmd 사용 (mybox에서 관련 파일 알아보기!)
    • workbench로는 잘 안됨

    댓글

Designed by Tistory.