#algorithm #matrix
#алгоритм #матрица
Вопрос:
В моем теоретическом курсе анализа данных я должен найти матрицу совпадений для курсов, которые студенты проходили вместе. Меня попросили сделать это вручную, поскольку это не курс программирования. Проблема в том, что в вопросе, который у меня есть, есть 20 курсов и 20 студентов!
Существует ли какой-либо язык программирования, такой как Octave / Matlab или Python, у которых есть функции api для этого?
Если нет, то где я могу найти алгоритм для поиска матрицы совпадений. Я могу преобразовать алгоритм в код. Поиск в Google не привел меня к алгоритму.
Пример данных, которые у меня есть:
IT 421 540 531 582
IT 549 561 528 578
IT 571 532 563 543
IT 421 561 571 519
IT 540 563 578 411
IT 411 421 581 578
IT 421 540 561 411
IT 541 548 528 546
IT 411 422 540 571
........
........
Спасибо.
Комментарии:
1. Неясно, что должна представлять матрица совпадений. В матрицах совпадений, о которых я слышал , вам нужно указать параметр расстояния, чтобы задача была четко определена.
Ответ №1:
Простой подход заключается в использовании программного обеспечения для работы с электронными таблицами (например, oocalc). Создайте по одной строке на каждого студента и по одному столбцу на курс; поместите 1 (или другую непустую отметку) в соответствующие ячейки и используйте функцию суммы (диапазона) для подсчета количества отметок в каждом столбце.
Обновление: В приведенном выше подходе вручную вводится матрица совпадений; я ранее предполагал, что это то, что вы хотели создать. Однако под «матрицей совпадений» вы можете подразумевать что-то другое. В любом случае, программам на таких языках, как Python, Perl, Awk, Ruby, потребуется не более нескольких строк для вывода матрицы совпадений из данных в показанной форме. Например, приведенная ниже пространная программа Perl может быть адаптирована для печати матрицы вместо таблицы:
#!/usr/bin/perl
for (<>) { # Read all data lines
$i; # compute student #
chomp $_; # Remove newlines
@s = split (/ */);
foreach (@s) { # Add student to each course
$c{$_} .= " $i"
}
}
foreach $course (sort keys %c) {
print "Course $course : $c{$course}n"
}
__END__
Как есть, из предоставленного вами образца данных он выдает вывод, подобный:
Course 411 : 6 7 9 11
Course 421 : 1 5 7 9
Course 422 : 11
Course 519 : 5
Course 528 : 2 10
Course 531 : 1
Course 532 : 3
Course 540 : 1 6 9 11
...
Course 582 : 1
Course IT : 1 2 3 5 6 7 9 10 11
при вводе данных через стандартный ввод.
Комментарии:
1. Я следовал вашему методу, чтобы вручную сформировать матрицу совпадений, и передал ее в octave, чтобы выполнить ‘ * A amp; получил матрицу совпадений. Код perl автоматизирует процесс создания матрицы совпадений? Я попробую это. Большое спасибо!