[Python] Algoritmo in CSV

2010-09-02 Per discussione Vittorio Zuccala'
Buongiorno,
chiedo consiglio su un algoritmo da usare che sia veloce.
Anche solo in meta-codice.

Problema:
- carico un CSV con 200 colonne e 2 milioni di righe
- voglio trovare la lunghezza maggiore per ogni campo

Meta-codice
* apri file csv
* crea un oggetto csv_reader
* crea un array lunghezzamax
* leggi riga per riga
* fai lo split dei campi e metti nell'array campi
* per ogni campo guarda la lunghezza: se lunghezza(campi[i])  lunghezza[i]
allora lunghezza[i]=lunghezza(campi[i])

Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la cosa
non mi piace molto.
Qualcuno ha un consiglio per ottimizzare?

Grazie in anticipo.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Algoritmo in CSV

2010-09-02 Per discussione Daniele Varrazzo
On Thu, 2 Sep 2010 14:41:10 +0200, Vittorio Zuccala'
vittorio.zucc...@gmail.com wrote:
 Buongiorno,
 chiedo consiglio su un algoritmo da usare che sia veloce.
 Anche solo in meta-codice.
 
 Problema:
 - carico un CSV con 200 colonne e 2 milioni di righe
 - voglio trovare la lunghezza maggiore per ogni campo

 Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la
 cosa
 non mi piace molto.

La definizione del tuo problema richiede questo. Puoi trovare un idioma
per abbassare qualche costante moltiplicativa, ma devi sempre fare 200*2M
di confronti.

 Qualcuno ha un consiglio per ottimizzare?

Ridefinisci il problema. Vedi se puoi lavorare con un'approssimazione del
valore. Analizza solo i primi 1K record o se il file è seekabile pesca a
caso qualche centinaio di record.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Algoritmo in CSV

2010-09-02 Per discussione Pietro Battiston
Il giorno gio, 02/09/2010 alle 14.41 +0200, Vittorio Zuccala' ha
scritto:
 Buongiorno,
 chiedo consiglio su un algoritmo da usare che sia veloce.
 Anche solo in meta-codice.
 
 Problema:
 - carico un CSV con 200 colonne e 2 milioni di righe
 - voglio trovare la lunghezza maggiore per ogni campo
 
 Meta-codice
 * apri file csv
 * crea un oggetto csv_reader
 * crea un array lunghezzamax
 * leggi riga per riga
 * fai lo split dei campi e metti nell'array campi
 * per ogni campo guarda la lunghezza: se lunghezza(campi[i]) 
 lunghezza[i] allora lunghezza[i]=lunghezza(campi[i]) 
 
 Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e
 la cosa non mi piace molto.
 Qualcuno ha un consiglio per ottimizzare?

Come algoritmo in sé fatico a vedere qualcosa di migliore, per quel che
riguarda il tempo (come spazio, potresti volere utilizzare, invece
dell'array campi, la funzione riga.index(,) per evitare di
memorizzarteli tutti).

Se però per ottimizzare intendi anche spostare qualcosa da funzioni in
Python al C sottostante in C, forse una leggera ottimizzazione in tempo
potrebbe consistere nel

* creare una lista lunghezze = [[]]*200

all'inizio, e sdoppiare l'ultimo (tuo) punto in:

* per ogni campo, lunghezze[i].append( len(campi[i]) )
* ogni tot ripetizioni, fare
  for i in xrange(num_campi):
  lunghezze[i].append(lunghezzamax[i])
  lunghezzamax[i] = max( lunghezze[i] )
  lunghezze[i] = []

addirittura, se dello spazio occupato in memoria non te ne frega niente
(e se le perfomance di cpython con le liste non si degradano al loro
crescere) tot potrebbe valere 2.000.000.

Ma non sarei pronto a scommettere che migliori davvero. Cioè: se succede
forse è più che altro per caratteristiche di ottimizzabilità a priori
del codice da parte dell'interprete, caratteristiche di cui non so nulla
(se provi facci sapere, sono curioso).

ciao

Pietro

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Algoritmo in CSV

2010-09-02 Per discussione Nicola Larosa
Vittorio Zuccala' wrote:
 Problema:
 - carico un CSV con 200 colonne e 2 milioni di righe
 - voglio trovare la lunghezza maggiore per ogni campo
 [snip]
 Qualcuno ha un consiglio per ottimizzare?

Butta tutto in un database e fai fare il lavoro sporco a lui. :-)

-- 
Nicola Larosa - http://www.tekNico.net/

News networks giving a greater voice to viewers because the social
web is so popular are like a chef on the Titanic who, seeing the
looming iceberg and fleeing customers, figures ice is the future
and starts making snow cones. - Randall Munroe, xkcd, June 2010
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Algoritmo in CSV

2010-09-02 Per discussione Pietro Battiston
Il giorno gio, 02/09/2010 alle 15.22 +0200, Daniele Varrazzo ha scritto:
 On Thu, 2 Sep 2010 14:41:10 +0200, Vittorio Zuccala'
 vittorio.zucc...@gmail.com wrote:
  Buongiorno,
  chiedo consiglio su un algoritmo da usare che sia veloce.
  Anche solo in meta-codice.
  
  Problema:
  - carico un CSV con 200 colonne e 2 milioni di righe
  - voglio trovare la lunghezza maggiore per ogni campo
 
  Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e la
  cosa
  non mi piace molto.
 
 La definizione del tuo problema richiede questo. Puoi trovare un idioma
 per abbassare qualche costante moltiplicativa, ma devi sempre fare 200*2M
 di confronti.

... e ora che ci penso: il costo degli IF non è irrilevante rispetto al
costo del calcolare la lunghezza dei campi (che nella tua formulazione è
nascosto nel costo di creare gli array campi)?!

ciao

Pietro

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python