Skip to content

R course, Lecture 3

Stanislav edited this page Oct 29, 2013 · 2 revisions

Занятие 3. Факторы . Ввод и вывод данных. Введение в обработку данных. Построение графиков в R

##Факторы

  1. Общие сведения
  • Факторы - вектора, элементы которого могут принимать множество значений
  • Факторы часто называют категориальными переменными. Также существует некоторая аналогия факторов с enumerated type
  • Факторы имеют большое применение в статистическом моделировании
  1. Создание факторов.
  • factor(args) - данная функция используется для создания фактора. Единственным аргументом, являющимся обязательным, является вектор значений.
x <- c(1,4,2,3,1,2,1)
factor(x)
[1] 1 4 2 3 1 2 1
Levels: 1 2 3 4
  • альтернативным вариантом factor() является as.factor(). Например f <- as.factor(v) делает из вектора v фактор f.
  1. Типовые представления факторов.
  • as.character() - символьное представление
  • as.numeric() - числовое представление
  1. Уровни и метки
  • levels() и labels() также являются аргументами функции factor().
  • Можно присвоить фактору произвольные метки и уровни.
    Пример:
> x <- c(1,2,4,1,3,1,2)
> f <- factor(x,labels = c("a","b","c","d"))
> f
[1] a b d a c a b
Levels: a b c d 
  1. Дополнительные функции
  • Иногда может возникнуть ситуация, когда фактор содержит NA. В данном случае можно определить количество вхождений NA в факторе путем использования функции addNA() Данная функция вызывается от фактора, берет все NA и заворачивает в новый класс, т.е. интерпретирует пропуск как новый класс.
    Количество вхождений можно посчитать следующим образом:
table(addNA(factor(c(1,3,4,1,2,NA,NA))))
   1    2    3    4 <NA> 
   2    1    1    1    2 
  • Имеет место проверять элемент на принадлежность фактору. Элементы могут быть как и символами, так и числами.
f <- factor(c("r","g","b"))
f == "r" 
TRUE FALSE FALSE

Ввод и вывод данных

  1. Основные команды
  • save(...,file) ... - список всех объектов, которые необходимо сохранить, file - имя файла, в который происходит запись данных. Расширение данного файла, как правило .rda
  • save.image(file) file - имя файла, в который происходит запись данных. Данная функция сохраняет все рабочее пространство. Альтернатива: save(list = ls(all = TRUE), file = "...").
    Пример:
s <- "mama"
save.image(file = "mama.rda")
  • load(file) - загружает данные из file.
load(file = "D:/mama.rda")
ls()  # посмотреть содержимое
  1. Два способа сохранения данных
  • Сохраняем как save(...,file="...")
    Данный способ - лучший вариант, если нужно перетащить данные на машины, где есть R. Соответственно, минусы очевидны. Привязка к формату файла .rda делает невозможным чтения данных без R.
    • Весь Workspace можно сохранить в одну переменную. Сделать это можно с помощью env <- new.env().
    • Загрузить данное рабочее пространство можно с помощью функции load с соответствующим аргументом. load(file="file.rda",envir=env)
    • Если мы хотим просмотреть содержимое всей среды, используем ls(env), если только части - env$arg ( например, arg может быть вектор )
    • Допонительными аргументами функции save() являются compression и compression_level.
      save(...,compress="gzip",...) - применит сжатие Gzip ( плюсы Gzip - его быстрая работа ).
      save(...,Compression_level = arg,...), где arg-integer - Определенный "уровень" сжатия. Arg = 6 соответствует Gzip, Arg = 9 - Bzip2 или Xz сжатию.
  • Сохраняем через read.table()
    • Основные сведения read.table(...) считывает файл в формате таблицы ( например, .csv ) и записывает в DataFrame.
      2 варианта read.table: read.csv и read.csv2 ( read.csv2 используется в странах, которые используют запятую, как разделитель ) Основная информация :??read.table
    • Некоторые основные аргументы
      • read.table file - имя файла, из которого будут считываться данные
      • header == true or false содержится ли заголовок ?
      • sep - разделитель столбцов
      • quote - ограничитель строк
      • row.names - указание столбца, где хранятся имена строк
      • col.names - создание имен для столбцов
      • StringsAsFactors - интерпретируем как фактор
    • Функции scan() и write.table()
      • scan - более гибкая, чем read.table. Основное преимущество в том, что при вводе можно указать тип переменных
      • write.table - симметрия read.table. write(x, file="data.txt") - сохраняет данные из файла data.txt в x
  1. База "Ирисы Фишера"
  • Основные сведения
    • Одна из первых баз данных (1936)
    • Набор данных для задачи классификации
    • Содержит данные о 150 экземплярах ириса: "Setosa", "Virginica", "Versicolor". Подробнее:
  • Считывание данных первым способом
    • save(iris,file="D:/iris.rda") - сохраняем в iris наши данные
    • Сохраняем весь Workspace в env, загружаем файл, смотрим объект среды env
env<-new.env()
load(file="D:/iris.rda",envir=env)
env$iris
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#  ............................................................
  • Считывание данных вторым способом
    • записываем данные в csv
write.csv(iris,file="D:/iris.csv",row.names=FALSE)
### Используем row.names=FALSE, чтобы "убрать мусор"
df <- read.csv(file="D:/iris.csv")
df
  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# ............................................................                                                     
  • "Анализ" содержимого
    • mode() - получает или устанавливает тип хранимого объекта. Например, mode(df$Sepal.Length)
    • attributes() - обращается к аттрибутам объекта и возвращает их список. Например, attributes(df$species)
    • можно изменить уровни в df$Species - df$Species <- factor (df$Species,levels=c(...),...)

Введение в обработку данных

  1. Основные сведения
    • Корреляция - зависимость двух случайный величин.
    • Линейный коэффициент корреляции (Спирмена) :
      Корреляция Спирмена
    • Считаем корреляцию в R:
cor(1:10,10:1)
# -1
  1. Зависимость и корреляция
    • Некоррелируемость случайных величин не гарантирует их независимость. Пример:
      Две случайные величины распределены на окружности.
    • Но коррелируемые случайные величины являются зависимыми.
  2. Корреляция данных в базе ирисов Фишера
cor(iris[1:4])
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
  1. Извлечение подмножеств
    • subset(iris,Species="setosa") - извлечение подмножества из базы всех ирисов, где Species="setosa"
  2. Центрирование и нормирование
    • scale(vector) - выдает нормированный и центрированный вектор, а также центр и отклонение.
scale(c(1,2,3,2,1))
#Result:
          [,1]
[1,] -0.9561829
[2,]  0.2390457
[3,]  1.4342743
[4,]  0.2390457
[5,] -0.9561829
attr(,"scaled:center")
[1] 1.8
attr(,"scaled:scale")
[1] 0.83666
  1. Задача отбеливания.
    Возможна ситуация, когда матрица признаков X зашумлена. Например, пусть матрица признаков содержит данные о автомобилях, где двумя признаками являются количество потребляемого топлива в городе и за городом. В данном случае эти два признака сильно коррелируемы. Возникает вопрос:" Как определить наиболее важные признаки и как избавиться от зашумленности?"
    С помощью диагонализирующего преобразования можно получить из матрицы X диагональную матрицу. Например, метод главных компонент

##Графика в R

  1. Встроенные пакеты
    • graphics - базовый пакет
    • lattice - Содержит сложные, красивые графики, удобно при написании статей.
  2. ggplot2 и rgl
    • ggplot2 как и lattice содержит графики, удобные для визуализации данных( При написании статьи)
    • rgl - пакет трехмерной графики. Можно даже создать сцену.
  3. Рисование графиков
    • plot() - Рисование графика.
    • Аргументы:
      • plot(x,y,...) - x и y координаты точек на графике.
      • type - какой тип графика следует нарисовать.Например, p соответствует точкам, l - прямым, n - ничего не рисовать.
      • xlab и ylab - подпись координатных осей.
      • xlim - ограничивает координаты x
    • установление параметров для объектов
      • par - используется для переопределения графических параметров
      • pch = integer - установка формата точки
      • lty - тип линии
      • col - цвет линии (можно также устанавливать прозрачность)
# из документации
Speed <- cars$speed
Distance <- cars$dist
plot(Speed, Distance, panel.first = grid(8, 8), pch = 0, cex = 1.2, col = "blue")
plot(Speed, Distance, panel.first = lines(stats::lowess(Speed, Distance), lty = "dashed"), pch = 0, cex = 1.2, col = "blue")
  - `legend` - добавляет легенду на график
  - `matplot` - рисует колонны матрицы напротив строк
  - `pairs` - изображает диаграмму рассеяния матрицы<br/>Пример для ирисов:
pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species", pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
  1. Дополнительные функции
    • Возможность сохранения графика в pdf:
pdf("1-20.pdf",family="NimbusSan",encoding="KOI8-R.enc")  # создать
plot(1:20, main="Заголовок")                              # рисовать
dev.off()                                                 # сохранить
 - `dev.new()`,`dev.off()` -управляют графическими устройствами. При использовании `dev.off()` R закроет графическое устройство.
 - `hist()` - гистограмма. Пример использования для ирисов: `hist(iris$Sepal.Length,breaks=3)`
 - `density()` - плотность ( графически - сглаженная гистограмма ). Пример `density.default(x=iris$Sepal.Length)`
 - Можно построить матрицу контуров. <br/>Пример для случайного вектора: `contour(matrix(rnorm(100),10))`
 - Ящик с усами `boxplot()` - показывает медиану, нижний и верхний квартили, минимальное и максимальное значение выборки и выбросы


Подробнее здесь
5. Трехмерная графика - library(rgl) - подключение пакета, содержащего трехмерную графику - plot3d(iris[[1]],iris[[2]],iris[[3]], ...) - трехмерный график