[통계 R 언어] R에서 DB 사용(Sqlite)

R에서 DB를 사용해보자. 대부분 R을 사용하고 처음에는 기본으로 제공해주는 iris데이터를 다루다가 read.csv, write.csv 함수를 배우면서 csv를 통해 데이터를 접하게 된다. 그러다 보니 자연스럽게 DB와는 거리가 멀어지게 되는데 막상 DB를 구축 하는데 꽤나 어려움을 겪을수 있다. 이번에 소개할 Sqlite는 다른 여러종류의 DB에 비해 가볍고 설치도 쉽기때문에 접근성도 좋고 개념을 알아가는데 도움이 될 수 있다. 또한, 이를 공부 하기 위해서는 간단한 SQL지식이 필요한데 여기서는 간단한 정도만 다루도록 한다.

SQLite

SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. 영어권에서는 ‘에스큐엘라이트(ˌɛskjuːɛlˈlaɪt)’[3]또는 ‘시퀄라이트(ˈsiːkwəl.laɪt)’[4]라고 읽는다. 일반적인 RDBMS에 비해 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도에 손색이 없다. 또 API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는 데 하나의 파일만을 사용하는 것이 특징이다. 버전 3.3.8에서는 풀텍스트 검색 기능을 가진 FTS1 모듈이 지원된다. 컬럼을 삭제하거나 변경하는 것 등이 제한된다. 구글 안드로이드 운영 체제에 기본 탑재된 데이터베이스이기도 하다. (출처: 위키백과(SQLITE))

그럼 이제 R에서 Sqlite DB를 구축하고, 사용해보도록 하자.

SQLite 자료형

그전에, SQLite의 자료형을 알아보도록 하자. R에서 쓰는 자료형과 다르기 때문에 이를 미리 파악해 두어야할 필요가 있다. 미리 알아두어야 할게 있는데, SQLite에는 Date타입이 존재 하지 않다. 그래서 DB에 집어 넣기 위해서는 TEXT로 변환 시켜줘야 한다.

패키지 설치

우선 RSQLITE, DBI패키지를 설치 한다. RSQLITE는 R에서 Sqlite 인터페이스를 제공해주며, DBI는 R과 DB와의 인터페이스 함수를 제공해준다.

library(DBI)
library(RSQLite)

DB 생성

dbConnet() 함수를 통해 다음의 코드를 사용해준다. dbConnect()안에 SQLite()는 드라이버명이고, dbname에는 우리가 만들 DB이름을 적어 준다. 다음의 코드를 사용하고 확인해보면 test_sqlite.sqlte라는 파일이 생성된걸 확인할 수 있다.

con <- dbConnect(SQLite(), 
                 dbname = "test_sqlte.sqlite")

Table 생성

간단하게 iris 데이터를 생성해보자. 테이블 생성방법은 두가지인데 dbSendQuery()함수를 사용해서 쿼리문을 사용해서 생성하던가, dbWriteTable()함수를 사용해 생성과 동시에 통째로 집어 넣는 방법이 있다. dbWriteTable()는 마지막에 해보고 우선 쿼리문을 사용해서 테이블을 생성해보자. dbSendQuery()를 사용한다. 기본형식은 dbSendQuery(con, “query”)이며 con은 앞서 해두었던 dbConnect에 만들어 둔걸 사용한다. iris데이터를 예로 들어보자. 쿼리문은 구글을 통해 참고 하도록 하자. 후에 시간이 된다면 정리 하도록 하겠다.

dbSendQuery(con, "CREATE TABLE iris_db (
            Sepal_Length REAL,
            Sepal_Width REAL, 
            Petal_Length REAL, 
            Petal_Width REAL, 
            Species TEXT
            )")
## <SQLiteResult>
##   SQL  CREATE TABLE iris_db (
##             Sepal_Length REAL,
##             Sepal_Width REAL, 
##             Petal_Length REAL, 
##             Petal_Width REAL, 
##             Species TEXT
##             )
##   ROWS Fetched: 0 [complete]
##        Changed: 0

테이블 확인

DB가 잘 생성 되었는지 확인해보자. dbExistsTable(con, “db 이름”) 의 기본 형식을 띄며 TRUE/FALSE로 확인이 가능하다.

dbExistsTable(con, "iris_db")
## Warning: Closing open result set, pending rows
## [1] TRUE

테이블 리스트 확인

두번째 방법으로는 테이블의 리스트를 확인 해보는것이다. dbListTables()를 통해 모든 테이블리스트 조회가 가능하다.

dbListTables(con)
## [1] "iris_db" "mytable"

테이블에 데이터 넣기

이번엔 테이블에 데이터를 넣어보자. INSERT문을 사용하며 dbSendQuery함수에 적용시켜 주면 된다. INSERT문으로 데이터를 집어 넣으면 한줄씩 밖에 넣을수 없다.

dbSendQuery(con, "INSERT INTO iris_db
                  (Sepal_length, Sepal_width, Petal_length, Petal_width, Species)
                  VALUES
                  (5.1, 3.5, 1.4, 0.2, 'setosa')")
## <SQLiteResult>
##   SQL  INSERT INTO iris_db
##                   (Sepal_length, Sepal_width, Petal_length, Petal_width, Species)
##                   VALUES
##                   (5.1, 3.5, 1.4, 0.2, 'setosa')
##   ROWS Fetched: 0 [complete]
##        Changed: 1

테이블 데이터 확인

이제 집어 넣은 데이터를 확인 해보자. dbGetQuery()함수안에 SELECT문을 사용해서 Insert한 데이터를 확인 해보자.

dbGetQuery(con, "SELECT * FROM iris_db")
## Warning: Closing open result set, pending rows
##   Sepal_Length Sepal_Width Petal_Length Petal_Width Species
## 1          5.1         3.5          1.4         0.2  setosa

한번에 데이터 집어넣기

이번에는 한번에 데이터 전부를 넣어 보자. dbWriteTable()함수를 사용해 데이터 전체를 테이블에 집어 넣어 보려 한다. 기본 형식은 dbWriteTable(con, “db 이름”, db)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

dbWriteTable(con, "iris_db_2", iris)

데이터 확인

dbGetQuery(con, "SELECT * FROM iris_db_2") %>% 
  datatable(options = list(dom = 't'))

테이블 삭제

dbRemoveTable(con, "iris_db")
dbRemoveTable(con, "iris_db_2")

연결 종료

dbDisconnect(con)

총평

이렇게 R과 SQLite를 사용해 간단하게나마 DB에 대해 알아보았다. 한동안 기술 블로그 글이 뜸했는데, 스스로 생각에 많이 잠기게 되었었다.

  • 새로운걸 공부하고 어떤 내용을 블로그에 옮겨야 하는가
  • 이미 알고 어느정도 당연해진건 어떻게 블로그에 옮겨야 하는가

이런 저런 생각들이 많아 지다보니 블로깅을 하는데 몸이 멈칫하게 되기도 하더라. 생각해보니 블로그를 시작할때 공부했던걸 정리하는데 큰 초점을 두었던거 같다.

구글링을 하는데있어서, 제가 스스로 제 블로그를 참고 하도록 계속 정리하자. 이제야 맘이 조금 편해진다.

 

[출처] https://unfinishedgod.netlify.app/2020/07/24/r%EC%97%90%EC%84%9C-db-%EC%82%AC%EC%9A%A9sqlite/

 

 

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86126
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78629
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95347
46 [데이터분석 & 데이터 사이언스] 수많은 데이터 사이언티스트들이 직장을 떠나는 이유는 무엇인가? file 졸리운_곰 2025.03.09 901
45 [데이터분석][파이썬][python] 한글 글꼴 사용 (matplotlib) 졸리운_곰 2024.04.18 1360
44 [데이터분석 & 데이터 사이언스] 데이터에 관한 꼭 알아야 할 오해와 진실 12가지 졸리운_곰 2024.01.17 1315
43 [데이터분석][파이썬][python] Awesome Dash Awesome file 졸리운_곰 2021.07.10 2338
42 [데이터분석][파이썬][python] ???? Introducing Dash ???? file 졸리운_곰 2021.07.10 1606
41 [dataset] (한글) 욕설 감지 데이터셋 file 졸리운_곰 2021.05.12 1559
40 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1762
39 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1602
38 [데이터분석][데이터 사이언스][python][Dash] Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화 file 졸리운_곰 2021.03.28 1501
37 [데이터분석][머신러닝] When not to use machine learning or AI Adventures in wishful thinking, nonstationarity, and pattern-finding / 기계 학습 또는 AI를 사용하지 않아야하는 경우 희망찬 사고, 비정상 성, 패턴 찾기의 모험 file 졸리운_곰 2021.03.28 21621
36 [MSA][머신러닝] 쿠버네티스 기반의 End2End 머신러닝 플랫폼 Kubeflow #1 - 소개 file 졸리운_곰 2021.03.21 1135
35 [데이터사이언스] 데이터 과학자를위한 3 가지 훌륭한 디자인 패턴, 3 Great Design Patterns for Data Scientists file 졸리운_곰 2021.03.04 779
34 [데이터분석] 시계열 데이터에 AI를 사용하는 이유는 무엇입니까? file 졸리운_곰 2021.02.28 1191
33 [데이터분석] AI 예측 및 이상 탐지를위한 시계열 데이터 전처리 file 졸리운_곰 2021.02.28 1031
32 [데이터분석] bitcoin analysis 비트 코인 시계열 데이터에 대한 AI 이상 탐지 file 졸리운_곰 2021.02.27 1588
31 [데이터분석 & 데이터 사이언스] How To Create a Data Science Portfolio Website file 졸리운_곰 2021.02.14 1823
30 [데이터수집4] 오픈 API 데이터 수집 (소셜미디어 데이터 수집) file 졸리운_곰 2020.06.12 1950
29 [데이터수집3] 관계형 데이터베이스 데이터 수집 file 졸리운_곰 2020.06.12 1317
28 [데이터수집2] 분산시스템 로그 수집 (빅데이터 수집) file 졸리운_곰 2020.06.12 1492
27 [데이터수집1] 웹 크롤링, 웹 스크래핑 file 졸리운_곰 2020.06.12 1804
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED