2008년 6월 8일 일요일

신촌 이미지 한의원 02-336-7100 예방의학 자료관리

예방의학분야에서 자료관리를 어떻게 할 것인가

청주 리라병원 외과. 노준양

서 론

예방의학분야에서 다루어지는 자료는 임상의학보다는 범위가 넓고 그 분량도 더 많은 것 같다. 따라서 예방의학 분야를 전공하는 의사들에게는 이 분야와 관련된 자료를 다룰 기회가 그만큼 많다고 할 수 있다. 여기에서 자료를 다룬다는 것은 정보(자료)를 수집하고 처리(가공)하는 과정과 이러한 자료들을 분석하여 어떠한 결론를 얻어내는 일련의 과정을 말하며 포괄적인 용어로 "자료관리(Data Management)"라고 표현하기도 한다. 이러한 자료관리 업무는 단순반복적인 과정이 많고 또 정확/신속성이 요구되기 때문에 컴퓨터를 이용하여 처리하는 것이 보편화되어 있다. 또한 이 부분은 자료분석(주로 통계처리)을 하기 전 단계로서 매우 중요한 과정이라고 말할 수 있다.
필자는 예방의학을 전공하지는 않았지만 임상과 관련된 여러가지 자료를 비교적 폭넓게 다룰 기회가 있었고, 또 이러한 기회를 통해서 몇가지 경험을 얻을 수 있었다고 생각된다. 필자의 경험이 독자에게는 얼마만한 도움이 될지는 모르겠지만 예방의학이나 임상의학에서 다루어지는 자료의 성질이 본질적으로는 크게 다르지는 않을 것이라 생각되었기 때문에 자료관리 특히 "컴퓨터를 이용한 자료처리와 활용"이란 주제를 가지고 이야기를 시작해 볼까 한다. 이글을 읽는 독자중 혹시라도 자료관리 업무때문에 불필요하게 시간을 낭비하였다고 생각되는 분이 있다면, 앞으로 언급하고자 하는 데이터베이스 분야에 조금이라도 먼저 시간을 투자하여 자기 주변의 자료를 자유자재로 활용할 수 있는 능력을 갖게 되길 바란다. 더우기 지금은 데이터베이스에 관한 기술도 발달되어 있고 또 배우기 쉽고 기능이 뛰어난 소프트웨어도 많이 보급되어 있어서 누구나 데이터베이스 분야에 어려움이 없이 접근할 수 있는 환경이 제공되고 있다.

본 론

위에서 잠시 언급하였듯이 우리가 의학연구를 하고자 할 때에는 흔히 몇가지 과정을 반복하곤 한다. 먼저 (1)연구에 필요로 하는 자료를 수집하거나 혹은 직접 입력/구축하고, 다음으로는 (2)구축된 자료들을 알맞게 가공하거나 처리한 후 (3)여러가지 방법으로 분석하여 어떠한 결과를 얻게 된다(그림 1). 이러한 일련의 과정들은 컴퓨터를 활용하여 신속/정확하게 처리할 수 있는데, 전자의 두가지(1,2) 경우는 데이터베이스(Data base)프로그램으로, 후자(3)의 경우는 통계프로그램으로 보다 신속/정확하게 처리할 수 있다. 필자는 이들 과정중 주로 (1)과 (2)의 경우에 대해서 언급하고자 한다. 자료관리에 대한 이해을 보다 쉽게 하기 위해서 데이터베이스에 대한 개념을 먼저 알아보고 실제 자료관리를 하는 과정을 간단한 예와 함께 설명해 보고자 한다.

(그림 1) 자료관리 과정 요약도

+----------+ +----------+ +----------+ +----------+ +----------+
| 자료수집 +-->| 자료입력 +-->+ 자료구축 +-->+ 자료처리 +-->+ 자료분석 |
+----------+ +----------+ +----------+ +----------+ +----------+
↑ ↑ ↑
+----------+ +----------+ +----------+ +----------+
| 파일설계 | | 파일변환 +-->+ 자료연결 | | 자료점검 |
+----------+ +----------+ +----------+ +----------+

데이터베이스

사람은 자기에게 필요한 정보를 어떠한 방식으로든 정리해 두는 습관을 가지고있다. 다시말해서 자기에게 필요한 서류들이 많이 있을 때 각각 내용이 비슷한 것끼리 서류뭉치를 만들어 책장에 질서있게 보관해 두고 필요할 때마다 그것들을 참고하곤 한다. 여기에서 서류, 서류뭉치, 책장 등을 컴퓨터용어로 바꾸어 비교해 본다면 서류는 자료(Data)이고 서류뭉치는 파일(File)이 되며 책장은 데이터베이스(DB:Data base)라고 표현할 수 있다. 즉 데이터베이스(DB)란 서로 연관성이 있는 자료들을 파일로 묶어서 체계적으로 저장/관리할 수 있도록 한 자료들의 집합체라고 말할 수 있다. 그리고 자기에게 필요한 자료를 신속하게 참조하거나 체계적으로 저장/관리할 수 있도록 해주는 소프트웨어(Soft ware)프로그램을 데이터베이스관리시스템(DBMS:Data Base Management System)이라고 말한다. 한편 DBMS 업무를 전용으로 처리할 수 있도록 해주는 컴퓨터언어(Computer Language) 혹은 전용소프트웨어 팩키지(Package)를 그냥 데이터베이스라고 혼돈(?)되어 말하기도 한다.

(그림 2) 데이터베이스의 기본구조(관계형)
+--------------+
책장 ---------------- | 데이터베이스 |
+------+-------+
+------------+-+--------------+
+---+---+ +---+---+ +---+---+
서류뭉치 --------- | 파일 +------+ 파일 +------+ 파일 |
(책) +---+---+ +-------+ +---+---+
+----+----+ +---------+--+-----+
+--+---+ +--+---+ +--+---+ +--+---+ +--+---+
서류 ----- | 자료 | | 자료 | | 자료 | | 자료 | | 자료 |
+------+ +------+ +------+ +------+ +------+

1.파일의 구조

DBMS의 형태를 관계형, 네트워크형, 종속형 등으로 초보자가 언뜻 이해하기 힘들게 분류하기도 하는데 우리가 앞으로 다루어야 할 형태는 관계형 데이터베이스시스템(RDBMS:Relational Data Base Management System)이다(그림 2). RDBMS는 모든 데이터를 2차원 테이블(Table)의 형식으로 저장하고 서로 관련성이 있는 자료들끼리 파일로 묶어 서로간에 연계성을 가지도록 구성되어 있다. 이러한 개념으로 보았을 때 파일안의 자료를 필드(Field)와 레코드(Record)의 형식으로 구성한다. 즉 2차원 테이블의 가로줄을 필드라고 하고 세로줄은 레코드라고 말한다. 가령 우리가 동문회주소록을 서류에 만든 다면 누가 말하지 않더라도 대부분 가로줄에는 주소, 전화번호 등을 기재하고 세로줄에는 이름을 기재한 테이블 형식으로 작성할 것이다. RDBMS에서는 이렇게 쉬운 개념으로 파일이 구성되어 있다(그림 3). 앞으로는 주로 RDBMS에 국한된 내용으로 언급하기로 한다.


(그림 3) 데이터베이스 파일구조

+----------< 필 드 >-------------------+
+-----------+---------------------------------+
| A(이름) | B(주소) C(전화번호) |
+-----------+---------------------------------|
+---| 김... | |
| | | |
레 | 박... | |

드 | | |
| | 홍... | |
+---| | |
+-----------+---------------------------------+

2.PC급 대표적 데이터베이스 언어: xBase 프로그램

현재 PC용으로 가장 많이 사용되고 있는 데이터베이스 프로그램은 대부분 xBase게열의 프로그램이다. xBase라는 말은 1990년도에 들어서면서 생겨난 용어로, 80년대말까지만 해도 PC용 DB프로그램으로는 디베이스(dBase)라는 상품명을 가진 소프트웨어가 시장을 거의 장악하고 있었고 당시로는 디베이스란 말이 PC용 데이터베이스프로그램의 대명사처럼 사용되고 있었다. 그런데 1987년에 폭스베이스(FoxBase)라는 디베이스와 거의 비슷한 언어체계를 가진 소프트웨어가 나오기 시작하면서 점차 디베이스의 시장을 장악하기 시작하였고 90년대에 들어서서는 폭스베이스와 디베이스를 사이에 둔 중도적 의미로 xBase라는 말이 생겨나게 되었다. 그러므로 xBase란 dBase III+ 와 유사한 명령어 체계를 가진 디베이스이후의 모든 데이터베이스 프로그램을 말한다고 할 수 있다. 데이터베이스를 언급하면서 굳이 xBase가 데이터베이스의 전부인 양 이야기하는 느낌이 드는데, 필자는 그렇게 말하는 충분한 이유가 있다고 생각한다. 그것은 xBase방식의 명령어체계가 이미 데이터베이스시스템을 개발할 수 있는 컴퓨터언어적인 성격을 띠게 되었고, 또 PC로 처리하는 작은 업무에서 뿐만 아니라 대규모의 전산시스템 개발을 위한 플랫폼으로도 이용되고 있기 때문이다. 그리고 그래픽 운영체계인 윈도우환경에서 돌아가는 xBase프로그램도 점차 그 시장이 확대되고 있고, 또한 xBase게열이 아니면서 대형 네트워크(Network)용으로 사용되는 DB시스템도 일부의 xBase계열로 구축된 DB시스템과 자료의 연결이 이미 가능해져 실제로 업무에 적용되고 있기 때문이다. xBase가 개인의 주소록정도만 관리하는 하찮은 개인용 프로그램정도로 생각하는 독자가 있을 것 같아 필자는 본론에 크게 벗어난 이야기를 하게 된 것 같다. 결론적으로 필자는 예방의학을 전공하고자 하는 여러분들이 xBase방식의 언어를 깊이 배우지 못할 지라도 xBase의 명령어(Command) 체계정도는 알아 두는 것이 종을 것 같다고 생각한다.

3.데이터베이스 프로그램

현재 세계적으로 가장 사용되고 있는 PC급 데이터베이스 프로그램에는 dBase III+, dBase IV, Clipper, Paradox, FoxBase+, FoxPro, Access, dBFast, Visual Basic 등이 있고, 국내에서도 몇개의 DB전용 프로그램이 개발되어 있다. 각기 사용방식이 조금씩 다르고 제공되는 운영환경에도 약간씩 차이가 있다. 그렇다면 예방의학에서 다루어지는 자료를 관리하거나 처리하기 위해서는 어떤 프로그램을 선택할 것인가가 중요한 문제라고 생각되는데, 이 문제는 다음과 같은 몇가지 사항을 확인한 후 선택하면 해결할 수 있다고 본다. 전문 프로그래머가 아닌 의학도로서 자기의 자료를 충분히 관리하기 위해서는 (Table 1)의 사항을 확인하여 프로그램을 선택하는 것이 현명한 판단이 될 것으로 확신한다.

(Table 1) 데이터베이스 프로그램의 선택기준(프로그래밍을 하지 않는 사용자 기준)
--------------------------------------------------------------------------------
(1) 운영환경이 사용하기 쉽고 편리하여야 한다. 이는 사용자의 주관적 판단이 포
함될 수도 있다.
(2) 타 팩키지로 구축된 파일을 자기가 조작할 수 있는 데이터파일로 변환할 수 있는
범위가 넓어야 한다.
(3) 자료의 처리속도가 어느정도는 빨라야 한다.
(4) S.Q.L(structured Query Language: 구조적 질의언어)의 언어체계를 지원하고
있으면 더욱 좋다. SQL은 데이터베이스의 국제표준언어형식으로 평가되고 있기
때문이다.
--------------------------------------------------------------------------------

업무의 크기와 목적에 따라 적당한 프로그램을 이것저것 바꾸어 선택하면 될 것이라 생각하나, 그것은 필자의 경험으로 비추어 볼 때 바람직하지 못하다. 그것은 프로그램을 바꿀때마다 사용방법 및 언어의 형식을 배워야 하기 때문에 시간만 낭비하는 수가 많기 때문이다. 가장 중요한 것은 사용자가 그 프로그램을 얼마나 잘 다루느냐 하는 점이라 생각되기 때문에 어떠한 하나의 프로그램을 선택하여 그것을 충분히 활용할 수 있도록 하여야 할 것이다.


자료관리 과정

자료를 모으는 과정부터 자료를 분석하기 전 단계까지의 과정을 언급하는데 있어서, 실제의 예와 그것을 처리하는 방법에 관한 예를 들면서 설명하는 것이 이해가 빠를 것이라 판단된다. 개인용컴퓨터에서는 대체적으로 xBase 계열의 데이터베이스를 많이 사용하고 있는 실정이고 또 xBase의 언어체계가 결코 전문가들에게만 사용되는 것이 아니기 때문에, xBase계열의 데이터베이스 용어나 명령어를 그대로 사용하여 설명하기로 한다. 이 과정을 설명하는데 있어서 방법상의 실예를 들지 않고서는 충분한 설명이 되지 않을 것 같고 또 독자들이 이해하기 어려운 부분도 조금은 있을 것이라 생각된다. 프로그램에 관심이 있는 독자를 위해서 부분적인 프로그램의 소스코드도 예시하기로 하겠다. 자세한 방법적인 예시는 강의시간에 실제 컴퓨터를 가지고 설명하기로 한다.

1.파일설계

전향적 혹은 후향적인 연구를 함에 있어서 먼저 분석해야할 항목(Item)들을 설정하고, 이렇게 설정된 항목들로 구성된 파일들을 서로 어떻게 연계시킬 것인가 하는 과정이다. 이것은 자료처리과정 및 결과를 추출해 내는데 있어서 그 성패를 가름하는 매우 중요한 과정이다. 컴퓨터용어로 말하면 데이터베이스 모델링(DB modeling)이라고 말한다. 이 부분은 아마도 예방의학교과서에 나와있는 내용으로 생각되고, 또한 컴퓨터작업을 하기 전 단계에서 필요한 과정이기 때문에 여기서는 생략하기로 한다. 그리고 예방의학을 전공하는 독자들이 그 중요성에 대하여 더 잘알 것으로 생각된다.

2.자료수집

위에서 설계된 데이터베이스에 필요한 자료를 모으는 과정이라고 말할 수 있는데, 데이터베이스 검색망을 통하거나 주위에 널려 있는 자료들을 사용자가 원하는 형태로 변환시켜야 하는 되는 경우가 있다. 정보를 검색하는 방법에는 여러가지 방법이 있다. 향후 정보화시대에 있어서는 자기가 원하는 자료가 어디에 있고 또 그것을 어떻게 검색하여 자기의 자료로 활용할 수 있는가 하는 일명 노훼어(know where)기술이 중요시 되고 있다. 이 기술은 정보화시대를 살아가는 사람으로서 누구나 습득하여야 할 필수적인 요소가 될 것으로 생각된다. 정보를 검색하는 방법에 대해서는 생략하기로 하고 주위에 구축되어 있는 자료를 자기가 조작할 수 있는 파일로 변환시키여 되는 경우에 대해서 주로 언급하도록 한다.

3. 자료변환

예를 들어 자기가 구축한 DB와 다른 곳에서 구축된 DB가 있고 이 둘간의 자료가 서로 관계성을 지니고 있을 때 다른 곳의 자료를 자기의 자료형태로 변환시키는 과정이 필요하게 된다. 이 때 구축된 파일의 형태가 서로 다르다면 새로운 파일을 정의하고 이곳으로 필요한 자료만 받아와야 한다. 데이터베이스의 기능중 이러한 것을 수행할 수 있는 기능이 대부분 제공되고 있는데 이를 "파일자료변환기능"이라고 부른다. 가령 공무원들중 주기적으로 운동을 하고 있는 사람들을 대상으로 운동의 양과 종류에 대한 자료를 구축한 후 운동의 종류 및 운동량에 따른 건강상태를 알아보고 이들에 대한 관계를 알아보기 위한 경우가 있다고 하자. 마침 공무원 건강검진 자료가 객관적인 건강척도를 알아볼 수 있는 자료로 활용할 수 있다고 판단되어 그 자료를 얻어올 수 있었면, 이러한 경우 얻어온 자료를 자기가 구축한 자료와 연결시키는 과정이 필요할 것이고 또 자기가 조작할 수 있는 파일형태로 바꿔야 되는 경우가 발생하게 될 것이다. (그림 4)는 그러한 경우를 간단히 도식한 것인데 각각의 과정에서 필요한 데이터베이스 기능을 하나하나 예를 들어 보겠다.


(그림 4) 자료변환(Conversion) 및 연결(Linkage)
+-------+ +------------+
| 타 DB +---(가)--->+ 새 파일(1) | 조작이 힘든 파일
+-------+ +-----+------+
(나) 파일변환,자료변환
+-----+------+
| 새 파일(2) | 조작가능한 파일
+------------+ ( *.DBF)
+-----------+  ↓ +----------+
(라)| 분석파일 +<--(다)자료연결<--+ 자기 DB |
+-----------+ +----------+

(가) 의 경우는 대체적으로 그쪽 DB전문가가 해결해 주기 때문에 우리에게는 크게 필
요하지 않은 과정이다.
(나) 코볼(Cobol)로 구축된 자료여서 받아온 파일(A)이 xBase file이 아니라면 사용자
는 이미 (A)파일의 구조를 분석하여 그 구조에 맞게 새로운 (B)파일을 새롭게 정
의하고 생성해 두어야 한다. 이때 새롭게 만들어진 파일을 new_file.dbf라고 하
고, (A)파일의 이름을 old_file 이라고 한다면...

create new_file && 새로운 파일을 정의하고 생성한다.
use new_file.dbf
append from old_file type sdf

modify structure && 필드형태를 변경할 경우가 생길 때
replace all with for
&& 필드값을 재조정하고자 할 때

이렇게 (A)파일의 자료를 자기파일 (B)로 변환시킬 때 주의해야할 점이 있다.

- 새롭게 설계한 파일(B)의 레코드가 (A)파일의 레코드크기와 비슷해야 한다.
- (A)파일에 저장된 파일은 대체적으로 문자형이고 새로 설계한 (B)파일의 필드는
문자, 숫자, 날짜 등 여러가지 형식으로 정했다면 자료가 변환될 때 고유의 값을
잃어버릴 수도 있다. 그래서 새롭게 (B)파일을 설계할 때에는 이런 점을 충분히
고려하여 설계하여야 한다.
- (B)파일에 자료가 들어온 후 다시 (B)파일의 필드형태와 길이를 변경하고자 할
때에도 상당한 주의를 요한다. 특히 숫자문자값을 숫자형태로 변화시킬 때 소수
점의 길이에 신경을 써야한다.

(다) 변환된 (B)파일의 자료를 자기가 구축한 본래의 파일(C)과 연결시키는 경
우인데 이때에는 반드시 받아들일 파일(B)에는 (C)파일과 연결시킬 필드가
필요로 하는데 이 필드를 키(Key)로 하는 인덱스가 있어야 한다. 이 과정에 대
한 예는 꽤 복잡하여 강의할 때 자세한 설명을 하기로 한다. 단지 이
때 사용되는 명령어는 set relation to, join, select, replace 등이며
프로그래밍에 대한 지식이 있는 경우에는 더욱 정확하고 신속하게 이를 해
결할 수 있다.

(라) 분석에 필요한 필드와 레코드만 새로운 파일로 만드는 과정인데 이는 copy
to 명령어로 대부분 쉽게 해결할 수 있다. 그러나 몇개의 파일에서 원하
는 자료만을 추출하고자 할 때에는 copy to 명령어만 가지고는 해결하기
힘들다. 이러한 경우 완벽하게 원하는 자료만 추출하고자 할 때에는 프로
그램을 작성한다든가 아니면 SQL언어를 이용하여 해결할 수 있다.
통계팩키지에서 사용되는 파일로 변환한 후 이를 분석하면 된다. 참고로
(나),(다),(라)의 과정도 데이터베이스를 이용하지 않고 통계팩키지로도
일부분 해결할 수 있는 것으로 알고 있다. 또한 스프레드쉬트(spread
sheet)계열의 팩키지에서도 이러한 기능은 부분적으로 제공되고 있다.

병원종합정보망이 구축되면서 이러한 일련의 과정을 개개인이 어느정도 쉽게 해결할 수 있는 방향으로 가고 있으나 아직은 어려운 실정이다. 요즈음은 과거의 중앙집중식 Network시스템을 지양하고 개인용컴퓨터간의 LAN시스템과 중앙 Network이 맞물려 돌아가는 소위 업무처리의 다운사이징(Downsizing)현상이 가속화되고 있기 때문에 그 때가 되면 각 그룹간에 쌓여진 정보를 보다 쉽게 얻어 사용할 수 있을 것으로 기대된다.

4.자료구축

연구할 대상으로부터 얻어지는 자료들을 전산파일에 체계적으로 입력하기 위한과정으로 가장 시간이 많이 걸리고 반복적인 과정이라 할 수 있다. 그렇지만 이 과정이 없이는 어떠한 결과분석도 할 수 없다. 특히 이 작업에서 가장 중요한 것은 구축되는 자료가 정확해야 된다는 점이다. 그렇게 하기 위해서는 입력자(Data entry personell)의 실수를 최대한 막아주어야 한다. 특히 자료량이 방대하고 자료의 갱신과 축적을 시간이 지남에 따라서 몇년씩 계속해야 되는 경우에는 자료입력을 위한 별도의 프로그램을 작성하여 구축하는 것이 자료의 활용적인 면에서 유리하다고 할 수 있다. 그러면 입력시 오류를 막을 수 있는 몇가지 예를 들어 설명해 보고자 한다.

(1) 수치(Numeric)자료를 입력할 때 0 이 발생하는 경우...
이 때에는 0 이라는 의미가 다음의 3가지의 경우로 생각할 수 있다.
1. 값을 몰라서 입력을 하지 않은 경우
2. 값을 알고 있었으나 입력을 하지 못했거나 않한 경우
3. 입력을 하였는데 실제로 그 값이 0인 경우
이 3가지의 경우를 반드시 구분해 줄 필요가 있는데 그 방법은 자료값을 수치
형 문자값으로 설계를 하고 숫자와 일부의 문자만 입력을 허용하도록 제어해
주면 된다. 에를 들면...

1,2,? 의 값을 각각 1=Yes, 2=No, ?=Unknown 으로 약속하고 입력되는
값을 1,2,?,공백 만 허용시키면서 입력후 화면에 Yes,No,Unknown을
표시해주도록 하는 경우를 생각해 보면 다음과 같다.

value = ' '
@ 5, 5 get value picture '@M ,1,2,?' ;
valid value_disp(5,10,value)
read

***********************
function value_disp && 화면에 코드값에 대한 문귀을 출력하는 함수
***********************
parameter row,col,c_value
do case
case c_value == '1'
@ row,col say padr('Yes',7)
case c_value == '2'
@ row,col say padr('No',7)
case c_value == '?'
@ row,col say padr('Unknown',7)
other
@ row,col say padr('',7)
endcase
return .t.

(2) 입력되는 값이 어떠한 범위를 가지는 경우...
이 때에는 원치않는 자료(Unwanted data)와 입력을 하지 않은 자료(Missing
data), 그리고 범위를 넘어선 자료가 발생하지 않도록 주의를 기울려야 한다.
이러한 경우를 완벽하게 해결하기 위해서는 데이터베이스의 명령어나 부분적
인 프로그밍의 기술을 가지고 있어야 한다. 가령 남자일때에는 a1,c2,m4 라
는 값중에서 하나만 입력하여야 하고 여자일떄에는 a1,b3,m4,f5 이라는 값
중에서 하나를 입력하여야 하는 경우를 보면 다음과 같다.

남여를 구분하는 변수가 sex 이고 입력될 값에 대한 변수를 value 라고
했을 때 (가) 혹은 (나)의 두가지 방법으로 자료입력의 오류를 예방할 수
있다.

(가) valid & error option 의 예
sex = ' '
value = ' ' && sex, value 변수 초기화
@ 5, 5 say '성별: ' get sex picture '@!' valid sex$'MFmf '
@ 7, 5 say '결과: ' get value ;
valid iif(sex=='M',inlist(value,'a1','c2','m4'),;
iif(sex=='F',inlist(value,'a1','b3','m4','f5'),;
.t.)) ;
error sex+':'+iif(sex=='M','a1,c2,m4',;
iif(sex=='F','a1,b3,m4,f5',''))
read

(나) picture option 의 예
m_ok = '@M ,a1,c2,m4'
f_ok = '@M ,a1,b3,m4,f5'
sex = ' '
value = ' ' && m_ok, f_ok, sex, value 변수 초기화
@ 5, 5 say '성별: ' get sex picture '@M ,M,F'
@ 7, 5 say '결과: ' get value picture iif(sex=='M',m_ok,;
iif(sex=='F',f_ok,''))
read

(3) 중복된 자료를 막기 위해서...
자료량이 많은 경우 새로운 자료를 입력할 때에 간혹 똑같은 자료가 두개
이상 입력되는 경우가 발생한다. 그러므로 새로운 자료를 입력할 때에는
반드시 기 입력된 자료가 있는지를 먼저 체크하여야 한다. 이 경우에는
자료의 고유번호(인덱스키)를 신속하게 체크해야 되며 인덱스의 기법을
이용하면 된다. study.dbf라는 자료파일에 새로운 자료를 입력하고자 할
때 고유번호의 필드이름을 id_no 라고 하고 이 필드값으로 인덱스된 파일
을 study.idx라고 한다면 다음과 같이 새로운 고유번호가 기존의 파일에
있는지를 체크하면 된다.

m_id_no = space(8)
@ 5, 5 say '새로운 자료의 고유번호: ' get m_id_no picture '@9'
read
if lastkey()==27 && 취소키(Escape key)를 치면 작업중단
return
endif
use study.dbf index study.idx
set order to 1 && 넣어도 되고 안넣어도 된다.
if seek(m_id_no)
close database && 번호가 중복되어 프로그램을 탈출함.
return
endif
* 기 입력된 자료가 없으므로 프로그램을 계속 수행함
.........

5.자료점검

자기가 구축한 자료 혹은 타 DB에서 자기의 자료로 변환한 경우 통계분석을 하기 전 단계로 기 입력된 자료의 요류를 점검해 볼 필요가 있다. 아무리 정확하게 입력했다고 해도 사람인 이상 Missing data 혹은 unwanted data 혹은 잘못된 자료가 분명히 나올 수 있다. 이를 무시하고 바로 통계분석을 한다면 연구결과가 잘못될 수 있기 때문에 이런 점에서 이 과정은 아주 중요하다고 할 수 있다. 그렇다면 입력된 자료의 오류를 어떻게 추려낼 것인가 하는 것이 이 단락의 요지가 될텐데 방법을 설명하기 전에 잘못된 자료는 어떠한 것이 있는지를 먼저 알아보기로 한다.

(1) 입력하지 않은 자료: 반드시 입력해야 하나 실수로 입력하지 않은 경우
(2) 입력 범위값을 벗어난 자료:
(3) 하나의 레코드에서 서로 종속되는 필드변수간에 도저히 성립할 수 없는 관계
를 가지는 자료: 가령 혈압이 정상인데 고혈압환자로 입력된 경우

의학에서 다루어 지는 자료를 관리할 때 중요한 것은 신속성보다는 정확성이다. 그래서 자료의 오류를 방지하기 위해서는 자료를 수집할 때부터 입력 및 처리하는 제반 과정까지 세심한 주의 및 확인작업을 게을리 해서는 안된다. 위의 예에서 (1)과 (2)의 경우는 쉽게 오류자료를 찾아낼 수 있지만, (3)의 경우에서는 데이터베이스의 깊은 지식이 요구되기도 한다. 간혹 프로그래밍으로만 점검이 가능한 경우도 있다. 이 부분도 지면으로는 자세한 설명을 하기 어려우므로 강의시간에 실예를 들어보도록 하겠다.


프로그래밍이 필요한가

방대한 자료를 관리하다 보면 기존의 데이터베이스 팩키지에서 제공되는 명령어만으로는 해결하기 어려운 경우가 발생한다. 이러한 경우에는 프로그래밍으로 해결하는 수 밖에 없는데 그러한 경우를 몇가지 들어보면 다음과 같다.

(1)스코어링(Scoring)시스템을 적용하여 그 결과(Score)를 컴퓨터로 처리하고자 할 때; 이때 Score를 계산하는 공식이 간단한 경우는 명령어만으로 쉽게 해결할 수 있지만, 간혹 경우의 수가 많고 계산 공식이 아주 복잡한 경우가 있다. 이 때에는 프로그래밍 기법을 통해서 자료를 더욱 신속하게 처리할 수 있다.

(2)서로 관계성을 가지고 있는 여러개의 데이터베이스에서 자기가 원하는 자료만 일시에 추출하고자 할 때

(3)xBase의 명령어로도 변환시킬 수 없는 특수한 파일의 자료를 자기 파일의 자료로 그 구조를 변경하고자 할 때

(4) 누구나 자료를 직접 입력할 수 있고 편리한 검색 및 출력기능을 만끽하면서 자료를 관리하기 위해서


프로그래밍을 배워서 자유자재로 자료를 관리할 수 만 있다면 더할 나위없이 좋겠지만 프로그래밍과정을 습득하는 것이 그렇게 쉽지만은 않다. 그러나 자기가 다루는 자료의 양과 형태에 따라서 프로그래밍이 필요할 때가 생기게 되는데, 이러한 경우 프로그래밍의 깊은 알고리즘을 터득하는데 시간을 보낼 것이 아니라 간단한 함수를 활용하는 방법을 모색하는 것이 더 효과적이 아닐까 생각된다. 여기서 함수(function)란 우리가 수학시간에 배웠던 함수와 거의 같은 개념이므로 간단한 함수를 사용자가 만들어 쓰는 것은 그렇게 어렵지만은 않다고 생각된다.

수학에서 사용되는 함수식은 일반적으로 y = f(x) 로 표시하며, 변수 x값의 변화에 따라 결과값 y가 정해진다. 가령 (Table 2)와 같은 데이터베이스파일이 있을 때 Name, Age, RTS, ISS, TRAUMA 필드의 값을 가지고 TRISS 를 계산하는 경우 n 이 아주 클때 다음과 같은 간단한 프로그램으로 일시에 TRISS 값을 계산해낼 수 있다.

(Table 2) TRISS 필드에 결과값을 게산하는 예 (Ex_File.Dbf)
---------------------------------------------------------
No. NAME AGE RTS ISS TRAUMA TRISS
---------------------------------------------------------
1 oooooo 32 3.74 29 Blunt ?
2 xxxxxx 10 2.81 25 Penetrate ?
.
.
n zzzzzz 50 3.74 25 Blunt ?
---------------------------------------------------------

* 공식 TRISS = 1 / ( 1 + e-b )

* b = b0 + (b1*RTS) + (b2*ISS) + (b3*AGE)
* ------------------------------------------------------
Constant b0 b1 b2 b3
------------------------------------------------------
Blunt -1.2470 0.9544 -0.0768 -1.9052
Penetrate -0.6029 1.1430 -0.1516 -2.6676
------------------------------------------------------

* 프로그램 예

use Ex_file.Dbf
i = 0
Do While !eof()
if !empty(RTS).and.!empty(ISS).and.!empty(AGE).and.!empty(TRAUMA)
Pv_Triss = Ps_TRISS(RTS,ISS,AGE,iif(TRAUMA=='Blunt',.t.,.f.)
replace TRISS with Pv_Triss
else
i = i + 1 && Count of Missing data
endif
skip
Enddo !eof()

FUNCTION Ps_TRISS **********************
parameter nRTS,nIss,nAge,lBlunt
private b,b0,b1,b2,b3,nTriss
nAge = IIF(nAge>54,1,0)
b0 = iif(lBlunt,-1.2470,-0.6029)
b1 = iif(lBlunt, 0.9544, 1.1430)
b2 = iif(lBlunt,-0.0768,-0.1516)
b3 = iif(lBlunt,-1.9052,-2.6676)
b = b0 + (b1*nRTS) + (b2*nIss) + (b3*nAge)
nTriss = ROUND(1/(1+EXP(-b)),3)
RETURN nTriss

끝으로

에방의학분야에서 다루어지는 방대한 자료를 보다 신속하고 정확하게 관리하기 위해서는 분석(통계처리)하기 전 단계까지의 자료관리도 매우 중요한 과정이다. 이 과정을 수행하는데는 대체적으로 많은 시간이 걸리며 주로 반복적인 일이 많아 컴퓨터를 활용하여야 할 것으로 생각된다. 그러나 데이터베이스에 대한 관심을 갖고 그것을 활용하는 방법을 알아 두는 것은 여러분에게 주어진 자료관리 업무를 처리하는 데 보다 많은 시간을 절약할 수 있게 될 것이다. 배우기가 쉽지는 않아도 그것이 좋은 방법이라면 바로 그것을 배우려고 노력하는 것이 곧 장기적인 안목에서 보았을 때 여러분들에게 더 많은 발전이 될 것으로 필자는 확신한다.

댓글 없음: