Powered By Blogger

вторник, 2 июня 2015 г.

Пост 3. После пятидневного пинания несчастного балды

И вот снова я пишу свой пост спустя 5 дней валяния дурака и прокрастинирования. Сегодня я поняла, что осталось всего 2 сраные недели!!!!АААААААА!!!
Ладно, сегодня надо допройти курс по R ^_^  Вот я бjлван, что не сделала этого раньше. Ну да что сопли жевать? Погнали.

Можно присваивать массив значений, одновременно удлиняя вектор:
> sentence[5:7] <- c('the', 'poop', 'deck')

Или можно просто взять, создать сначала пустой вектор, а потом присвоить ему
имена c помощью функции names()
 > ranks <- 1:3
> names(ranks) <- c("first", "second", "third")
 
А можно достать и до номера, используя значение, например в векторе ranks найти 
элемент со значением "first"> ranks["first"]
 
Изменять номер вектора можно присвоив ему новую позицию:ranks["third"] <- 4

Построение графиков

Для векторов:
>barplot(VectorName)
Если присвоить имена значениям вектора, то получатся подписи к диаграмме ^^
>vesselsSunk <- c(4, 5, 1)
> names(vesselsSunk) <- c("England", "France", "Norway")
> barplot(vesselsSunk) 

 Деление, умножение, сложение, вычитание векторов такое же, как в матлабе. 

Есть сравнение векторов, но результат производится поэлементно:
> a <- c(1, 2, 3)
> a==c(1,99,3)
[1]  TRUE FALSE  TRUE
> a<c(1,99,3)
[1] FALSE  TRUE FALSE

Точечные диаграммы

функия plot(var1, var2) строит точненый график зависимости каждого элемента вектора 1 от соотвествующего ему по номеру элемента вектора 2.
> x <- seq(1, 20, 0.1)   #seq - последовательность
> y <- sin(x)
> plot(x, y)
 
 
В векторе может не существовать какого-то значения. Обозначается оно NA. 
Функция суммы элементов по дефолту не может посчитаться, но,если вызвать хэлп и
прочитать его, становится ясно, что изменив значение одного параметра можем посчи-
тать сумму элементов массива, исключая NA.> a <- c(1, 3, NA, 7, 9)
> sum(a)
[1] NA
> help(sum)
sum                    package:base                    R Documentation

Sum of Vector Elements

Description:
    'sum' returns the sum of all the values present in its arguments.

Usage:
    sum(..., na.rm = FALSE)
...
> sum(a, na.rm = TRUE)
[1] 20


Работа с матрицами

создаем нулевую матрицу:
> matrix(0, 3, 4)
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0

Её можно заполнить с помощью вектора, например:
> a <- 1:12
> matrix(a, 3, 4)
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
 
Значения из вектора в матрицу копируются по одному
Поменять размер матрицы можно, задав новые значения для функции размерности матрицы
Например:> plank <- 1:8
> dim(plank) <- c(2, 4)
> print(plank)
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8   


Достать элемент со значением 6  можно следующим образом:> plank[2, 3]
[1] 6

Как вы могли заметить, сначала идет номер строки, а потом номер столбца

А так можно посмотреть строку с номером 2> plank[2,]
[1] 2 4 6 8
А так -  4-ый столбец> plank[, 4]
[1] 7 8
А так -  со 2-ого по 4-ый столбец:
> plank[, 2:4]
     [,1] [,2] [,3]
[1,]    3    5    7
[2,]    4    6    8

  Графики для матриц

> contour(volcano) # контурная диаграмма на плоскости
> persp(volcano, expand=0.2) #perspective - объемное изображение
> image(volcano)  #"тепловое" изображение
 
 
 

Кратко о статистике

Среднее значение - average:
>mean(limbs)
>barplot(limbs)
> abline(h = mean(limbs)) #рисует на графике горизонтальную линию 
#со средним значением. abline(v=blabla) - вертинкальную линию 

Медианное значение -  median() - используется тогда, когда какой-то из параметров у
нас ооочень сильно отличается от остальных. Оно получается сортировкой значений и
выбором среднего. Для двух элементов медиана == среднему .

Cреднее квадратическое -
квадратный корень из дисперсии; в отличие от дисперсии, имеет ту же размерность, что и случайная величина; характеризует усредненное отклонение случайной величины от среднего значения)
> deviation <- sd(pounds)
> abline(h = meanValue + deviation)
> abline(h = meanValue - deviation) 
 
 

Функция фактор  factor()

factor()  - группирует вектор по категориям. В результате выдает категории (уровни)  - levels.
> chests <- c('gold', 'silver', 'gems', 'gold', 'gems')
> types <- factor(chests)
> print(chests)
[1] "gold"   "silver" "gems"   "gold"   "gems"  
> print(types)
[1] gold   silver gems   gold   gems  
Levels: gems gold silver
 
Да, уровни здесь - интеджеровского типа. Для наглядности можем привести к
интеджеровскому типу с помощью команды:> as.integer(types)
[1] 2 3 1 2 1

Так же уровни можно получить просто функцией levels()
> levels(types)
[1] "gems"   "gold"   "silver" 

Можно использовать факторы, чтобы делить на категории графики. Разделим наши сундуки 
по весу и ценности драгоценностей внутри:
> weights <- c(300, 200, 100, 250, 150)
> prices <- c(9000, 5000, 12000, 7500, 18000)
> plot(weights, prices)

Получили точечный график (диаграмму). Чтобы мы могли понять в каком сундуке что, 
используем различные символы для золота, серебра и драгоценностей, конвертируя 
"уровни" в integer:
> plot(weights, prices, pch=as.integer(types))

На графике для различных типов появились кружочки, треугольнички и крестики. ми-ми-ми
А что бы мы не думали, что же есть что, запилим легенду, определив её расположение,
присваеваемые значение и наши инты:

> legend("topright", c("gems", "gold", "silver"), pch=1:3)

Но есть один нюанс. При измении графика в этом случае придется обновлять легенду. Чтобы все делалось автоматом, модифицируем команду:

> legend("topright", levels(types), pch=1:length(levels(types)))
 
 

Тип данных - Data Frame

Это особый тип данных, который связывает между собой векторы с различными типами данных.  Он сродни таблице БД или спредшиту в Экселе.  Дата фрейм - таблица, которая содержит некоторое число колонок с данными различного типа и любое количество строк (а-ля запись в базе данных).

Наши вектора с весами, ценностью и типами трофеев в сундуках отличные кандидаты для объединения их всех в один фрейм. Делается это вызовом функции data.frame():

> treasure <- data.frame (weights, prices, types)
> print(treasure)
  weights prices  types
1     300   9000   gold
2     200   5000 silver
3     100  12000   gems
4     250   7500   gold
5     150  18000   gems

Ура! Мы получили весьма милую табличку с нашими драгоценностями - treasure. 

Чтобы залезть и посмотреть второй столбец, пишем его номер В ДВОЙНЫХ КВАДРАТНЫХ СКОБОЧКАХ.

> treasure[[2]]
[1]  9000  5000 12000  7500 18000

Или по названию:
> treasure[["weights"]]
[1] 300 200 100 250 150
 
Или можно сделать проще: название_фрейма$название_столбца (название столбца без 
кавычек).

> treasure$prices
[1]  9000  5000 12000  7500 18000
> treasure$types
[1] gold   silver gems   gold   gems  
Levels: gems gold silver
 
Можно (и нужно) загружать  фреймы из уже существующих файлов (спредшитов, например). 
Пусть есть  список файлов
> list.files()
[1] "targets.csv" "infantry.txt"
И пусть  "targets.csv" - файл  CSV (Comma Separated Values) Внутри он выглядит как-то
так: 
"Port","Population","Worth" 
"Cartagena",35000,10000
 "Porto Bello",49000,15000
 "Havana",140000,50000 
"Panama City",105000,35000
Загружаем файл с помощью read.csv():
 
> read.csv("targets.csv")
         Port Population Worth
1   Cartagena      35000 10000
2 Porto Bello      49000 15000
3      Havana     140000 50000
4 Panama City     105000 35000
 
Если файл разделены на запятой, а табом, то функция немного меняется:
 
> read.table("infantry.txt", sep="\t")
           V1       V2
1        Port Infantry
2 Porto Bello      700
3   Cartagena      500
4 Panama City     1500
5      Havana     2000
 
Чтобы созранялись заголовки, "включим" этот параметр:
 
> read.table("infantry.txt", sep="\t", header=TRUE)
         Port Infantry
1 Porto Bello      700
2   Cartagena      500
3 Panama City     1500
4      Havana     2000  


Сведем две таблички в одну. Функция merge(x,y) по дефолту сводит по одинаковому 
столбцу:
> targets <- read.csv("targets.csv")
> infantry <- read.table("infantry.txt", sep="\t", header=TRUE)
> merge(x = targets, y = infantry)
         Port Population Worth Infantry
1   Cartagena      35000 10000      500
2      Havana     140000 50000     2000
3 Panama City     105000 35000     1500
4 Porto Bello      49000 15000      700


А теперь протестим это на реальных данных!



 
 



___________________________________________________________________________________
А здесь, пожалуй, будут новые для меня слова:
booty -  трофеи     chest -  не только грудь, но и сундук.    akin to - сродни, родственный.
tedious == monotonous == boring











--------------------------------------------------------------------------------------------------------------
Черт возьми! На самом деле я просто боюсь, что меня будут осуждать, упрекать и вообще отвернутся близкие, если не защищусь. Какой позор будет для семьи.
 





    

Комментариев нет:

Отправить комментарий