본문 바로가기

반응형

R programming

(26)
조금 더 현실적인 SQL 쿼리짜기 - R 코드로 같은 결과만들기 0. 들어가며 앞선 두 글을 통해 쿼리문을 통해 특정상황의 데이터를 추출하고, 다음 글에서는 리팩토링하는 과정을 거쳤다. 그동안 SQL을 공부한다고 R을 잘 안다루었다. 겸사겸사 같은 Raw데이터가 주어져있을 때 SQL과 같은 결과물을 R코드로 작성해보고자 마음 먹었다. 1. 데이터 살펴보기 R에서 작업하기 위해서는 데이터를 다루기 위해서 데이터와 일부 라이브러리를 불러와야한다. 패키지는 dplyr과 lubridate를 사용했다. library(dplyr) library(lubridate) setwd("c:/R") df % 체인 연산자인데, 조금 과장해서 무지성으로 해도 체인 연산자 하나만 있으면 뚝딱이다. (체인연산자 사랑해) 조건1과 조건2에 해당하는 데이터를 df2라는 이름으로 저장했다. 처음 글에..
길이가 다른 값들을 구분하여 각 열로 나누어주기 in R 아래와 같은 데이터프레임이 있다고 가정해보자. ID CODE 1 12345 2 12345, 56788, 12222, 11111, 22222, 33333 3 12333 4 12344 5 42323 6 11111, 22222 각 아이디에는 1개 이상의 CODE값을 가지고 있다. 복수개의 CODE값을 가지고 있는 것은 쉼표로 구분이 되어있다. 만들고자 했던 데이터 프레임의 형식은 다음과 같았다. id value1 value2 value3 value4 value5 1 12345 NA NA NA NA 2 12345 56788 12222 1111 22222 3 12333 NA NA NA NA 4 12344 NA NA NA NA 5 42323 NA NA NA NA 6 11111 22222 NA NA NA 처음엔 st..
시계열 데이터 밑바닥부터 다루기 in R (2) 요일로 변환하기 우리는 YYYY-MM-DD 형택의 데이터에서 종종 해당날짜의 요일을 필요로 할 때가 있다. 요일에 따라 구분된 데이터는 예컨대 요일별 매출추이 등을 봐야할 때 유용할 것이다. 이럴 때 wday함수를 통해 요일을 추출해낼 수 있다. wday함수는 날짜에 따른 요일을 숫자로 표시해준다. 일요일=1, 월요일=2, 화요일=3, 수요일=4, 목요일=5, 금요일=6, 토요일=7 로 표기되며 wday(date, label=TRUE) label=TRUE를 통해 숫자에서 영문으로 표시를 바꿀 수 있다. 날짜 반올림, 올림, 내림처리 시계열 데이터 밑바닥부터 다루기 in R(1)에서 연,월,일 등의 요소를 추출하는 방법을 배웠지만 이럴 경우 추출한 값을 제외한 나머지 값들을 잃었다. 이럴 때 날짜를 반올림..
시계열 데이터 밑바닥부터 다루기 in R (1) 우리 일상 속 많은 데이터형태 중 하나는 시간의 흐름에 따라 기록된 시계열 데이터다. 개인적으로도 시계열데이터를 다루는 것이 재밌고 흥미로운 점도 참 많다. 시간이 지남에 따라 어떠한 변화의 추이를 분석하는 것은 정말 재밌다! 티켓가격 EDA 한 것 중에도 시계열데이터를 다루어 인터랙티브하게 만들어 둔 것도 있었지만, 구글의 힘을 받아 구현하고 싶은 내용을 어찌어찌 구현해본 것이지, 기초적인 내용을 알고 한 것은 아니었다. 그래서 오늘 정리해볼 내용은 '시계열 데이터 밑바닥부터 다루기'이다. 그리고 뭐니뭐니해도 데이터는 역시 전처리가 중요하다. 시간 데이터의 형식을 알아보자! 한국에서는 보통 년-월-일 순으로 표시하지만, 외국에서는 월-일-년 혹은 일-월-년 순으로 표기하는 것을 볼 수 있다. 그렇기 때..
data.frame과 data.table을 비교해보자 in R 그동안 R에서 행과 열의 형태로 구성되어있는 data.frame 만을 써왔었다.(사실 data.frame이 전부인줄 알았다) 근데 data.table은 data.frame에 비해 20배가까이 빠르다고 한다. 데이터의 용량이 크면 클수록 더 유리하다고 해서 "아앗... 그렇담 알고는 있어야지... 배워야돼..." 해서 data.frame과 data.table간의 문법(?) 차이를 알고자 한다. 공부하면서 진짜 비슷하다고 느꼈고 data.table이 좀 더 쉬워보이는 부분도 있어서 "오호? 괜찮은데?" 싶었지만, 이미 data.frame의 문법에 익숙해졌다... 자세한 내용은 Rpub에서 확인! http://rpubs.com/jongho/544048
지도학습(supervised learning): 의사결정나무(decision tree)이해하기 의사결정나무는 통계에 대한 이해없이도 시각적으로 어떻게 결과가 나왔는지 이해하기 쉬움. 하지만 단점도 있음. 과적합(over-fit)될 가능성이 큰 모델. 따라서 전체 데이터에서 train 데이터와 test데이터로 나누어, 학습하며 과적합이 될 가능성을 줄여줘야함. 또 의사결정 나무가 굉장히 커져서 이해하기에 복잡해질 수 있다. 따라서 미리 가지치기(pre-pruning)을 해줘야한다. 가장 대표적인 방법 중 하나는 1. 최대로 뻗어나갈 수 있는 가지의 깊이를 미리결정된 사이즈로 제한하는 것. 또 다른 방법은 2. 하나의 노드가 가지는 최소한의 관측치 수를 정해두는 것이다. 이러한 가지치기 방법은 의사결정나무가 과도하게 커지는 것을 방지한다. 하지만 너무 빨리 가치가 뻗어나가는 것을 제한해버리면, 중요하..
ROC 커브와 AUC (를 이해하기 전 민감도와 특이도 이해하기) 일부내용은 ADsP 시험 공부할 때도 나왔던 내용이다. 오분류표를 살펴보면 다음표와 같다. predict Positive Negative Actual Positive TP FN Negative FP TN ROC커브를 이해하기 위해서는 민감도와 특이도를 알아야한다. 민감도(Recall or Sensitivity) : TP/(TP+FN)-실제로 P인 것들 중 P로 예측한 비율 특이도(Specificity): TN/(FP+TN): 실제로 N인 것들 중 N으로 예측한 비율 ROC 그래프는 X축에 '1-특이도', Y축에 '민감도' 를 두어 두 평가값의 관계를 모형으로 나타낸다. 1-특이도와 민감도는 서로 반비례의 관계를 가진다. 어느 한 쪽을 올리려고 하면, 다른 한 쪽은 떨어진다. 예컨대 모든 것을 Positi..
지도학습(supervised learning)-나이브 베이지안 모델 in R(Today I learn) 나이브 베이지안의 모델은 P(A|B)=P(A and B)/ P(B) 이러한 형태를 취하고 있다. 사건 B가 일어날 경우, 사건 A가 나올 확률을 나타낸다. 단순히 갯수를 구해서 식으로 확률을 구할 수 있고, 함수를 사용해 구할 수도 있다. 함수를 사용하는 방법은 다음과 같다. datacamp에서 소개한 라이브러리와 함수이다. # Load the naivebayes package library(naivebayes) # Build the prediction model a

반응형