SlideShare a Scribd company logo
1 of 15
R 과 SQL 비교 퀵하게 보기
박승현
ppillip@gmail.com
(http://digveloper.ppillip.com)
1. 준비물
 1.1 컴퓨터 - hardware=mac-air / os=OSX
 1.2 R - 최신판
 1.3 RStudio - 최신판
 1.4 로딩할 CSV - hw1_data.csv
2. 목표
 csv 화일을 로딩해서 R 에 넣는다 . 그리고
숙제를 해낸다 .
2. 목표
 자 .. 그럼 숙제가 먼데 ?
3. 숙제는 ? (todos)
 데이터를 올리고
 질의에 답하기 .
todo01. Ozone 의 평균값을 구해라 ( 단 ,NA 는 제거 )
todo02. Ozone 이 31 보다 크고 온도가 90 보다 클때
Solar.R 의 평균을 구하기
todo03. 6 월의 평균 Temp 를 구하기
todo04. 5 월의 Ozone 최고치를 구하기
4. 시작
 todo00. 데이터 먼저 올리자 .
# 일단 작업 공간 부터 바꾸고
 > setwd("/Users/ppillip/study/coursera/Comp
uting_for_Data_Analysis")
4. 시작
 todo00. 데이터 먼저 올리자 .
# 화일을 올리기
 > dfrm <- read.csv("hw1_data.csv")
4. 시작
 todo00. 데이터 먼저 올리자 .
# 헉 .. 테이블 하고 똑같이 생겼다 . ( 이건 RStudio 캡쳐 )
4. 시작 - 숙제 하기
 # todo01. Ozone 의 평균값을 구해라 ( 단 ,NA 는 제거 )
 SQL
select avg(Qzone) from dfrm where Qzone is not null;
 R
mean( subset(dfrm, Ozone>31 & Temp>90 ,select=Solar.R,drop=T) )
# mean( subset(dfrm, Ozone>31 & Temp>90 ,select=Solar.R ) ) ( 안됨 )
# subset 은 data.frame 을 리턴함
4. 시작 - 숙제 하기
 # todo02. Ozone 이 31 보다 크고 온도가 90 보다 클때 Solar.R 의 평균을 구
하기
 SQL ->
select avg(Solar.R)
from dfrm
where Ozone>31
and Temp>90
and Solar.R is not null;
 R ->
mean( subset(read.csv("hw1_data.csv"), Ozone>31 & Temp>90
, select=Solar.R,drop=T) )
4. 시작 - 숙제 하기
 # todo03. 6 월의 평균 Temp 를 구하기
 SQL
select avg(Temp)
from dfrm
where Month=6 ;
 R
mean( subset(read.csv("hw1_data.csv"), Month==6 ,select=Temp,drop=T) )
4. 시작 - 숙제 하기
 # todo04. 5 월의 Ozone 최고치를 구하기
 SQL
select max(Temp)
from dfrm
where Month=5
and Ozone is not null ;
 R
max(
subset(
read.csv("hw1_data.csv")
, Month==5 & !is.na(Ozone)
, select=Ozone,drop=T
)
)
5. 결론 -
 비교
 1. SQL Query
projection data match
========== ===== ======================
select 컬럼 4, 컬럼 5 from dfrm where 컬럼 1 > 20 and 컬럼 2 > 30
 2. R - 1
data match projection
===== =================== ===========
subset (dfrm, Ozone>31 & Temp>90 , select=Solar.R )
 3. R - 2
data match projection
==== ============================= ==========
dfrm [ dfrm$Ozone>31 & dfrm$Temp>90 ,c("Solar.R")]
참고
 - R 을 이용한 데이터 분석 실무
http://r4pda.co.kr/
 - r-bloggers.com
http://www.r-bloggers.com/select-operations-on-r-data-frames/
 - RStudio 메뉴얼
6. 부록 ( 개발자에게 )
 drop=T 를 이용해서
-> group_concat 처럼 ? 차트데이터 보내기
 rbind 를 이용해서 case when ( oracle decode ) 대신 해보기
 게시판 페이징
dfrm[566:570,c('sequence','start','end')]

More Related Content

Viewers also liked

Javascript and Web Performance
Javascript and Web PerformanceJavascript and Web Performance
Javascript and Web PerformanceJonathan Jeon
 
1. 미티어의 폴더구조
1. 미티어의 폴더구조1. 미티어의 폴더구조
1. 미티어의 폴더구조seung-hyun Park
 
Google Apps를 활용한 Smart Work 구축
Google Apps를 활용한 Smart Work 구축Google Apps를 활용한 Smart Work 구축
Google Apps를 활용한 Smart Work 구축선진 장
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayseung-hyun Park
 
142 리눅스와 모바일 day1-track4_2_v1.5
142 리눅스와 모바일 day1-track4_2_v1.5142 리눅스와 모바일 day1-track4_2_v1.5
142 리눅스와 모바일 day1-track4_2_v1.5NAVER D2
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Younghan Kim
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차seung-hyun Park
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습Hyun-woo Park
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기NAVER D2
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임KH Park (박경훈)
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 

Viewers also liked (19)

Javascript and Web Performance
Javascript and Web PerformanceJavascript and Web Performance
Javascript and Web Performance
 
3. collection
3. collection3. collection
3. collection
 
1. 미티어의 폴더구조
1. 미티어의 폴더구조1. 미티어의 폴더구조
1. 미티어의 폴더구조
 
5.router
5.router5.router
5.router
 
Google Apps를 활용한 Smart Work 구축
Google Apps를 활용한 Smart Work 구축Google Apps를 활용한 Smart Work 구축
Google Apps를 활용한 Smart Work 구축
 
6.accounts
6.accounts6.accounts
6.accounts
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st day
 
142 리눅스와 모바일 day1-track4_2_v1.5
142 리눅스와 모바일 day1-track4_2_v1.5142 리눅스와 모바일 day1-track4_2_v1.5
142 리눅스와 모바일 day1-track4_2_v1.5
 
Querydsl
QuerydslQuerydsl
Querydsl
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 
2. template
2. template2. template
2. template
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
Hoons닷넷 좌충우돌 10년, 그리고 새로운 패러다임
 
Owasp에 대하여
Owasp에 대하여Owasp에 대하여
Owasp에 대하여
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 

R과sql비교 퀵하게보기

  • 1. R 과 SQL 비교 퀵하게 보기 박승현 ppillip@gmail.com (http://digveloper.ppillip.com)
  • 2. 1. 준비물  1.1 컴퓨터 - hardware=mac-air / os=OSX  1.2 R - 최신판  1.3 RStudio - 최신판  1.4 로딩할 CSV - hw1_data.csv
  • 3. 2. 목표  csv 화일을 로딩해서 R 에 넣는다 . 그리고 숙제를 해낸다 .
  • 4. 2. 목표  자 .. 그럼 숙제가 먼데 ?
  • 5. 3. 숙제는 ? (todos)  데이터를 올리고  질의에 답하기 . todo01. Ozone 의 평균값을 구해라 ( 단 ,NA 는 제거 ) todo02. Ozone 이 31 보다 크고 온도가 90 보다 클때 Solar.R 의 평균을 구하기 todo03. 6 월의 평균 Temp 를 구하기 todo04. 5 월의 Ozone 최고치를 구하기
  • 6. 4. 시작  todo00. 데이터 먼저 올리자 . # 일단 작업 공간 부터 바꾸고  > setwd("/Users/ppillip/study/coursera/Comp uting_for_Data_Analysis")
  • 7. 4. 시작  todo00. 데이터 먼저 올리자 . # 화일을 올리기  > dfrm <- read.csv("hw1_data.csv")
  • 8. 4. 시작  todo00. 데이터 먼저 올리자 . # 헉 .. 테이블 하고 똑같이 생겼다 . ( 이건 RStudio 캡쳐 )
  • 9. 4. 시작 - 숙제 하기  # todo01. Ozone 의 평균값을 구해라 ( 단 ,NA 는 제거 )  SQL select avg(Qzone) from dfrm where Qzone is not null;  R mean( subset(dfrm, Ozone>31 & Temp>90 ,select=Solar.R,drop=T) ) # mean( subset(dfrm, Ozone>31 & Temp>90 ,select=Solar.R ) ) ( 안됨 ) # subset 은 data.frame 을 리턴함
  • 10. 4. 시작 - 숙제 하기  # todo02. Ozone 이 31 보다 크고 온도가 90 보다 클때 Solar.R 의 평균을 구 하기  SQL -> select avg(Solar.R) from dfrm where Ozone>31 and Temp>90 and Solar.R is not null;  R -> mean( subset(read.csv("hw1_data.csv"), Ozone>31 & Temp>90 , select=Solar.R,drop=T) )
  • 11. 4. 시작 - 숙제 하기  # todo03. 6 월의 평균 Temp 를 구하기  SQL select avg(Temp) from dfrm where Month=6 ;  R mean( subset(read.csv("hw1_data.csv"), Month==6 ,select=Temp,drop=T) )
  • 12. 4. 시작 - 숙제 하기  # todo04. 5 월의 Ozone 최고치를 구하기  SQL select max(Temp) from dfrm where Month=5 and Ozone is not null ;  R max( subset( read.csv("hw1_data.csv") , Month==5 & !is.na(Ozone) , select=Ozone,drop=T ) )
  • 13. 5. 결론 -  비교  1. SQL Query projection data match ========== ===== ====================== select 컬럼 4, 컬럼 5 from dfrm where 컬럼 1 > 20 and 컬럼 2 > 30  2. R - 1 data match projection ===== =================== =========== subset (dfrm, Ozone>31 & Temp>90 , select=Solar.R )  3. R - 2 data match projection ==== ============================= ========== dfrm [ dfrm$Ozone>31 & dfrm$Temp>90 ,c("Solar.R")]
  • 14. 참고  - R 을 이용한 데이터 분석 실무 http://r4pda.co.kr/  - r-bloggers.com http://www.r-bloggers.com/select-operations-on-r-data-frames/  - RStudio 메뉴얼
  • 15. 6. 부록 ( 개발자에게 )  drop=T 를 이용해서 -> group_concat 처럼 ? 차트데이터 보내기  rbind 를 이용해서 case when ( oracle decode ) 대신 해보기  게시판 페이징 dfrm[566:570,c('sequence','start','end')]