Использование структур данных R |

Узнайте, как использовать структуры данных R, из этой статьи ДежанСарки, MVP и Microsoft Data Platform MVP, а также независимого тренера и консультанта, занимающегося разработкой приложений для баз данных и бизнес-аналитики.

В этой статье представлены наиболее важные структуры данных в R. Когда вы анализируете данные, вы анализируете набор данных. Набор данных выглядит как таблица SQL Server: вы можете видеть строки и столбцы.

Однако это не таблица в реляционном смысле, как определено в реляционной модели, которой следует SQL Server. Порядок строк и столбцов не определен в таблице, соответствующей реляционной модели. Однако в R известны положения ячеек как пересечения строк и столбцов. Это больше похоже на матрицу в математике.

В наборе данных R строки также называются случаи или же наблюдения. Вы анализируете случаи, используя значения в их столбцах, также называемых переменные или же атрибуты случаев.

В этой статье будут представлены следующие структуры данных:
• Матрицы и массивы
• Факторы
• Списки
• Фреймы данных

А матрица представляет собой двумерный массив. Все значения матрицы должны иметь один и тот же режим — вы можете иметь только целые числа или только строки и так далее. Используйте функцию matrix() для создания матрицы из вектора. Вы можете назначать метки столбцам и строкам. Когда вы создаете матрицу из вектора, вы определяете, генерируете ли вы ее по строкам или по столбцам (по умолчанию). Вы быстро поймете разницу, если выполните следующий демонстрационный код:

x = c(1, 2, 3, 4, 5, 6); x
Y = array(x, dim = c(2, 3)); Y
Z = matrix(x, 2, 3, byrow = F); Z
U = matrix(x, 2, 3, byrow = T); U

Обратите внимание, что в каждой строке есть две команды, разделенные точкой с запятой. Также обратите внимание, что функция array() используется во второй строке для генерации той же матрицы, что и в третьей строке, генерируя матрицу по столбцам. Последняя команда генерирует матрицу по строкам. Вот вывод предыдущего кода:

[1] 1 2 3 4 5 6
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

В следующем коде показано, как определить явные имена для строк и столбцов:

rnames = c("rrr1", "rrr2")
cnames = c("ccc1", "ccc2", "ccc3")
V = matrix(x, 2, 3, byrow = T,
dimnames = list(rnames, cnames))
V

Вот результат:

     ccc1 ccc2 ccc3
rrr1    1    2    3
rrr2    4    5    6

Вы можете ссылаться на элементы матрицы по позициям индекса или по именам, если вы определили имена. В следующем коде показаны некоторые параметры. Обратите внимание, что вы всегда ссылаетесь на индексы строк и столбцов; однако, когда вы пропускаете явное значение индекса, это означает все элементы для этого индекса. Например, первая строка кода выбирает первую строку, все столбцы. Третья строка выбирает все строки, но только второй и третий столбцы:

U[1,]
U[1, c(2, 3)]
U[, c(2, 3)]
V[, c("ccc2", "ccc3")]

Результаты приведены ниже:

[1] 1 2 3
[1] 2 3
     [,1] [,2]
[1,]    2    3
[2,]    5    6
     ccc2 ccc3
Row1    2    3
Row2    5    6

Матрица также генерируется с помощью функции array(). Ан множество представляет собой обобщенную многомерную матрицу. Функция array(), аналогичная функции matrix(), принимает вектор значений в качестве первого входного параметра. Второй параметр — это вектор, в котором вы определяете количество измерений с количеством элементов в этом векторе и количество элементов в каждом измерении со значениями в этом векторе. Вы также можете передать список векторов для имен элементов измерений. Массив заполняется столбцами, затем строками, затем третьим измерением (страницами) и так далее. Следующий код показывает, как создать массив:

rnames = c("rrr1", "rrr2")
cnames = c("ccc1", "ccc2", "ccc3")
pnames = c("ppp1", "ppp2", "ppp3")
Y = array(1:18, dim = c(2, 3, 3),
dimnames = list(rnames, cnames, pnames))
Y

Переменная дискретный когда каждое значение берется из ограниченного пула возможных значений. Переменная непрерывный если пул возможных значений не ограничен. Дискретные значения могут быть номинальныйили же категоричныйгде они представляют только метки без какого-либо определенного порядка или порядкового номера, где логический порядок значений имеет смысл.

В R дискретные переменные называются факторы. Уровни фактора — это различные значения, составляющие совокупность возможных значений. Вы определяете факторы из векторов значений с помощью функции factor(). Многие алгоритмы статистики, интеллектуального анализа данных и машинного обучения по-разному обрабатывают дискретные и непрерывные переменные. Поэтому вам нужно заранее правильно определить факторы, прежде чем анализировать их. Вот несколько примеров определения факторов:

x = c("good", "moderate", "good", "bad", "bad", "good")
y = factor(x); y
z = factor(x, order = TRUE); z
w = factor(x, order = TRUE,
           levels = c("bad", "moderate", "good")); w

Предыдущий код дает следующий результат:

[1] good     moderate good     bad      bad      good   
Levels: bad good moderate
[1] good     moderate good     bad      bad      good  
Levels: bad < good < moderate
[1] good     moderate good     bad      bad      good   
Levels: bad < moderate < good

Вы можете видеть, как R распознал различные уровни, когда вы определили, что вектор представляет собой фактор. Вы также можете увидеть, как R сортирует уровни в алфавитном порядке по умолчанию, когда в третьей строке предыдущего кода вы определили фактор как порядковую переменную. В последней команде вы, наконец, определили правильный порядок для фактора.

Списки представляют собой сложные структуры данных. Списки могут включать любую другую структуру данных, включая другой список. Обычно вы анализируете список. Однако о них необходимо знать, поскольку некоторые функции возвращают сложные результаты, упакованные в список, а некоторые функции принимают списки в качестве параметров.

Вы создаете списки с помощью функции list(). Поскольку списки также упорядочены, вы можете обращаться к объектам в списке по их положению. Номер индекса необходимо заключить в двойные скобки. Если элемент является вектором или матрицей, вы можете использовать позиции индекса элементов этого вектора в матрице, заключенные в одинарные скобки. Вот пример использования списка:

L = list(name1 = "ABC", name2 = "DEF",
no.children = 2, children.ages = c(3, 6))
L
L[[1]]
L[[4]]
L[[4]][2]

Этот пример кода для работы со списками возвращает следующий результат:

$name1
[1] "ABC"
$name2
[1] "DEF"
$no.children
[1] 2
$children.ages
[1] 3 6
[1] "ABC"
[1] 3 6
[1] 6

Наиболее важной структурой данных для любого анализа данных является кадр данных. Фреймы данных представляют собой обобщенные двумерные матрицы, в которых каждая переменная может иметь разный режим или другой тип данных. Разумеется, все значения переменной должны быть одного типа данных.

Это очень похоже на таблицы SQL Server. Но фреймы данных — это матрицы, поэтому вы можете использовать позиционный доступ для обращения к значениям фрейма данных. Вы можете создать фрейм данных из нескольких векторов разных режимов с помощью функции data.frame(). Все векторы должны быть одинаковой длины и иметь одинаковое количество элементов. Вот пример:

CategoryId = c(1, 2, 3, 4)
CategoryName = c("Bikes", "Components", "Clothing", "Accessories")
ProductCategories = data.frame(CategoryId, CategoryName)
ProductCategories

Результат выглядит следующим образом:

CategoryIdCategoryName
1          1        Bikes
2          2   Components
3          3     Clothing
4          4  Accessories

В большинстве случаев вам нужно хранить данные, которые вы читаете, во фрейме данных. Набор данных, который вы анализируете, является вашим фреймом данных. SQL Server определенно не единственный источник данных, который вы можете использовать. Вы читаете данные из многих других источников, включая текстовые файлы и Excel.

Следующий код извлекает данные из представления dbo.vtargetMail из демонстрационной базы данных AdventureWorksDW2017 во фрейме данных, а затем отображает первые пять столбцов для первых пяти строк фрейма данных:

con <- odbcConnect("AWDW", uid = "RUser", pwd = "Pa$$w0rd")
TM <-
sqlQuery(con,
         "SELECT CustomerKey,
EnglishEducation AS Education,
            Age, NumberCarsOwned, BikeBuyer
          FROM dbo.vTargetMail;")
close(con)
TM[1:5, 1:5]

Вот содержимое этих первых пяти строк фрейма данных:

CustomerKey Education Age NumberCarsOwnedBikeBuyer
1       11000 Bachelors  31               0         1
2       11001 Bachelors  27               1         1
3       11002 Bachelors  32               1         1
4       11003 Bachelors  29               1         1
5       11004 Bachelors  23               4         1

Вы также можете увидеть полный фрейм данных в отдельном окне, которое открывается после выполнения следующей команды:

View(TM)

Как вы только что видели, вы можете извлекать данные из фрейма данных, используя позиционные индексы, как в матрицах. Вы также можете использовать имена столбцов. Однако наиболее распространенная нотация использует имя фрейма данных и имя столбца, разделенные знаком доллара ()сяграммн,стысчасасТМ) знак, такой как TM

table(TM$NumberCarsOwned, TM$BikeBuyer)

Вот последний результат:

       0    1
  0 1551 2687
  1 2187 2696
  2 3868 2589
3  951  694
4  795  466

Этот фрейм данных завершает краткое введение в структуры данных R.

Если вы нашли эту статью интересной, вы можете изучить Краткое руководство по науке о данных с SQL Server чтобы получить уникальную информацию из ваших данных, объединив возможности SQL Server, R и Python. Краткое руководство по науке о данных с SQL Server является идеальным введением в науку о данных с Microsoft SQL Server и In-Database ML Services и охватывает все этапы проекта по науке о данных.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *