filter->select

1반의 수학점수를 내림차순으로 정렬하시오

조건이 있으면 filter, 조건이 없으면 select

exam %>% filter(class==1) %>% select(math) %>% arrange(desc(math))

반은 그대로인데 수학점수는 내림차순

exam %>% arrange(class,desc(math))

mutate()를 사용하면 기존 데이터에 파생변수를 만들어 추가할 수 있음

total이라는 변수명을 사용

exam %>% arrange(class,desc(math)) %>% mutate(total=math+english+science) %>% head

ifelse()적용

exam %>% mutate(test=ifelse(science>=60,“pass”,“fail”)) %>% head

oracle연습

if(“rJava” %in% installed.packages(“rJava”) == FALSE)install.packages(“rJava”) if(“DBI” %in% installed.packages(“DBI”) == FALSE)install.packages(“DBI”) if(“RJDBC” %in% installed.packages(“RJDBC”) == FALSE)install.packages(“RJDBC”) if(“memoise” %in% installed.packages(“memoise”) == FALSE)install.packages(“memoise”) if(“data.table” %in% installed.packages(“data.table”) == FALSE)install.packages(“data.table”) library(data.table) library(RJDBC) library(DBI) library(memoise) library(rJava)

Oracle 데이터를 rstudio를 가져오는 방법

x <- c(“a”) myJDBC <- JDBC(“oracle.jdbc.driver.OracleDriver”, “C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar”) conn <- dbConnect(myJDBC, “jdbc:oracle:thin:@localhost:1521:xe”, “hr”, “oracle” ) tab <- dbgetquery()

dplyr

filter. select, arrange, mutate, summarize, group_by, left_join, bind_rows

tab <- data.frame(tab) view(x) tname <- a tname <- x tab <- dbGetQuery(conn,“SELECT * FROM TAB”) tab # dplyr # filter, select, arrange, mutate, # summarise, group_by, left_join, bind_rows tab <- data.frame(tab) View(tab) tname <- tab$TNAME tname <- as.vector(tname) tname # [1] “COUNTRIES” cnt “DEPARTMENTS” dep
# [3] “EMPLOYEES” emp “EMP_DETAILS_VIEW” empd # [5] “JOBS” job “JOB_HISTORY” jobh
# [7] “LOCATIONS” loc “REGIONS” reg cnt <- data.frame(dbGetQuery(conn,“SELECT * FROM COUNTRIES”)) dep <- data.frame(dbGetQuery(conn,“SELECT * FROM DEPARTMENTS”)) emp <- data.frame(dbGetQuery(conn,“SELECT * FROM EMPLOYEES”)) empd <- data.frame(dbGetQuery(conn,“SELECT * FROM EMP_DETAILS_VIEW”)) job <- data.frame(dbGetQuery(conn,“SELECT * FROM JOBS”)) jobh <- data.frame(dbGetQuery(conn,“SELECT * FROM JOB_HISTORY”)) loc <- data.frame(dbGetQuery(conn,“SELECT * FROM LOCATIONS”)) reg <- data.frame(dbGetQuery(conn,“SELECT * FROM REGIONS”)) head(cnt) #cnt의 컬럼명을 한글로 전환하시오 str(cnt) #COUNTRY_ID 국가아이디 #COUNTRY_NAME 국가명 #REGION_ID 지역아이디 cnt <- cnt %>% dplyr::rename(국가아이디 = COUNTRY_ID, 국가명 = COUNTRY_NAME, 지역아이디 = REGION_ID ) str(cnt) #dep의 컬럼명 전환 str(dep) #Department_ID 부서아이디 #DEPARTMENT_NAME 부서명 #MANAGER_ID 매니저아이디 #LOCATION_ID 위치아이디 library(dplyr) dplyr::rename(부서아이디 = DEPARTMENT_ID) dep <- dep %>% dplyr::rename(부서아이디 = DEPARTMENT_ID, 부서명 = DEPARTMENT_NAME, 매니저아이디 = MANAGER_ID, 위치아이디 = LOCATION_ID) str(dep)

emp 의 컬럼명을 한글로 전환하시오.

그리고 First Name 과 Last Name 을

붙여서 이름 으로 된 컬럼을 추가하시오

단, 이름 간격은 띄울것. ex) James Dean

직원아이디 = EMPLOYEE_ID

이메일 = EMAIL

전화번호 = PHONE_NUMBER

채용일 = HIRE_DATE

업무아이디 = JOB_ID

연봉 = SALARY

커미션비율 = COMMISSION_PCT

매니저아이디 = MANAGER_ID

부서아이디 = DEPARTMENT_ID

str(emp) library(dplyr) emp <- emp %>% dplyr::rename(직원아이디 = EMPLOYEE_ID, 이메일 = EMAIL, 전화번호 = PHONE_NUMBER, 채용일 = HIRE_DATE, 업무아이디 = JOB_ID, 연봉 = SALARY, 커미션비율 = COMMISSION_PCT, 매니저아이디 = MANAGER_ID, 부서아이디 = DEPARTMENT_ID) %>% mutate(이름 = paste(FIRST_NAME, LAST_NAME)) #삭제하는법 emp <- subset(emp,select = -c(FIRST_NAME,LAST_NAME)) View(head(emp)) #view의 V는 대문자로 써야한다. #매달 지급하는 월급이 연봉/12를 보여주는 월급이라는 컬럼(변수)를 추가시키시오 #0단위 이하는 절삭(정수단위만 나오게하기) #파이프라인을 사용하면 전부 emp에 있는 이라는 의미로 사용이 가능합니다. emp <- emp %>% dplyr::mutate(월급=연봉 %% 12) emp %>% head emp %>% View

연봉이 10000불 이상인 사원(emp)의 목록을 이름, 직원아이디, 연봉만 구하돼

연봉은 내림차순으로 보여주십시오

emp %>% left_join(dep, by=“부서아이디”) %>% filter(emp$연봉 >= 10000) %>% select(이름,직원아이디,연봉,부서명) %>% arrange(desc(연봉))

연봉이 3000미만인 사원에게 보너스로 급여의 1%를 지급하겠다고

합니다. 대상자의 목록을 이름, 직원아이디, 연보응ㄹ 기재하고

아이디 오름차순으로 보여주십시오.

emp %>% filter(emp$연봉 < 3000) %>% mutate(보너스=연봉*1/100) %>% select(이름,직원아이디,연봉,보너스) %>% arrange(직원아이디)

emp %>% filter(연봉< 3000) %>% dplyr::mutate(보너스=연봉*0.01) %>% select(이름,직원아이디,연봉,보너스) %>% arrange(직원아이디)

단 보너스는 이번 달만 주는 것이므로 emp DF에 저장하지는 말고 1회용 임시 DF를 따로

생성해서 저장하고, 기한이 지나서는 폐기해라

보너스지급명세 <- emp %>% filter(연봉< 3000) %>% dplyr::mutate(보너스=연봉*0.01) %>% select(이름,직원아이디,연봉,보너스) %>% arrange(직원아이디) View(보너스지급명세) rm(보너스지급명세) View(보너스지급명세)

dplyr 패키지의 left_joint()을 이용하면 데이터를 가로로 합칠 수 있습니다. 괄호 안에 합칠 데이터 프레임명을 나열하고, 기준으로 삼을 변수명을 by에 지정하면 됩니다. 다음 코드를 실행하면 학생의 번호를 의미하면 id를 기준으로 두 시험 데이터를 합쳐 하나의 데이터 프레임을 만듭니다. by에 기준 변수를 지정할 때 변수명 앞뒤로 따옴표를 입력해야합니다

모든 데이터 프레임은 pk가 있어야하는데, fk를 가지고 있냐 아니냐에 따라서 부모와 자식의 관계로 나뉨, fk를 가지고 있으면 자식 프레임, 안가지고 있으면 부모 프레임, 부모 프레임은 사이즈가 크다.

by가 pk, fk이다.

연봉이 10000이상이 넘는 직원의 부서명, 이름, 연봉을 출력하시오

emp %>% left_join(dep, by=“부서아이디”) %>% filter(연봉 >= 10000) %>% select(부서명,이름,연봉)

부서명을 요구하나 emp는 부서명이 없다. dep와 합쳐야함

부서별로 연봉 평균을 구하시오

dep %>% left_join(emp,by=“부서아이디”) %>% group_by(부서명,부서아이디) %>% dplyr::summarise(연봉평균=mean(연봉,na.rm=T)) %>% arrange(desc(연봉평균))

na.rm==>값이 없는 것이 있으면 알 수 없는 값 쓸모 없는 값이 있으면 제거해라 True

보너스 컬럼을 추가하고 대상자의 목록을 이름, 직원아이디, 연봉, 보너스를 기재하고

아이디 오름차순을 보여주십시오.

group_by 부서직원끼리 표가 모인다.

프로그램에서 할당하는 개념(set), 조회하는 개념(get)

크게 함수를 두가지 측면에서 구분할 수 있다.

dl 회아싀 부서의 수를 구하랏

dep %>% dplyr::distinct(부서명) %>% count

distinct 부서명 중복 제거한 상태에서 중복된 것이 빠짐

연봉이 12000이 넘는 부서명, 이름, 연봉, 직책

View(job) job <- job %>% rename(업무아이디 = JOB_ID, 직책 = JOB_TITLE, 최소연봉 = MIN_SALARY, 최대연봉 = MAX_SALARY) View(job) View(dep) View(emp)

emp %>% left_join(job,by=“업무아이디”) %>% left_join(dep,by=“부서아이디”) %>% filter(연봉 > 12000) %>% select(부서명,이름,연봉,직책)

부서별로 가장 높은 연봉을 받은 부서아이디, 부서명, 최대연봉을 구하시오

by값은 보통 한개이다.

emp %>% left_join(job,by=“업무아이디”) %>% left_join(dep,by=“부서아이디”) %>% group_by(부서아이디,부서명) %>% summarise(max(연봉))

데이터 정제, 빠진 데이터, 이상한 데이터 제거하기(부서를 아직 할당 받지 못한 신입사원들)

결측치 찾기, 결측치를 제거하는 방법은 대문자 NA로 표기합니다. is.na 결측값이 있냐 없냐로 판단한다. is.na()를 이용하면 데이터에 결측치가 들어있는 지를 알 수 있습니다. is.na()앞에 아니다를 의미하는 기호를 !붙여서 !is.na()를 입력하면 NA가 아닌 값, 즉 결측치가 아닌 값을 의미합니다. 이 코드를 filter()에 적용하면 결측치를 제외하고 행을 추출합니다.

167p smmrise()를 이용해 요약 통계량을 산출할 때도 na.rm을 적용할 수 있습니다. na.rm(remove)하는 것을 true로 두어라.

부서아이디를 발급받지 않으면, 신입입니다.

신입의 이름과 연봉을 구하시오

emp %>% select(부서아이디,이름,연봉) %>% filter(is.na(emp$부서아이디))

emp %>% filter(is.na(emp %>% select(부서아이디))) %>% select(이름,연봉)

이상치 정제하기(outlier)