사람들이 인공지능 발달의 우려로 제일 먼저 꼽는 것이 '일자리 감소' 일 것이다. 그 동안 사람이 해오던 일을 AI로 대체하는 것. 사람들은 그것을 우려한다. 그렇지만 이 기사와 같이 사람이 잘 하지 못했던 일을 인공지능을 통해 가능케 하는 것은 인공지능이 발달함으로써 기대할 수 있는 효과다. 의료, 병리와 같이 오차가 적고 시간이 빠를 수록 좋은 분야에서 인공지능은 우리에게 기대 이상의 큰 효과를 선물할 것이다.

이번 연구를 통해 의료, 병리 분야에서 좀 더 정확하고 효율적인 인공지능이 개발됐으면 좋겠다.

 

 

 

 

원문보기:

https://www.mk.co.kr/news/it/view/2019/04/276659/

EDA 중 '데이터 모양 확인하기' 파트

 

<1> 데이터 파악하기

- 데이터가 주어졌을 때 가장 먼저 하는 일은 데이터의 전반적인 구조를 파악하는 것. 어떤 변수들이 있는지, 몇 행으로 구성되어 있는지 전반적인 구조를 살펴본다.

 

데이터를 파악할 때 사용하는 기본 함수들

1.  head( ) - 데이터 앞부분 확인하기

- 데이터의 앞부분을 출력하는 기능. 괄호 안에 데이터 프레임 이름을 입력하고 실행하면 앞에서부터 여섯 번째 행까지 출력된다.   ex. head(exam)

- 여섯 번째 행보다 더 아래 행까지 출력하고 싶으면 데이터 프레임 이름 뒤에 쉼표를 쓰고 숫자를 입력하면 입력한 행까지의 데이터를 출력할 수 있다.     ex. head(exam, 10) #앞에서부터 10행까지 출력

 

2. tail( ) - 데이터 뒷부분 확인하기

- 데이터의 뒷부분을 출력하는 기능. 괄호 안에 데이터 프레임 이름을 입력하고 실행하면 뒤에서부터 여섯 행을 출력된다. ex. tail(exam)

- head함수와 마찬가지로 숫자를 입력하면 원하는 만큼의 행을 출력할 수 있다. ex. tail(exam, 10) #뒤에서부터 10행까지 출력

 

3. View( ) - 뷰어 창에서 데이터 확인하기 (*V는 대문자로 입력)

- 엑셀과 유사하게 생긴 '뷰어 창'에 원자료를 직접 보여 주는 기능. 원자료를 눈으로 직접 확인해 보고 싶을 때 사용한다.

 

4.  dim( ) - 데이터가 몇 행, 몇 열로 구성되어 있는지 알아보기

- 데이터 프레임이 몇 행, 몇 열로 구성되어 있는지 알아볼 때 사용. 출력된 2개 숫자 중에서 앞의 숫자는 '행', 뒤의 숫자는 '열'의 개수를 나타낸다.

- [1] 20  5 이렇게 출력되었다면 >> 이 데이터는 20행, 5열로 구성되어 있다는 것을 의미

 

5. str( ) - 속성 파악하기

- 데이터에 들어 있는 변수들의 속성을 보여준다. 모든 변수의 속성을 한 눈에 파악하고 싶을 때 사용

str(exam)  # 데이터 속성 확인

## 'data.frame' :    20 obs. of 5 variables:  # 데이터의 속성과 몇 개의 관측치와 변수로 구성되어 있는지 표시됨
## $ id      :  int  1 2 3 4 5 6 7 8 9 10 . . .  
## $ class   :  int  1 1 1 1 2 2 2 2 3 3 . . .
## $ math    :  int  50 60 45 30 25 50 80 90 20 50 . . .
## $ english :  int  98 97 86 98 80 89 90 78 98 98 . . .
## $ science :  int  50 60 76 38 60 45 97 85 50 70 . . .

- 위의 출력 결과 예시를 보면 exam 데이터가 데이터 프레임이고, 20개의 관측치와 5개의 변수로 구성되어 있음을 알 수 있다.

 

6. summary( ) - 요약 통계랑 산출하기

- '평균'처럼 변수의 값을 요약한 '요약 통계량'을 산출. ex. 중앙값과 평균 등

- 요약 통계량을 보면 변수의 특성을 파악하는데 도움이 됨

- 수치에 관해 나타내는 것이므로 '연속형 데이터'에만 의미 있음.

summary( )를 실행해 출력되는 요약 통계량들

 

(어떤 데이터를 분석하든, 가장 먼저 이러한 함수들을 활용해 전반적인 특징을 파악하는 작업을 해야함)

 

<2> 변수명 바꾸기

- 데이터의 전반적인 특징을 파악하고 나면 본격적으로 분석하기 전에 변수명을 수정하는 작업을 해야 한다. 변수명이 기억하기 어려운 문자로 되어 있으면 쉬운 단어로 변경하는 게 좋다.

ex.  분석하고자 하는 데이터에서 성별을 s_12 이런식으로 저장해두었다면 분석하기 전 sex로 바꿔놓는 것이 이해하기 쉽고 헷갈리지 않게 작업할 수 있다. 

 

*dplyr 패키지의 rename( )을 이용해 변수명 바꾸기

# 실습에 활용할 데이터 프레임 생성

df_raw <- data.frame(var1 = c(1, 2, 1), var2 = c(2, 3, 2))

df_raw

##    var1 var2
## 1     1    2
## 2     2    3
## 3     1    2
# rename( )을 이용하기 위해 dplyr 패키지 설치 후 로드 (dplyr은 데이터 조작 패키지)

install.packages("dplyr")  # dplyr 설치
library(dplyr)             # dplyr 로드

 

》 데이터 프레임 복사본 만들기 (중요)

- 변수명을 바꾸기 전에 원본을 보유하기 위해 데이터 프레임 복사본을 만든다. 새로운 변수명 df_new에 df_raw를 할당하는 형태로 코드 작성

df_new <- df_raw  # 복사본 생성

 

》 변수명 바꾸기

- rename(데이터 프레임명, 새 변수명 = 기존 변수명)  // 괄호 안의 것들이 순서가 바뀌면 실행되지 않음.

df_new <- rename(df_new, v2 = var2)  # var2를 v2로 수정
df_new

##    var1   v2
## 1     1    2
## 2     2    3
## 3     1    2

 

 

3. 파생변수 만들기

- 데이터에 들어 있는 변수만 이용해 분석할 수도 있지만, 변수를 조합하거나 함수를 적용해 새 변수를 만들어 분석할 수 있음. 기존의 변수를 변형해 만든 변수를 '파생변수(Derived Variable)'라고 한다. 

ex. 학생들의 이름, 영어 점수, 수학 점수로 이루어진 데이터에 각 학생별 영어 점수와 수학 점수의 '평균' 변수를 새로 만들 수 있음

 

** 변수를 조합해 파생변수 만들기

# 실습에 활용할 2개의 변수로 구성된 데이터 프레임 생성

df <- data.frame(var1 = c(4, 3, 8), var2 = c(2, 6, 1))

df
##    var1 var2
## 1     4    2
## 2     3    6
## 3     8    1
df$var_sum <- df$var1 + df$var2  # var_sum 이라는 파생변수 생성
df

##    var1 var2 var_sum
## 1     4    2       6
## 2     3    6       9
## 3     8    1       9
df$var_mean <- (df$var1 + df$var2)/2  # var_mean 이라는 파생변수 생성
df

##    var1 var2 var_sum var_mean
## 1     4    2       6      3.0
## 2     3    6       9      4.5
## 3     8    1       9      4.5

 

 

 

 

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

1. 데이터는 어떻게 생겼나? - 데이터 프레임 이해하기

*데이터 프레임(Data Frame)

- 가장 많이 사용하는 데이터 형태로, 행과 열로 구성된 사각형 모양의 표처럼 생김

(3개의 행과 4개의 열로 구성된 데이터 프레임)

행을 보면 세 명의 자료임을 알 수 있고, 열은 성별, 연령, 학점, 연봉의 4가지 속성으로 되어 있음

>> 이 표는 '4개의 속성에 대한 3명의 자료로 구성된 데이터 프레임'이라고 할 수 있다.

 

'열'은 속성이다.

세로로 나열되는 열은 '속성'을 나타냄. 열은 '컬럼(Column)' 또는 '변수(Variable)'라고 불림

>> 만약, 어떤 데이터가 100가지 속성에 대한 정보를 가지고 있다면, 그 데이터는 100개의 컬럼 또는 100개의 변수를 가지고 있다고 표현할 수 있다.

 

'행'은 한 사람의 정보다.

가로로 나열되는 행은 각 사람에 대한 정보를 보여줌. 행은 '로(Row)' 또는 '케이스(Case)'라고 불림

행이 반드시 사람이어야 하는 건 아니지만, 무엇이든 하나의 단위가 하나의 행으로 구성될 수 있다. 예를 들어, 하나의 도시, 하나의 거래 내역, 하나의 웹 사이트 접속 기록도 행이 될 수 있다. 

>> 만약, 어떤 데이터가 30명의 정보로 구성되어 있다면, 그 데이터는 30개의 Row 또는 30개의 Case를 가지고 있다고 표현할 수 있다.

 

데이터가 크다 = 행이 많다 또는 열이 많다

데이터를 분석하는 입장에서 봤을 때 행이 많은 것과 열이 많은 것 중 무엇이 더 중요할까?

>> 열이 많은 것이 더 중요하다. (행이 많은 것은 Computer Power로 해결)

>> 데이터의 양을 의미하는 행보다 데이터의 '다양성'을 의미하는 열이 많은 것이 분석의 측면에서 더 중요

 

행이 늘어나더라도 분석 기술의 측면에서는 별다른 차이가 생기지 않는다. 메모리를 늘려보고, 그래도 힘들다면 분산 처리 시스템을 구축하면 된다.

반면, 열이 많아지면 변수를 조합할 수 있는 경우의 수가 늘어난다. 예를 들어, 학점과 연봉의 관계는 전공이 무엇인지에 따라 다른 양상으로 나타날 수 있다. 여기에 출신지, 자격증, 성별, 직업군 등 수십 가지 변수가 추가되면 경우의 수가 기하급수적으로 늘어난다. 여러 변수의 영향을 동시에 고려할 수 있는 복잡한 분석 방법을 활용해야 할 필요성이 생기게 된다.

행이 많다 > 컴퓨터가 느려짐 > 고사양 장비 구축
열이 많다 > 분석 방법의 한계 > 고급 분석 방법 필요

 

2. 데이터 프레임 만들기 - 시험 성적 데이터 만들기

데이터 프레임은 데이터를 직접 입력해 만들 수도 있고, 외부의 데이터를 가져와 만들 수도 있다.

*데이터 직접 입력해서 데이터 프레임 만들기 (4명의 학생이 영어 시험과 수학 시험을 봤다고 가정)

1. 변수 만들기

- 학생 4명의 영어 점수와 수학 점수를 담은 변수를 각각 만듦

english <- c(100, 45, 80, 70)  # 영어 점수 변수 생성
math <- c(50, 60, 90, 100)  # 수학 점수 변수 생성

 

2. 데이터 프레임 만들기

- 데이터 프레임을 만들 때는 data.frame( )을 이용 (데이터 프레임을 구성할 변수를 괄호 안에 쉼표로 나열)

#english, math로 데이터 프레임 생성해서 df_midterm에 할당
df_midterm <- data.frame(english, math)
df_midterm

##  english math
## 1    100   50
## 2     45   60
## 3     80   90
## 4     70  100

cf. 데이터 프레임의 이름을 정할 때 앞에 'Data Frame'의 약자인 'df'를 붙여 두면 다른 변수들과 구별하기 쉬움.

 

3. 생성된 데이터에 새로운 열 추가하기 (학생들의 반에 대한 정보를 추가해보기)

class <- c(1, 1, 2, 2)
df_midterm <- data.frame(class, english, math)
df_midterm

##    class english math
## 1      1     100   50
## 2      1      45   60
## 3      2      80   90
## 4      2      70  100

 

4. 분석하기

- 데이터 프레임이 완성되면 분석해보기. mean( )을 이용해 전체 학생의 영어 점수와 수학 점수 평균을 구해볼 것

mean(df_midterm$english)  #df_midterm의 english로 평균 산출
## [1] 73.75

mean(df_midterm$math)  #df_midterm의 mathfh 평균 산출
## [1] 75

mean ( ) 안에 입력된 df_midterm$english는 'df_midterm 데이터 프레임 안에 있는 english 변수'를 의미한다.

cf. 달러 기호($)는 데이터 프레임 안에 있는 변수를 지정할 때 사용한다.

 

5. 데이터 프레임 한 번에 만들기

- 위에서는 여러 변수를 각각 만든 후에 합치는 형태로 데이터 프레임을 만들었다. 이 방법 외에 data.frame( ) 안에 변수와 값을 나열해서 한 번에 만드는 방법도 있다.

df_midterm <- data.frame(class = c(1, 1, 2, 2),
						 english = c(100, 45, 80, 70),
                         math = c(50, 60, 90, 100))
df_midterm

##    class english math
## 1      1     100   50
## 2      1      45   60
## 3      2      80   90
## 4      2      70  100

cf. 코드가 길어질 경우에는 쉼표 뒤에서 엔터키를 눌러 다음 줄로 넘기는 것이 좋음. 전체적인 구조가 한 눈에 잘 들어오기 때문에 코드를 이해하기 쉽고 오류를 쉽게 찾을 수 있음.

 

3. 외부 데이터 이용하기 - 축적된 시험 성적 데이터 불러오기

직접 데이터를 입력하기보다 외부에서 생성된 데이터를 불러와 분석하는 경우가 더 많다.

* 데이터를 관리할 때 가장 많이 사용되는 엑셀 파일과 CSV 파일을 불러와 데이터 프레임을 만드는 방법 보기

 

1. 깃허브(bit.ly/doit_ra)에서 실습에 사용할 excel_exam.xlsx 파일 다운로드하기 (cf. 깃허브에서 실습 파일을 다운로드하는 방법은 블로그 내 ' ' 포스팅 참고)

2. 프로젝트 폴더에 엑셀 파일 삽입하기

- 데이터 파일을 불러오려면 현재 작업중인 프로젝트 폴더에 불러올 파일을 삽입해야한다. excel_exam.xlsx 파일을 프로젝트 폴더에 넣기

3. readx1 패키지 설치하고 로드하기

- 엑셀 파일을 불러오려면 엑셀 파일을 불러오는 기능을 제공하는 패키지를 이용해야 한다. readxl 패키지를 설치하고 로드한다. ( cf. readxl의 맨 뒷 글자는 소문자 엘 ) 

install.packages("readxl") 
library(readxl)

 

4. 엑셀 파일 불러오기

- readxl 패키지에서 제공하는 read_excel( )을 이용해 엑셀 파일을 불러온다. read_excel( )은 엑셀 파일을 데이터 프레임으로 만드는 기능을 한다. 괄호 안에 양쪽에 큰따옴표와 함께 불러올 엑셀 파일명을 넣으면 되고, 확장자(.xlsx)까지 기입해야한다.

cf. R에서는 파일명을 지정할 때 항상 앞 뒤에 따옴표를 넣는다. 만약, 프로젝트 폴더가 아닌 다른 폴더에 있는 엑셀 파일을 불러오려면 파일 경로를 지정하면 된다. 경로를 지정할 때는 슬래시(/)를 사용한다.

df_exam <- read_excel("d:/easy_r/excel_exam.xlsx")

 

5. 분석하기

- mean( )을 이용해 전체 평균을 구할 수 있다.

 

엑셀 파일 첫 번째 행이 변수명이 아니라면?

변수명 없이 첫 번째 행부터 바로 데이터가 시작되는 엑셀 파일

read_excel( )은 기본적으로 엑셀 파일의 첫 번째 행을 '변수명'으로 인식해 불러온다. 변수명 없이 첫 번째 행부터 바로 데이터가 시작되는 경우, 첫 번째 행의 데이터가 변수명으로 지정되면서 유실되는 문제가 발생한다.

df_exam_novar <- read_excel("excel_exam_novar.xlsx")
df_exam_novar

##      1 1__1   50   98 50__1
## 1    2    1   60   97    60
## 2    3    2   25   80    65
## 3    4    2   50   89    98
## 4    5    3   20   98    15
## 5    6    3   50   98    45
## 6    7    4   46   98    65
## 7    8    4   48   87    12

출력 결과를 보면, 엑셀 파일 첫 번째 행을 변수명으로 인식해 원본과 달리 7행까지만 존재하는 문제가 발생한 것 보임.

>> col_names = F 파라미터를 설정하면 첫 번째 행을 변수명이 아닌 데이터로 인식해 불러오고, 변수명은 'X__숫자'로 자동 지정된다. (F는 대문자로 입력해야함)

df_exam_novar <- read_excel("excel_exam_novar.xlsx", col_names = F)
df_exam_novar

##   X__1 X__2 X__3 X__4 X__5
## 1    1    1   50   98   50
## 2    2    1   60   97   60
## 3    3    2   25   80   65
## 4    4    2   50   89   98
## 5    5    3   20   98   15
## 6    6    3   50   98   45
## 7    7    4   46   98   65
## 8    8    4   48   87   12

cf. R에는 참(TRUE)과 거짓(FALSE) 중 하나로 구성되는 논리형 벡터(Logical Vectors)라는 변수 타입이 있다. 논리형 벡터는 어떤 값이 참인지 거짓인지를 나타내는데, 여기서는 col_names = F의 F가 '거짓'을 의미한다. '열 이름(Column Name)을 가져올 것인가?'라는 질문에 '그렇지 않다'라는 답을 한 셈이다. <<논리형 벡터는 반드시 대문자 TRUE 또는 FALSE로 입력해야 하고, 앞글자만 따서 T 또는 F를 입력해도 된다.>>

 

엑셀 파일에 시트가 여러 개 있다면?

여러 개의 시트로 구성된 엑셀 파일을 불러올 경우 sheet 파라미터를 이용해 몇 번째 시트의 데이터를 불러올지 지정할 수 있다. 

# 엑셀 파일의 세 번째 시트에 있는 데이터 불러오기
df_exam_sheet <- read_excel("excel_exam_sheet.xlsx", sheet = 3)

 

 

 

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

빅데이터 활용을 떠올리면 '사생활 침해'가 자연스럽게 우려된다.

빅데이터 기술이 발전하면서, 특정 데이터를 수정 및 가공처리하여 본래 목적 외에 2차, 3차 목적으로 활용될 가능성이 증가했다.

 

기사 내용 중

"지금까지 개인 프라이버시 보호와 인공지능 기술 활용은 서로 긴장 관계에 있었다. 좋은 인공지능 모델을 개발하기 위해선 많은 데이터가 필요하다. 하지만 개인정보를 보호를 위해선 데이터를 기업 등이 마음껏 수집하지 못하게 하는 규제가 필요하다. 둘이 서로 대립하는 것은 당연해 보인다. 대표적인 것이 의료 데이터다. 질병 기록이나 디엔에이(DNA) 자료 등은 개인의 민감한 개인 정보이면서, 동시에 질병을 퇴치하고 신약 개발 등을 위한 연구에 귀중한 데이터이기도 하다. 프라이버시와 인공지능, 양립할 방법은 없을까?
둘이 양립하게 도울 수 있는 새 인공지능 기술이 최근 주목을 받고 있다. 바로 연합학습(FL·Fedreated Learning)이다. 미국 매사추세츠공대에서 발간하는 <엠아이티 테크놀로지 리뷰>(MIT Technology Review)는 지난 11일 이 기술이 “프라이버시 위협 없이 의료 데이터를 활용할 수 있는” 새로운 가능성을 열고 있다고 소개했다. 스타트업 관련 매체 <벤처비트>는 이달 초 열린 ‘텐서플로 개발자 대회’에서 이 기술이 단연 주목을 받았다고 소개했다. 텐서플로는 구글이 공개한 오픈소스 기계학습 플랫폼이다."

대표적인 예로 '의료 데이터'를 말하고 있어 이 기사에 눈길이 갔다.

내가 현재 하고 있는 프로젝트가 의료 데이터와 밀접한 관계를 맺고 있다. 의료 데이터는 현재 각 의료 기관에 분산되어 있으며 수집 및 활용이 굉장히 어렵다. 의료 데이터 소유자가 병원처럼 되어 있는데, 환자의 의료 데이터는 환자 본인 소유이다. 따라서 환자가 자신의 의료데이터 수집과 활용을 동의한다면 데이터들을 수집 가능하다고 보았다. 그리고 나는 그것을 '블록체인'을 활용해야 한다고 생각했다.

하지만 이 기사를 읽어보면 각 환자의 데이터를 다른 곳으로 이동시키지 않고 연합학습 모델이 찾아가서 배우는 식이라고 되어있다. 데이터를 하나의 서버로 모으는 것이 아니라 모델을 각 데이터가 저장된 곳으로 전송시킨다는 것이 흥미로웠다.

이 기술이 발전된다면 특정 데이터를 가져올 필요 없이 간단하게 각자의 스마트폰에서 인공지능 모델을 학습시킬 수 있는 것이다. 개개인의 인공지능 모델을 개발할 기회가 생긴다고 해석할 수 있을 것 같다.

 

 

원문보기: 
http://www.hani.co.kr/arti/science/science_general/887030.html#csidxc62a620113ab739a600dd22c5b66642 

+ Recent posts