Организации используют данные для принятия решений, улучшения характеристик своих продуктов и повышения эффективности своей повседневной деятельности. Данные сами по себе бесполезны. Тем не менее, с анализом данных , такие шаблоны, как тренды, кластеры, прогнозы и т. Д. Способ анализа данных определяется тем, как структурированы данные. Формат таблиц, популяризируемый электронными таблицами и реляционными базами данных , полезен для определенных типов обработки. Однако основная цель этого поста — изучить относительно менее эксплуатируемую структуру, которую можно использовать при анализе данных организации — графа / сети .
Перспектива стола
Перед обсуждением графиков представлен краткий обзор структуры табличных данных с использованием игрушечного примера, содержащего 12 человек. Для каждого человека собираются его имя, возраст и общие расходы за год. Приведенный ниже фрагмент кода R Statistics загружает данные о населении в таблицу.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
> people <- read .table( file = 'people.txt' , sep= '\t' , header=TRUE) > people id name age spending 1 0 francis 57 100000 2 1 johan 37 150000 3 2 herbert 56 150000 4 3 mike 34 30000 5 4 richard 47 35000 6 5 alberto 31 70000 7 6 stephan 36 90000 8 7 dan 52 40000 9 8 jen 28 90000 10 9 john 53 120000 11 10 matt 34 90000 12 11 lisa 48 100000 13 12 ariana 34 110000 |
Каждая строка представляет информацию о конкретном человеке. Каждый столбец представляет значения свойства всех людей. Наконец, каждая запись представляет отдельное значение для одного свойства для отдельного человека. Учитывая приведенную выше таблицу лиц, можно рассчитать различную описательную статистику ? Простые примеры включают в себя:
- среднее, среднее и стандартное отклонение возраста (строка 1),
- среднее значение, медиана и стандартное отклонение расходов (строка 3),
- корреляция между возрастом и расходами (т. е. пожилые люди склонны тратить больше? — строка 5),
- распределение расходов (т.е. гистограмма расходов — строка 8).
1
2
3
4
5
6
7
8
|
> c(mean(people$age), median(people$age), sd(people$age)) [1] 42.07692 37.00000 10.29937 > c(mean(people$spending), median(people$spending), sd(people$spending)) [1] 90384.62 90000.00 38969.09 > cor. test (people$spending, people$age)$e cor 0.1753667 > hist(people$spending, xlab= 'spending' , ylab= 'frequency' , cex.axis=0.5, cex.lab=0.75, main=NA) |
В целом, представление таблицы полезно для статистических данных, таких как те, которые используются при анализе кубов данных . Однако, когда отношения между смоделированными объектами сложны / рекурсивны , тогда можно использовать методы анализа графа.
Граф Перспектива
Граф (или сеть) — это структура, состоящая из вершин (т. Е. Узлов, точек) и ребер (т. Е. Связей, линий). Предположим, что наряду с данными о людях, представленными ранее, существует набор данных, который включает шаблоны дружбы между людьми. Таким образом, люди — это вершины, а дружеские отношения — это края. Кроме того, характеристики человека (например, его имя, возраст и расходы) являются свойствами вершин. Эта структура широко известна как граф свойств . Используя iGraph в R, можно представлять и обрабатывать эти данные графика.
- Загрузите дружеские отношения в виде двухколоночной числовой таблицы (строка 1-2).
- Создайте неориентированный граф из таблицы с двумя столбцами (строка 3).
- Прикрепите свойства человека в качестве метаданных к вершинам (строки 4-6).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
> friendships <- read .table( file = 'friendships.txt' ,sep= '\t' ) > friendships <- cbind(lapply(friendships, as.numeric)$V1, lapply(friendships, as.numeric)$V2) > g <- graph.edgelist(as.matrix(friendships), directed=FALSE) > V(g)$name <- as.character(people$name) > V(g)$spending <- people$spending > V(g)$age <- people$age > g Vertices: 13 Edges: 25 Directed: FALSE Edges: [0] 'francis' -- 'johan' [1] 'francis' -- 'jen' [2] 'johan' -- 'herbert' [3] 'johan' -- 'alberto' [4] 'johan' -- 'stephan' [5] 'johan' -- 'jen' [6] 'johan' -- 'lisa' [7] 'herbert' -- 'alberto' [8] 'herbert' -- 'stephan' [9] 'herbert' -- 'jen' [10] 'herbert' -- 'lisa' ... |
Одним из простых методов анализа графических данных является их визуализация, чтобы воспользоваться преимуществами системы визуальной обработки человека . Интересно, что человеческий глаз отлично умеет находить закономерности. В приведенном ниже примере кода используется алгоритм компоновки Fruchterman-Reingold для отображения графика на 2D-плоскости.
1
2
|
> layout <- layout.fruchterman.reingold(g) > plot(g, vertex.color= 'red' ,layout=layout, vertex.size=10, edge.arrow.size=0.5, edge.width=0.75, vertex.label.cex=0.75, vertex.label=V(g)$name, vertex.label.cex=0.5, vertex.label.dist=0.7, vertex.label.color= 'black' ) |
Для больших графиков (которые выходят за рамки игрушечного примера) человеческий глаз может потеряться в массе граней между вершинами. К счастью, существует множество алгоритмов обнаружения сообщества . Эти алгоритмы используют шаблоны связности в графе для идентификации структурных подгрупп. Используемый ниже алгоритм обнаружения сообщества промежуточных краев идентифицирует два структурных сообщества на графике игрушек (одно окрашено в оранжевый цвет, а другое — в синие — 1-2). С помощью этой полученной информации сообщества можно извлечь одно из сообществ и проанализировать его изолированно (строка 19).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
> V(g)$community = community.to.membership(g, edge.betweenness.community(g)$merges, steps=11)$membership+1 > data.frame(name=V(g)$name, community=V(g)$community) name community 1 francis 1 2 johan 1 3 herbert 1 4 mike 2 5 richard 2 6 alberto 1 7 stephan 1 8 dan 2 9 jen 1 10 john 2 11 matt 2 12 lisa 1 13 ariana 1 > color <- c(colors()[631], colors()[498]) > plot(g, vertex.color=color[V(g)$community],layout=layout, vertex.size=10, edge.arrow.size=0.5, edge.width=0.75, vertex.label.cex=0.75, vertex.label=V(g)$name, vertex.label.cex=0.5, vertex.label.dist=0.7, vertex.label.color= 'black' ) > h <- delete.vertices(g, V(g)[V(g)$community == 2]) > plot(h, vertex.color= "red" ,layout=layout.fruchterman.reingold, vertex.size=10, edge.arrow.size=0.5, edge.width=0.75, vertex.label.cex=0.75, vertex.label=V(h)$name, vertex.label.cex=0.5, vertex.label.dist=0.7, vertex.label.color= 'black' ) |
Изолированный подграф может быть подвергнут алгоритму централизации для определения наиболее важных / важных / влиятельных людей в сообществе. При использовании алгоритмов центральности важность определяется связностью человека в графе, и в этом примере используется популярный алгоритм PageRank (строка 1). Алгоритм выводит оценку для каждой вершины, где чем выше оценка, тем более центральная вершина. Вершины могут быть отсортированы (строки 2-3). На практике такие методы могут использоваться для разработки маркетинговой кампании . Например, как показано ниже, можно задать такие вопросы, как «какой человек является влиятельным в своем сообществе и высокооплачиваемым?» В целом, графическая перспектива данных предоставляет новые статистические методы, которые в сочетании с табличными методами предоставляют аналитику богатый инструментарий для исследования и использования данных организации.
01
02
03
04
05
06
07
08
09
10
11
12
|
> V(h)$page.rank <- page.rank(h)$vector > scores <- data.frame(name=V(h)$name, centrality=V(h)$page.rank, spending=V(h)$spending) > scores[order(-centrality, spending),] name centrality spending 6 jen 0.19269343 90000 2 johan 0.19241727 150000 3 herbert 0.16112886 150000 7 lisa 0.13220997 100000 4 alberto 0.10069925 70000 8 ariana 0.07414285 110000 5 stephan 0.07340102 90000 1 francis 0.07330735 100000 |
Важно понимать, что для крупномасштабного анализа графиков существуют различные технологии. Многие из этих технологий находятся в пространстве базы данных графа . Примеры включают в себя транзакционные механизмы персистентности, такие как Neo4j, и механизмы пакетной обработки на основе Hadoop, например Giraph и Pegasus . Наконец, исследовательский анализ с использованием языка R может использоваться для анализа графов в одной памяти, а также в кластерных средах с использованием таких технологий, как RHadoop и RHIPE . Все эти технологии могут быть объединены (вместе с технологиями на основе таблиц), чтобы помочь организации в понимании закономерностей, существующих в их данных.
Ресурсы
- Ньюман, MEJ, « Структура и функции сложных сетей », SIAM Review, 45, 167–256, 2003.
- Родригес М.А., Пепе А. « О взаимоотношениях структурных и социально-академических сообществ сети соавторов », журнал Informetrics, 2 (3), 195–2018, июль 2008 г.
Ссылка: | Понимание мира с помощью таблиц и графиков от нашего партнера по JCG Марко Родригеса в блоге AURELIUS . |