>RE::VISION CRM

R 데이터 분석

[SKK_DA1] SQL : sqldf in R 연습

YONG_X 2017. 5. 18. 16:14

#---- SQL 과 sqldf ----------

# to use sql statements to manipulate table type data
# confer   http://www.r-bloggers.com/make-r-speak-sql-with-sqldf/

# sqldf 패키지는 R에서 SQL을 사용하도록 해주는 패키지

# install.packages("sqldf")
library(sqldf)
head(mycsv)

names(mycsv)
 [1] "gender"                 
 [2] "NationalITy"            
 [3] "PlaceofBirth"           
 [4] "StageID"                
 [5] "GradeID"                
 [6] "SectionID"              
 [7] "Topic"                  
 [8] "Semester"               
 [9] "Relation"               
[10] "raisedhands"            
[11] "VisITedResources"       
[12] "AnnouncementsView"      
[13] "Discussion"             
[14] "ParentAnsweringSurvey"  
[15] "ParentschoolSatisfaction"
[16] "StudentAbsenceDays"     
[17] "Class"

# SQL의 종류
# DML (Data Manipulation Language)  데이터베이스의 내용을 조작하는

역할
# (select, insert, update, delete)
 
# DDL (Data Definition Language) 데이터베이스의 구성 요소를 정의, 변

경, 삭제하는 언어
# (create, alter, drop, rename, truncate)
 
# DCL (Data Control Language) 데이터베이스의 접근 권한을 부여, 제거

하는 언어
# (grant, revoke)


# R에서 sqldf 함수를 사용하면 표준적인 SQL 구문을 그대로 사용할 수

있음
# 결과값을 변수로 지정하면 변수는 결과 table이 data frame format으로

저장됨
# -----------

head(mycsv)

# DISTICT
qr1 <- sqldf('select distinct NationalITy from mycsv' )

# sqldf() 에서는 subquery를 사용하는데 특별한 제약이 없음
qr2 <- sqldf("select distinct Topic from mycsv where NationalITy
    in (select NationalITy from mycsv where Semester = 'F')")

qr3 <- sqldf('select NationalITy,
  count(*) as nStudent
  from mycsv
  group by NationalITy')


# SQL의 LIKE 기능을 ...  %문자열%  형식으로 비교해서 추출
qr4 <- sqldf("select * from mycsv where NationalITy like '%I%' " )

qr5 <- sqldf("select NationalITy, Raisedhands from mycsv where

NationalITy like '%I%' " )

qr6 <- sqldf("select NationalITy, Raisedhands from mycsv where

NationalITy like '%Ir%' " )

# 함수사용
qr7 <- sqldf('select NationalITy,
  min(Raisedhands) as minRaisedhands,
  max(Discussion) as maxDiscussion,
  count(distinct gender) as nGender
  from mycsv
  group by NationalITy ')


# JOIN
qr8 <- sqldf('select a.gender,
   b.maxDiscussion as maxDiscussion
     from mycsv as a
     left join (select * from qr7
       where maxDiscussion > 30) as b
     on a.NationalITy=b.NationalITy ')