Friday, March 18, 2011

Liste Gezerken Eleman Silmek

Python ile bir listeyi gezdigimiz anda gezdigimiz listeden eleman silersek, gezme islemi negatif sekilde etkilenmis olacaktir. Mesela soyle bir kod dusunelim:
list = [["1","1"], ["2","2"]]

for item in list:
print item
if ["1","1"] in list: list.remove(["1","1"])
Bu kod sadece ['1', '1'] sonucunu basacaktir, cunku gezme sirasinda bir eleman (['1', '1']) silinmistir, ve bu listeyi kucultmustur.

Eger silme isleminin gezme islemini etkilememesini istiyorsak, o zaman listenin bir "kopyasi" uzerinde gezinti yapmamiz lazim. Python'da kopya cikartmak icin clone, copy gibi cagrilar yerine bir operator kullaniliyor; bu operator [:] operatoru. O zaman:
list = [["1","1"], ["2","2"]]

for item in list[:]:
print item
if ["1","1"] in list: list.remove(["1","1"])
istedigimiz sonucu verecektir.

Friday, March 11, 2011

USGS Deprem Verileri - pyearthquake

Bu Python paketi ile USGS sitesine baglanarak istenen zaman araligindaki deprem verilerini almak, onlari bir harita uzerinde basmak mumkun oluyor. Daha once blog'da paylastigimiz deprem Python kodu statik, tek bir veri dosyasi icinde, pyearthquake ile en son verileri, istenen detayda almak mumkun.

Suradaki yazida guzel bilgiler var. Kurmak icin PyPi paketini indirin. Derlemeden once basemap paketini de indirin. Basemap acildiginda geos-... alt dizinine girin, ve ./configure, make, sudo make install ile bu paketi kurun, sonra bir uste cikip basemap python setup.py install yapin. Sonra ayni komutu pyearthquake icin yapabilirsiniz.

Ornek kod:
from pyearthquake import *
catalog = usgs.retrieve_catalog("M1+PAST_7DAY")
print len(catalog)
mag6_list = [event for event in catalog if float(event["Magnitude"]) >= 6.0]
print len(mag6_list)
for row in mag6_list:
print row["Eqid"], row["Magnitude"], row["Depth"],
row["Datetime"], row["Depth"], row["Region"]
usgs.plot_events(catalog)
Bu kod en son 7 gunluk, sonra Richter olceginde 6.0'dan buyuk deprem verileri alacaktir, ve sonuncu verileri bir haritada basacaktir. Istediginiz noktalara zoom yapmak icin zoom ikonuna tiklayip istenen bolgeyi haritada bir dikdortgen icine aldiginiz zaman o bolgenin detaylari gorulecektir. Ustte paylastigimiz yazida bunun Japonya icin yapildigini goruyoruz.

Saturday, March 5, 2011

String Birlestirmek

Python ile String parcalarini biraraya getirmenin birkac yolu var. Bunlardan en basiti ve ilk akla geleni + isaretini kullanmaktir:

s = "aaa" + "-" + "bbb" + "-" + "ccc"
print s

Sonuc aaa-bbb-ccc olacak. Diger bir yontem yerine gecen String (subsitution) yontemi. Bu yontem aslinda C/++ dilinde bilinen sprintf mantigina benziyor. Format belirleyen bir kisim var, bir de formatin tanimladigi yerlere yeni degerler parametre olarak gecilen degerler var, ve bu degerler ile yeni bir String olusturuluyor. Ornek:

s = "%s-%s-%s" % ("aaa","bbb","ccc")

s ekrana basildiginda ilk ornekle ayni sonucu gorecegiz. Bu kullanimin birkac avantaji var, String tipini temsil eden %s yerine diger tipler de kullanilabilir, mesela float'lari temsil eden %f. O zaman hem String birlestirme hem de tiplere gore formatlama ayni anda yapilabilecektir. Ornek:

s = "Burada bir float deger var: %f" % (3.43455)

Bu ornekte 3.43455 degeri %f yerine koyulmus olacak ve ekrana

Burada bir float deger var: 3.434550

basilacak. %f daha sofistike sekilde de kullanilabilir. Mesela:

s = "Burada bir float deger var: %3.2f" % (3.43455)

Bu formatlamaya gore float degerini noktadan sonra sadece 2 basamak olacak sekilde ayarladik. O zaman sonuc:

Burada bir float deger var: 3.43

olacaktir.