2011-01-07 2 views
5

mi hanno record di membri di un club e dei loro interessi, come nel seguente:tracciare i dati multidimensionali

Member A: Football, Swimming 
Member B: Swimming, Jooga, Jogging 
Member C: Cycling, Football 
Member D: Football, Tennis, Cycling 

E 'possibile tracciare questi in Python in modo che si può vedere i diversi interessi membri condividono? Grazie in anticipo, Adia

risposta

6

una semplice tabella sembra avere più senso di un diagramma di Venn:

import scipy, pylab 
names = ['Alice', 'Bob', 'Carol', 'David'] 
interests = [['Football', 'Swimming'], ['Swimming', 'Jooga', 'Jogging'], 
      ['Cycling', 'Football'], ['Football', 'Tennis', 'Cycling']] 
allinterests = list(set(reduce(lambda x,y:x+y, interests))) 
X = scipy.zeros((len(interests), len(allinterests))) 
for i, indinterests in enumerate(interests): 
    for x in indinterests: 
     X[i, allinterests.index(x)] = 1 
pylab.matshow(X, interpolation='nearest', cmap=pylab.cm.gray_r) 
pylab.show() 
pylab.yticks(range(len(names)), names) 
pylab.ylim([len(names)-0.5, -0.5]) 
pylab.xticks(range(len(allinterests)), allinterests) 
pylab.savefig('interests.png') 

alt text

+0

Sto provando esattamente lo stesso codice che hai postato sulla mia macchina, ma dà un messaggio di 'errore di sintassi' lungo i due punti nel primo e secondo ciclo FOR. Non vedo alcuna sintassi sbagliata qui, quindi quale potrebbe essere la ragione? – Adia

+0

Siamo spiacenti. Ho omesso una parentesi nella riga 'zeros'. Modificato. –

+0

grazie mille Steve, è andata così. – Adia

3

Si potrebbe voler dare un'occhiata a matplotlib e vedere se offre qualcosa di adatto per questo.

Sage, un'altra alternativa. Vedi anche this example.

+0

In realtà ho fatto prima di pubblicare la mia domanda. Non sono riuscito a trovare qualcosa che potesse adattarsi alla mappatura dei membri contro i loro interessi. Sono sicuro che ci sia, è solo la mia conoscenza limitata di Python. – Adia

+0

Ok. Ho aggiunto un'altra alternativa alla risposta. Immagino che qualcosa come un diagramma di Venn possa adattarsi alle tue esigenze. –

+1

+1 per il diagramma di Venn. –