Antonio Piepoli | 23 May 20:06
Picon

Aiuto per testi su machine learning e graph clustering

Salve a tutti,

sono Antonio PIepoli, studente universitario, ed attualmente mi trovo in Olanda per svolgere la mia tesi specialistica.
È da un pò che utilizzo python per tutti i miei progetti, quindi, lo utilizzerò anche per il mio lavoro di tesi.


Premetto che avrei dovuto creare tre mail con tre differenti oggetti... ma ho preferito non farlo perchè in questo modo avete un quadro generale del mio progetto e magari potete darmi un feedback generale :P.

Ulteriorie premessa... la mail è lunghetta e mi scuso di questo ... ma sono davvero in difficoltà e spero che qualcuno di voi abbia la gentilezza di aiutarmi.


Cerco di spiegarvi in maniera molto generale cosa sto facendo ... poi passerò alle domande.

Considerate di avere una tabella con questi attributi

Nome,Cognome,Data di nascita, Lavoro, email, città di residenza... in generale immaginate qualsiasi cosa sia riconducibile ad una identità digitale...

Immaginate adesso di dividere questa tabella in questo modo:

tabella1: Nome, Cognome
tabella 2: Cognome, Data di nascita
tabella 3: Data di nascita, lavoro
etc...

in sostanza la domanda è : partendo da tutte queste tabelle è possibile ricostruire la tupla iniziale?

Come avrete notato non sto ragionando in termini di chiavi ... quindi, in generale, non posso fare un semplice Join sull'attributo in comune perchè per esempio banalmente esistono più persone con lo stesso nome etc ... sto considerando anche la possibilità che ci siano errori di battitura tra diverse tabelle.

L'idea generale è ottenere un valore numerico di similarità (che poi è a tutti gli effetti una probabilità) tra due tuple di due tabelle diverse... per esempio

tupla1 = (Antonio, PIepoli) tupla2= (Antonio,Studente) tupla3 = (Piepoli,datadinascita)

verosimilmente la somiglianza tra tupla1 e tupla2 dovrebbe essere inferiore a quella tra tupla1 e tupla3.

Dopo avere assimilato questo concetto la mia idea è stata quella di creare una rete, un grafo, in cui ogni nodo rappresenta una tupla ed ogni arco rappresentza il valore di somiglianza tra due tuple che hanno almento un attributo in comune (in generale si può pensare a tabelle con + di due attributi e quindi il valore di somiglianza deve considerare due attributi). Una volta ottenuta questa rete bisognerebbe clusterizzare il grafo in modo tale che ogni cluster rappresenti poi una tupla originaria.

Spero che sia tutto chiaro perchè adesso mi sposterò su dettagli un pò più tecnici.

1)Come calcolo il valore di verosimiglianza? Risposta: machine learning. L'idea sarebbe quella di utilizzare un modello di supervised machine learning impostando un problema di classificazione (0 non match ed 1 match).
Ho scelto SVM (support vector machine) per la sua semplicità e per l'ottima libreria libsvm ma credo che una scelta vale l'altra.
In sostanza la fase di training corrisponde ad una serie di vettori di dimensione pari alla cardinalità della tabella applicando ad ogni attributo opportune metriche (Jaro o Edit distance per esempio).
Quindi il vettore di training ha questa forma
metrica sul nome, metrica sul cognome, metrica sul lavoro .... classe
0.2 ,                        0,                             1 ,                           0
etc ...

una volta fatto il training otterò un modello che potro interrogare con un vettore di testing ed in uscità avrò la probabilità di appartenzenza a ciascuna classe...

la prima domanda che vi pongo è: che modelli dovrei creare? un modello per ogni attributo o un modello generale ?

per esempio... devo fare il training solo sul nome sul cognome etc ... separatamente o devo creare un modello per tutta la tabella e quando mi servirà sapere il valore di verosimiglianza su nome e cognome trattare gli altri attributi come mancanti?


2) per realizzare i cluster... stavo pensando ad algoritmi di tipo community detection... pensate sia una cosa sensata? oppure c'è un sistema migliore? In pratica quello che mi aspetto è di avere una rete in cui ci saranno nodi connessi con archi "pesanti" a nodi della stessa persona e con archi leggeri a nodi della stessa tabella ma riferiti ad un'altra persona.


alla fine ho un pò affrettato le domande... se non sono chiare provo a riformularle... questa volta magari con difersi oggetti

scusate se la mail è molto lunga... spero che qualcuno mi sappia aiutare perchè questo progetto è una cosa che sto faceno praticamente da solo, senza l'aiuto del mio supervisore perchè lui non conosce nessuno di questi argomenti ( e nemmeno io fino a qualche mese fa :( )


-
Antonio Piepoli

chiara angelone | 23 May 16:38
Picon

prime armi

Ciao a tutti,
sono alle prime armi con Python.
Sto riscontrando il seguente problema:
dalla command line di Python non riesco ad eseguire il mio file prova.py.
e nemmeno dalle shell di IDLE.

Io eseguo questo comando:
python prova.py

L'errore è il seguente:
nameError: 'python' is not defined
però ad esempio mi funziona la seguente riga
exec (open ('prova.py').read())

ho provarto a inserire tutto il percorso del mio file prova.py in questo modo
python C:\python\prova.py
ma l'errore è
SyntaxError: invalid syntax


Qualcuno può darmi qualche suggerimento per favore?

Grazie, ciao
Chiara
p.s. Sono sotto Windows

Simone Federici | 23 May 15:44
Picon
Gravatar

MAC e python

Ciao! 

chi ha esperienza di MAC e python?
voglio mettere su una macchina di sviluppo mac based

python2.7?

problemi e workaround conosciuti?
S

Matteo Perini | 23 May 12:56
Picon

come chiudere in modo corretto le Window pygtk

Ciao a tutti,
Scusate la domanda banale ma sto cercando da un po di risolvere il 
seguente problema ma non ne vengo a capo.

Ho una applicazione con una finestra principale che contiene dei 
semplici pulsanti.
La pressione dei pulsanti mi fa aprire (a seconda del caso) una nuova 
Window che mi da' la possibilità di inserire del testo.
Fino a qui tutto ok.
Quando però chiudo la Window  e successivamente provo a riaprirla per 
inserire dei nuovi dati ottengo:

File "Gui.py", line 46, in on_btn_main_calib_clicked
self.main_calibration(self)
TypeError: 'gtk.Window' object is not callable

e quindi non riesco a riaprire la finestra

il codice della finestra in questione è:
     def main_calibration(self,widget,data=None):
         def calib1(self,entry):
             self.num = entry.get_text()
             print self.num

         self.main_calibration = gtk.Window(gtk.WINDOW_TOPLEVEL)
         self.main_calibration.set_position(gtk.WIN_POS_CENTER)
         self.main_calibration.set_title("Calibrazione")
         self.main_calibration.set_border_width(15)
         #self.main_calibration.connect("destroy", self.exit)
         hbox1 = gtk.HBox(True, 0)
         hbox2 = gtk.HBox(True, 0)
         vbox = gtk.VBox(True, 0)
         self.entry1 = gtk.Entry()
         self.entry1lab = gtk.Label("ciao")
         num=self.entry1.get_text()
         self.button1 = gtk.Button("Calibra")
         self.button1.connect("clicked",calib1, self.entry1)
         self.label1 = gtk.Label("Numero di acquisizioni valide:")

         hbox1.pack_start(self.label1, True, True, 5)
         hbox1.pack_start(self.entry1,True,True,5)

         hbox2.pack_start(self.button1, True, True, 5)
         vbox.pack_start(hbox1, True, False, 5)
         vbox.pack_start(hbox2, True, False, 5)
         self.main_calibration.add(vbox)
         self.main_calibration.show_all()
         gtk.main()

Se avete avuto la pazienza di leggere fino a qui vi sarete accorti che 
c'è una linea commentata:

#self.main_calibration.connect("destroy", self.exit)

questa chiude sia la Window voluta che la finestra principale (cosa che 
non deve accadere).
Ogni suggerimento su come risolvere questo piccolo problema è ben accetto.
Grazie a tutti
Matteo P

Pasini Paolo | 23 May 07:58

R: Arduino

xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

 

 

Da: python-bounces <at> lists.python.it [mailto:python-bounces <at> lists.python.it] Per conto di piergiorgio pancino
Inviato: martedì 22 maggio 2012 18.52
A: python <at> lists.python.it
Oggetto: [Python] Arduino

 

Ciao a tutti :) è la prima volta che scrivo, anche se vi seguo da tanto, anche perché sono un amatore poco esperto, ma se posso dare il mio contributo lo do volentieri :)

 

Veniamo a noi, io per dialogare con arduino ho usato il modulo serial.

La prima difficoltà è trovare il nome giusto della porta, lo risolvi o con il programma java di arduino per compilare gli sketch che ti dice il nome della porta, oppure con questo listato artigianale:

 

import serial

 

def analizza_porte():

    lista = []

    for x in range(16):

        n = "com" + str(x)

        try:

            z = serial.Serial(n)

            z.close()

            lista.append(n)

        except:

            continue

    for x in range(16):

        n = "/dev/ttyACM" + str(x)

        try:

            z = serial.Serial(n)

            z.close()

            lista.append(n)

        except:

            continue

    for x in range(16):

        n = "/dev/ttyS" + str(x)

        try:

            z = serial.Serial(n)

            z.close()

            lista.append(n)

        except:

            continue

    return lista

 

print(analizza_porte())

 

Per dialogare con arduino ho fatto qualcosa del genere, in pratica mi invia del testo "DO", "RE", eccetera e arduino quando lo legge suona una nota

 

from tkinter import *

import serial

 

try:

    arduino=serial.Serial("/dev/ttyACM0",9600)

except:

    exit

    

def suona(nota):

    arduino.write(nota.encode("utf-8"))

root=Tk()

                  

do=Button(root,text="DO",command=lambda: suona("C")).pack()

re=Button(root,text="RE",command=lambda: suona("D")).pack()

mi=Button(root,text="MI",command=lambda: suona("E")).pack()

fa=Button(root,text="FA",command=lambda: suona("F")).pack()

sol=Button(root,text="SOL",command=lambda: suona("G")).pack()

la=Button(root,text="LA",command=lambda: suona("A")).pack()

si=Button(root,text="SI",command=lambda: suona("B")).pack()

root.mainloop()

 

E infine lo sketch su arduino, ciao e scusate la lunghezza:

 

#define NOTE_B0  31

#define NOTE_C1  33

#define NOTE_CS1 35

#define NOTE_D1  37

#define NOTE_DS1 39

#define NOTE_E1  41

#define NOTE_F1  44

#define NOTE_FS1 46

#define NOTE_G1  49

#define NOTE_GS1 52

#define NOTE_A1  55

#define NOTE_AS1 58

#define NOTE_B1  62

#define NOTE_C2  65

#define NOTE_CS2 69

#define NOTE_D2  73

#define NOTE_DS2 78

#define NOTE_E2  82

#define NOTE_F2  87

#define NOTE_FS2 93

#define NOTE_G2  98

#define NOTE_GS2 104

#define NOTE_A2  110

#define NOTE_AS2 117

#define NOTE_B2  123

#define NOTE_C3  131

#define NOTE_CS3 139

#define NOTE_D3  147

#define NOTE_DS3 156

#define NOTE_E3  165

#define NOTE_F3  175

#define NOTE_FS3 185

#define NOTE_G3  196

#define NOTE_GS3 208

#define NOTE_A3  220

#define NOTE_AS3 233

#define NOTE_B3  247

#define NOTE_C4  262

#define NOTE_CS4 277

#define NOTE_D4  294

#define NOTE_DS4 311

#define NOTE_E4  330

#define NOTE_F4  349

#define NOTE_FS4 370

#define NOTE_G4  392

#define NOTE_GS4 415

#define NOTE_A4  440

#define NOTE_AS4 466

#define NOTE_B4  494

#define NOTE_C5  523

#define NOTE_CS5 554

#define NOTE_D5  587

#define NOTE_DS5 622

#define NOTE_E5  659

#define NOTE_F5  698

#define NOTE_FS5 740

#define NOTE_G5  784

#define NOTE_GS5 831

#define NOTE_A5  880

#define NOTE_AS5 932

#define NOTE_B5  988

#define NOTE_C6  1047

#define NOTE_CS6 1109

#define NOTE_D6  1175

#define NOTE_DS6 1245

#define NOTE_E6  1319

#define NOTE_F6  1397

#define NOTE_FS6 1480

#define NOTE_G6  1568

#define NOTE_GS6 1661

#define NOTE_A6  1760

#define NOTE_AS6 1865

#define NOTE_B6  1976

#define NOTE_C7  2093

#define NOTE_CS7 2217

#define NOTE_D7  2349

#define NOTE_DS7 2489

#define NOTE_E7  2637

#define NOTE_F7  2794

#define NOTE_FS7 2960

#define NOTE_G7  3136

#define NOTE_GS7 3322

#define NOTE_A7  3520

#define NOTE_AS7 3729

#define NOTE_B7  3951

#define NOTE_C8  4186

#define NOTE_CS8 4435

#define NOTE_D8  4699

#define NOTE_DS8 4978

 

int ledPin=2;

char msg;

 

void setup() {

  pinMode(ledPin,OUTPUT);

  Serial.begin(9600);

}

 

void loop () { 

 

if (Serial.available()>0)

        {   

        msg=Serial.read();

        }        

else

  if (msg=='C') { 

                tone(3, NOTE_C3,1000);

                Serial.print("Note C");

                msg=' ';

              } 

  else if (msg=='D') { 

                tone(3, NOTE_D3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

  else if (msg=='E') { 

                tone(3, NOTE_E3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

  else if (msg=='F') { 

                tone(3, NOTE_F3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

  else if (msg=='G') { 

                tone(3, NOTE_G3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

  else if (msg=='A') { 

                tone(3, NOTE_A3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

  else if (msg=='B') { 

                tone(3, NOTE_B3,1000);

                Serial.print("Note D");

                msg=' ';

              } 

 

}

}

piergiorgio pancino | 22 May 18:51
Picon
Favicon

Arduino

Ciao a tutti :) è la prima volta che scrivo, anche se vi seguo da tanto, anche perché sono un amatore poco esperto, ma se posso dare il mio contributo lo do volentieri :)

Veniamo a noi, io per dialogare con arduino ho usato il modulo serial.
La prima difficoltà è trovare il nome giusto della porta, lo risolvi o con il programma java di arduino per compilare gli sketch che ti dice il nome della porta, oppure con questo listato artigianale:

import serial

def analizza_porte():
    lista = []
    for x in range(16):
        n = "com" + str(x)
        try:
            z = serial.Serial(n)
            z.close()
            lista.append(n)
        except:
            continue
    for x in range(16):
        n = "/dev/ttyACM" + str(x)
        try:
            z = serial.Serial(n)
            z.close()
            lista.append(n)
        except:
            continue
    for x in range(16):
        n = "/dev/ttyS" + str(x)
        try:
            z = serial.Serial(n)
            z.close()
            lista.append(n)
        except:
            continue
    return lista

print(analizza_porte())

Per dialogare con arduino ho fatto qualcosa del genere, in pratica mi invia del testo "DO", "RE", eccetera e arduino quando lo legge suona una nota

from tkinter import *
import serial

try:
    arduino=serial.Serial("/dev/ttyACM0",9600)
except:
    exit
    
def suona(nota):
    arduino.write(nota.encode("utf-8"))
root=Tk()
                  
do=Button(root,text="DO",command=lambda: suona("C")).pack()
re=Button(root,text="RE",command=lambda: suona("D")).pack()
mi=Button(root,text="MI",command=lambda: suona("E")).pack()
fa=Button(root,text="FA",command=lambda: suona("F")).pack()
sol=Button(root,text="SOL",command=lambda: suona("G")).pack()
la=Button(root,text="LA",command=lambda: suona("A")).pack()
si=Button(root,text="SI",command=lambda: suona("B")).pack()
root.mainloop()

E infine lo sketch su arduino, ciao e scusate la lunghezza:

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

int ledPin=2;
char msg;

void setup() {
  pinMode(ledPin,OUTPUT);
  Serial.begin(9600);
}

void loop () { 

if (Serial.available()>0)
        {   
        msg=Serial.read();
        }        
else
  if (msg=='C') { 
                tone(3, NOTE_C3,1000);
                Serial.print("Note C");
                msg=' ';
              } 
  else if (msg=='D') { 
                tone(3, NOTE_D3,1000);
                Serial.print("Note D");
                msg=' ';
              } 
  else if (msg=='E') { 
                tone(3, NOTE_E3,1000);
                Serial.print("Note D");
                msg=' ';
              } 
  else if (msg=='F') { 
                tone(3, NOTE_F3,1000);
                Serial.print("Note D");
                msg=' ';
              } 
  else if (msg=='G') { 
                tone(3, NOTE_G3,1000);
                Serial.print("Note D");
                msg=' ';
              } 
  else if (msg=='A') { 
                tone(3, NOTE_A3,1000);
                Serial.print("Note D");
                msg=' ';
              } 
  else if (msg=='B') { 
                tone(3, NOTE_B3,1000);
                Serial.print("Note D");
                msg=' ';
              } 

}
}
giorgio | 22 May 16:03
Picon
Favicon

Python e Arduino

Ciao a tutti,

qualcuno ha già provato a  leggere/scrivere gli I/O di Arduino?

--

-- 
Best regards,
 giorgio                          mailto:g.climb <at> tiscali.it

Remo The Last | 18 May 21:15
Picon
Favicon

threading.active_count() e suo gemello threading.activeCount()

ciao lista, buonasera.

Ho un problema con un mio programma che usa threads. Mi servirebbe un aiuto.
Questo mio programma crea un thread ogni volta che il numero totale di thread creati scende sotto un certo valore arbitrario. Ecco il semplice listato del core:

while True:
if threading.active_count()<numarbitrario:
myc=myclient() 
myc.start()

Il problema che mi si pone è che il contatore di thread (threading.activeCount() o anche il suo gemello) che non conta i thread creati bensì resituisce sempre un valore uguale a 2 non restituendo il numero di thread creati e vivi (e mi serve proprio questo valore!)

Se può servire:
Ogni thread crea una connessione ad un sito remoto inviando dati e chiudendo la connessione a sua discrezione. Questo dovrebbe essere irrilevante in quanto non mi interessa la sana gestione delle comunicazioni; ogni comunicazione è un invio di dati e punto. 

Che mi consigliate?

Grazie per eventuali.
Ciao
py.Re



paride_900@libero.it | 18 May 13:19
Picon
Favicon

istruzione yield

Salve ragazzi

navigando un po in rete mi sono imbattuto in questo pezzo di codice Python:

def splitlist(lista,lunghezza):
    i=0
    while 1:
        fine=i+lunghezza
        if len(lista)<=i: return

        yield lista[i:fine]
        i=fine

print list(splitlist([1,2,3,4],2))

Vi spiego fin dove sono riuscito a capirlo io.

Si crea la funzione 'splitlist' con i parametri 'lista' e 'lunghezza'
Si crea la variabile 'i' e gli viene assegnato il valore zero.
Si crea un ciclo while 1, ovvero fino a che la condizione sarà 1.
Si crea la variabile 'fine' e gli vengono assegnati le variabili 'i' e 
'lunghezza' da sommare, quindi a questo punto abbiamo la variabile 'fine' che 
vale due.
Quindi si passa all'istruzione 'if' che verifica se gli elementi della lista 
sono minori o uguali a 'i', cioè a zero. Se è vero che sono minori o uguali 
ritornerà la lista vuota.

Dall'istruzione sotto in poi non riesco a capirci più nulla.
In particolare non ho capito il funzionamento dell'istruzione yield, da quel 
che ho letto in rete si tratta di un generatore o una cosa del genere ma non ho 
capito bene come agisce.

GRAZIE
RESTO IN ATTESA DI VOSTRI AIUTI
admin lewis | 12 May 12:19
Picon

bot

Ciao,
vorrei scrivere un qualcosa per navigare su un certo sito per
raccogliere informazioni e cliccare su pulsanti.
Conosco già mechanize in quanto l'ho già usato ma mi chiedevo se
esisteva dell'altro di meglio anche dal punto di vista prestazionale.
grazie
luigi

--

-- 
Linux Server, Microsoft Windows 2003/2008 Server, Exchange 2007
http://predellino.blogspot.com/
Matteo Perini | 11 May 10:45
Picon

passare variabili tra funzioni (pygtk)

Ciao a tutti,

Ho costruito una semplice gui con pygtk e glade.
In una finestra ho una textbox e un buttton.
Quando premo il button vorrei venisse richiamata una funzione alla quale 
dovrebbe essere passato il numero inserito nella textbox.
nella funzione win_take_pictures della class Window ho:

La textbox:
self.entry1 = gtk.Entry()
self.num_grab=self.entry1.get_text()

Il button:
self.button1 = gtk.Button("Grab Image")
self.button1.connect("clicked", self.get_image)

Nella class Window ho anche la funzione che voglio richiamare col button:
def get_image(self,widget):
         self.num_grab= Window.win_take_pictures
         print self.num_grab
Vorrei (per adesso) che la funzione get_image mi stampasse a schermo il 
numero inserito nella textbox(self.num_grab).
Ho provato a passare il parametro richiamando qualcosa del tipo 
self.get_image(self.num_grab)
ma non sono riuscito.
Scusate la domanda forse banale ma non ne sto uscendo... e anche google 
non mi ha aiutato molto.
Ciao
Grazie
Matteo P

Gmane