2011-11-10 14 views
0

Dans mon cours théorique d'analyse de données, je dois trouver une matrice de cooccurrence pour les cours qui ont été pris ensemble par les étudiants. On m'a demandé de le faire manuellement puisque ce n'est pas un cours de programmation. Le problème est, la question que j'ai a 20 cours et 20 étudiants!Algorithme pour trouver la matrice de cooccurrence

Existe-t-il un langage de programmation comme Octave/Matlab ou Python avec des fonctions API pour cela?

Sinon, où puis-je trouver un algorithme pour trouver la matrice de co-occurrence. Je peux convertir l'algorithme en code. Googling ne m'a pas conduit à l'algorithme.

Un exemple des données que j'ai:

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 
........ 
........ 

Merci.

+0

On ne sait pas exactement ce que la matrice de cooccurrence est censée représenter. Dans les matrices de cooccurrence [j'en ai entendu parler] (http://en.wikipedia.org/wiki/Coccurrence_matrix), vous devez fournir un paramètre de distance pour que le problème soit bien défini. –

Répondre

1

Une approche simple consiste à utiliser un tableur (par exemple oocalc). Faire une rangée par élève et une colonne par cours; mettre un 1 (ou une autre marque non vide) dans les cellules appropriées, et utiliser une fonction de somme (intervalle) pour compter le nombre de marques dans chaque colonne.

Mise à jour: Dans l'approche ci-dessus, on introduit manuellement une matrice d'incidence; que j'ai précédemment supposé était ce que vous vouliez créer. Cependant, vous pourriez vouloir dire quelque chose d'autre par "matrice de co-occurrence". Quoi qu'il en soit, les programmes dans des langages tels que Python, Perl, Awk, Ruby ne prendront pas plus d'une poignée de lignes pour sortir une matrice d'incidence à partir des données sous la forme montrée. Par exemple, le programme long Perl ci-dessous peut être adapté pour imprimer une matrice au lieu d'une table:

#!/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__ 

Comme il est, à partir de l'échantillon de données que vous avez donné il produit une sortie comme:

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 

quand donné les données via l'entrée standard.

+0

J'ai suivi votre méthode pour former manuellement la matrice d'incidence et l'ai alimentée en octave pour faire A '* A & got la matrice de co-occurrence. Le code perl automatise le processus de création de la matrice d'incidence? Je vais l'essayer. Merci beaucoup! – Bharat

Questions connexes