Chapter 2 Data 파악하기
- 저는 데이터 분석을 진행할 때, 보통 아래와 같은 순서로 진행합니다.
단계 | 데이터 분석 절차 |
---|---|
(1) | 데이터 복사하여 입력 |
(2) | 데이터 구조 파악 |
(3) | 데이터 전 처리 진행 |
(4) | 데이터 분석 시행 |
분석하려는 데이터가 어떤 형태로, 어떤 변수로 구성되어 있는지
파악 하시는 것이 향후 전처리, 분석을 진행 할 때 도움이 됩니다.이번 chapter에서는 R에 내장되어 있는 iris data를 활용하겠습니다.
2.1 데이터 형식/변수 확인
glimpse(데이터) : 데이터 를 힐끗 살펴보겠다
데이터가 몇 개의 관측치(row)와, 몇 개의 변수(column)로 구성되어 있는지 빠르게 보여줍니다.
저는 주로 데이터를 복사 붙여 넣기 한 뒤,
제대로 붙여 넣기가 되었는지 확인하는 용도로 사용합니다.R에 기본 내장되어 있는 iris 데이터는 5개 열과 150줄로 구성되어 있습니다.
따라서, observation은 150, variables는 5 로 표시되어야 합니다.
# 앞으로 자주 사용하게 될 tidyverse library를 로드해줍니다.
# 아직 설치가 되어 있지 않으시다면, install.package('tidyverse')로 설치해주세요.
library(tidyverse)
## Rows: 150
## Columns: 5
## $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, …
## $ Sepal.Width <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, …
## $ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, …
## $ Petal.Width <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, …
## $ Species <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa,…
- glimpse로는 데이터가 어떤 값으로 구성되어 있는지,
어떤 자료형으로 들어가 있는지, 관측값과 변수는 몇 개인지 빠르게 확인할 수 있습니다.
## Observations: 150
## Variables: 5
## $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4,...
위와 같은 형태로 데이터가 나올 때
이라고 된 부분이
자료형을 나타내 주는 부분입니다.자료형(Data type) 은 아래와 같은 종류가 자주 사용됩니다.
+ NULL: 데이터가 없는 경우
+ Logical: 불리언, 참 또는 거짓
+ Int: 정수
+ Double: 부동소수점 실수
+ Complex: 복소수
+ Character: 문자열
+ List: 리스트
+ Closure: 함수
※ 자료형에 대해서는 아래 링크 추가 확인 부탁 드립니다.
- 데이터를 파악할 때, 데이터 구조(Data Structure)도 중요합니다.
자주 사용되는 데이터 구조는 아래와 같습니다.
+ data.frame : 데이터 프레임
+ tibble : 데이터 프레임을 재구성한, 심플한 데이터 프레임
+ list : 리스트
+ matrix : 매트릭스
+ vector : 벡터
+ factor : 요인
- 데이터 구조를 확인하고 싶을 때는 str() 함수를 사용하시면 됩니다.
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
※ 데이터 구조에 대해서는 아래 링크 추가 확인 부탁 드립니다.
2.2 변수 클래스 확인
class(데이터) : 데이터에 들어있는 변수의 자료형(클래스)를 알려달라
- 자료형과 클래스는 다르기에 클래스도 확인을 해주는 것이 좋습니다.
저는 각 열 단위로 클래스를 확인하기 위해 apply함수와
class 함수를 아래와 같이 활용합니다.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## "character" "character" "character" "character" "character"
2.3 변수 고유 값 확인
unique(데이터) : 데이터 고유 값들을 보여달라
glimpse 함수를 통해 데이터 복사 후 입력이 잘 되었는지 확인이 되었으면,
주요 변수가 각 행에 잘 입력되었는지 unique 함수를 통해 확인 합니다.아래와 같이 iris 데이터의 Species 항목에 대해 unique 함수를 시행하면 고유 값이 출력됩니다.
저는 제가 다루는 데이터의 직급/직위, 회사 등이 제대로 해당 열에 들어 있는지 파악하는데 unique함수를 주로 사용하고 있습니다.
## [1] setosa versicolor virginica
## Levels: setosa versicolor virginica
2.4 결측치(NA) 확인
is.na(데이터) : 데이터에 NA 값이 있나요? True/False로 알려줘요
- 데이터에 결측치(NA) 가 있는지 확인하는 is.na() 데이터에 결측치가 들어있는지 TRUE/FALSE를 통해 확인합니다.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE FALSE
## [6,] FALSE FALSE FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE FALSE
## [9,] FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE
## [15,] FALSE FALSE FALSE FALSE FALSE
## [16,] FALSE FALSE FALSE FALSE FALSE
## [17,] FALSE FALSE FALSE FALSE FALSE
## [18,] FALSE FALSE FALSE FALSE FALSE
## [19,] FALSE FALSE FALSE FALSE FALSE
## [20,] FALSE FALSE FALSE FALSE FALSE
## [21,] FALSE FALSE FALSE FALSE FALSE
## [22,] FALSE FALSE FALSE FALSE FALSE
## [23,] FALSE FALSE FALSE FALSE FALSE
## [24,] FALSE FALSE FALSE FALSE FALSE
## [25,] FALSE FALSE FALSE FALSE FALSE
## [26,] FALSE FALSE FALSE FALSE FALSE
## [27,] FALSE FALSE FALSE FALSE FALSE
## [28,] FALSE FALSE FALSE FALSE FALSE
## [29,] FALSE FALSE FALSE FALSE FALSE
## [30,] FALSE FALSE FALSE FALSE FALSE
## [31,] FALSE FALSE FALSE FALSE FALSE
## [32,] FALSE FALSE FALSE FALSE FALSE
## [33,] FALSE FALSE FALSE FALSE FALSE
## [34,] FALSE FALSE FALSE FALSE FALSE
## [35,] FALSE FALSE FALSE FALSE FALSE
## [36,] FALSE FALSE FALSE FALSE FALSE
## [37,] FALSE FALSE FALSE FALSE FALSE
## [38,] FALSE FALSE FALSE FALSE FALSE
## [39,] FALSE FALSE FALSE FALSE FALSE
## [40,] FALSE FALSE FALSE FALSE FALSE
## [41,] FALSE FALSE FALSE FALSE FALSE
## [42,] FALSE FALSE FALSE FALSE FALSE
## [43,] FALSE FALSE FALSE FALSE FALSE
## [44,] FALSE FALSE FALSE FALSE FALSE
## [45,] FALSE FALSE FALSE FALSE FALSE
## [46,] FALSE FALSE FALSE FALSE FALSE
## [47,] FALSE FALSE FALSE FALSE FALSE
## [48,] FALSE FALSE FALSE FALSE FALSE
## [49,] FALSE FALSE FALSE FALSE FALSE
## [50,] FALSE FALSE FALSE FALSE FALSE
## [51,] FALSE FALSE FALSE FALSE FALSE
## [52,] FALSE FALSE FALSE FALSE FALSE
## [53,] FALSE FALSE FALSE FALSE FALSE
## [54,] FALSE FALSE FALSE FALSE FALSE
## [55,] FALSE FALSE FALSE FALSE FALSE
## [56,] FALSE FALSE FALSE FALSE FALSE
## [57,] FALSE FALSE FALSE FALSE FALSE
## [58,] FALSE FALSE FALSE FALSE FALSE
## [59,] FALSE FALSE FALSE FALSE FALSE
## [60,] FALSE FALSE FALSE FALSE FALSE
## [61,] FALSE FALSE FALSE FALSE FALSE
## [62,] FALSE FALSE FALSE FALSE FALSE
## [63,] FALSE FALSE FALSE FALSE FALSE
## [64,] FALSE FALSE FALSE FALSE FALSE
## [65,] FALSE FALSE FALSE FALSE FALSE
## [66,] FALSE FALSE FALSE FALSE FALSE
## [67,] FALSE FALSE FALSE FALSE FALSE
## [68,] FALSE FALSE FALSE FALSE FALSE
## [69,] FALSE FALSE FALSE FALSE FALSE
## [70,] FALSE FALSE FALSE FALSE FALSE
## [71,] FALSE FALSE FALSE FALSE FALSE
## [72,] FALSE FALSE FALSE FALSE FALSE
## [73,] FALSE FALSE FALSE FALSE FALSE
## [74,] FALSE FALSE FALSE FALSE FALSE
## [75,] FALSE FALSE FALSE FALSE FALSE
## [76,] FALSE FALSE FALSE FALSE FALSE
## [77,] FALSE FALSE FALSE FALSE FALSE
## [78,] FALSE FALSE FALSE FALSE FALSE
## [79,] FALSE FALSE FALSE FALSE FALSE
## [80,] FALSE FALSE FALSE FALSE FALSE
## [81,] FALSE FALSE FALSE FALSE FALSE
## [82,] FALSE FALSE FALSE FALSE FALSE
## [83,] FALSE FALSE FALSE FALSE FALSE
## [84,] FALSE FALSE FALSE FALSE FALSE
## [85,] FALSE FALSE FALSE FALSE FALSE
## [86,] FALSE FALSE FALSE FALSE FALSE
## [87,] FALSE FALSE FALSE FALSE FALSE
## [88,] FALSE FALSE FALSE FALSE FALSE
## [89,] FALSE FALSE FALSE FALSE FALSE
## [90,] FALSE FALSE FALSE FALSE FALSE
## [91,] FALSE FALSE FALSE FALSE FALSE
## [92,] FALSE FALSE FALSE FALSE FALSE
## [93,] FALSE FALSE FALSE FALSE FALSE
## [94,] FALSE FALSE FALSE FALSE FALSE
## [95,] FALSE FALSE FALSE FALSE FALSE
## [96,] FALSE FALSE FALSE FALSE FALSE
## [97,] FALSE FALSE FALSE FALSE FALSE
## [98,] FALSE FALSE FALSE FALSE FALSE
## [99,] FALSE FALSE FALSE FALSE FALSE
## [100,] FALSE FALSE FALSE FALSE FALSE
## [101,] FALSE FALSE FALSE FALSE FALSE
## [102,] FALSE FALSE FALSE FALSE FALSE
## [103,] FALSE FALSE FALSE FALSE FALSE
## [104,] FALSE FALSE FALSE FALSE FALSE
## [105,] FALSE FALSE FALSE FALSE FALSE
## [106,] FALSE FALSE FALSE FALSE FALSE
## [107,] FALSE FALSE FALSE FALSE FALSE
## [108,] FALSE FALSE FALSE FALSE FALSE
## [109,] FALSE FALSE FALSE FALSE FALSE
## [110,] FALSE FALSE FALSE FALSE FALSE
## [111,] FALSE FALSE FALSE FALSE FALSE
## [112,] FALSE FALSE FALSE FALSE FALSE
## [113,] FALSE FALSE FALSE FALSE FALSE
## [114,] FALSE FALSE FALSE FALSE FALSE
## [115,] FALSE FALSE FALSE FALSE FALSE
## [116,] FALSE FALSE FALSE FALSE FALSE
## [117,] FALSE FALSE FALSE FALSE FALSE
## [118,] FALSE FALSE FALSE FALSE FALSE
## [119,] FALSE FALSE FALSE FALSE FALSE
## [120,] FALSE FALSE FALSE FALSE FALSE
## [121,] FALSE FALSE FALSE FALSE FALSE
## [122,] FALSE FALSE FALSE FALSE FALSE
## [123,] FALSE FALSE FALSE FALSE FALSE
## [124,] FALSE FALSE FALSE FALSE FALSE
## [125,] FALSE FALSE FALSE FALSE FALSE
## [126,] FALSE FALSE FALSE FALSE FALSE
## [127,] FALSE FALSE FALSE FALSE FALSE
## [128,] FALSE FALSE FALSE FALSE FALSE
## [129,] FALSE FALSE FALSE FALSE FALSE
## [130,] FALSE FALSE FALSE FALSE FALSE
## [131,] FALSE FALSE FALSE FALSE FALSE
## [132,] FALSE FALSE FALSE FALSE FALSE
## [133,] FALSE FALSE FALSE FALSE FALSE
## [134,] FALSE FALSE FALSE FALSE FALSE
## [135,] FALSE FALSE FALSE FALSE FALSE
## [136,] FALSE FALSE FALSE FALSE FALSE
## [137,] FALSE FALSE FALSE FALSE FALSE
## [138,] FALSE FALSE FALSE FALSE FALSE
## [139,] FALSE FALSE FALSE FALSE FALSE
## [140,] FALSE FALSE FALSE FALSE FALSE
## [141,] FALSE FALSE FALSE FALSE FALSE
## [142,] FALSE FALSE FALSE FALSE FALSE
## [143,] FALSE FALSE FALSE FALSE FALSE
## [144,] FALSE FALSE FALSE FALSE FALSE
## [145,] FALSE FALSE FALSE FALSE FALSE
## [146,] FALSE FALSE FALSE FALSE FALSE
## [147,] FALSE FALSE FALSE FALSE FALSE
## [148,] FALSE FALSE FALSE FALSE FALSE
## [149,] FALSE FALSE FALSE FALSE FALSE
## [150,] FALSE FALSE FALSE FALSE FALSE
- 위와 같이 TRUE/FALSE로 값을 반환한 것은 한 눈에 보기 쉽지 않기에,
보통 sum() 함수를 같이 사용하여 몇 개의 결측치가 있는지 파악합니다.
## [1] 0
- NA 값이 있는 경우, 어떻게 처리를 하는지는 다음 R Tips에서 공유 드리겠습니다.
2.5 요약 통계량 확인
summary(데이터) : 데이터를 요약해서 보여주세요
데이터의 최소, 최대, 중앙값, 평균값, 1분위값, 3분위값을 보여주며,
향후 각종 분석 결과를 보여주는 중요한 함수입니다.저는 데이터 전처리를 할 때 summary함수를 사용하여 분위수를 확인하고,
1분위수 이하, 3분위수 이상의 값들을 제거하고 분석하곤 합니다.이 외에도, summary 함수는 정말 유용하게 많이 활용됩니다.
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
2.6 EDA(탐험적 데이터분석) 패키지 소개
ExpanD(), dlookr() 등 다양한 EDA 패키지들이 있습니다
데이터 구조가 어느정도 익숙해지고,
결측치나 데이터 전처리가 필요 없다면, 곧바로 EDA를 하셔도 좋습니다.dlookr, ExPanDaR과 같은 좋은 패키지들이 나와 있어서
설치하시고 한 줄만 입력하시면 데이터 안에 있는 변수들간
상관/회귀/빈도 등 다양한 정보를 알 수 있습니다.분석할 데이터의 class는 보고자 하는 결과 형식에 따라 바꿔주시면 됩니다.
#iris는 shiny app 기반으로 동작하므로, 새로운 창에서 동작합니다.
# 아래 코드를 # 없이 구동해보세요!
# library(ExPanDaR)
# ExPanDaR::ExPanD(iris)
#dlookr는 한국분이 만드신 EDA 패키지로, 다양한 기능들이 있으며, 데이터의 전반을 파악하는데 매우 유용하게 사용됩니다.
library(dlookr)
dlookr::diagnose(iris)
## # A tibble: 5 x 6
## variables types missing_count missing_percent unique_count unique_rate
## <chr> <chr> <int> <dbl> <int> <dbl>
## 1 Sepal.Length numeric 0 0 35 0.233
## 2 Sepal.Width numeric 0 0 23 0.153
## 3 Petal.Length numeric 0 0 43 0.287
## 4 Petal.Width numeric 0 0 22 0.147
## 5 Species factor 0 0 3 0.02