[통계 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 86097
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78617
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95332
1104 [표준 SQL] 퀴즈로 배우는 SQL : 신입사원 부서 배치에 따른 급여 랭킹 시뮬레이션 file 졸리운_곰 2024.08.10 1340
1103 [표준 SQL] 퀴즈로 배우는 SQL : 시작일, 종료일 사이의 휴일을 제외한 일수 구하기 file 졸리운_곰 2024.08.10 1478
1102 [표준 SQL] 권순용의 DB 이야기 : 함수 기반 인덱스의 개념과 생성 이해 file 졸리운_곰 2024.08.10 1373
1101 [표준 SQL] 퀴즈로 배우는 SQL : 계층 쿼리를 이용해 조직도 만들기 file 졸리운_곰 2024.08.10 2066
1100 [표준 SQL] SQL을 잘한다는 기준은 무엇일까 file 졸리운_곰 2024.08.10 1340
1099 [데이터베이스 모델링] 정규화와 응집도에 대한 고찰 file 졸리운_곰 2024.08.10 1730
1098 [NoSQL] 성공적인 NoSQL 도입을 위한 키포인트 : NoSQL 데이터 모델링 file 졸리운_곰 2024.08.10 1080
1097 [NoSQL] [MongoDB] NOSQL 데이터 모델링 기법 살펴보기 file 졸리운_곰 2024.08.09 1003
1096 [MariaDB] Installing the CONNECT Storage Engine 졸리운_곰 2024.08.07 1622
1095 [MariaDB] Mariadb Connect Engine , MariaDB 이기종 타 데이터베이스 링크 시스템 file 졸리운_곰 2024.08.07 1199
1094 [MySQL] [Mysql] Public key retrieval is not allowed 에러 해결 file 졸리운_곰 2024.07.27 1160
1093 [ms sql server] SQL Server 2019 Express 외부 접속을 위한 처리 file 졸리운_곰 2024.07.27 1602
1092 [ms sql server] MS-SQL 2019 Express 와 SSMS 를 설치하고 DB, 사용자 추가 후 네트워크 설정하기 file 졸리운_곰 2024.07.27 1520
1091 [데이터베이스 모델링] [SQL] 데이터베이스 관계(Relationship) 기본 (1:1, 1:N, N:N 테이블 생성 예시 포함) file 졸리운_곰 2024.07.12 2101
1090 [MySQL] dbeaver(DB 관리툴)를 이용한 mysql, mariadb table 복사하기 file 졸리운_곰 2024.07.08 1471
1089 [MySQL] [DBeaver] MySQL 연결 시 "Public Key Retrieval is not allowed" 해결하기 file 졸리운_곰 2024.07.08 1319
1088 [Sample DB] DBeaver 데이터 dump(export)/restore(import) 방법 file 졸리운_곰 2024.07.08 2418
» [통계 R 언어] R에서 DB 사용(Sqlite) file 졸리운_곰 2024.06.25 1489
1086 [MYSQL] trigger로 jsp페이지 호출하기 졸리운_곰 2024.06.01 1394
1085 [MYSQL] MySQL 기간에 따른 데이터 가져오기 (ex 3 개월 전, 일주일 전, 하루 전) 졸리운_곰 2024.04.18 1423
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED