ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • sql을 활용하기 위한 라이브러리 sqldf
    Data Analysis/R 패키지 2022. 10. 26. 23:41

    Table of Contents

    1. Introduction
    2. sqldf 라이브러리
    3. Reference

     

    Introduction

     대용량 데이터가 데이터베이스에 관리되고 있으며, 분석가들도 데이터베이스를 이용한 분석 사례가 늘고 있다. 이에 따라 분석가들에게도 SQL을 다루는 스킬이 반드시 필요한 시대가 되었다. 다만 데이터베이스를 설치하고 테이블을 설계하여 데이터를 적재하는 과정을 익히기 보다 SQL 자체를 익히기에 도움이 될 수 있는 라이브러리가 존재한다. 물론, 해당 라이브러리가 개발됐을 때에는 데이터베이스에서 데이터를 추출할때 SQL을 활용할 수 있도록 설계된 라이브러리이다. 다만, 데이터베이스에 연결하지 않더라도 SQL을 사용할 수 있기 때문에 해당 라이브러리는 R에서 SQL을 익히기에 적합한 라이브러리라고 생각된다.

    [그림 1-1] SQL 예제(출처: Manipulate R Data Frames Using SQL)

     

    sqldf 라이브러리

     R에서 SQL을 처리하기 위한 라이브러리로 sqldf가 있다. sqldf 함수의 기본 구조는 다음과 같다. DB connector와 user_id, password, host, port 정보를 입력하면 데이터베이스에서 데이터를 불러와서 sql문을 이용하여 데이터 가공이 가능하다.

     

    sqldf(x,
          stringAsFactors = FALSE,
          row.names = FALSE,
          envir = parent.frame(),
          method = getOption("sqldf.method"),
          file.format = list(), dbname, drv = getOption("sqldf.driver"),
          user, password = "", host = "localhost", port,
          dll = getOption("sqldf.dll"),
          connection = getOption("sqldf.connection"),
          verbose = isTRUE(getOption("sqldf.verbose")))

     

    물론, r에 불러온 데이터를 sqldf 함수를 이용해서 쿼리문처럼 처리도 가능하다. iris 데이터를 이용해서 최댓값, 최솟값, 평균, 합계를 계산해보았다.

    > install.packages("sqldf")
    > library(sqldf)
    >
    > t_data = iris
    > colnames(t_data) <- c("S_length", "S_width", "P_length", "P_width", "Species")
    > head(t_data)
      S_length S_width P_length P_width Species
    1      5.1     3.5      1.4     0.2  setosa
    2      4.9     3.0      1.4     0.2  setosa
    3      4.7     3.2      1.3     0.2  setosa
    4      4.6     3.1      1.5     0.2  setosa
    5      5.0     3.6      1.4     0.2  setosa
    6      5.4     3.9      1.7     0.4  setosa
    > 
    > sqldf("Select max(S_length) as SL,
    +               min(S_width) as SW,
    +               avg(P_length) as PL,
    +               sum(P_width) as PW
    +        From t_data
    +        where S_length > 0
    +        group by Species")
       SL  SW    PL    PW
    1 5.8 2.3 1.462  12.3
    2 7.0 2.0 4.260  66.3
    3 7.9 2.2 5.552 101.3

     

    Reference

    "sqldf", G. Grothendieck, https://cran.r-project.org/web/packages/sqldf/sqldf.pdf

    댓글

Designed by Tistory.