Running this chunk downloads the necessary packages to complete the desired functions.

library(tidyverse)
library(DT)
library(igraph)
library(rtweet)
library(visNetwork)
library(graphTweets)            # This package turns twitter data into edge & node data

The chunk below then receives all the tweets from the list of billings gazette reporters in the list for the Billings Gazette newspaper on twitter. Using another list caused complications. I could not run the chunk correctly unless I used the original chunk from the other notebook.

bg_reporters <- lists_members(slug = "Billings-Gazette", owner_user = "billingsgazette")


bg_tweets <- get_timeline(bg_reporters$screen_name, n = 500)

This chunk then creates a network of retweets of the billings gazette. Retweets were used in place of mentions as the original notebook used mentions isntead and I did not want to directly copy the original notebook.

# create network, including only members of our group
bg_retweet_network <- bg_tweets %>% 
  filter(retweet_screen_name %in% bg_reporters$screen_name) %>% 
  gt_edges(screen_name, retweet_screen_name, text) %>% 
  gt_graph


#get nodes
bg_retweet_nodes <- as_data_frame(bg_retweet_network, what = "vertices")


# get edges
bg_retweet_edges <- as_data_frame(bg_retweet_network, what = "edges")


# add info to nodes
bg_retweet_nodes <- bg_retweet_nodes %>% 
  mutate(id = name) %>% 
  mutate(label = name) %>% 
  mutate(title = name) %>% 
  mutate(degree = degree(bg_retweet_network)) %>% 
  mutate(value = degree)

# add info to edges
bg_retweet_edges <- bg_retweet_edges %>% 
  mutate(title = text)


# create the network diagram
visNetwork(bg_retweet_nodes, 
           bg_retweet_edges,
           main = "Billings Gazette Reporters Twitter Retweets Network") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visEdges(arrows = "to")
NA

The chunks below then gives the node count with vcount piped into the network, the edges count with ecount piped in, and density with edge_density.

bg_retweet_network %>% 
  vcount()
[1] 21
bg_retweet_network %>% 
  ecount()
[1] 1180
bg_retweet_network %>% 
  edge_density()
[1] 2.809524

This chunk then creates a data table with the name and degree of each member.

bg_retweet_nodes %>%
  select(name, degree)

This last chunk then finds the communities within the network and integrates them into the Billings Gazette Retweet Network

bg_retweet_nodes <- bg_retweet_nodes %>% 
  mutate(group = membership(infomap.community(bg_retweet_network)))
Modularity is implemented for undirected graphs only.
visNetwork(bg_retweet_nodes, bg_retweet_edges, main = "Billings Gazette retweet network") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visEdges(arrows = "to") %>%   
  visOptions(highlightNearest = T, nodesIdSelection = T, selectedBy = "group")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpSdW5uaW5nIHRoaXMgY2h1bmsgZG93bmxvYWRzIHRoZSBuZWNlc3NhcnkgcGFja2FnZXMgdG8gY29tcGxldGUgdGhlIGRlc2lyZWQgZnVuY3Rpb25zLg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGlncmFwaCkNCmxpYnJhcnkocnR3ZWV0KQ0KbGlicmFyeSh2aXNOZXR3b3JrKQ0KbGlicmFyeShncmFwaFR3ZWV0cykgICAgICAgICAgICAjIFRoaXMgcGFja2FnZSB0dXJucyB0d2l0dGVyIGRhdGEgaW50byBlZGdlICYgbm9kZSBkYXRhDQpgYGANCg0KVGhlIGNodW5rIGJlbG93IHRoZW4gcmVjZWl2ZXMgYWxsIHRoZSB0d2VldHMgZnJvbSB0aGUgbGlzdCBvZiBiaWxsaW5ncyBnYXpldHRlIHJlcG9ydGVycyBpbiB0aGUgbGlzdCBmb3IgdGhlIEJpbGxpbmdzIEdhemV0dGUgbmV3c3BhcGVyIG9uIHR3aXR0ZXIuIFVzaW5nIGFub3RoZXIgbGlzdCBjYXVzZWQgY29tcGxpY2F0aW9ucy4gSSBjb3VsZCBub3QgcnVuIHRoZSBjaHVuayBjb3JyZWN0bHkgdW5sZXNzIEkgdXNlZCB0aGUgb3JpZ2luYWwgY2h1bmsgZnJvbSB0aGUgb3RoZXIgbm90ZWJvb2suDQpgYGB7cn0NCmJnX3JlcG9ydGVycyA8LSBsaXN0c19tZW1iZXJzKHNsdWcgPSAiQmlsbGluZ3MtR2F6ZXR0ZSIsIG93bmVyX3VzZXIgPSAiYmlsbGluZ3NnYXpldHRlIikNCg0KDQpiZ190d2VldHMgPC0gZ2V0X3RpbWVsaW5lKGJnX3JlcG9ydGVycyRzY3JlZW5fbmFtZSwgbiA9IDUwMCkNCg0KYGBgDQoNClRoaXMgY2h1bmsgdGhlbiBjcmVhdGVzIGEgbmV0d29yayBvZiByZXR3ZWV0cyBvZiB0aGUgYmlsbGluZ3MgZ2F6ZXR0ZS4gUmV0d2VldHMgd2VyZSB1c2VkIGluIHBsYWNlIG9mIG1lbnRpb25zIGFzIHRoZSBvcmlnaW5hbCBub3RlYm9vayB1c2VkIG1lbnRpb25zIGlzbnRlYWQgYW5kIEkgZGlkIG5vdCB3YW50IHRvIGRpcmVjdGx5IGNvcHkgdGhlIG9yaWdpbmFsIG5vdGVib29rLg0KYGBge3J9DQojIGNyZWF0ZSBuZXR3b3JrLCBpbmNsdWRpbmcgb25seSBtZW1iZXJzIG9mIG91ciBncm91cA0KYmdfcmV0d2VldF9uZXR3b3JrIDwtIGJnX3R3ZWV0cyAlPiUgDQogIGZpbHRlcihyZXR3ZWV0X3NjcmVlbl9uYW1lICVpbiUgYmdfcmVwb3J0ZXJzJHNjcmVlbl9uYW1lKSAlPiUgDQogIGd0X2VkZ2VzKHNjcmVlbl9uYW1lLCByZXR3ZWV0X3NjcmVlbl9uYW1lLCB0ZXh0KSAlPiUgDQogIGd0X2dyYXBoDQoNCg0KI2dldCBub2Rlcw0KYmdfcmV0d2VldF9ub2RlcyA8LSBhc19kYXRhX2ZyYW1lKGJnX3JldHdlZXRfbmV0d29yaywgd2hhdCA9ICJ2ZXJ0aWNlcyIpDQoNCg0KIyBnZXQgZWRnZXMNCmJnX3JldHdlZXRfZWRnZXMgPC0gYXNfZGF0YV9mcmFtZShiZ19yZXR3ZWV0X25ldHdvcmssIHdoYXQgPSAiZWRnZXMiKQ0KDQoNCiMgYWRkIGluZm8gdG8gbm9kZXMNCmJnX3JldHdlZXRfbm9kZXMgPC0gYmdfcmV0d2VldF9ub2RlcyAlPiUgDQogIG11dGF0ZShpZCA9IG5hbWUpICU+JSANCiAgbXV0YXRlKGxhYmVsID0gbmFtZSkgJT4lIA0KICBtdXRhdGUodGl0bGUgPSBuYW1lKSAlPiUgDQogIG11dGF0ZShkZWdyZWUgPSBkZWdyZWUoYmdfcmV0d2VldF9uZXR3b3JrKSkgJT4lIA0KICBtdXRhdGUodmFsdWUgPSBkZWdyZWUpDQoNCiMgYWRkIGluZm8gdG8gZWRnZXMNCmJnX3JldHdlZXRfZWRnZXMgPC0gYmdfcmV0d2VldF9lZGdlcyAlPiUgDQogIG11dGF0ZSh0aXRsZSA9IHRleHQpDQoNCg0KIyBjcmVhdGUgdGhlIG5ldHdvcmsgZGlhZ3JhbQ0KdmlzTmV0d29yayhiZ19yZXR3ZWV0X25vZGVzLCANCiAgICAgICAgICAgYmdfcmV0d2VldF9lZGdlcywNCiAgICAgICAgICAgbWFpbiA9ICJCaWxsaW5ncyBHYXpldHRlIFJlcG9ydGVycyBUd2l0dGVyIFJldHdlZXRzIE5ldHdvcmsiKSAlPiUgDQogIHZpc0lncmFwaExheW91dChsYXlvdXQgPSAibGF5b3V0X25pY2VseSIpICU+JSANCiAgdmlzRWRnZXMoYXJyb3dzID0gInRvIikNCg0KYGBgDQoNClRoZSBjaHVua3MgYmVsb3cgdGhlbiBnaXZlcyB0aGUgbm9kZSBjb3VudCB3aXRoIHZjb3VudCBwaXBlZCBpbnRvIHRoZSBuZXR3b3JrLCB0aGUgZWRnZXMgY291bnQgd2l0aCBlY291bnQgcGlwZWQgaW4sIGFuZCBkZW5zaXR5IHdpdGggZWRnZV9kZW5zaXR5Lg0KYGBge3J9DQpiZ19yZXR3ZWV0X25ldHdvcmsgJT4lIA0KICB2Y291bnQoKQ0KYGBgDQoNCmBgYHtyfQ0KYmdfcmV0d2VldF9uZXR3b3JrICU+JSANCiAgZWNvdW50KCkNCmBgYA0KDQpgYGB7cn0NCmJnX3JldHdlZXRfbmV0d29yayAlPiUgDQogIGVkZ2VfZGVuc2l0eSgpDQpgYGANCg0KVGhpcyBjaHVuayB0aGVuIGNyZWF0ZXMgYSBkYXRhIHRhYmxlIHdpdGggdGhlIG5hbWUgYW5kIGRlZ3JlZSBvZiBlYWNoIG1lbWJlci4NCmBgYHtyfQ0KYmdfcmV0d2VldF9ub2RlcyAlPiUNCiAgc2VsZWN0KG5hbWUsIGRlZ3JlZSkNCmBgYA0KVGhpcyBsYXN0IGNodW5rIHRoZW4gZmluZHMgdGhlIGNvbW11bml0aWVzIHdpdGhpbiB0aGUgbmV0d29yayBhbmQgaW50ZWdyYXRlcyB0aGVtIGludG8gdGhlIEJpbGxpbmdzIEdhemV0dGUgUmV0d2VldCBOZXR3b3JrDQpgYGB7cn0NCmJnX3JldHdlZXRfbm9kZXMgPC0gYmdfcmV0d2VldF9ub2RlcyAlPiUgDQogIG11dGF0ZShncm91cCA9IG1lbWJlcnNoaXAoaW5mb21hcC5jb21tdW5pdHkoYmdfcmV0d2VldF9uZXR3b3JrKSkpDQoNCnZpc05ldHdvcmsoYmdfcmV0d2VldF9ub2RlcywgYmdfcmV0d2VldF9lZGdlcywgbWFpbiA9ICJCaWxsaW5ncyBHYXpldHRlIHJldHdlZXQgbmV0d29yayIpICU+JSANCiAgdmlzSWdyYXBoTGF5b3V0KGxheW91dCA9ICJsYXlvdXRfbmljZWx5IikgJT4lIA0KICB2aXNFZGdlcyhhcnJvd3MgPSAidG8iKSAlPiUgICANCiAgdmlzT3B0aW9ucyhoaWdobGlnaHROZWFyZXN0ID0gVCwgbm9kZXNJZFNlbGVjdGlvbiA9IFQsIHNlbGVjdGVkQnkgPSAiZ3JvdXAiKQ0KYGBgDQoNCg==