2011-11-10 21 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つの学生に1つの行を作成し、コースごとに1つの列を作成します。適切なセルに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 

標準入力を介してデータ。

+0

私はあなたの方法に従って手動で発生率マトリクスを形成し、これをオクターブに供給してA '* A&を行い、同時発生マトリックスを得た。 perlコードは発生行列の作成プロセスを自動化しますか?私はそれを試してみる。 ありがとう! – Bharat

関連する問題