从原始数据构建图

案例研究:用 R 进行网络分析

Edmund Hart

Instructor

探索数据

  • 数据:数天内所有提到 #rstats 的推文
  • 构建图的关键字段:
    • 屏幕名(screen name)
    • 推文原文
案例研究:用 R 进行网络分析

推文结构

  1. ReecheshJC:"嗨 #rstats,如何像 fct_lump 一样合并,但按列中的计数合并?"
  2. kom_256:"RT @elenagbg:转推 R-Ladies Madrid (@RLadiesMAD):\n\n在 #OCSummit17… 关于 #rstats 的快讲,由… 组织 https://t.co/CKY5aG…"
案例研究:用 R 进行网络分析
library(igraph)
library(stringr)
raw_tweets <- read.csv("datasets/rstatstweets.csv", 
  stringsAsFactors = FALSE)

数据示例,单行

user_name:    Karen Millidine
screen_name:    KJMillidine
tweet_tex:t    RT @Rbloggers: RStudio v1.1 Released 
https://t.co/kCMHc689nY #rstats #DataScience
favorites:    0
retweets:    96
location:    None
expanded_url:    https://wp.me/pMm6L-ExV
in_reply_to_tweet_id:    NA
in_reply_to_user_id:    NA
dt:    10/10/17
案例研究:用 R 进行网络分析

构建图

## 获取所有屏幕名
all_sn <- unique(raw_tweets$screen_name)

## 创建图
retweet_graph <- graph.empty()

## 将屏幕名添加为顶点
retweet_graph <- retweet_graph + vertices(all_sn)
案例研究:用 R 进行网络分析

构建图

## 提取名称并添加边
for(i in 1:dim(raw_tweets)[1]){

# 提取转推的用户名 rt_name <- find_rt(raw_tweets$tweet_text[i]) # 若存在则添加边 if(!is.null(rt_name)){
# 确认顶点是否存在,不存在则添加 if(!rt_name %in% all_sn){ retweet_graph <- retweet_graph + vertices(rt_name) }
# 添加边 retweet_graph <- retweet_graph + edges(c(raw_tweets$screen_name[i], rt_name))
}
}
案例研究:用 R 进行网络分析

清理图

## 统计度为 0 的顶点数
sum(degree(retweet_graph) == 0) 

## 修剪并简化
retweet_graph <- simplify(retweet_graph)
retweet_graph <- delete.vertices(retweet_graph, 
  degree(retweet_graph) == 0)
案例研究:用 R 进行网络分析

让我们练习吧!

案例研究:用 R 进行网络分析

Preparing Video For Download...