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