У меня есть файл csv, содержащий 2 столбца. В столбце 1 есть имя пользователя и столбец 2, имя пользователя, на которое пользователь ответил. В файле содержится в общей сложности 2 миллиона записей. В Column1 и Column 2. существует около 100K уникальных имен пользователей. Я хочу создать матрицу 100K * 100K, которая даст количество раз, когда каждый пользователь общался с другими 99 999 пользователями. Можно ли создать матрицу в R? Очевидно, что матрица будет очень скудной, по крайней мере, 99,98% матрицы будет нулевой, так как из возможных 10 миллиардов записей всего лишь 2 миллиона записей, что составляет всего 0,02 процента. Как узнать, сколько раз каждый пользователь общался с другими 99,999 пользователями и помещал его в виде матрицы?Создание разреженной матрицы 100K * 100K (10 миллиардов элементов) в R
1
A
ответ
3
Вы можете использовать sparseMatrix
из Matrix
пакета:
require(Matrix)
#this just to generate some random strings
require(stringi)
set.seed(1)
#generating 100k usernames
users<-stri_rand_strings(100000,6)
#simulating col1 and col2
col1<-sample(users,1000000,T)
col2<-sample(users,1000000,T)
#hashing to integer values through factor
col1<-factor(col1,levels=users)
col2<-factor(col2,levels=users)
#creating the matrix
mySparseMatrix<-sparseMatrix(as.numeric(col1),as.numeric(col2),x=1)
#not a huge object
object.size(mySparseMatrix)
#12400720 bytes
Таким образом, вы создаете значение sparseMatrix
которого i,j
является один, если я-й пользователь передает j-го пользователя и 0 в противном случае.
Редактировать
Если вы хотите также, чтобы показать, сколько раз общался с J-го I-го пользователя, мы можем обратиться за помощью к data.table
пакета. Сразу после создания col1
и col2
:
require(data.table)
dt<-data.table(col1=factor(col1,levels=users),col2=factor(col2,levels=users))
#aggregating by col1 and col2
dt<-dt[,list(times=.N),by=list(col1,col2)]
mySparseMatrix<-sparseMatrix(as.numeric(dt$col1),as.numeric(dt$col2),x=dt$times)
Смежные вопросы
- 1. Rails Создать строки 100k
- 2. Modulo 100k-значного числа
- 3. R построения разреженной матрицы
- 4. Создание разреженной матрицы из списка списков-R
- 5. Эффективное создание логической разреженной матрицы
- 6. Создание разреженной матрицы с использованием R
- 7. положение строки в 100k + записей
- 8. Создание разреженной матрицы в Python
- 9. Заполнение разреженной матрицы в R
- 10. curl для более 100K запросов
- 11. Извлечение элементов из разреженной матрицы
- 12. Сохранение 100K различных таблиц в DB
- 13. Entity Framework Обновление записей 100K
- 14. Постоянное подключение к 100K устройств
- 15. Количество потолка до следующего 100k
- 16. Создание разреженной матрицы из TermDocumentMatrix
- 17. Чтение из файла разреженной матрицы
- 18. Создание разреженной матрицы в цикле
- 19. Умножение элементов столбца разреженной матрицы
- 20. создание разреженной матрицы неизвестного размера
- 21. Parse.com - Проблемы с производительностью с пользователями 100K
- 22. SQLite: SELECT IN с помощью списка элементов 100K
- 23. Сохранение маркеров карты 100k в App Engine
- 24. 100K запросов POST не попадают в webAPI?
- 25. Браузер сбой при связывании записей 25k-100k
- 26. вычислительные собственные векторы разреженной матрицы в R
- 27. Создание разреженной матрицы из списка разреженных векторов
- 28. Как Spark хорошо читает 100K изображений?
- 29. background-image of width over 100k пикселей
- 30. Экспорт Excel с количеством строк 100k - 1Mio
Вы можете уменьшить вычисление так, Пользователя1: Пользователь2 == Пользователь2: User1 ... То есть, сколько раз User1 пообщалась с Пользователю2 таким же, как число раз Пользователь2 общался с User1. Это правда? – cory
Нет. Я не знаю, сколько раз пользователи общались друг с другом. Я должен найти его, и он определенно не будет таким же, как User1: User2! = User2: User1 – Bruno
Было бы полезно определить «ответ» и «сообщить», а также рассказать нам, как они отличаются, и предоставить некоторые примеры данных , – cory