02-1 데이터 분석과정
데이터 분석 : 과거 및 현재에 일어난 상황을 활용하여 현황을 파악하고, 앞으로 다가올 상황을 예측하거나 일어날 상황에 대해 타당한 근거자료를 제시할 수 있도록 준비하는 과정
<데이터 분석 과정>
- 데이터 분석은 데이터 분석설계, 데이터 준비, 데이터 가공, 데이터 분석, 결론도출의 총 5단계를 거친다.
- 모든 과정이 한번의 주기로 끝나는 것처럼 보이지만, 전체 과정이 계속 반복되는 순환구조라고 볼 수있다.
→ 한번에 끝나기보단 시행착오를 여러번 거치고 전체과정을 수없이 반복해야만 원하는 결과를 얻을 수 있다.
[1단계 : 데이터 분석 설계하기]
1) 분석하려는 주제를 명확하고 구체적으로 설정하고, 주제 내 용어를 이해하기 쉽게 정의한다.
Ex) 키 성장에 영향을 미치는 요인은 무엇인가?
2) 여러 방법으로 주제와 연관된 내용의 가설을 다양하게 설정한다. 이때 가설은 최대한 많이 세운후 데이터 확보 가능 여부를 픈단하는것이 좋다. 이 순서가 바뀌면 시각이 좁아질수 있다.
Ex) 가설1 : 키는 성별과 연관
가설 2: 키는 연령과 연관
가설 3 : 키는 부모 유전자와 연관
가설 4 : 키는 우유섭취기간과 연관
3) 가설에 따른 분석 가능 변수를 구성한다. 분석가능변수를 구성할때는 각 가설에 따라 필요한 변수를 선정해야 한다. 파생변수도 함께 고려하면 좋다.
Ex)
구분 | 종속변수 | 분석변수 | 파생변수 |
가설1 | 자녀의 키 | 성별 | - |
가설2 | 자녀의 키 | 연령 | 5세단위 연령, 10세단위 연령 |
가설3 | 자녀의 키 | 아버지의 키 | 아버지 키(10cm단위) |
가설3 | 자녀의 키 | 어머니의 키 | 어머니 키(10cm단위) |
가설4 | 자녀의 키 | 우유 섭취 여부 | - |
가설4 | 자녀의 키 | 우유 섭취 기간 | 우유 섭취 기간(5년단위, 10년단위) |
4) 분석 항목을 결정한다.
Ex) 빈도분석 : 응답에 대한 개수 및 비율을 나타내는 분석
상관관계 분석 : 변수 간의 상호 연관성을 파악하기 위한 분석
기타 변수에 따른 검정
[2단계 : 데이터 준비하기]
1) 필요한 데이터를 찾아 직접 입력하여 생성
2) 기존에 누군가 구성해둔 데이터를 찾아 활용 : 엑셀, txt,csv, 웹크롤링
[3단계 : 데이터 가공하기]
- 원시 데이터를 원하는 형태로 가공하는 일련의 과정.
- 불필요한 변수를 제거하거나 필요한 변수의 데이터만 따로 추출하거나 기존 변수의 데이터 간 연산을 통해 조건에 맞는 데이터를 구성하기도 한다.
- 데이터 값에 따라 그룹화 하여 새로운 변수를 생성할 수도 있다.
[4단계 : 데이터 분석하기]
- 데이터 분석 : 데이터 가공을 거쳐 준비한 데이터를 이용하여 다양한 분서글 시행하는 단계
- 기술통계량(빈도,평균,최댓값,이상치 등)으로 데이터를 파악하고, 시각화를 통해 다양한 그래프를 그려보면서 패턴및 분포를 확인한다.
[5단계 : 결론 도출하기]
다양한 통계량을 통해 가설을 검정하고 의미있는 결과를 정리하여 최종 결과를 도출하면 데이터 분석을 위한 일련의 과정이 마무리 된다.
02-2 데이터의 생김새
<데이터의 생김새>
- 행과 열로 이루어진 데이터세트가 주를 이룬다.
- 각 행은 데이터의 관측치, 열 이름은 변수, 행과 열에 들어가는 데이터는 값이라고 부른다.
<데이터 구조간 관계 및 데이터 유형>
- 데이터는 구조와 형태에 따라 벡터, 행렬, 배열, 리스트, 데이터 프레임으로 이름을 다르게 구분한다.
벡터 : 한가지 데이터 유형으로 구성된 1차원 구조의 데이터
행렬 : 한가지 데이터 유형으로 구성된 2차원 구조의 데이터
배열 : 행렬을 n차원으로 확대한 구조의 데이터
리스트 : 숫자형 벡터, 문자형 벡터 등 여러 데이터 유형이 포함된 1차원 구조의 데이터
데이터 프레임 : 리스트를 2차원으로 확대한 구조의 데이터
<데이터 유형>
- 데이터 유형은 숫자형, 문자형, 논리형으로 나눕니다.
숫자형 : 숫자로만 이루어진 데이터
문자형 : 문자로만 이루어진 데이터
논리형 : TRUE 혹은 FALSE로 이루어진 데이터
<데이터 유형에 따른 분류>
데이터는 유형에 따라 단일형과 다중형으로 나뉜다.
단일형 : 숫자형 또는 문자형과 같이 한가지 데이터 유형으로만 구성된 데이터, 백터,행렬,배열이 해당
다중형 : 숫자데이터 또는 문자 데이터 등 여러가지 데이터유형으로 구성된 데이터, 리스트, 데이터프레임이 해당
<차원에 따른 분류>
차원 : 데이터 내에서 특정 데이터 값을 찾을때 필요한 정보의 개수
1차원 데이터 : 직선위에 데이터값이 나열, 기준점을 중심으로 얼마만큼 떨어져있는지만 알면 된다.
2차원 데이터 : 두가지 정보가 필요하다.
1차원 | 2차원 | n차원 | |
단일형 | 벡터 | 행렬 | 배열 |
다중형 | 리스트 | 데이터프레임 |
<벡터>
- 데이터 구조의 가장 기본 형태, 1차원이며 한가지 데이터 유형으로 구성
변수명 <- c(값)
- 숫자형, 정수형,문자형, 논리형으로 나눈다.
[숫자형 벡터]
#숫자형 벡터 생성하기
ex_vector <- c(-1,0,1)
mode(ex_vector)
# => numeric
str(ex_vector)
# => num[1:3] -1 0 1
length(ex_vector)
# => [1] 3
mode : 데이터 유형을 확인하는 함수
str : 데이터 유형과 값을 전체적으로 확인할 수 있는 함수
length : 데이터 길이를 확인하는 함수
[문자형 벡터]
#문자형 벡터 생성하기
ex_vector <- c("1","2","Hello")
ex_vector
# => [1] "1" "2" "Hello"
mode(ex_vector)
# => "character"
str(ex_vector)
# => chr[1:3] "1" "2" "Hello"
[논리형 벡터]
#문자형 벡터 생성하기
ex_vector <- c(TRUE,FALSE,TRUE)
ex_vector
# => [1] TRUE,FALSE,TRUE
mode(ex_vector)
# => "logical"
str(ex_vector)
# => logi [1:3] TRUE,FALSE,TRUE
<범주형 자료>
- 종류를 나타내는 명목형 자료를 바탕으로 범주화한 데이터
factor(범주화할 자료, labels=c("범주 1","범주 2"))
#숫자형 벡터 생성하기
ex_vector <- c(2,1,3,2,1)
cat_vector <- factor(ex_vector, labels=c("Apple","Banana","Cherry"))
cat_vector
# => Banana Apple Cherry Banana Apple
# Levels: Apple Banana Cherry
<행렬>
matrix(벡터, nrow = 행 개수, ncol = 열개수)
x <- c(1,2,3,4,5,6)
matrix(x, nrow = 2, ncol = 3)
-----------------
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
-----------------
matrix(x, nrow = 3, ncol = 2)
-----------------
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
행렬 개수에 따라 벡터 데이터가 위에서 아래로(행기준) 순서대로 배치된다. 배치를 바꾸고 싶다면 byrow=T 옵션을 추가하면 된다.
byrow는 데이터를 왼쪽에서 오른쪽으로, 열부처 채우겠다는 옵션으로, T는 TRUE라는 의미이다.
x <- c(1,2,3,4,5,6)
matrix(x, nrow = 2, ncol = 3)
-----------------
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
-----------------
matrix(x, nrow = 2, ncol = 3, byrow=T)
-----------------
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
<배열>
array(변수명, dim = c(행 수, 열 수, 차원 수))
x <- c(1,2,3,4,5,6)
array(x, dim = c(2,2,3))
-----------------
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 1
[2,] 6 2
, , 3
[,1] [,2]
[1,] 3 5
[2,] 4 6
<리스트>
list1 <- list(c(1,2,3),"Hello")
list1
--------------------------
[[1]]
[1] 1 2 3
[[2]]
[1] "Hello"
--------------------------
str(list1)
--------------------------
List of 2
$ : num [1:3] 1 2 3
$ : chr "Hello"
<데이터 프레임>
data.frame(변수명1, 변수명2, ..., 변수명n)
ID <- c(1,2,3,4,5,6,7,8,9,10)
SEX <- c("F","M","F","M","M","F","F","F","M","F")
AGE <- c(50,40,28,50,27,23,56,47,20,38)
AREA <- c("서울","경기","제주","서울","서울","서울","경기","서울","인천","경기")
dataframe_ex <- data.frame(ID,SEX,AGE,AREA)
dataframe_ex
--------------------------------------------------------------
ID SEX AGE AREA
1 1 F 50 서울
2 2 M 40 경기
3 3 F 28 제주
4 4 M 50 서울
5 5 M 27 서울
6 6 F 23 서울
7 7 F 56 경기
8 8 F 47 서울
9 9 M 20 인천
10 10 F 38 경기
--------------------------------------------------------------
str(dataframe_ex)
--------------------------------------------------------------
'data.frame': 10 obs. of 4 variables:
$ ID : num 1 2 3 4 5 6 7 8 9 10
$ SEX : chr "F" "M" "F" "M" ...
$ AGE : num 50 40 28 50 27 23 56 47 20 38
$ AREA: chr "서울" "경기" "제주" "서울" ...