Матрица смежности с использованием пакета igraph - PullRequest
0 голосов
/ 22 сентября 2018

Я использую igraph пакет в R для анализа социальных сетей.Я решил работать с Movielens Dataset (Movies Section), я также загрузил igraph Library, когда я хотел работать с матрицей смежности.

Набор данных успешно загружен, и эти r мои коды.

ff = read.csv("D:/TMU/DataSet/MovieLens/movies.csv", header = TRUE)
ff
mtr = as.matrix(ff)
gr = graph.adjacency(mtr, mode = "undirected", weighted = NULL, diag = FALSE)

Я столкнулся с этой ошибкой:

Ошибка в graph.adjacency.dense (adjmatrix, mode = mode, weighted = weighted,:
At structure_generators.c: 274: неквадратная матрица, неквадратная матрица
Дополнительно: предупреждающее сообщение:
в mde (x): NA введеныпринуждение

есть проблема с набором данных или что?

1 Ответ

0 голосов
/ 22 сентября 2018

Хорошо, используя небольшой набор данных из https://grouplens.org/datasets/movielens/, который имеет размерность 9125x3

Загрузите данные (вам может понадобиться настроить mode в download.file, если вы используете Windows)

pth <- "http://files.grouplens.org/datasets/movielens/ml-latest-small.zip"
download.file(pth, destfile=temp<-tempfile())
#unzip(temp, list=TRUE) # see what files?
unzip(temp, exdir=td<-tempdir()) 

# read movies dataset
movies <- read.csv(file.path(td, "ml-latest-small/movies.csv"), 
                   header=TRUE, stringsAsFactors = FALSE)

Загрузка некоторых библиотек

library(tm) # to form the binary matrix: best to keep things sparse
library(slam) # for the crossproduct of the simple_triplet_matrix returned by tm::DocumentTermMatrix
library(igraph) 

Сформировать двоичную матрицу для фильмов по жанрам (пришлось использовать MrFlick предложение VCorpus в противном случае "(без жанров в списке)"и "фильм-нуар" были разделены на отдельные слова

# split the genres string and create binary matrix for presence of genre
corp <- VCorpus(VectorSource(movies$genres))
dtm <- DocumentTermMatrix(corp, 
                          control = list(tokenize = function(x) 
                            unlist(strsplit(as.character(x), "\\|"))))

Создать матрицу смежности

# this looks for agreement across the genres
# you could use tcrossprod for similarities on the films
adj <- crossprod_simple_triplet_matrix(dtm)

Создать график

g <- graph_from_adjacency_matrix(adj, mode="undirected", weighted=TRUE)
...