在我的理论数据分析课程中,我必须找到由学生一起学习的课程的共同出现矩阵。 我被要求手动完成,因为这不是编程课程。问题是,我的问题有20个课程和20个学生!
是否有任何编程语言如Octave / Matlab或Python都有api函数来执行此操作?
如果没有,我在哪里可以找到找到共生矩阵的算法。我可以将算法转换为代码。谷歌搜索没有引导我进入算法。
我拥有的数据示例:
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
........
........
谢谢。
答案 0 :(得分: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
通过标准输入给出数据时。