Я пытаюсь построить иерархии на основе набора данных, где каждая строка представляет студента, курс, который они прошли, и некоторые другие метаданные.Из этого набора данных я пытаюсь построить матрицу смежности и определить иерархии, основанные на том, какие классы выбрал учащийся, и на пути, который выбирают разные учащиеся при выборе классов.
При этом, чтобы построить эту смежностьматрица, это вычислительно дорого.Вот код, который у меня есть в настоящее время и который работает около 2 часов.
uniqueStudentIds = df.Id.unique()
uniqueClasses = df['Course_Title'].unique()
for studentID in uniqueStudentIds:
for course1 in uniqueClasses:
for course2 in uniqueClasses:
if (course1 != course2 and have_taken_both_courses(course1, course2, studentID)):
x = vertexDict[course1]
y = vertexDict[course2]
# Assuming symmetry
adjacency_matrix[x][y] += 1
adjacency_matrix[y][x] += 1
print(course1 + ', ' + course2)
def have_taken_both_courses(course1, course2, studentID):
hasTakenFirstCourse = len(df.loc[(df['Course_Title'] == course1) & (df['Id'] == studentID)]) > 0
if hasTakenFirstCourse:
return len(df.loc[(df['Course_Title'] == course2) & (df['Id'] == studentID)]) > 0
else:
return False
Учитывая, что у меня очень большой размер набора данных, я попытался обратиться к онлайн-ресурсам по распараллеливанию / многопоточности этого вычислительно дорогогодля цикла.Тем не менее, я новичок в Python и многопроцессорности, поэтому любые рекомендации будут с благодарностью!