주목: 워크샵 시작전에 참석자들이 준비를 해 와야 됩니다.
SQLite Manager
를 메뉴에 추가: 메뉴 -> Customize, SQLite Manager 아이콘을 끌어 메뉴에 놓기, Customize 나오기SQLite Manager
열기: 메뉴 -> 도구 -> SQLite Manager
프로젝트 작업흐름을 맞춰보자. 앞서, 엑셀과 오픈리파인을 사용해서 난잡하고 각자 취향에 맞춰 멋대로 생성된 데이터를 정제해서 컴퓨터가 읽을 수 있게 만들었다. 이제 데이터 작업흐름 다음단계로 옮겨가서, 컴퓨터가 데이터를 읽어드리고 나서, 데이터 분석과 시각화에 사용한다.
실습에 사용할 데이터는 아리조나 남부 작은 포유류 군락에 대한 시계열 데이터다. 식물군락에 대한 설치류와 개미의 서식이 미치는 영향을 거의 40년동안 연구한 프로젝트의 일부다. 설치류는 24개 구획지에서 표집되었는데 서로 다른 실험계획에 따라 특정 설치류는 특정 구획에만 접근이 가능하도록 통제했다.
본 데이터는 100편 이상 논문에 사용된 실제 데이터다. 금번 워크샵을 위해서 다소 단순화했지만, 전체 데이터셋을 다운로드할 수도 있고, 금일 학습한 동일한 도구를 사용해서 추가적인 작업 수행도 가능하다.
먼저, Portal Project dataset 에서 정제된 스프레드쉬트를 다운로드 받아 살펴본다.
surveys.csv
species.csv
plots.csv
도전과제
각 파일마다 담겨진 정보는 무엇인가? 구체적으로 다음 연구질문을 갖는다면:
- 시간에 따라 2000년대 Dipodomys 종에 대해 어떤 정보를 확인할 수 있는가?
- 매년 각 종별로 평균 체중은 얼마인가?
상기 질문에 대답하기 위해서 필요한 것은 무엇인가? 어떤 파일이 데이터를 담고 있는가? 수작업으로 작업을 수행한다면 어떤 작업을 수행해야 할까?
위에서 언급된 질문에 답을 하려면, 다음과 같은 기본 데이터 연산작업을 수행할 필요가 있다:
참고자료: 분할-적용-병합(Split-Apply-Combine) 전략
부가적으로, 수작업으로 상기 작업을 수행하고 싶지는 않다! 본인 스스로 필요한 데이터를 찾고, 여러 스프레드쉬트를 클릭하고, 수작업으로 열을 정렬하는 대신에, 컴퓨터가 해당 작업을 수행하도록 지시한다.
특히, 데이터가 변경되는 경우에 분석작업을 반복하기 쉬운 도구를 사용한다. 실제로 원본 소스 데이터를 변경하지 않고 이 모든 검색작업을 컴퓨터가 자동으로 수행했으면 좋겠다.
데이터를 데이터베이스에 담아두고 나서, SQL을 사용하면 상기 목적을 달성하는데 도움이 된다.
관계형 데이터로 작업할 때 사용되는 데이터베이스 관리 시스템은 상당히 많다. SQLite를 사용할 것이지만, 기본적으로 워크샵에서 다루는 모든 내용은 다른 상용/오픈 데이터베이스 시스템( MySQL, PostgreSQL, MS Access, Filemaker Pro)에도 적용된다. 차이점이 있다면 데이터를 가져오고 내보내는 방법, 자료형 세부사항에서 찾을 수 있다.
먼저 기존에 만들어 놓은 데이터베이스(portal_mammals.sqlite
)를 다운로드해서 살펴보자.
메뉴바에 있는 “파일 열기” 아이콘을 클릭해서, portal_mammals.sqlite
데이터베이스를 연다.
SQLite Manager
화면 좌측편을 보게되면 데이터베이스에 포함된 테이블이 확인된다.
각 테이블은 앞에서 살펴본 csv
파일 각각에 대응된다.
테이블에 포함된 내용물을 확인하려면, 화면 중앙에 위치한 “Browse and Search” 탭으로 이동한다.
그러면, 아주 익숙한 뷰(테이블 사본)가 나타난다.
이를 통해서, 데이터베이스가 무엇인지 이해하는데 도움이 되었으면 한다.
데이터베이스는 단지 테이블을 한데 모은 것이고, 테이블을 서로 연결(관계형 데이터베이스의 관계에 해당)시킬 수 있도록 테이블에 값이 포함되어 있다.
가장 왼쪽 탭, “Structure”는 각 테이블에 대한 메타데이터를 제공한다.
여기에는 필드(field)라고 불리는 열이 기술된다. (데이터베이스 테이블 행은 레코드(record)라고 부른다.)
“Structure” 뷰를 쭉 따라 내려가면, 필드 목록, 필드 라벨, 자료형(type)이 나타난다.
각 필드는 한가지 유형의 자료형(숫자형 혹은 문자형) 데이터를 포함한다.
surveys
테이블에는 거의 대부분 필드가 숫자형(정수형)인 반면에 species
테이블은 거의 모두 텍스트형이다.
“Execute SQL” 탭이 지금은 휑하니 비워져 있다 - 이곳이 데이터베이스에서 정보를 조회하는데 필요한 질의문(쿼리문)을 타이핑하는 곳이다.
요약하면:
질의문을 스스로 작성해서 시작하기 전에, 데이터베이스를 혼자 힘으로 생성시킨다.
앞서 다운로드 받은 csv
파일 3개로 데이터베이스를 생성한다.
현재 열린 데이터베이스를 닫고나서, 다음 지시절차를 따른다:
SQLite Manager
가 자동으로 테이블명을 부여함.species_id
, genus
, sex
같은 필드는 TEXT로 설정, day
,
month
, year
, weight
같은 필드는 INTEGER로 설정한다.도전과제
plots
,species
테이블을 가져온다.
기존 테이블에 신규 데이터를 덧붙이는데도 동일한 작업흐름을 사용한다.
csv
파일에 추가하고 덧붙이기(append
) 실행자료형 | 설명 |
---|---|
CHARACTER(n) | Character string. Fixed-length n |
VARCHAR(n) or CHARACTER VARYING(n) | Character string. Variable length. Maximum length n |
BINARY(n) | Binary string. Fixed-length n |
BOOLEAN | Stores TRUE or FALSE values |
VARBINARY(n) or BINARY VARYING(n) | Binary string. Variable length. Maximum length n |
INTEGER(p) | Integer numerical (no decimal). |
SMALLINT | Integer numerical (no decimal). |
INTEGER | Integer numerical (no decimal). |
BIGINT | Integer numerical (no decimal). |
DECIMAL(p,s) | Exact numerical, precision p, scale s. |
NUMERIC(p,s) | Exact numerical, precision p, scale s. (Same as DECIMAL) |
FLOAT(p) | Approximate numerical, mantissa precision p. A floating number in base 10 exponential notation. |
REAL | Approximate numerical |
FLOAT | Approximate numerical |
DOUBLE PRECISION | Approximate numerical |
DATE | Stores year, month, and day values |
TIME | Stores hour, minute, and second values |
TIMESTAMP | Stores year, month, day, hour, minute, and second values |
INTERVAL | Composed of a number of integer fields, representing a period of time, depending on the type of interval |
ARRAY | A set-length and ordered collection of elements |
MULTISET | A variable-length and unordered collection of elements |
XML | Stores XML data |
데이터베이스 시스템 별로 서로 다른 정의를 자료형에 대해 사용된다.
다음 표에는 다양한 데이터베이스 제품별로 가장 많이 사용되는 자료형 명칭이 나타나 있다:
자료형 | Access | SQLServer | Oracle | MySQL | PostgreSQL |
---|---|---|---|---|---|
boolean | Yes/No | Bit | Byte | N/A | Boolean |
integer | Number (integer) | Int | Number | Int / Integer | Int / Integer |
float | Number (single) | Float / Real | Number | Float | Numeric |
currency | Currency | Money | N/A | N/A | Money |
string (fixed) | N/A | Char | Char | Char | Char |
string (variable) | Text (<256) / Memo (65k+) | Varchar | Varchar / Varchar2 | Varchar | Varchar |
binary object OLE Object Memo Binary (fixed up to 8K) | Varbinary (<8K) | Image (<2GB) Long | Raw Blob | Text Binary | Varbinary |
이전: Index 다음: 질의문(쿼리) 기초.