Your SlideShare is downloading. ×
0
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Data analysis in R
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Data analysis in R

606

Published on

1 Comment
3 Likes
Statistics
Notes
  • Интересно. Хотелось бы увидеть более продвинутые примеры анализа с реальными целями и параметрами. И желательно с пояснениями и обьяснениями. И чем R лучше чем то же Питон?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
606
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  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 Googles internal R support list.» Karl Millar, Senior Quantitative Software Engineer at GoogleR используется в Google для:• Параллельного статистического предсказывания на больших данных – для повышения эффективности online-рекламы Google.• Изучения эффективности поисковой рекламы в Google (так, с помощью R было обнаружено, что поисковая реклама дает дополнительные 89% веб- трафика).
  7. R В ИНДУСТРИИhttp://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919
  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, как правило, содержат анализируемые данные (наблюдения некоторых переменных). > datadata <- 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 sex1 18 170 m2 19 171 f3 20 NA m
  15. ОБОБЩЕНИЕ ДАННЫХ> summary(data) age height sex Min. :18.00 Min. :170 f:21st Qu.:19.25 1st Qu.:171 m:4Median :20.50 Median :173 Mean :20.50 Mean :1743rd Qu.:21.75 3rd Qu.:176 Max. :23.00 Max. :180 NAs :1
  16. ВЫБОРКИ ДАННЫХ – СТРОКИ> data[1,] age height sex1 18 170 m> data[1:3,] age height sex1 18 170 m2 19 171 f3 20 NA m> data[c(1,3),] age height sex1 18 170 m3 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.setosa1 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()
  21. ГРАФИКА В RВИЗУАЛИЗАЦИЯ ДАННЫХ
  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.predicted1 25 m 182.48542 20 f 171.17483 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. ПРОДВИНУТЫЙ RR КАК ФУНКЦИОНАЛЬНЫЙ & ОБЪЕКТНО- ОРИЕНТИРОВАННЫЙ ЯЗЫК
  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.foot1 18 170 m 5.5762 19 171 f 5.60883 20 NA m NA4 21 176 m 5.77285 22 173 f 5.67446 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]

×