2011-11-10 36 views
0

在我的理論數據分析課程中,我必須找到一個由學生共同參與的課程矩陣。 我被要求手動做,因爲這不是一門編程課程。問題是,我有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

目前尚不清楚共生矩陣應該表示什麼。在共同矩陣[我聽說過](http://en.wikipedia.org/wiki/Co-occurrence_matrix)中,您需要提供一個距離參數,使問題得到明確定義。 –

回答

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__ 

AS是,從你給它的數據樣本產生輸出等:

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 

當給定數據通過標準輸入。

+0

我遵循你的方法手動形成關聯矩陣,並將其饋送到八度以執行A'* A&獲得了共生矩陣。 perl代碼自動創建關聯矩陣的過程?我會試試看。 非常感謝! – Bharat