[Python-Leipzig] Pandas unter 7 Minuten!

Stefan Schwarzer sschwarzer at sschwarzer.net
Fr Aug 14 06:06:36 UTC 2015


Hi,

On 2015-08-13 23:31, Mike Müller wrote:
> wir versprochen hier die Fortsetzung vom Dienstag.

Mike, kannst du vielleicht noch für die Abwesenden ;-) in
ein paar Sätzen das Problem beschreiben? Es muss ja (vermute
ich) nicht im Detail sein.

> Die Pandas-Version ist mit Abstand die schnellste und kann auch helfen
> Speicher zu sparen.

Was waren die anderen Ansätze und wie sah es da mit den
Zeiten und dem Speicher aus?

> Ich habe die Input-Dateien immer wieder gelesen, so dass
> diese wohl vom Betriebssystem im Cache gehalten werden.

Kommt drauf an, wie viel RAM der Rechner hat. Wenn die
Datenstrukturen im Python-Prozess groß genug sind,
"verdrängen" sie den Cache. :-)

> Beim Einlesen aller Gebiete auf einmal braucht das Programm ca. 6,5 Minuten
> bei etwas über 4 GB Speichernutzung. Bei einer Batch-Größe von 4.000, d.h.
> bei den etwas über 16.000 Gebieten 5 mal teilweise lesen, steigt die Zeit
> auf ca. 7,5 Minuten. Das Programm braucht dann aber nur etwas mehr als
> 1 GB Speicher.

6,5 bis 7,5 fürs Einlesen ... Wie war die gesamte Laufzeit?

> Hier der relevante Code:
> [...]
>
> @Arnold: Ob eine In-PostgreSQL-Importieren-Variante noch schneller sein
> könnte. ;)

Vor allem, wenn man nach dem Einlesen der Daten in die
Datenbank noch mehr Rechnungen anstellen will, könnte sich
das durchaus lohnen.

Was mir noch dazu einfällt (und in Klammern, warum):

SQLite (sicher langsamer und weniger Features als
PostgreSQL, aber weniger Aufwand für die Inbetriebnahme ;-) )

Julia (beliebte Hilfssprache bei SciPy-Nutzern, wie Python
ziemlich high-level; http://julialang.org/ )

PyPy (schnelleres Python, aber dafür vermutlich keine
Nutzung diverser C-Bibliotheken möglich)

Fortran 95 oder besser (mutmaßlich sehr gut in Numerik, aber
soweit ich das Problem verstehe, macht das Einlesen der
Daten einen großen Anteil der Laufzeit aus)

Java (weit verbreitete Universalsprache, soll durch den JIT
auch sehr schnell sein)

C (als mutmaßlich "schnelle Sprache", aber C tut sich
wahrscheinlich niemand an ;-) )

Mit Fortran kenne ich mich besser aus als mit Julia, aber
die Implementierung in Julia würde mich mehr interessieren.

Letztlich wäre das aber ein "unfairer" Vergleich, da ich mit
Python und dessen Optimierungsmöglichkeiten weitaus
vertrauter bin als mit denen in Julia. In Julia habe ich
bisher erst ein sehr kleines Programm geschrieben.

Viele Grüße
Stefan

> Am 12.08.15 um 08:00 schrieb Mike Müller:
>> Hallo zusammen,
>>
>> nach der doch sehr anregenden Diskussion bei unserem Treffen gestern, habe
>> ich mich an eine Pandas-Version gemacht. Bei etwas über 4 GB Speicherbedarf
>> war die Sache in weniger als 7 Minuten erledigt. Das ist nochmal dreimal
>> schneller als meine NumPy-Variante mit den Python-Schleifen. Ich werde auch
>> noch eine Pandas-Version mit stückweiser Verarbeitung bauen. Ich schicke die
>> Quelltexte dann hier auf die Liste.
>>
>> Viele Grüße
>> Mike
>>
>> _______________________________________________
>> Python-Leipzig mailing list
>> Python-Leipzig at python.net
>> http://starship.python.net/mailman/listinfo/python-leipzig
>>
>> Website der Leipzig Python User Group:
>> http://www.python-academy.de/User-Group/
>>
>
>
> _______________________________________________
> Python-Leipzig mailing list
> Python-Leipzig at python.net
> http://starship.python.net/mailman/listinfo/python-leipzig
>
> Website der Leipzig Python User Group:
> http://www.python-academy.de/User-Group/
>



Mehr Informationen über die Mailingliste Python-Leipzig