일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 오버워치
- 머신러닝
- rstudio
- Data Analysis
- Programming
- R
- flask
- chaining
- Cssselector
- web
- TensorFlow
- 크롤링
- python3
- Barplot
- ajoubamboo
- 웹크롤링
- 선형회귀
- Crawling
- Python
- Web Programming
- 파이썬3
- webcrawling
- 오버로그
- Ajou University
- Linear Regression
- rcv
- 파이썬
- Server
- mongoDB
- Rfacebook
- Today
- Total
R is well
[Data Analysis] 데이터 분석 기초 본문
데이터분석 기초
안상호
2017년 10월 8일
목차
- 데이터 분석?
- 데이터 분석 사례
- EDA(Exploratory data analysis)기초
1. 데이터 분석?
R은 데이터 통계분석 및 시각화에 최적화된 프로그래밍 언어라고 위키백과: 한국어, 위키백과: 영어 등에
소개되어있는 것을 보신적이 있으실 겁니다.
통계 분석에 대한 소개에 앞서서, 그보다 상위 개념인 데이터 분석에 대한 개념을 알고 들어가는 것이
이해에 도움이 되실 것입니다.
- 데이터 분석
가장 기본이 되는 정의는 raw 데이터로부터 유의미한 information을 만들어내는 분석 행위가 바로, 데이터 분석이라고 할 수 있습니다.
이러한 정의는 MIS(Management information system)
이나, DB 관리론(Database Management)
에서도 반복적으로 나타나는 내용입니다.
raw 데이터는 가공되지 않은 측정자료를 의미하는데, 아무런 처리 없이 분석하기에는 한계가 있기에 분석가가 전처리(pre-processing)를 한뒤에 분석에 들어가는 경우가 대다수입니다.
전반적인 분석 프로세스는 다음에 다루기로 하고, 여기까지만 들어서는 데이터 분석이 무엇인지 감이 안오시는 경우도 많을 것입니다.
다음의 장에서 사례를 살펴보시며, 감을 잡아보도록 합시다.
2. 데이터 분석 사례
2.1. 데이터 분석 사례 1: 추천 알고리즘
위의 넷플릭스와 아마존 사례에서 보시는 것처럼, 사용자들이 데이터 분석 결과를 피부로 느끼기 가장 좋은 것이 추천 알고리즘일 것입니다.
사용자들의 시청이력 데이터, 구매 데이터, 방문 로그 데이터 등을 분석하여 사용자들에게 적합한 콘텐츠를 추천하는 것을 의미합니다.
이러한 추천을 통해 넷플릭스는 65%의 매출이 발생하며, 아마존은 30%의 매출이 발생한다고 합니다.
2.2. 데이터 분석 사례 2: 일기 예보
일기 예보도 사실은 데이터 분석에 기초한 예측 방법으로, 구체적으로는 통계 분석 기법인, 회귀분석이 적용된 것입니다.
회귀분석이란 1차 방정식을 생각하시면 이해하시기 편하실텐데, 회귀분석 결과 나오는 회귀식이 바로 Y = X1 + X2 + ...
의 형태로 나타나기 때문입니다.
일기 예보에서 기온을 예측한다고 했을 때, Y는 기온이 될 것이며 나머지는 이러한 기온에 영향을 미치는 요인들일 것입니다.
기온에 영향을 미치는 무수한 요인 중 습도와 전날 기온 이 두가지 요인들이 주요하게 작용했다고 한다면
기온 = (습도계수)X(습도 관측값) + (전날 기온 계수)X(전날 기온 관측값) + (기온의 Y절편)
이라는 식이 완성될 것입니다.
실제로 일기 예보를 할때에는 더 많은 요인들이 있을 것인데, 이를 통해 일기예보도 데이터 분석의 사례라는 것을 살펴보았습니다.
3. EDA(Exploratory data analysis)기초
드디어 실습을 해볼 수 있는 장으로 넘어오게 되었습니다.
그런데 갑자기 뜬금없이 EDA라는 것을 마주하시게 되어 난감하실 수 있을 것입니다.
EDA에 대한 소개에 앞서서, 데이터 분석의 전반적인 프로세스를 설명드리도록 하겠습니다.
데이터 분석 프로세스는 일반적으로 1. 데이터수집
-> 2. 데이터전처리
-> 3. 데이터 EDA
-> 4. 모델링
-> 5. 검증
으로 나누어집니다.
이번 문서에서 다룰 것은 앞의 두과정을 생략하고 바로 적용할 수 있는 데이터 EDA에 대해 간단히 다루어보도록 하겠습니다.
구체적으로 말씀드리자면, 데이터의 분포나 특징에 대해 알아볼 수 있는 방법을 알려드릴 것입니다.
3.1. 특징 알아보기
오늘 사용해볼 데이터는 오버워치라는 게임의 유저 데이터입니다.
우선 데이터를 읽어오는 것부터 해보도록 하겠습니다.
over <- read.csv("over_1_97_unique_delete_na.csv", stringsAsFactors = F)
read.csv()
- 이 함수는 csv파일을 R에서 사용가능한 데이터 프레임 형식으로 읽어와주는 함수입니다. 자세한 내용은 R 시간에 다룰 것이니, 지금은 데이터를 읽어오는데 사용한다는 정도만 확실히하고 가도록 합시다.
str(over)
## 'data.frame': 79545 obs. of 41 variables:
## $ Player_Name : chr "밤일" "RJS4028" "화끈한늑대" "배고파군" ...
## $ Player_LV : int 266 413 343 436 221 93 117 212 288 161 ...
## $ Player_Total_rating : int 2641 3008 3112 2197 2500 1074 500 3101 2116 2573 ...
## $ Player_WINRATE : num 0.5 0.46 0.49 0.57 0.55 0.21 0.43 0.57 0.51 0.44 ...
## $ Player_KDA : num 2.37 1.54 2.06 2.46 1.9 0.63 2.18 2.4 2.04 1.77 ...
## $ Player_PlayTime : int 29 19 7 6 14 2 16 22 104 5 ...
## $ Player_AVG_ELIMINATE : num 8.31 6.02 5.51 10.86 8.59 ...
## $ Player_Roll_OFFENSE_PlayTime: int 8 NA NA 2 NA NA 8 15 20 4 ...
## $ Player_Roll_OFFENSE_Winrate : num 0.47 NA 0 0.56 0 0 0.39 0.62 0.43 0.38 ...
## $ Player_Roll_OFFENSE_KD : num 2.41 1.33 1.73 2.79 2.13 0.63 2.38 2.55 1.82 1.96 ...
## $ Player_Roll_SUPPORT_PlayTime: int 2 15 3 1 4 1 1 NA 8 NA ...
## $ Player_Roll_SUPPORT_Winrate : num 0.42 0.44 0.5 1 0.68 0.5 0.33 0.33 0.5 0.4 ...
## $ Player_Roll_SUPPORT_KD : num 1.25 1.32 1.94 2.02 1.97 0.31 1.01 1.38 1.52 1.27 ...
## $ Player_Roll_TANK_PlayTime : int 9 2 1 1 7 NA NA 1 4 NA ...
## $ Player_Roll_TANK_Winrate : num 0.61 0.47 0.55 0.33 0.52 0 0.5 0.25 0.44 NA ...
## $ Player_Roll_TANK_KD : num 2.82 2.67 2.18 1.88 1.88 1.29 1.7 1.88 1.18 0.31 ...
## $ Player_Roll_DEFENSE_PlayTime: int 3 NA 1 NA NA NA 3 2 64 NA ...
## $ Player_Roll_DEFENSE_Winrate : num 0.37 1 0.33 NA NA 0 0.53 0.33 0.52 NA ...
## $ Player_Roll_DEFENSE_KD : num 2.03 0.67 2.3 14 1.17 1.12 2.49 1.87 2.28 NA ...
## $ Player_PraiseCard : int 39 41 6 14 41 4 16 29 243 3 ...
## $ Player_medal_Gold : int 138 100 19 32 69 11 20 82 744 17 ...
## $ Player_medal_Silver : int 132 60 27 11 47 12 39 103 467 19 ...
## $ Player_medal_Bronze : int 147 45 30 30 60 5 47 86 508 23 ...
## $ Most1_HERO_NAME : chr "솔저:76" "아나" "루시우" "맥크리" ...
## $ Most1_HERO_KD : num 2.95 0.99 2.21 2.4 1.81 0.27 2.62 2.25 2.37 2.53 ...
## $ Most1_HERO_Winrate : num 0.5 0.48 0.54 0.45 0.52 0.6 0.36 0.63 0.53 0.4 ...
## $ Most1_HERO_AVG_MissionContri: int 45 40 71 44 134 61 39 24 53 50 ...
## $ Most1_HERO_PLAYTIME : int 5 8 2 2 6 1 6 8 62 2 ...
## $ Most1_HERO_AVG_Fire : int 98 31 10 163 43 78 16 86 101 64 ...
## $ Most2_HERO_NAME : chr "로드호그" "루시우" "라인하르트" "아나" ...
## $ Most2_HERO_KD : num 2.67 1.98 1.52 2.62 1.97 1.12 1.83 2.72 1.93 1.49 ...
## $ Most2_HERO_Winrate : num 0.5 0.37 0.42 1 0.68 0 0.45 0.68 0.48 0.4 ...
## $ Most2_HERO_AVG_MissionContri: int 66 112 80 56 140 38 14 69 80 24 ...
## $ Most2_HERO_PLAYTIME : int 4 6 1 1 4 NA 2 3 9 2 ...
## $ Most2_HERO_AVG_Fire : int 98 31 10 163 43 78 16 86 101 64 ...
## $ Most3_HERO_NAME : chr "윈스턴" "로드호그" "위도우메이커" "로드호그" ...
## $ Most3_HERO_KD : num 2.67 1.98 1.52 2.62 1.97 1.12 1.83 2.72 1.93 1.49 ...
## $ Most3_HERO_Winrate : num 0.71 0.42 0.33 0.25 0.42 0 0.62 0.46 0.44 0.5 ...
## $ Most3_HERO_AVG_MissionContri: int 21 41 34 173 197 17 5 14 127 6 ...
## $ Most3_HERO_PLAYTIME : int 3 2 NA 1 1 NA 1 2 9 NA ...
## $ Most3_HERO_AVG_Fire : int 69 72 96 119 51 12 26 48 111 18 ...
str
- 데이터의 전체 구조와 column의 데이터 type에 대해서 간단히 보여주는 함수입니다. 오늘은 많은 column들 중에서도 유저들의 실력을 나타내는 지표이자 경쟁전 점수인 Player_Total_rating과 Most1_HERO_NAME을 통해 분석과정을 풀어나가 보도록 하겠습니다.
3.2. 히스토그램
히스토그램은 수치형(numeric) 데이터들의 분포를 보기 위해 작성하는 그래프입니다. 출처
범주형 자료가 아닌, 연속된 수치형 자료에서만 사용해야 한다는 점을 기억해두시면 좋을 것 같습니다.
고등학교 수학시간에 배웠던, 그리고 대학 통계시간에 듣게되는 자료의 분포, 예를 들면 정규분포 등을 파악하는 과정이라고 생각하시면 됩니다.
유저들의 점수로 히스토그램을 그릴 수 있는 이유는, 점수가 0 ~ 5000점까지 계급이 존재하지 않고 연속적으로 관측되기 때문입니다.
나중에 ggplot2
패키지를 통해 더 예쁜 그래프를 그릴 수 있으나, 오늘은 R 내장 함수인 hist()
를 통해 간단히 나타내보도록 하겠습니다.
hist(over$Player_Total_rating)
대체적으로 정규분포의 형태를 보인다는 것을 확인하실 수 있습니다.
3.3. 막대 그래프
다음은 Most1_HERO_NAME을 통해 막대 그래프를 그려보도록 하겠습니다.
이 column은 게임에서 유저들 개개인이 어떤 캐릭터를 가장 많이 플레이했는지를 나타냅니다.
앞선 점수 column과의 차이점은 각 캐릭터들 마다 관측 횟수를 셀 수 있는(count) 범주형 자료라는 것입니다.
factor형이라고도 하는 이러한 자료형은 table()
을 통해 손쉽게 몇번 관측되었는지를 확인할 수 있고, barplot()
함수를 통해 시각화할 수 있습니다.
o <- table(over$Most1_HERO_NAME);o
##
## D.VA 겐지 라인하르트 로드호그 루시우
## 4483 8330 8205 6072 6789
## 리퍼 맥크리 메르시 메이 바스티온
## 628 4026 6423 762 205
## 솔저:76 솜브라 시메트라 아나 오리사
## 6556 159 355 12380 134
## 위도우메이커 윈스턴 자리야 정크랫 젠야타
## 671 1574 5099 789 737
## 토르비욘 트레이서 파라 한조
## 224 1156 2278 1510
barplot(o, las=2)
마무리
이것으로 데이터 분석 기초 관련 자료에 대한 설명을 마치도록 하겠습니다.
끝내기에 앞서 Player_PlayTime
은 데이터를 살펴볼때 히스토그램이 적합한가 아니면 막대그래프가 적합한지 생각해보시면 좋을 것 같습니다.
이번 시간에는 EDA 중에서 한 column 씩 다루어보는 단변량 분석을 해보았고, 두개이상의 변수를 통해 알아보는 다변량 분석, ggplot2
를 활용한 시각화 등은 다음 시간에 알아보도록 하겠습니다.
질문 사항은 언제든 환영입니다.
고생하셨습니다!
P.S. 데이터는 비공개이니, 양해 부탁드립니다.
'프로그래밍 > R' 카테고리의 다른 글
[R Tip] R & Rstudio 관련 Tip_1 (5) | 2016.12.08 |
---|---|
[R 패키지 소개] R package introduction : Rfacebook (2) | 2016.12.05 |