1. For this assignment the twitter list being analyzed is MT News, a list of Montana news sources. The code below gathers the last 200 tweets from the members of the list.
mt_news <- lists_members(slug = "MT-News", owner_user = "jacobmspringer")
mt_news
mt_news <- get_timeline(mt_news$screen_name, n = 200)
  1. This code gathers the node and edge data for MT News and uses it to create a network of retweets. It also creates a diagram of the network.
mt_retweet_network <- mt_news %>% 
  filter(retweet_screen_name %in% mt_news$screen_name) %>% 
  gt_edges(screen_name, retweet_screen_name, text) %>% 
  gt_graph

mt_retweet_nodes <- as_data_frame(mt_retweet_network, what = "vertices")

mt_retweet_edges <- as_data_frame(mt_retweet_network, what = "edges")

mt_retweet_nodes <- mt_retweet_nodes %>% 
  mutate(id = name) %>% 
  mutate(label = name) %>% 
  mutate(title = name) %>% 
  mutate(degree = degree(mt_retweet_network)) %>% 
  mutate(value = degree)

mt_retweet_edges <- mt_retweet_edges %>% 
  mutate(title = text)

visNetwork(mt_retweet_nodes, 
           mt_retweet_edges,
           main = "Montana News Source Twitter Retweet Network") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visEdges(arrows = "to")

NA
  1. This code gets the number of nodes in the network.
mt_retweet_network %>% 
  vcount()
[1] 33

This code gets the number of edges in the network.

mt_retweet_network %>%
  ecount()
[1] 280

This code gets the density of the network.

mt_retweet_network %>%
  edge_density()
[1] 0.2651515
  1. This code creates a datatable of the names and degrees of members in the MT News list.
mt_retweet_nodes %>%
  select(name,degree) %>%
  datatable()
  1. Like before, this code finds the nodes and edges of the MT News data and organizes it into a diagram.
mt_retweet_network <- mt_news %>% 
  filter(retweet_screen_name %in% mt_news$screen_name) %>%     
  gt_edges(screen_name, retweet_screen_name, text) %>%        
  gt_graph()

mt_retweet_nodes <- as_data_frame(mt_retweet_network, what = "vertices")

mt_retweet_nodes <- mt_retweet_nodes %>% 
  mutate(id = name) %>% 
  mutate(label = name) %>% 
  mutate(title = name) %>% 
  mutate(degree = degree(mt_retweet_network)) %>% 
  mutate(value = degree)

mt_retweet_edges <- as_data_frame(mt_retweet_network, what = "edges")

mt_retweet_edges <- mt_retweet_edges %>% 
  mutate(title = text)

visNetwork(mt_retweet_nodes, mt_retweet_edges, main = "Montana News Source Twitter Retweet Network") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visEdges(arrows = "to")

The code below groups the retweet data together into communities to better see how the members interact.

mt_retweet_nodes <- mt_retweet_nodes %>% 
  mutate(group = membership(infomap.community(mt_retweet_network)))
Modularity is implemented for undirected graphs only.
visNetwork(mt_retweet_nodes, mt_retweet_edges, main = "Montana News Source Twitter Retweet Network") %>% 
  visIgraphLayout(layout = "layout_nicely") %>% 
  visEdges(arrows = "to") %>%   
  visOptions(highlightNearest = T, nodesIdSelection = T, selectedBy = "group")

NA
NA
LS0tDQp0aXRsZTogIk1UIE5ld3MiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoxLiBGb3IgdGhpcyBhc3NpZ25tZW50IHRoZSB0d2l0dGVyIGxpc3QgYmVpbmcgYW5hbHl6ZWQgaXMgTVQgTmV3cywgYSBsaXN0IG9mIE1vbnRhbmEgbmV3cyBzb3VyY2VzLiBUaGUgY29kZSBiZWxvdyBnYXRoZXJzIHRoZSBsYXN0IDIwMCB0d2VldHMgZnJvbSB0aGUgbWVtYmVycyBvZiB0aGUgbGlzdC4gDQoNCmBgYHtyfQ0KbXRfbmV3cyA8LSBsaXN0c19tZW1iZXJzKHNsdWcgPSAiTVQtTmV3cyIsIG93bmVyX3VzZXIgPSAiamFjb2Jtc3ByaW5nZXIiKQ0KbXRfbmV3cw0KbXRfbmV3cyA8LSBnZXRfdGltZWxpbmUobXRfbmV3cyRzY3JlZW5fbmFtZSwgbiA9IDIwMCkNCmBgYA0KDQoyLiBUaGlzIGNvZGUgZ2F0aGVycyB0aGUgbm9kZSBhbmQgZWRnZSBkYXRhIGZvciBNVCBOZXdzIGFuZCB1c2VzIGl0IHRvIGNyZWF0ZSBhIG5ldHdvcmsgb2YgcmV0d2VldHMuIEl0IGFsc28gY3JlYXRlcyBhIGRpYWdyYW0gb2YgdGhlIG5ldHdvcmsuIA0KDQpgYGB7cn0NCm10X3JldHdlZXRfbmV0d29yayA8LSBtdF9uZXdzICU+JSANCiAgZmlsdGVyKHJldHdlZXRfc2NyZWVuX25hbWUgJWluJSBtdF9uZXdzJHNjcmVlbl9uYW1lKSAlPiUgDQogIGd0X2VkZ2VzKHNjcmVlbl9uYW1lLCByZXR3ZWV0X3NjcmVlbl9uYW1lLCB0ZXh0KSAlPiUgDQogIGd0X2dyYXBoDQoNCm10X3JldHdlZXRfbm9kZXMgPC0gYXNfZGF0YV9mcmFtZShtdF9yZXR3ZWV0X25ldHdvcmssIHdoYXQgPSAidmVydGljZXMiKQ0KDQptdF9yZXR3ZWV0X2VkZ2VzIDwtIGFzX2RhdGFfZnJhbWUobXRfcmV0d2VldF9uZXR3b3JrLCB3aGF0ID0gImVkZ2VzIikNCg0KbXRfcmV0d2VldF9ub2RlcyA8LSBtdF9yZXR3ZWV0X25vZGVzICU+JSANCiAgbXV0YXRlKGlkID0gbmFtZSkgJT4lIA0KICBtdXRhdGUobGFiZWwgPSBuYW1lKSAlPiUgDQogIG11dGF0ZSh0aXRsZSA9IG5hbWUpICU+JSANCiAgbXV0YXRlKGRlZ3JlZSA9IGRlZ3JlZShtdF9yZXR3ZWV0X25ldHdvcmspKSAlPiUgDQogIG11dGF0ZSh2YWx1ZSA9IGRlZ3JlZSkNCg0KbXRfcmV0d2VldF9lZGdlcyA8LSBtdF9yZXR3ZWV0X2VkZ2VzICU+JSANCiAgbXV0YXRlKHRpdGxlID0gdGV4dCkNCg0KdmlzTmV0d29yayhtdF9yZXR3ZWV0X25vZGVzLCANCiAgICAgICAgICAgbXRfcmV0d2VldF9lZGdlcywNCiAgICAgICAgICAgbWFpbiA9ICJNb250YW5hIE5ld3MgU291cmNlIFR3aXR0ZXIgUmV0d2VldCBOZXR3b3JrIikgJT4lIA0KICB2aXNJZ3JhcGhMYXlvdXQobGF5b3V0ID0gImxheW91dF9uaWNlbHkiKSAlPiUgDQogIHZpc0VkZ2VzKGFycm93cyA9ICJ0byIpDQoNCmBgYA0KDQozLiBUaGlzIGNvZGUgZ2V0cyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBuZXR3b3JrLiANCg0KYGBge3J9DQptdF9yZXR3ZWV0X25ldHdvcmsgJT4lIA0KICB2Y291bnQoKQ0KYGBgDQoNClRoaXMgY29kZSBnZXRzIHRoZSBudW1iZXIgb2YgZWRnZXMgaW4gdGhlIG5ldHdvcmsuIA0KDQpgYGB7cn0NCm10X3JldHdlZXRfbmV0d29yayAlPiUNCiAgZWNvdW50KCkNCmBgYA0KDQpUaGlzIGNvZGUgZ2V0cyB0aGUgZGVuc2l0eSBvZiB0aGUgbmV0d29yay4gDQoNCmBgYHtyfQ0KbXRfcmV0d2VldF9uZXR3b3JrICU+JQ0KICBlZGdlX2RlbnNpdHkoKQ0KYGBgDQoNCjQuIFRoaXMgY29kZSBjcmVhdGVzIGEgZGF0YXRhYmxlIG9mIHRoZSBuYW1lcyBhbmQgZGVncmVlcyBvZiBtZW1iZXJzIGluIHRoZSBNVCBOZXdzIGxpc3QuIA0KDQpgYGB7cn0NCm10X3JldHdlZXRfbm9kZXMgJT4lDQogIHNlbGVjdChuYW1lLGRlZ3JlZSkgJT4lDQogIGRhdGF0YWJsZSgpDQpgYGANCg0KNS4gTGlrZSBiZWZvcmUsIHRoaXMgY29kZSBmaW5kcyB0aGUgbm9kZXMgYW5kIGVkZ2VzIG9mIHRoZSBNVCBOZXdzIGRhdGEgYW5kIG9yZ2FuaXplcyBpdCBpbnRvIGEgZGlhZ3JhbS4gDQoNCmBgYHtyfQ0KbXRfcmV0d2VldF9uZXR3b3JrIDwtIG10X25ld3MgJT4lIA0KICBmaWx0ZXIocmV0d2VldF9zY3JlZW5fbmFtZSAlaW4lIG10X25ld3Mkc2NyZWVuX25hbWUpICU+JSAgICAgDQogIGd0X2VkZ2VzKHNjcmVlbl9uYW1lLCByZXR3ZWV0X3NjcmVlbl9uYW1lLCB0ZXh0KSAlPiUgICAgICAgIA0KICBndF9ncmFwaCgpDQoNCm10X3JldHdlZXRfbm9kZXMgPC0gYXNfZGF0YV9mcmFtZShtdF9yZXR3ZWV0X25ldHdvcmssIHdoYXQgPSAidmVydGljZXMiKQ0KDQptdF9yZXR3ZWV0X25vZGVzIDwtIG10X3JldHdlZXRfbm9kZXMgJT4lIA0KICBtdXRhdGUoaWQgPSBuYW1lKSAlPiUgDQogIG11dGF0ZShsYWJlbCA9IG5hbWUpICU+JSANCiAgbXV0YXRlKHRpdGxlID0gbmFtZSkgJT4lIA0KICBtdXRhdGUoZGVncmVlID0gZGVncmVlKG10X3JldHdlZXRfbmV0d29yaykpICU+JSANCiAgbXV0YXRlKHZhbHVlID0gZGVncmVlKQ0KDQptdF9yZXR3ZWV0X2VkZ2VzIDwtIGFzX2RhdGFfZnJhbWUobXRfcmV0d2VldF9uZXR3b3JrLCB3aGF0ID0gImVkZ2VzIikNCg0KbXRfcmV0d2VldF9lZGdlcyA8LSBtdF9yZXR3ZWV0X2VkZ2VzICU+JSANCiAgbXV0YXRlKHRpdGxlID0gdGV4dCkNCg0KdmlzTmV0d29yayhtdF9yZXR3ZWV0X25vZGVzLCBtdF9yZXR3ZWV0X2VkZ2VzLCBtYWluID0gIk1vbnRhbmEgTmV3cyBTb3VyY2UgVHdpdHRlciBSZXR3ZWV0IE5ldHdvcmsiKSAlPiUgDQogIHZpc0lncmFwaExheW91dChsYXlvdXQgPSAibGF5b3V0X25pY2VseSIpICU+JSANCiAgdmlzRWRnZXMoYXJyb3dzID0gInRvIikNCmBgYA0KDQpUaGUgY29kZSBiZWxvdyBncm91cHMgdGhlIHJldHdlZXQgZGF0YSB0b2dldGhlciBpbnRvIGNvbW11bml0aWVzIHRvIGJldHRlciBzZWUgaG93IHRoZSBtZW1iZXJzIGludGVyYWN0LiANCg0KYGBge3J9DQptdF9yZXR3ZWV0X25vZGVzIDwtIG10X3JldHdlZXRfbm9kZXMgJT4lIA0KICBtdXRhdGUoZ3JvdXAgPSBtZW1iZXJzaGlwKGluZm9tYXAuY29tbXVuaXR5KG10X3JldHdlZXRfbmV0d29yaykpKQ0KDQp2aXNOZXR3b3JrKG10X3JldHdlZXRfbm9kZXMsIG10X3JldHdlZXRfZWRnZXMsIG1haW4gPSAiTW9udGFuYSBOZXdzIFNvdXJjZSBUd2l0dGVyIFJldHdlZXQgTmV0d29yayIpICU+JSANCiAgdmlzSWdyYXBoTGF5b3V0KGxheW91dCA9ICJsYXlvdXRfbmljZWx5IikgJT4lIA0KICB2aXNFZGdlcyhhcnJvd3MgPSAidG8iKSAlPiUgICANCiAgdmlzT3B0aW9ucyhoaWdobGlnaHROZWFyZXN0ID0gVCwgbm9kZXNJZFNlbGVjdGlvbiA9IFQsIHNlbGVjdGVkQnkgPSAiZ3JvdXAiKQ0KDQoNCmBgYA0K