겉바속촉

[가명처리] 의료정보 가명처리 본문

IT 일기 (상반기)/가명처리

[가명처리] 의료정보 가명처리

겉바속촉 2021. 6. 22. 17:33
728x90
반응형

 

 

지난번에는 금융정보 가명처리를 해봤습니다.

 

2021.06.22 - [IT 일기 (상반기)/가명처리] - [가명처리] 금융정보 가명처리

 

[가명처리] 금융정보 가명처리

금융정보를 가명처리할 때에는 우선 가명처리 수준을 정의해주는 수준 정의표를 작성해야 합니다. 저는 다음과 같이 작성해주었어요. 이제 R로 돌아와서~ 해당 파일에 header가 있는 지 확인해줍

2-juhyun-2.tistory.com

 

 

 


 

 

이번에는 의료정보 가명처리를 해보도록 할게요~

 

우선 제가 가지고 있는 테이블은 다음과 같습니다.

 

 

 

 

 


**여기서 주의할 점**

 

누군가에게 데이터를 넘길 때에는 반드시 검토 보고서를 작성해야합니다.

그리고 누구에게 넘겼는지 보고 라인을 통해 근거를 다 남기는 과정이 중요합니다.

 

 

즉 데이터 처리를 하는 경우 필요한 보고서 3가지는 다음과 같습니다.

 

  1. 가명처리 검토 결과 보고서
  2. 가명처리 수준 정의표
  3. 가명처리 수행 코드 설명서

 

 

그래서 이제

민감정보가 무엇인지 생각해보고 빼야하는 정보들은 빼주도록 할게요:)

 

setwd("C:/Kisa/data/Exercise")
ju = read.csv("의료정보.csv", header=T, fileEncoding='utf-8')
library(dplyr)
ju = select(ju, -c(ID, Age, Name, FirstDate, DCode))

 

다음과 같이 variable 수가 줄어들었습니다.

저는 ID, Age, Name, FirstDate, DCode를 없앴습니다.

 

 

 

 

그런데 생각해보니 DCODE는 삭제가 아니라 마스킹 처리를 해주는 게 나을 것 같네요?

그래서 구냥 다음과 같이 가명처리 수준 정의표를 작성했습니다:)

 

 

다시 RSTUDIO에서 작업한 결과~

 

setwd("C:/Kisa/data/Exercise")
ju = read.csv("의료정보.csv", header=T, fileEncoding='utf-8')
library(dplyr)

#컬럼삭제
ju = select(ju, -c(ID, Name, Birtjuate, FirstDate ))

#나이 5세 단위 범주화
ju$AgeGRP = NA
ju$AgeGRP = ifelse(ju$Age >= 20 & ju$Age <25,'25-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 25 & ju$Age <30,'30-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 30 & ju$Age <35, '35-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 35 & ju$Age <40, '40-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 40 & ju$Age <45, '45-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 45 & ju$Age <50, '50-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 50 & ju$Age <55, '55-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 55 & ju$Age <60, '60-', ju$AgeGRP)
ju$AgeGRP = ifelse(ju$Age >= 60 , '60+', ju$AgeGRP)
ju = select(ju, -c(Age))

table(ju$Dept)


#약마스킹처리
ju$MedicineGrp = NA
ju$MedicineGrp =  substr(ju$Medicine, 1, 3 ) 
ju = select(ju, -c(Medicine))

#질병코드 마스킹처리
ju$DCodeGrp = NA
ju$DCodeGrp =  substr(ju$DCode, 1, 2 ) 
ju = select(ju, -c(DCode))

#진료과 마스킹처리
ju$DeptGrp = NA
ju$DeptGrp =  substr(ju$Dept, 1, 2 ) 
ju = select(ju, -c(Dept))

write.csv(df, file="의료정보_Pseudonymization.csv", row.names=FALSE, fileEncoding='utf-8')

 

728x90
반응형