szarak@jabster.pl


Python z matplotlib jako narzędzie naukowe – czyli po co utrudniać sobie życie?

Wpis na 1. poziomie, wysłany 22 listopada 2007 o 14:38:25

Jeśli nie interesuje Cie tło sprawy, pomiń następne dwa akapity :)
Stanąłem przed następującym faktem: muszę napisać program zajmujący się prostymi obliczeniami statystycznymi. Wyznaczanie trendów itp. itd. Musze to zrobić „na wczoraj” :)


Problemy: nie wiedziałem, że w ogóle będę się zajmował taką tematyką. Przedmiot na którym to piszę, miał być czymś zupełnie innym – miał skupiać się na programowaniu obiektowym, zarządzaniem projektem i planowaniem. Jak się okazało, w trakcie semestru zmienił mi się prowadzący, na panią, która o programowaniu pojęcie ma średnie. Owszem, teorii trochę, ale nie interesują jej bebechy naszych aplikacji, możemy sobie pisać w czym chcemy i jak chcemy. Skupić się trzeba jednak na rozwiązaniu problemu statystycznego (wcześniej każdy pisał co innego – od gier po aplikacje użytkowe, symulatory…). Olałem w ogóle sprawę ale wreszcie trzeba było do tego siąść. Trzeba było działać szybko, więc wymyśliłem sobie, że zamiast bawić się w c++ i qt (z czego to pierwsze jest jak dla mnie ok, to drugie mniej), to zrobie aplikacje w czymś całkiem nowym, może łatwiejszym.


Wybór padł na język Python. Dlaczego? Bo denerwują mnie aplikacje w nim pisane (jakoś zasobożerne mi się wydają, może trochę ociężałe), ale jednak z jakiegoś powodu sporo ludzi ciągle w tym pisze. Czyli w skrócie ciekawość.


Co się okazuje? W parę godzin nauczyłem się tyle, że byłem w stanie napisać program parsujący plik xml i wyświetlający dane w postaci wykresu z interfejsem w gtk+ – z czego połowe tego czasu spędziłem na szukaniu beznadziejnie głupiego błedu, o czym później.


Co do języka: jest dość prosty przy pierwszym kontakcie. Pisze się szybko, łatwo a co najważniejsze przyjemnie. Obiektowością przesiąknięty całkowicie, a korzysta się z niej wręcz intuicyjnie. Trochę inna składnia niż mi znana, ale łatwa do przyswojenia. Wcięcia w kodzie zamiast klamer … uh, z tym ciężko, ale prawdę mówiąc teraz na mnie wymusza to czystość w kodzie i już nie narzekam. A do tego łatwo dostępna pomoc/podręczniki, np. Dive into Python.


Zachęca również spora ilość bibliotek, które prawdopodobnie pokryją 70% zadań, które przed Tobą czekają. Do parsowania xml wybrałem minidom. Z jego pomocą i tutorialem zczytanie pliku zajęło chwilkę i zajmuje mniej niż 15 linii kodu. Interfejs graficzny stworzyłem za pomocą pygtk. Jego obsługa jest ładnie opisana w tutorialach, jak znasz obsługe sygnałów z jakiegoś innego języka/biblioteki to załapiesz w mig. No to teraz przyszedł czas na wizualizację wyników, gdzie z pomocą przyszła biblioteka matplotlib.


Matplotlib w Pythonie obsługiwany jest przez moduł „pylab.py”. Narysowanie prostego wykresu sprowadza się np. do:
from pylab import *
plot([1,2,3,4,5,4,3,2,1])
show()

Co oznacza załadowanie modułu pylab (i wczytanie dostępnych funkcji do standardowej przestrzeni nazw – tak sobie to wytłumaczyłem, przekładając to na rozumowanie z c++. Można jeszcze „zainkludować” moduł poprzez import pylab, ale wtedy z dostępnych funkcji trzeba korzystać poprzez pylab.show() itp.. Pythonowców z góry przepraszam za niefachowość i nieścisłość. Wszystkiego uczyłem się na wariata, by jak najszybciej pokazać wynik pracy, a nie poprawnie zrozumieć język ;p). Druga linia kreśli wykres. Wygląd domyślny, oś x domyślna (kolejne liczby naturalne), wartości na osi y podane są w nawiasie w postaci tablicy – oznacza się ją przez nawiasy kwadratowe. Show() wyświetli nam wykres na ekranie w postaci okna gtk z układem współrzędnych dostosowanym do danych, możliwością powiększania i przesuwania wykresu, historią zmian widoku, a nawet zapisem do pliku. Wszystko w 3 liniach. Szczegółów nie piszę, wszystko jest ładnie opisane na stronie matplotliba, którą podałem. Po polsku 3 słowa na ten temat znajdziecie np.tutaj.

Nie powiem, pierwszy kontakt z pythonem i matplotlibem bardzo pozytywny. Pani prowadząca cieszyła się, że widzi ładny wykres, ja się cieszyłem, bo poświęciłem temu minimalną ilość czasu i poznałem coś nowego. Mam nadzieje, że moja przyjaźn z tym językiem szybko nie zniknie.


Komentarze do notki Python z matplotlib jako narzędzie naukowe – czyli po co utrudniać sobie życie?

  1. 22 listopada 2007 o 14:42:05

    nie lepiej jest wyniki do jakiegoś 'plota' wysłać i narysować co tam się chce?

  2. 22 listopada 2007 o 14:44:47

    ależ to jest jak mówisz. Wszystko czytam sobie w pythonie (xml), a potem wyniki wysylam do plota, który to kreśli.

Dodaj komentarz: