Xây dựng đồ thị từ dữ liệu thô

Các nghiên cứu tình huống: Phân tích mạng lưới với R

Edmund Hart

Instructor

Khám phá dữ liệu

  • Dữ liệu là vài ngày tất cả các tweet nhắc đến #rstats
  • Thuộc tính chính để xây đồ thị:
    • screen name
    • văn bản thô của tweet
Các nghiên cứu tình huống: Phân tích mạng lưới với R

Cấu trúc của một tweet

  1. ReecheshJC: "Này #rstats, làm fct_lump thế nào nhưng gộp theo số lần xuất hiện trong một cột?"
  2. kom_256: "RT @elenagbg: Retweeted R-Ladies Madrid (@RLadiesMAD):\n\nEn el #OCSummit17... Fast Talks sobre #rstats organizado por... https://t.co/CKY5aG…"
Các nghiên cứu tình huống: Phân tích mạng lưới với R
library(igraph)
library(stringr)
raw_tweets <- read.csv("datasets/rstatstweets.csv", 
  stringsAsFactors = FALSE)

Mẫu dữ liệu, một dòng

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
Các nghiên cứu tình huống: Phân tích mạng lưới với R

Xây dựng đồ thị

## Lấy tất cả screen name
all_sn <- unique(raw_tweets$screen_name)

## Tạo đồ thị
retweet_graph <- graph.empty()

## Thêm screen name làm đỉnh
retweet_graph <- retweet_graph + vertices(all_sn)
Các nghiên cứu tình huống: Phân tích mạng lưới với R

Xây dựng đồ thị

## Trích xuất tên và thêm cạnh
for(i in 1:dim(raw_tweets)[1]){

# Lấy tên được retweet rt_name <- find_rt(raw_tweets$tweet_text[i]) # Nếu có tên thì thêm một cạnh if(!is.null(rt_name)){
# Kiểm tra đỉnh đã tồn tại chưa, nếu chưa thì thêm vào if(!rt_name %in% all_sn){ retweet_graph <- retweet_graph + vertices(rt_name) }
# thêm cạnh retweet_graph <- retweet_graph + edges(c(raw_tweets$screen_name[i], rt_name))
}
}
Các nghiên cứu tình huống: Phân tích mạng lưới với R

Làm sạch đồ thị

## Đếm số đỉnh bậc 0
sum(degree(retweet_graph) == 0) 

## Cắt gọn và đơn giản hóa
retweet_graph <- simplify(retweet_graph)
retweet_graph <- delete.vertices(retweet_graph, 
  degree(retweet_graph) == 0)
Các nghiên cứu tình huống: Phân tích mạng lưới với R

Cùng luyện tập nào!

Các nghiên cứu tình huống: Phân tích mạng lưới với R

Preparing Video For Download...