.

Сделать репост в соц сети!

Показаны сообщения с ярлыком анализ графов. Показать все сообщения
Показаны сообщения с ярлыком анализ графов. Показать все сообщения

суббота, 6 апреля 2019 г.

Анализ графов с использованием «tidyverse»





Анализ графов с использованием «tidyverse»

2019-03-06
by Edgar Ruiz

Хоть я и не эксперт по анализу графов, но я подумал, что очень важно все же написать эту статью. Для тех, кто разбирается в терминах отдельных прямоугольных массивов данных, это что-то вроде «интеллектуального скачка» для понимания того, как правильно применять принципы функции tidy к более сложному объекту, такому, например, как таблица. К счастью, есть два пакета, которые значительно облегчают эту работу:
  •        tidygraph - предоставляет способ взаимодействия dplyr с графами.
  •        ggraph - расширение до ggplot2 для анализа графов.


Краткое введение
Проще говоря, теория графов изучает связи между объектами в группе. Визуально мы можем представить граф как серию взаимосвязанных точек, каждая из которых представляет участника группы, например, людей в социальной сети. Линии, нарисованные между точками, представляют связь между участниками, например, дружбу в социальной сети. Анализ графов помогает выявить такие вещи, как влияние определенного участника на остальных, или то, у кого больше друзей из двух участников группы. Более правильное определение и подробное объяснение теории графов можно найти в Википедии здесь.

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

Источник данных
Еженедельный проект «Tidytuesday» призывает как новичков, так и опытных пользователей использовать инструменты tidyverse для анализа наборов данных, которые меняются каждую неделю. Я использовал эту возможность для освоения новых инструментов и методов. Один из самых свежих наборов данных касается французских поездов; он содержит количество ежедневных поездок от станции до станции.


library(readr)

url <- "https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-02-26/small_trains.csv"

small_trains <- read_csv(url)

head(small_trains)


# A tibble: 6 x 13
   year month service departure_stati~ arrival_station journey_time_avg total_num_trips avg_delay_all_d~ avg_delay_all_a~ num_late_at_dep~
  <dbl> <dbl> <chr>   <chr>            <chr>                      <dbl>           <dbl>            <dbl>            <dbl>            <dbl>
2017     9 Nation~ PARIS EST        METZ                        85.1             299            0.752            0.420               15
2017     9 Nation~ REIMS            PARIS EST                   47.1             218            1.26             1.14                10
2017     9 Nation~ PARIS EST        STRASBOURG                 116.              333            1.14             1.59                20
2017     9 Nation~ PARIS LYON       AVIGNON TGV                161.              481            1.41             4.79                36
2017     9 Nation~ PARIS LYON       BELLEGARDE (AI~            164.              190            1.73             6.01                16
2017     9 Nation~ PARIS LYON       BESANCON FRANC~            129.              191            1.84             5.03                18
# ... with 3 more variables: num_arriving_late <dbl>, delay_cause <chr>, delayed_number <dbl>


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