SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
МИХАИЛ ДУБОВ

                     EMPATIKA LABS




АНАЛИЗ ДАННЫХ
   В СРЕДЕ R
ОБОБЩЕНИЕ, СОПОСТАВЛЕНИЕ,
   ВИЗУАЛИЗАЦИЯ ДАННЫХ
ИСТОРИЯ R

• R – диалект языка S.
  • S был создан в 1976 г. в Bell Labs.


• 1991: система R создана статистиками Россом
  Ихака и Робертом Джентельменом (университет
  Окленда, Новая Зеландия).

• 2000: вышел R v1.0.0
• 2012: вышел R v2.15.1
АЛЬТЕРНАТИВЫ

                           • Дорогая лицензия
                           • Очень много
                             возможностей




• Библиотеки языка
  Python
• В стадии развития
  (текущая версия - 0.9)
ПРЕИМУЩЕСТВА R

+ R – свободный пакет.
+ Активный процесс разработки ядра, частые
  релизы.
+ Сплоченное комьюнити, огромное количество
  библиотек:
 + Около 4000 библиотек в CRAN.
 - Ядро содержит только самую основную
   функциональность, для многих часто возникающих задач
   уже нужно устанавливать библиотеки.
+ Во многом чрезвычайно элегантный и
  интуитивный синтаксис.
 + Код читаем ⇒ анализ данных воспроизводим!
+ Широкие возможности для работы с графикой.
НЕДОСТАТКИ R

- Все объекты хранятся в оперативной памяти –
  невозможна работа напрямую с очень
  большими данными
 - Решается с помощью сторонней библиотеки Bigmemory
- Ограниченная поддержка 3D
- Неочевидные названия функций и правила
  наименования переменных (примеры – позже…)
 - К тому же, не самое высокое качество документации
R В ИНДУСТРИИ


                    «…there are at least 200 active R users at
                    Google, plus another 300+ occasional
                    users participating in Google's internal R
                    support list.»
                       Karl Millar, Senior Quantitative Software Engineer at Google


R используется в Google для:
•   Параллельного статистического предсказывания на больших данных – для
    повышения эффективности online-рекламы Google.
•   Изучения эффективности поисковой рекламы в Google (так, с помощью R
    было обнаружено, что поисковая реклама дает дополнительные 89% веб-
    трафика).
R В ИНДУСТРИИ




http://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919
ОРГАНИЗАЦИЯ РАБОТЫ С R

• Ядро R
 • доступно с сайта CRAN (cran.r-project.org)
   [CRAN = The Comprehensive R Archive Network]


• Сторонние библиотеки
 • Библиотеки с CRAN (cran.r-project.org)
 • Bioconductor project (bioconductor.org)


• Среды разработки
 • R GUI (стандартная)
 • R Studio (rstudio.com)
ВВЕДЕНИЕ В ЯЗЫК R
ТИПЫ И БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ
ТИПЫ ДАННЫХ


  Типы данных                 Примеры значений

    integer     0L, 1L

    numeric     0, 1, 2.3, Inf, NaN

   complex      3+4i

    logical     TRUE, FALSE, T, F

   character    "hi"


• Получение типа:                    class (x)
• Проверка на принадлежность к типу: is.[type] (x)
• Приведение к типу:                 as.[type] (x)
ОТСУТСТВУЮЩИЕ ЗНАЧЕНИЯ

• Зачастую не удается собрать все данные по
  всем параметрам интересующих нас объектов.

• Отсутствующие (неизвестные) значения
  наблюдений обозначаются в R как NA (“Not
  available”).

• Проверка на NA: is.na (x)
• Избавление от NA: na.omit (data)
  (в MATLAB – используются специальные функции вроде
   nanmean, nanmax, nanmin)
БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ

Структура данных                       Примеры

        vector      с(1L, 2L, 3L), 1:3, vector("integer", 3)

         list       list(1L, 2.3, "hi", F)

        factor      factor(c("Male", "Female", "Male", "Male"))

        matrix      matrix(1:6, nrow = 2, ncol = 3)
                    data.frame(
                     age = 18:23,
      data.frame     height = c(170, 171, NA, 176, 173, 180),
                     sex = factor(c("m", "f", "m", "m", "f", "m"))
                    )

• Оператор присванивания: data <- data.frame(…)
  •    Оператор = тоже есть (и семантически очень незначительно
       отличается от <-)
DATA FRAME

 • Объекты типа data.frame, как правило, содержат
   анализируемые данные (наблюдения некоторых
   переменных).

                                  > data

data <- data.frame(                    age   height   sex
 age = 18:23,
 height = c(170, 171, NA,         1    18     170     m
            176, 173, 180),       2    19     171      f
 sex = factor(c("m", "f", "m",    3    20     NA      m
                "m", "f", "m"))
)                                 4    21     176     m
                                  5    22     173      f
                                  6    23     180     m
ОБОБЩЕНИЕ ДАННЫХ

> nrows(data)
[1] 6
> ncol(data)
[1] 3
> names(data)
[1] "age" "height" "sex"


> head(data, 3)
   age   height    sex
1 18        170      m
2 19        171      f
3 20         NA      m
ОБОБЩЕНИЕ ДАННЫХ

> summary(data)
     age            height      sex
 Min. :18.00       Min. :170    f:2
1st Qu.:19.25     1st Qu.:171   m:4
Median :20.50     Median :173
 Mean :20.50       Mean :174
3rd Qu.:21.75     3rd Qu.:176
 Max. :23.00       Max. :180
                    NA's :1
ВЫБОРКИ ДАННЫХ – СТРОКИ


> data[1,]
  age height sex
1 18     170   m

> data[1:3,]
  age height sex
1 18     170   m
2 19     171   f
3 20      NA   m

> data[c(1,3),]
  age height sex
1 18     170   m
3 20      NA   m
ВЫБОРКИ ДАННЫХ – СТОЛБЦЫ

> data[, "height"]
[1] 170 171 NA 176 173 180

> data$height
[1] 170 171 NA 176 173 180

> mean(data$height)   # !!!
[1] NA

> mean(na.omit(data$height))
[1] 174

> data$foo <- vector("integer", 6)
  # new column added
ВЫБОРКИ ДАННЫХ & УСЛОВИЯ


> data[data$age > 20 & data$sex == "m", "height"]
[1] 176 180

> all(data$age > 16)
[1] TRUE

> any(data$age > 60)
[1] FALSE
ВЫГРУЗКА ДАННЫХ

 • Пример: Iris Dataset
   (archive.ics.uci.edu/ml/datasets/Iris)
 • download.file() – выгрузка
 • read.csv() – чтение данных в csv
   • Функция read.table – более
     настраиваемая

> fileUrl <- "http://archive.ics.uci.edu/ml/machine-learning-
databases/iris/iris.data"
> download.file(fileUrl, destfile="./iris.csv"[, method="curl"])

> iris.data <- read.csv("./iris.csv")
  # iris.data is now a data frame
> head(iris.data, 1)
  X5.1 X3.5 X1.4 X0.2 Iris.setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
> colnames(iris.data) <- c("Sepal.Length", "Sepal.Width",
"Petal.Length", "Petal.Width", "Species")
ВЫГРУЗКА ДАННЫХ

• Чтение Excel
 • read.xlsx(), read.xlsx2() из пакета xlsx


• Чтение JSON
 • fromJSON() из пакета RJSONIO


• Чтение текстов
 • readLines()
ГРАФИКА В R
ВИЗУАЛИЗАЦИЯ ДАННЫХ
ПРОСТЕЙШИЕ ГРАФИКИ

 • plot() – 2D-график для пар точек (x; y)
 • lines() – соединяет точки линиями (функция
   чувствительна к NA!)
> plot(data$age, data$height, pch=19, xlab="Age", ylab="Height")
> lines(data[!is.na(data$height),]$age, na.omit(data$height),
pch=19)
ПРОСТЕЙШИЕ ГРАФИКИ

 • Соединять точки линиями в данном примере смысла мало
   (может быть несколько наблюдений с одним возрастом).
 • Зато имеет смысл разбить наблюдения по полу:
> plot(data$height ~ data$age, pch=19, col=data$sex, xlab="Age",
ylab="Height") # alternative syntax
> legend(18, 179, legend=c("Male", "Female"), col=c("red",
"black"), pch=19)
ПРОСТЕЙШИЕ ГРАФИКИ

 • table() – возвращает частотность значений
 • barplot() – гистограмма
> barplot(table(data$sex), names.arg=c("Female", "Male"))
ПРОДВИНУТЫЙ АНАЛИЗ
     ДАННЫХ В R
РЕГРЕССИОННЫЙ АНАЛИЗ, КЛАСТЕРИЗАЦИЯ
ЛИНЕЙНАЯ РЕГРЕССИОННАЯ
               МОДЕЛЬ
 • lm() – для обычных линейных моделей (в т.ч. с
   dummy-переменными)
 • glm() – для более широкого класса моделей
   (например, моделей бинарного выбора)

                𝐻𝑒𝑖𝑔ℎ𝑡 𝑖 = 𝛼 + 𝛽 ∙ 𝐴𝑔𝑒 𝑖 + 𝜀 𝑖

> lm1 <- lm(height ~ age, data)
  # lm1 is now a special object
> summary(lm1)
  ...

Сравните с MATLAB:   b = regress(y, X)
                     # X is a n·p matrix
                     # b is a p·1 vector
ЛИНЕЙНАЯ РЕГРЕССИОННАЯ
              МОДЕЛЬ
 • abline() – рисует прямую по коэффициентам ее
   уравнения:

> plot(data$height ~ data$age, pch=19, xlab="Age", ylab="Height")
> abline(c(lm1$coeff[1], lm1$coeff[2]), col="blue")
ДОБАВЛЕНИЕ DUMMY-VARIABLES

• Специально ничего делать не надо!
 (data$sex имеет тип factor)
       𝐻𝑒𝑖𝑔ℎ𝑡 𝑖 = 𝛽1 + 𝛽2 ∙ 𝐴𝑔𝑒 𝑖 + 𝛽3 ∙ 𝑓(𝑆𝑒𝑥 𝑖 ) + 𝜀 𝑖

    > lm2 <- lm(height ~ age + sex, data)
ДОБАВЛЕНИЕ DUMMY-VARIABLES

> plot(data$height ~ data$age, pch=19, col=data$sex, xlab="Age",
ylab="Height")
> legend(18, 179, legend=c("Male", "Female"), col=c("red",
"black"), pch=19)
> abline(c(lm2$coeff[1], lm2$coeff[2]), col="black")
> abline(c(lm2$coeff[1]+lm2$coeff[3], lm2$coeff[2]), col="reg")
ПРЕДСКАЗАНИЯ С ПОМОЩЬЮ
              РЕГРЕССИЙ

data2 <- data.frame(
  age = c(25L, 20L, 30L),
  sex = factor(c("m", "f", "f"))
)

> data2$height.predicted <- predict(lm2, data2)
> data2
  age sex height.predicted
1 25    m         182.4854
2 20    f         171.1748
3 30    f         187.6796
КЛАСТЕРИЗАЦИЯ ПО K-MEANS

> plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19)
КЛАСТЕРИЗАЦИЯ ПО K-MEANS

 • k-means – недетерминированный алгоритм!

> clustering <- kmeans(iris.data[, c("Sepal.Width",
"Petal.Length")], centers = 3) # trial №1
> plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19,
col=clustering$cluster)
> clustering <- kmeans(iris.data[, c("Sepal.Width",
"Petal.Length")], centers = 3) # trial №2
> plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19,
col=clustering$cluster)
КЛАСТЕРИЗАЦИЯ ПО K-MEANS

 • Параметр nstart позволяет запускать алгоритм несколько раз
   и считать «средние» кластеры
> clustering <- kmeans(iris.data[, c("Sepal.Width",
"Petal.Length")], centers = 3, nstart = 10)
> plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19,
col=clustering$cluster)
ПРОДВИНУТЫЙ R
R КАК ФУНКЦИОНАЛЬНЫЙ & ОБЪЕКТНО-
      ОРИЕНТИРОВАННЫЙ ЯЗЫК
R – ФУНКЦИОНАЛЬНЫЙ ЯЗЫК

• Функции в R – “first-class objects”:
   • могут храниться в переменных;
   • могут передаваться в другие функции;
   • в языке есть функции высшего порядка (например, lapply –
     известная в других языках как map).

cm.to.foot <- function(x) { 0.0328 * x }

> data$height.foot <- lapply(data$height, cm.to.foot)
> data
  age height sex height.foot
1 18     170   m       5.576
2 19     171   f      5.6088
3 20      NA   m          NA
4 21     176   m      5.7728
5 22     173   f      5.6744
6 23     180   m       5.904
R – ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК

• ООП в R реализовано очень странно:
 • В действительности, в языке уживаются сразу две
   различные реализации ООП.


• Более распространенная из двух реализаций
  ООП в R основана на:
 • определении новых классов методом setClass();
 • расширении уже существующих в языке generic-
   функций для новых классов методом setMethod().
R – ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК

setClass("polygon", representation(x = "numeric", y = "numeric"))

setMethod("plot", "polygon",
  function(x, y, ...) {
    plot(x@x, x@y, type = "n", ...)
    xp <- c(x@x, x@x[1])
    yp <- c(x@y, x@y[1])
    lines(xp, yp)
})




> p <- new("polygon", x = c(1, 2, 3, 4),
y = c(1, 2, 3, 1))
> plot(p)
ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ &
    ДАЛЬНЕЙШЕЕ ЧТЕНИЕ
• Computing for data analysis (Roger
  Peng, John Hopkins University)
   www.youtube.com/playlist?list=PLw5h0DiJ-
    9PBGsDZqUNoW61ApOvdBUYMV


• Data analysis in R (Jeff Leek, John
  Hopkins University)

• MATLAB/R Reference (David Hiebeler)
  [math.umaine.edu/~hiebeler/comp/
  matlabR.pdf]

Contenu connexe

Similaire à Data analysis in R

Call Center statistics with R
Call Center statistics with RCall Center statistics with R
Call Center statistics with RDennis Lyubyvy
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationAnton Gorokhov
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageAlexander Granin
 
Haskell
HaskellHaskell
HaskellDevDay
 
Семинар 24-25 апреля 2014 г. «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»
Семинар 24-25 апреля 2014 г.  «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»Семинар 24-25 апреля 2014 г.  «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»
Семинар 24-25 апреля 2014 г. «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»АНАЛИТИКА ПЛЮС
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskellhusniyarova
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данныхLevon Avakyan
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенкоYandex
 

Similaire à Data analysis in R (20)

Call Center statistics with R
Call Center statistics with RCall Center statistics with R
Call Center statistics with R
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Основы языка R
Основы языка RОсновы языка R
Основы языка R
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
 
Haskell
HaskellHaskell
Haskell
 
Семинар 24-25 апреля 2014 г. «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»
Семинар 24-25 апреля 2014 г.  «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»Семинар 24-25 апреля 2014 г.  «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»
Семинар 24-25 апреля 2014 г. «R + TABLEAU. ПРОГНОЗИRОВАНИЕ И BIG DATA АНАЛИЗ»
 
Java8. Innovations
Java8. InnovationsJava8. Innovations
Java8. Innovations
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Лекция о языке программирования Haskell
Лекция о языке программирования HaskellЛекция о языке программирования Haskell
Лекция о языке программирования Haskell
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
PascalABC.NET 2015-2016
PascalABC.NET 2015-2016PascalABC.NET 2015-2016
PascalABC.NET 2015-2016
 

Plus de Empatika

Gamification 101 - Intro
Gamification 101 - IntroGamification 101 - Intro
Gamification 101 - IntroEmpatika
 
Travel 101 - On Distribution
Travel 101 - On DistributionTravel 101 - On Distribution
Travel 101 - On DistributionEmpatika
 
Travel Tech 101 - Introduction
Travel Tech 101 - IntroductionTravel Tech 101 - Introduction
Travel Tech 101 - IntroductionEmpatika
 
Subscriptions business model - FAQ
Subscriptions business model - FAQSubscriptions business model - FAQ
Subscriptions business model - FAQEmpatika
 
Theories of Innovation
Theories of InnovationTheories of Innovation
Theories of InnovationEmpatika
 
Lessons learned & not learned at MSU
Lessons learned & not learned at MSULessons learned & not learned at MSU
Lessons learned & not learned at MSUEmpatika
 
Disruptive Innovations
Disruptive InnovationsDisruptive Innovations
Disruptive InnovationsEmpatika
 
US Commercial Aviation History - 1
US Commercial Aviation History - 1US Commercial Aviation History - 1
US Commercial Aviation History - 1Empatika
 
Life in a startup
Life in a startupLife in a startup
Life in a startupEmpatika
 
Machine Learning - Empatika Open
Machine Learning - Empatika OpenMachine Learning - Empatika Open
Machine Learning - Empatika OpenEmpatika
 
Machine learning 2 - Neural Networks
Machine learning 2 - Neural NetworksMachine learning 2 - Neural Networks
Machine learning 2 - Neural NetworksEmpatika
 
Machine Learning - Introduction
Machine Learning - IntroductionMachine Learning - Introduction
Machine Learning - IntroductionEmpatika
 
Online Travel 3.0 - Mobile Traveler (Rus)
Online Travel 3.0 - Mobile Traveler (Rus)Online Travel 3.0 - Mobile Traveler (Rus)
Online Travel 3.0 - Mobile Traveler (Rus)Empatika
 
Flight to 1000000 users - Lviv IT Arena 2016
Flight to 1000000 users - Lviv IT Arena 2016Flight to 1000000 users - Lviv IT Arena 2016
Flight to 1000000 users - Lviv IT Arena 2016Empatika
 
introduction to artificial intelligence
introduction to artificial intelligenceintroduction to artificial intelligence
introduction to artificial intelligenceEmpatika
 
Travel inequality - Bayram Annakov
Travel inequality - Bayram AnnakovTravel inequality - Bayram Annakov
Travel inequality - Bayram AnnakovEmpatika
 
App in the Air Travel Hack Moscow - Fall, 2015
App in the Air Travel Hack Moscow - Fall, 2015App in the Air Travel Hack Moscow - Fall, 2015
App in the Air Travel Hack Moscow - Fall, 2015Empatika
 
Product Management
Product ManagementProduct Management
Product ManagementEmpatika
 
Intro to Exponentials - Part 1
Intro to Exponentials - Part 1Intro to Exponentials - Part 1
Intro to Exponentials - Part 1Empatika
 
Singularity University Executive Program - Day 1
Singularity University Executive Program - Day 1Singularity University Executive Program - Day 1
Singularity University Executive Program - Day 1Empatika
 

Plus de Empatika (20)

Gamification 101 - Intro
Gamification 101 - IntroGamification 101 - Intro
Gamification 101 - Intro
 
Travel 101 - On Distribution
Travel 101 - On DistributionTravel 101 - On Distribution
Travel 101 - On Distribution
 
Travel Tech 101 - Introduction
Travel Tech 101 - IntroductionTravel Tech 101 - Introduction
Travel Tech 101 - Introduction
 
Subscriptions business model - FAQ
Subscriptions business model - FAQSubscriptions business model - FAQ
Subscriptions business model - FAQ
 
Theories of Innovation
Theories of InnovationTheories of Innovation
Theories of Innovation
 
Lessons learned & not learned at MSU
Lessons learned & not learned at MSULessons learned & not learned at MSU
Lessons learned & not learned at MSU
 
Disruptive Innovations
Disruptive InnovationsDisruptive Innovations
Disruptive Innovations
 
US Commercial Aviation History - 1
US Commercial Aviation History - 1US Commercial Aviation History - 1
US Commercial Aviation History - 1
 
Life in a startup
Life in a startupLife in a startup
Life in a startup
 
Machine Learning - Empatika Open
Machine Learning - Empatika OpenMachine Learning - Empatika Open
Machine Learning - Empatika Open
 
Machine learning 2 - Neural Networks
Machine learning 2 - Neural NetworksMachine learning 2 - Neural Networks
Machine learning 2 - Neural Networks
 
Machine Learning - Introduction
Machine Learning - IntroductionMachine Learning - Introduction
Machine Learning - Introduction
 
Online Travel 3.0 - Mobile Traveler (Rus)
Online Travel 3.0 - Mobile Traveler (Rus)Online Travel 3.0 - Mobile Traveler (Rus)
Online Travel 3.0 - Mobile Traveler (Rus)
 
Flight to 1000000 users - Lviv IT Arena 2016
Flight to 1000000 users - Lviv IT Arena 2016Flight to 1000000 users - Lviv IT Arena 2016
Flight to 1000000 users - Lviv IT Arena 2016
 
introduction to artificial intelligence
introduction to artificial intelligenceintroduction to artificial intelligence
introduction to artificial intelligence
 
Travel inequality - Bayram Annakov
Travel inequality - Bayram AnnakovTravel inequality - Bayram Annakov
Travel inequality - Bayram Annakov
 
App in the Air Travel Hack Moscow - Fall, 2015
App in the Air Travel Hack Moscow - Fall, 2015App in the Air Travel Hack Moscow - Fall, 2015
App in the Air Travel Hack Moscow - Fall, 2015
 
Product Management
Product ManagementProduct Management
Product Management
 
Intro to Exponentials - Part 1
Intro to Exponentials - Part 1Intro to Exponentials - Part 1
Intro to Exponentials - Part 1
 
Singularity University Executive Program - Day 1
Singularity University Executive Program - Day 1Singularity University Executive Program - Day 1
Singularity University Executive Program - Day 1
 

Data analysis in R

  • 1. МИХАИЛ ДУБОВ EMPATIKA LABS АНАЛИЗ ДАННЫХ В СРЕДЕ R ОБОБЩЕНИЕ, СОПОСТАВЛЕНИЕ, ВИЗУАЛИЗАЦИЯ ДАННЫХ
  • 2. ИСТОРИЯ R • R – диалект языка S. • S был создан в 1976 г. в Bell Labs. • 1991: система R создана статистиками Россом Ихака и Робертом Джентельменом (университет Окленда, Новая Зеландия). • 2000: вышел R v1.0.0 • 2012: вышел R v2.15.1
  • 3. АЛЬТЕРНАТИВЫ • Дорогая лицензия • Очень много возможностей • Библиотеки языка Python • В стадии развития (текущая версия - 0.9)
  • 4. ПРЕИМУЩЕСТВА R + R – свободный пакет. + Активный процесс разработки ядра, частые релизы. + Сплоченное комьюнити, огромное количество библиотек: + Около 4000 библиотек в CRAN. - Ядро содержит только самую основную функциональность, для многих часто возникающих задач уже нужно устанавливать библиотеки. + Во многом чрезвычайно элегантный и интуитивный синтаксис. + Код читаем ⇒ анализ данных воспроизводим! + Широкие возможности для работы с графикой.
  • 5. НЕДОСТАТКИ R - Все объекты хранятся в оперативной памяти – невозможна работа напрямую с очень большими данными - Решается с помощью сторонней библиотеки Bigmemory - Ограниченная поддержка 3D - Неочевидные названия функций и правила наименования переменных (примеры – позже…) - К тому же, не самое высокое качество документации
  • 6. R В ИНДУСТРИИ «…there are at least 200 active R users at Google, plus another 300+ occasional users participating in Google's internal R support list.» Karl Millar, Senior Quantitative Software Engineer at Google R используется в Google для: • Параллельного статистического предсказывания на больших данных – для повышения эффективности online-рекламы Google. • Изучения эффективности поисковой рекламы в Google (так, с помощью R было обнаружено, что поисковая реклама дает дополнительные 89% веб- трафика).
  • 8. ОРГАНИЗАЦИЯ РАБОТЫ С R • Ядро R • доступно с сайта CRAN (cran.r-project.org) [CRAN = The Comprehensive R Archive Network] • Сторонние библиотеки • Библиотеки с CRAN (cran.r-project.org) • Bioconductor project (bioconductor.org) • Среды разработки • R GUI (стандартная) • R Studio (rstudio.com)
  • 9. ВВЕДЕНИЕ В ЯЗЫК R ТИПЫ И БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ
  • 10. ТИПЫ ДАННЫХ Типы данных Примеры значений integer 0L, 1L numeric 0, 1, 2.3, Inf, NaN complex 3+4i logical TRUE, FALSE, T, F character "hi" • Получение типа: class (x) • Проверка на принадлежность к типу: is.[type] (x) • Приведение к типу: as.[type] (x)
  • 11. ОТСУТСТВУЮЩИЕ ЗНАЧЕНИЯ • Зачастую не удается собрать все данные по всем параметрам интересующих нас объектов. • Отсутствующие (неизвестные) значения наблюдений обозначаются в R как NA (“Not available”). • Проверка на NA: is.na (x) • Избавление от NA: na.omit (data)  (в MATLAB – используются специальные функции вроде nanmean, nanmax, nanmin)
  • 12. БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ Структура данных Примеры vector с(1L, 2L, 3L), 1:3, vector("integer", 3) list list(1L, 2.3, "hi", F) factor factor(c("Male", "Female", "Male", "Male")) matrix matrix(1:6, nrow = 2, ncol = 3) data.frame( age = 18:23, data.frame height = c(170, 171, NA, 176, 173, 180), sex = factor(c("m", "f", "m", "m", "f", "m")) ) • Оператор присванивания: data <- data.frame(…) • Оператор = тоже есть (и семантически очень незначительно отличается от <-)
  • 13. DATA FRAME • Объекты типа data.frame, как правило, содержат анализируемые данные (наблюдения некоторых переменных). > data data <- data.frame( age height sex age = 18:23, height = c(170, 171, NA, 1 18 170 m 176, 173, 180), 2 19 171 f sex = factor(c("m", "f", "m", 3 20 NA m "m", "f", "m")) ) 4 21 176 m 5 22 173 f 6 23 180 m
  • 14. ОБОБЩЕНИЕ ДАННЫХ > nrows(data) [1] 6 > ncol(data) [1] 3 > names(data) [1] "age" "height" "sex" > head(data, 3) age height sex 1 18 170 m 2 19 171 f 3 20 NA m
  • 15. ОБОБЩЕНИЕ ДАННЫХ > summary(data) age height sex Min. :18.00 Min. :170 f:2 1st Qu.:19.25 1st Qu.:171 m:4 Median :20.50 Median :173 Mean :20.50 Mean :174 3rd Qu.:21.75 3rd Qu.:176 Max. :23.00 Max. :180 NA's :1
  • 16. ВЫБОРКИ ДАННЫХ – СТРОКИ > data[1,] age height sex 1 18 170 m > data[1:3,] age height sex 1 18 170 m 2 19 171 f 3 20 NA m > data[c(1,3),] age height sex 1 18 170 m 3 20 NA m
  • 17. ВЫБОРКИ ДАННЫХ – СТОЛБЦЫ > data[, "height"] [1] 170 171 NA 176 173 180 > data$height [1] 170 171 NA 176 173 180 > mean(data$height) # !!! [1] NA > mean(na.omit(data$height)) [1] 174 > data$foo <- vector("integer", 6) # new column added
  • 18. ВЫБОРКИ ДАННЫХ & УСЛОВИЯ > data[data$age > 20 & data$sex == "m", "height"] [1] 176 180 > all(data$age > 16) [1] TRUE > any(data$age > 60) [1] FALSE
  • 19. ВЫГРУЗКА ДАННЫХ • Пример: Iris Dataset (archive.ics.uci.edu/ml/datasets/Iris) • download.file() – выгрузка • read.csv() – чтение данных в csv • Функция read.table – более настраиваемая > fileUrl <- "http://archive.ics.uci.edu/ml/machine-learning- databases/iris/iris.data" > download.file(fileUrl, destfile="./iris.csv"[, method="curl"]) > iris.data <- read.csv("./iris.csv") # iris.data is now a data frame > head(iris.data, 1) X5.1 X3.5 X1.4 X0.2 Iris.setosa 1 4.9 3.0 1.4 0.2 Iris-setosa > colnames(iris.data) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
  • 20. ВЫГРУЗКА ДАННЫХ • Чтение Excel • read.xlsx(), read.xlsx2() из пакета xlsx • Чтение JSON • fromJSON() из пакета RJSONIO • Чтение текстов • readLines()
  • 22. ПРОСТЕЙШИЕ ГРАФИКИ • plot() – 2D-график для пар точек (x; y) • lines() – соединяет точки линиями (функция чувствительна к NA!) > plot(data$age, data$height, pch=19, xlab="Age", ylab="Height") > lines(data[!is.na(data$height),]$age, na.omit(data$height), pch=19)
  • 23. ПРОСТЕЙШИЕ ГРАФИКИ • Соединять точки линиями в данном примере смысла мало (может быть несколько наблюдений с одним возрастом). • Зато имеет смысл разбить наблюдения по полу: > plot(data$height ~ data$age, pch=19, col=data$sex, xlab="Age", ylab="Height") # alternative syntax > legend(18, 179, legend=c("Male", "Female"), col=c("red", "black"), pch=19)
  • 24. ПРОСТЕЙШИЕ ГРАФИКИ • table() – возвращает частотность значений • barplot() – гистограмма > barplot(table(data$sex), names.arg=c("Female", "Male"))
  • 25. ПРОДВИНУТЫЙ АНАЛИЗ ДАННЫХ В R РЕГРЕССИОННЫЙ АНАЛИЗ, КЛАСТЕРИЗАЦИЯ
  • 26. ЛИНЕЙНАЯ РЕГРЕССИОННАЯ МОДЕЛЬ • lm() – для обычных линейных моделей (в т.ч. с dummy-переменными) • glm() – для более широкого класса моделей (например, моделей бинарного выбора) 𝐻𝑒𝑖𝑔ℎ𝑡 𝑖 = 𝛼 + 𝛽 ∙ 𝐴𝑔𝑒 𝑖 + 𝜀 𝑖 > lm1 <- lm(height ~ age, data) # lm1 is now a special object > summary(lm1) ... Сравните с MATLAB: b = regress(y, X) # X is a n·p matrix # b is a p·1 vector
  • 27. ЛИНЕЙНАЯ РЕГРЕССИОННАЯ МОДЕЛЬ • abline() – рисует прямую по коэффициентам ее уравнения: > plot(data$height ~ data$age, pch=19, xlab="Age", ylab="Height") > abline(c(lm1$coeff[1], lm1$coeff[2]), col="blue")
  • 28. ДОБАВЛЕНИЕ DUMMY-VARIABLES • Специально ничего делать не надо! (data$sex имеет тип factor) 𝐻𝑒𝑖𝑔ℎ𝑡 𝑖 = 𝛽1 + 𝛽2 ∙ 𝐴𝑔𝑒 𝑖 + 𝛽3 ∙ 𝑓(𝑆𝑒𝑥 𝑖 ) + 𝜀 𝑖 > lm2 <- lm(height ~ age + sex, data)
  • 29. ДОБАВЛЕНИЕ DUMMY-VARIABLES > plot(data$height ~ data$age, pch=19, col=data$sex, xlab="Age", ylab="Height") > legend(18, 179, legend=c("Male", "Female"), col=c("red", "black"), pch=19) > abline(c(lm2$coeff[1], lm2$coeff[2]), col="black") > abline(c(lm2$coeff[1]+lm2$coeff[3], lm2$coeff[2]), col="reg")
  • 30. ПРЕДСКАЗАНИЯ С ПОМОЩЬЮ РЕГРЕССИЙ data2 <- data.frame( age = c(25L, 20L, 30L), sex = factor(c("m", "f", "f")) ) > data2$height.predicted <- predict(lm2, data2) > data2 age sex height.predicted 1 25 m 182.4854 2 20 f 171.1748 3 30 f 187.6796
  • 31. КЛАСТЕРИЗАЦИЯ ПО K-MEANS > plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19)
  • 32. КЛАСТЕРИЗАЦИЯ ПО K-MEANS • k-means – недетерминированный алгоритм! > clustering <- kmeans(iris.data[, c("Sepal.Width", "Petal.Length")], centers = 3) # trial №1 > plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19, col=clustering$cluster) > clustering <- kmeans(iris.data[, c("Sepal.Width", "Petal.Length")], centers = 3) # trial №2 > plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19, col=clustering$cluster)
  • 33. КЛАСТЕРИЗАЦИЯ ПО K-MEANS • Параметр nstart позволяет запускать алгоритм несколько раз и считать «средние» кластеры > clustering <- kmeans(iris.data[, c("Sepal.Width", "Petal.Length")], centers = 3, nstart = 10) > plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19, col=clustering$cluster)
  • 34. ПРОДВИНУТЫЙ R R КАК ФУНКЦИОНАЛЬНЫЙ & ОБЪЕКТНО- ОРИЕНТИРОВАННЫЙ ЯЗЫК
  • 35. R – ФУНКЦИОНАЛЬНЫЙ ЯЗЫК • Функции в R – “first-class objects”: • могут храниться в переменных; • могут передаваться в другие функции; • в языке есть функции высшего порядка (например, lapply – известная в других языках как map). cm.to.foot <- function(x) { 0.0328 * x } > data$height.foot <- lapply(data$height, cm.to.foot) > data age height sex height.foot 1 18 170 m 5.576 2 19 171 f 5.6088 3 20 NA m NA 4 21 176 m 5.7728 5 22 173 f 5.6744 6 23 180 m 5.904
  • 36. R – ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК • ООП в R реализовано очень странно: • В действительности, в языке уживаются сразу две различные реализации ООП. • Более распространенная из двух реализаций ООП в R основана на: • определении новых классов методом setClass(); • расширении уже существующих в языке generic- функций для новых классов методом setMethod().
  • 37. R – ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК setClass("polygon", representation(x = "numeric", y = "numeric")) setMethod("plot", "polygon", function(x, y, ...) { plot(x@x, x@y, type = "n", ...) xp <- c(x@x, x@x[1]) yp <- c(x@y, x@y[1]) lines(xp, yp) }) > p <- new("polygon", x = c(1, 2, 3, 4), y = c(1, 2, 3, 1)) > plot(p)
  • 38. ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ & ДАЛЬНЕЙШЕЕ ЧТЕНИЕ • Computing for data analysis (Roger Peng, John Hopkins University)  www.youtube.com/playlist?list=PLw5h0DiJ- 9PBGsDZqUNoW61ApOvdBUYMV • Data analysis in R (Jeff Leek, John Hopkins University) • MATLAB/R Reference (David Hiebeler) [math.umaine.edu/~hiebeler/comp/ matlabR.pdf]