Data analysis in R

927 views
755 views

Published on

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

No notes for slide

Data analysis in R

  1. 1. МИХАИЛ ДУБОВ EMPATIKA LABSАНАЛИЗ ДАННЫХ В СРЕДЕ RОБОБЩЕНИЕ, СОПОСТАВЛЕНИЕ, ВИЗУАЛИЗАЦИЯ ДАННЫХ
  2. 2. ИСТОРИЯ R• R – диалект языка S. • S был создан в 1976 г. в Bell Labs.• 1991: система R создана статистиками Россом Ихака и Робертом Джентельменом (университет Окленда, Новая Зеландия).• 2000: вышел R v1.0.0• 2012: вышел R v2.15.1
  3. 3. АЛЬТЕРНАТИВЫ • Дорогая лицензия • Очень много возможностей• Библиотеки языка Python• В стадии развития (текущая версия - 0.9)
  4. 4. ПРЕИМУЩЕСТВА R+ R – свободный пакет.+ Активный процесс разработки ядра, частые релизы.+ Сплоченное комьюнити, огромное количество библиотек: + Около 4000 библиотек в CRAN. - Ядро содержит только самую основную функциональность, для многих часто возникающих задач уже нужно устанавливать библиотеки.+ Во многом чрезвычайно элегантный и интуитивный синтаксис. + Код читаем ⇒ анализ данных воспроизводим!+ Широкие возможности для работы с графикой.
  5. 5. НЕДОСТАТКИ R- Все объекты хранятся в оперативной памяти – невозможна работа напрямую с очень большими данными - Решается с помощью сторонней библиотеки Bigmemory- Ограниченная поддержка 3D- Неочевидные названия функций и правила наименования переменных (примеры – позже…) - К тому же, не самое высокое качество документации
  6. 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. 7. R В ИНДУСТРИИhttp://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919
  8. 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. 9. ВВЕДЕНИЕ В ЯЗЫК RТИПЫ И БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ
  10. 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. 11. ОТСУТСТВУЮЩИЕ ЗНАЧЕНИЯ• Зачастую не удается собрать все данные по всем параметрам интересующих нас объектов.• Отсутствующие (неизвестные) значения наблюдений обозначаются в R как NA (“Not available”).• Проверка на NA: is.na (x)• Избавление от NA: na.omit (data)  (в MATLAB – используются специальные функции вроде nanmean, nanmax, nanmin)
  12. 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. 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. 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. 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. 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. 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. 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. 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. 20. ВЫГРУЗКА ДАННЫХ• Чтение Excel • read.xlsx(), read.xlsx2() из пакета xlsx• Чтение JSON • fromJSON() из пакета RJSONIO• Чтение текстов • readLines()
  21. 21. ГРАФИКА В RВИЗУАЛИЗАЦИЯ ДАННЫХ
  22. 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. 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. 24. ПРОСТЕЙШИЕ ГРАФИКИ • table() – возвращает частотность значений • barplot() – гистограмма> barplot(table(data$sex), names.arg=c("Female", "Male"))
  25. 25. ПРОДВИНУТЫЙ АНАЛИЗ ДАННЫХ В RРЕГРЕССИОННЫЙ АНАЛИЗ, КЛАСТЕРИЗАЦИЯ
  26. 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. 27. ЛИНЕЙНАЯ РЕГРЕССИОННАЯ МОДЕЛЬ • abline() – рисует прямую по коэффициентам ее уравнения:> plot(data$height ~ data$age, pch=19, xlab="Age", ylab="Height")> abline(c(lm1$coeff[1], lm1$coeff[2]), col="blue")
  28. 28. ДОБАВЛЕНИЕ DUMMY-VARIABLES• Специально ничего делать не надо! (data$sex имеет тип factor) 𝐻𝑒𝑖𝑔ℎ𝑡 𝑖 = 𝛽1 + 𝛽2 ∙ 𝐴𝑔𝑒 𝑖 + 𝛽3 ∙ 𝑓(𝑆𝑒𝑥 𝑖 ) + 𝜀 𝑖 > lm2 <- lm(height ~ age + sex, data)
  29. 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. 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. 31. КЛАСТЕРИЗАЦИЯ ПО K-MEANS> plot(iris.data$Petal.Length, iris.data$Sepal.Width, pch=19)
  32. 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. 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. 34. ПРОДВИНУТЫЙ RR КАК ФУНКЦИОНАЛЬНЫЙ & ОБЪЕКТНО- ОРИЕНТИРОВАННЫЙ ЯЗЫК
  35. 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. 36. R – ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК• ООП в R реализовано очень странно: • В действительности, в языке уживаются сразу две различные реализации ООП.• Более распространенная из двух реализаций ООП в R основана на: • определении новых классов методом setClass(); • расширении уже существующих в языке generic- функций для новых классов методом setMethod().
  37. 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. 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]

×