R

xgboost and kaggle with R

개요

  • R 강의를 진행하면서 xgboost를 R로 구현하고 싶었다.
  • kaggle에 있는 데이터를 불러와서 제출까지 가는 과정을 담았으니 입문자들에게 작은 도움이 되기를 바란다.

XGBoost 개요

Tree boosting is a highly effective and widely used machine learning method. In this paper, we describe a scalable end-to-end tree boosting system called XGBoost, which is used widely by data scientists to achieve state-of-the-art results on many machine learning challenges. We propose a novel sparsity-aware algorithm for sparse data and weighted quantile sketch for approximate tree learning. More importantly, we provide insights on cache access patterns, data compression and sharding to build a scalable tree boosting system. By combining these insights, XGBoost scales beyond billions of examples using far fewer resources than existing systems.

Kaggle with R

강의 홍보

개요

  • R 입문부터 머신러닝까지 가르치게 되었다.
  • 실제 Kaggle 대회 참여 독려를 위해 R에서 Kaggle 데이터를 불러와 머신러닝을 진행하는 것을 기획하였다.
  • pins 패키지를 활용하면 보다 쉽게 할 수 있다.

(1) Kaggle API with R

  • 먼저 [Kaggle]에 회원 가입을 한다.
  • 회원 가입 진행 후, Kaggle에서 kaggle.json 파일을 다운로드 받는다.

ch05 - Log Scale Visualisation

공지

  • 본 포스트를 읽고 가급적 전체 내용 숙지를 위해 구매하는 것을 권유한다.

개요

  • 수치형 자료를 Y축으로 놓는 그래프는 언제나 힘들었다.
  • log Scale을 통해 값의 크기를 줄이기는 하지만, Y축을 어떻게 표현하는 것이 좋을지에 대한 고민은 늘 있어왔다.
  • 시각화 이론 중심의 포스팅이기에 코드 리뷰 및 해석은 생략한다.

문제점

  • log Scale을 적용했을 때와 그렇지 않을 때의 그래프를 비교해본다.

(1) 패키지 불러오기

  • 각각의 패키지를 불러온다.
  • 이 때, 데이터는 dviz.supp 저자인 Claus O. WilkeGithub Repo에서 가져와야 한다.
    • 경고: 이 부분이 초급자 분들에게는 쉽지가 않다.
  • 우선, 사전에 설치해야 할 패키지가 존재한다.
  • 현재 필자 개발환경 Spec은 다음과 같다.
> sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.6
  • 아래는 추가적으로 설치한 파일이다.
install.packages("devtools")

devtools::install_github("wilkelab/cowplot")
library(cowplot)

install.packages("colorspace")
library(colorspace)

devtools::install_github("clauswilke/colorblindr")
library(colorblindr)

devtools::install_github("clauswilke/dviz.supp")
library(dviz.supp)
  • 위 패키지들을 설치하는데 꽤 시간이 걸렸다.
library(lubridate) # 날짜 관련 패키지
library(forcats)   # 시계열 관련 패키지
library(tidyr)     # 데이터 핸들링 패키지
library(ggrepel)   # 시각화 관련 패키지
library(dviz.supp) # 저자의 개인 Repo 패키지: 교재 있는 데이터 활용 및 그래프를 구현하려면 필수적으로 설치 되어야 함.
library(kableExtra) # 데이터 출력 Table을 HTML로 변환하기 위한 패키지 

(2) 데이터 확인

  • 데이터는 US_Census 데이터를 기반으로 한다.
    • 자료 출처: 2010년도 미국 10개년 인구조사
  • 주의: 한글 폰트는 일단 생략했다.

소스코드 참조: https://github.com/clauswilke/dataviz/blob/master/coordinate_systems_axes.Rmd

추천 시스템 패키지 소개 - recommenderlab

I. 개요

  • 추천시스템을 처음 배우는 접하는 사람들을 위해 준비한 입문 Tutorial이다.

  • 패키지 소개서에 있는 내용을 한글로 번역하였다.

  • This R package provides an infrastructure to test and develop recommender algorithms. The package supports rating (e.g., 1-5 stars) and unary (0-1) data sets. Supported algorithms are:

  • 이 R 패키지는 추천자 알고리즘을 테스트하고 개발할 수 있는 인프라를 제공한다. 이 패키지는 등급(예: 별 1-5개) 및 단항(0-1) 데이터 세트를 지원한다. 지원되는 알고리즘:

    • User-based collborative filtering (UBCF)
    • Item-based collborative filtering (IBCF)
    • SVD with column-mean imputation (SVD)
    • Funk SVD (SVDF)
    • Alternating Least Squares (ALS)
    • Matrix factorization with LIBMF (LIBMF)
    • Association rule-based recommender (AR)
    • Popular items (POPULAR)
    • Randomly chosen items for comparison (RANDOM)
    • Re-recommend liked items (RERECOMMEND)
    • Hybrid recommendations (HybridRecommender)
  • For evaluation, the framework supports given-n and all-but-x protocols with

Google Colab with R

I. 들어가며

  • 빅데이터 시대에 맞춰서 다양한 툴이 나오는 가운데, Google Colab은 가히 혁명적이라 할 수 있다.
  • 과거 높은 사양의 컴퓨터에서만 수행할 수 있었던 머신러닝과 딥러닝을 구글 코랩의 환경에서 무료로 배울 수 있는 기회를 구글이 제공하기 시작했다.
  • 간단하게 아래 소스코드를 실행하여 CPU와 GPU의 연산속도를 비교 해보자.

II. Google Colab with R

  • Google Colab은 매우 편리하다. 실제 강의를 시작하면서 파이썬 관련 모든 강의안은 Google Colab으로 제작중이다.
  • 문제는 현재로써는 Google Colab만 지원한다는 점이다.
  • RStudio가 개발용으로 매우 훌륭한 도구이지만, 교육 목적으로는 조금 부족한 감이 있다. (UI 관점에서)
  • 일단 환경이 다르면 강의하는 입장에서는 여러가지로 어렵다.
  • 그래서 이번에 온라인 Tutorial을 제작하면서, Google Colab에서 R을 실행하고 또한 이를 바탕으로 강의를 제작하기로 했다.

III. Set up

  • 다음 소스코드를 그대로 실행한다.
%load_ext rpy2.ipython
The rpy2.ipython extension is already loaded. To reload it, use:
  %reload_ext rpy2.ipython
  • 간단한 EDAJupyter에서 실행할 수 있다.

IV. R 소스코드 실행

  • 이제 간단하게 R 소스코드를 실행해보자.
  • 이 때, 임시적으로 %%R 매직 command를 활용한다.

(1) 패키지 설치

  • R에서 필요한 필수 패키지를 설치한다.
  • EDA를 위한 tidyverse 패키지와 머신러닝을 위한 caret패키지를 설치한다.
%%R
# 1. 패키지가 설치 function
install_pkgs <- function(pkg){
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) 
    install.packages(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}

pkgs <- c("tidyverse", "nycflights13", "mlbench")
install_pkgs(pkgs)
R[write to console]: Installing packages into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)

R[write to console]: trying URL 'https://cran.rstudio.com/src/contrib/nycflights13_1.0.1.tar.gz'
.
.

   tidyverse nycflights13      mlbench 
        TRUE         TRUE         TRUE 

(2) EDA with tidyverse

  • tidyverse 패키지를 활용하여 간단한 EDA를 작업해보자.
%%R
nycflights13::flights %>% 
  mutate(
    cancelled = is.na(dep_time),
    sched_hour = sched_dep_time %/% 100,
    sched_min = sched_dep_time %% 100,
    sched_dep_time = sched_hour + sched_min / 60
  ) %>% 
  ggplot(mapping = aes(sched_dep_time)) + 
    geom_freqpoly(mapping = aes(colour = cancelled), binwidth = 1/4)

png

R - Select Helper Functions

I. 개요

dplyr 문법에서 select에 대해 다룬다. 보통 select는 열 추출 함수로 소개되고 있다. 그런데, select 함수에는 열 추출을 할 때 도와주는 helper functions가 있는데, 간단하게 소개하고자 한다.

  • starts_with
  • ends_with
  • contains
  • matches
  • num_range
  • one_of

작은 도움이 되었기를 바란다.

II. 사전 준비

  • 본격적인 실습에 앞서서, 패키지를 로드 한다.
library(dplyr)
library(nycflights13)
  • flights 데이터셋의 변수들을 확인하자.
glimpse(flights)
## Rows: 336,776
## Columns: 19
## $ year           <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, …
## $ month          <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ day            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ dep_time       <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, 558, 558,…
## $ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, 600, 600,…
## $ dep_delay      <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -…
## $ arr_time       <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851…
## $ arr_delay      <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -…
## $ carrier        <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", …
## $ flight         <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, 79, 301, …
## $ tailnum        <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39…
## $ origin         <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EWR", "LGA"…
## $ dest           <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FLL", "IAD"…
## $ air_time       <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, …
## $ distance       <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733,…
## $ hour           <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, …
## $ minute         <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, …
## $ time_hour      <dttm> 2013-01-01 05:00:00, 2013-01-01 05:00:00, 2013-01-01 …
  • 총 19개의 변수들로 구성이 되어 있는 것을 확인 할 수 있다.

III. 다양한 Helpers 응용

  • 앞서 개요에서 소개한 것처럼 순차적으로 helpers 활용한 변수추출을 진행하도록 한다.
  • 필자는 간단하게 소개하는 것이기 때문에, 어떻게 응용할지는 각자 주어진 데이터에서 다시한번 응용하는 것을 추천한다.
  • help(select)를 실행하면 더 자세히 나와 있다.

(1) starts_with

  • 변수명의 prefix를 가져오는 것이다.
  • 예를 들어 알파벳 문자 a만 가져오도록 해보자.
flights %>% select(starts_with("a")) %>% glimpse()
## Rows: 336,776
## Columns: 3
## $ arr_time  <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849, 853…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…
## $ air_time  <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, 158, …
  • 만약 여기에서 ar로 변경하면, air_time 변수는 추출되지 않는다.
flights %>% select(starts_with("ar")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ arr_time  <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849, 853…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(2) ends_with

  • starts_with의 정확히 반대되는 개념이다. 변수명의 suffix를 기준으로 변수명을 추출한다.
flights %>% select(ends_with("y")) %>% glimpse()
## Rows: 336,776
## Columns: 3
## $ day       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…
  • y와 연관된 변수명은 3가지였다.
  • 그런데, 조금더 구체적으로 delay라는 글자를 기준으로 추출해보자.
flights %>% select(ends_with("delay")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(3) contains

  • 변수명에 특정 문자열이 있으면 추출할 때 유용하다.
  • 특정 문자열 el을 조회하는 함수를 작성하도록 한다.
flights %>% select(contains("el")) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1, 0,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -14, 3…

(4) matches

  • helper 함수 중에서 정규 표현식 입력이 가능한 유일한 helper 함수 이다.
  • 우선 아래코드를 확인해보자.
flights %>% select(matches("a{1}")) %>% glimpse()
## Rows: 336,776
## Columns: 10
## $ year           <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, …
## $ day            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ dep_delay      <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -…
## $ arr_time       <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851…
## $ arr_delay      <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -…
## $ carrier        <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", …
## $ tailnum        <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39…
## $ air_time       <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, …
## $ distance       <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733,…
  • a{1}는 변수명에서 a가 1번 이상 나온 것을 확인하여 추출하는 정규표현식이다.
  • 정규표현식의 관한 정리된 글을 활용하여 익히도록 한다.

(5) num_range

  • num_range는 변수명 중에서 A1, A2와 같이 코드화하여 정리하는 테이블에 변수명을 추출할 때 유용하다.
  • 아래코드를 확인해보자.
set.seed(1)
df <- data.frame(A1 = runif(10), 
                 A2 = runif(10), 
                 A3 = runif(10), 
                 A4 = runif(10), 
                 A5 = runif(10))

df %>% select(num_range('A', range = 2:4)) %>% glimpse()
## Rows: 10
## Columns: 3
## $ A2 <dbl> 0.2059746, 0.1765568, 0.6870228, 0.3841037, 0.7698414, 0.4976992, …
## $ A3 <dbl> 0.93470523, 0.21214252, 0.65167377, 0.12555510, 0.26722067, 0.3861…
## $ A4 <dbl> 0.4820801, 0.5995658, 0.4935413, 0.1862176, 0.8273733, 0.6684667, …

(6) one_of

  • one_of를 활용할 때는 vector를 응용하는데, 이 때 vector안에 있는 변수명과 매칭되는 테이블을 추출한다.
flights %>% select(one_of(c("tailnum", "year"))) %>% glimpse()
## Rows: 336,776
## Columns: 2
## $ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N39463", "…
## $ year    <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2…

VI. Reference

출처: Select/rename variables by name

ch04 - Modeling Visualisation

개요

A picture is worth a thousand words — English Language Adage

The simple graph has brought more information to the data analyst’s mind than any other device. — John Tukey

한장의 그림이 수천단어보다 가치가 있다는 영어속담과, 명료한 시각화가 데이터분석가에게 다른 어떤 도구보다 더 많은 정보를 제공한다는 유명한 데이터 과학자의 조언. 핵심은 시각화이다.

본 장에서는 ggplot2 패키지를 활용한 시각화를 먼저 보여줄 것이다. 먼저 간단하게 ggplot2 패키지에 소개하자면 Grammar of Graphics1의 철학을 담아서 R 생태계에서 유명한 학자 중, Hadley Wickham에 의해 주도적으로 개발되었다. 그래프에도 문법이 있다는 패키지의 철학 아래, R의 시각화는 괄목할만한 발전을 이루었고 이는 R의 대중화에도 큰 영향을 끼쳤다.

Shiny App Deployment Using GCP

I. 개요

Google Data Studio는 놀랍도록 유연한 도구로서 마케팅 대행사 중 Google Analytics를 활용한 업체들은 대부분 항상 사용합니다. 때로는 유연성이 더 필요할 때 R ’s Shiny 패키지를 사용하여 데이터 시각화 / 대시 보드 앱을 만드는 것이 매우 쉽습니다. 이 옵션을 사용하면 모든 소스의 데이터를 예측 모델링과 함께 사용할 수 있는 장점이 있습니다.

이 블로그 게시물은 3 부분으로 나누어져 있습니다.

  1. 먼저 Google Cloud Virtual Machine (VM)을 설정하고 웹 액세스를 허용하도록 방화벽 규칙을 구성합니다.
  2. R, RStudio 및 Shiny를 설치합니다.
  3. 마지막으로 우리는 Shiny 앱을 배포하려고 합니다.

II. 가상환경 설치

먼저 필자의 로컬 컴퓨터 환경은 다음과 같습니다.

Basic Objects - Dataframe

공지

본 Tutorial은 강사에게 강의를 듣는 과거-현재-미래 학생들을 위해 작성하였습니다.

이 글을 읽어주시는 분들에게 작은 도움이 되기를 바랍니다.

I. DataFrame의 개요

본 포스트는 프로그래밍과 R을 처음 배우는 사람을 위해 작성하였습니다. 짧게 읽어두시기를 바랍니다. 공부하실 때는 복잡하게 생각하지는 마시기를 바랍니다. 영어의 기본단어 및 문법을 배우듯이 그냥 받아들이시기를 바랍니다.

데이터프레임은 서로 다른 성질의 벡터가 모여 있는 집합이라고 할 수 있다.1

(1) 데이터프레임 생성

이제 데이터프레임을 만들어보자. 어려운 것은 아니니 쉽게 따라 올 수 있을 것이다.

ch03 - gghistostats

Intro

A picture is worth a thousand words — English Language Adage The simple graph has brought more information to the data analyst’s mind than any other device. — John Tukey

한장의 그림이 수천단어보다 가치가 있다는 영어속담과, 명료한 시각화가 데이터분석가에게 다른 어떤 도구보다 더 많은 정보를 제공한다는 유명한 데이터 과학자의 조언. 핵심은 시각화이다.

본 장에서는 ggplot2 패키지를 활용한 시각화를 먼저 보여줄 것이다. 먼저 간단하게 ggplot2 패키지에 소개하자면 Grammar of Graphics1의 철학을 담아서 R 생태계에서 유명한 학자 중, Hadley Wickham에 의해 주도적으로 개발되었다. 그래프에도 문법이 있다는 패키지의 철학 아래, R의 시각화는 괄목할만한 발전을 이루었고 이는 R의 대중화에도 큰 영향을 끼쳤다.