Articoli marcati con tag ‘python’

Prestazioni delle tabelle partizionate in PostgreSQL

domenica, 20 agosto 2006

Uso di informazioni statistiche e partizionamento delle tabelle per incrementare le performances in PostgreSQL

Variazione del tempo di query in funzione del numero di record inseriti

*In rosso i tempi di accesso delle tabella unica (prova1) in verde i tempi della tabella partizionata (prova2) al crescere delle dimensioni dell’archivio.*

Per una presentazione del problema: [tagschema.com](http://tagschema.com/blogs/tagschema/)

Piccoli archivi crescono

giovedì, 20 luglio 2006

Il database che contiene i dati della mia tesi ha raggiunto dimensioni considerevoli!!

La tabella di collegamento principale ha raggiunto i 4 milioni di record!! wow!

La tesi si propone lo studio di metodi di suggerimento mirati per il singolo utente, però il problema della velocità di calcolo si fa sentire anche con solo 2000 utenti inseriti.

È possibile però osservare che, come in tutti gli archivi di risorse internet, il 90% dei bookmark di ogni utente sono pesonali e non condivisi con nessun altro utente ([long tail](http://en.wikipedia.org/wiki/The_Long_Tail)).

Quindi selezionando solo le risorse condivise fa almeno 2 utenti, la parte attiva del database viene ridotta ad un decimo.

Operando su questo dataset, ho considerato l’intero insieme degli href come una previsione per l’utente, previsione valutabile ad esempio con l’uso di indici come la Precisione ed il Recupero (Precision and Recall).

Si definisce *Precisione* di una predizione:

Precisione = {numero predizioni corrette}/{numero totale predizioni}

Si definisce *Recupero* di una predizione:

Recupero = {numero predizioni corrette}/{numero totale elementi da predire}

Ad esempio, se dovendo indovinare 6 numeri, si fa una previsione di 10 numeri, di cui 3 risultano corretti, Precisione e Recupero risultano pari a:

* Precisione = 3 / 10 = 30%
* Recupero = 3 / 6 = 50%

Possiamo immaginare l’intero insieme degli href come una previsione con
Precisione minima e Recupero massimo.

Possiamo selezionare solo gli href associati agli N user vicini
all’utente candidato.

Confrontando la scelta basata su due kernel normalizzati,
con la scelta casuale degli N utenti “vicini” abbiamo le seguenti
prestazioni:

Precision and Recall

Quindi, usando il kernel prodotto scalare, abbiamo un Recupero del 40% con soli 30 utenti, mentre selezionando casualmente gli utenti, per avere lo stesso Recupero ne sono necessari 150.

Modificare il titolo del teminale da Python

mercoledì, 22 marzo 2006

Una delle particolarità di gentoo è l’attenzione ai particolari, ed una delle caratteristiche che rimpiango in altri gestori di pacchetti è l’uso intelligente della barra del titolo della finestra del terminale per comunicare lo stato di avanzamento di una lunga installazione.

Andando a scavare nei sorgenti di portage ho trovato una comoda funzione, xtermTitle(message) (nel file output.py), che modifica il titolo di xTerm (o similari) con il messaggio inviato.

Qua ho adattato (minimamente) la funzione ai miei usi:

def xtermTitle(message):
    if os.environ.has_key("TERM") and sys.stderr.isatty():
        this_term = os.environ["TERM"]
        legal_terms = ["xterm", "Eterm", "aterm", "rxvt",
                       "screen", "kterm", "gnome"]
        for term in legal_terms:
            if this_term.startswith(term):
                sys.stderr.write("\x1b]2;" + str(message) + "\x07")
                sys.stderr.flush()
                break

Funziona egregiamente, e fa rimpiangere un po’ meno l’assenza di Growl quando parto con Ubuntu.