Моя задача - создать матрицу дружбы (матрица пользователь-пользователь), значения которой равны 1, если пользователи являются друзьями, и 0, если нет.Мой файл .csv содержит 1,5 миллиона строк, поэтому я создаю следующий маленький CSV для проверки моего алгоритма:
user_id friends
Elena Peter, John
Peter Elena, John
John Elena, Peter, Chris
Chris John
Для этого маленького CSV мой код работает хорошо:
%matplotlib inline
import pandas as pd
import seaborn as sns
import numpy as np
from scipy import sparse
sns.set(style="darkgrid")
user_filepath = 'H:\\YelpData\\test.csv' # this is my little test file
df = pd.read_csv(user_filepath, usecols=['user_id','friends'])
def Convert_String_To_List(string):
if string!="None":
li = list(string.split(", "))
else:
li = []
return li
friend_map = {}
for i in range(len(df)): #storing friendships in map
friend_map[df['user_id'][i]] = Convert_String_To_List(df['friends'][i])
users = sorted(friend_map.keys())
user_indices = dict(zip(users, range(len(users)))) #giving indices for users
#and now the sparsity matrix:
row_ind = [] #row indices, where the value is 1
col_ind = [] #col indices, where the value is 1
data = [] # value 1
for user in users:
for barat in baratok[user]:
row_ind.append(user_indices[user])
col_ind.append(user_indices[barat])
for i in range(len(row_ind)):
data.append(1)
mat_coo = sparse.coo_matrix((data, (row_ind, col_ind)))
friend_matrix = mat_coo.toarray() #this friendship matrix is good for the little csv file
Но когда я пробую этот код на моем большом (1,5 миллиона строк) CSV, я получаю ошибку памяти, когда я хочу сохранить дружбу на карте (в цикле for).
Есть ли какое-то решение дляэто?