Friday, March 30, 2012

Iklim Verisi

Dunyadaki belli bolgeler icin kaydedilmis eski iklim kayitlari icin su FTP sitesine bakilabilir. Her sene bir dizin, goruldugu gibi bazi bolgeler icin 1928'e kadar giden kayitlar var, ve bu sene dizinleri altinda her kayit ayri bir bolgenin yillik iklim kayitlarini iceriyor. Bolgelerin kodlari surada listeli, mesela Istanbul'daki bolgelerden bir tanesi 170600 koduna sahip, bu kodu alip sene dizinine gidiyoruz, ve 170600-99999-2011.op.gz dosyasini indiriyoruz. Dosya icinde her satir bir gun, ve her kolon degisik bir iklim olcusu, gunun ortalama sicakligi, nem gibi.

Wednesday, March 28, 2012

Milyonluk Satirlari Birlestirmek

Veri ambari projelerinde bazen duyulur "bu birlesimin iki tarafinda milyon satirdan fazlasi var, bu birlesim (join) komutu geri gelmeyebilir". Hakikaten de iki tarafin da cok sayida veri icerdigi durumda birlesimin cok zaman alacagi durumlar vardir. Fakat sunu sormak lazim, birlesim sonrasi ne yapiyoruz?

Diyelim ki A,B uzerinde milyon satirlik veri var, A'da bir kolonu guncelleyecegiz, onun icin B'yi birlestiriyoruz, ve ek bilgiyi oradan aliyoruz. Eger A uzerinde indeks var ise, guncelleme tabii ki yavas olacaktir, bunun birlesim ile alakasi yok, cunku indeksler genel olarak erisimi hizlandirir, veri eklemeyi, guncellemeyi yavaslatir (yine bir muhendislik al/ver -trade off- durumu). Eger A ve B arasinda birebir iliski var ise, mesela bir id kolonu iki tarafta da tekil, o zaman her kullanim icin birlesim yavas olmayabilir.

Evet iliskisel teoriye (relational theory) gore A,B birlesimi once bir kartezyen kumesi yaratir, yani teorik olarak A ve B'deki tum satirlarin kombinasyonu once hazirlanir, bu ornegimizde 1 milyon x 1 milyon satir eder, sonra bu koca kume icinde birbirine uyanlar (ortak id uzerinden) elenir.

Fakat veri tabanlari, pratikte, bu tur islemleri hissederek hizlandirici onlemleri alirlar. Iki tarafta tekil olan id ile birlesim var ise, tek satirdan tek satira ziplayarak gereken veri alinabilir.

Yani sartlara iyi bakmak lazim. Veri ambar projelerinde gecici tablolar yaratmak her zaman iyi tekniktir, gereken veriler birbirine uyan id tasiyacak sekilde burada parca parca hazirlanabilir, sonra tum parcalar birlestirilerek baska bir bos, ya da indeksleri kapatilmis bir (nihai) tabloya toptan olarak eklenebilir. Bu durumda birlesimlerin hizli isledigi gorulecektir.

Friday, March 23, 2012

Pentaho

Gorsel raporlama araclari arasinda hem kullanisli, hem de acik kod temelli bir yazilim bulmak cok zor. Araclarin cogu bir SQL tabanina baglanip oradaki tablolar, kolonlari listelemekten aciz, ki bu bir raporlama aracinin (herhalde) yapmasi gereken en onemli islerden biri. Son kullanici, raporlara ihtiyac duyan kisi bu tur bir islemi surekli yapmak zorunda olmasa da raporlari hazirlayan kisi, "admin raporcu" bu ozelligin en basit sekilde islemesini isteyecektir.

Ticari urunlere gecelim: Raporlama dunyasinda en pahali skalada SAP, Peoplesoft gibi urunler var. Onun hemen altinda ise en kullanisli urunlerden biri Pentaho. Bu urunun "community version" paketi kurulus sirasinda biraz ugrastirsa da kullanilabilir durumda. Hatta oldukca iyi bir urun. Bu urunu ileride isleyecegiz.

Pentaho tabana baglanma, tablo listeleme, vs. gibi islemleri aninda yapar. Kolonlari surukle-birak (drag-drop) ile cok guzel sekilde rapor uzerine dinamik olarak konabilmesini saglar. Bu islemler yapilirken rapor sonucunun aninda sekillendigini gorebilirsiniz. Ticari urunde admin raporcu taban baglantisini tanimlarken tabandaki tablolar arasindaki baglantilari (join) tanimlayabilir, boylece kullanicilar sadece icinden secebilecekleri duz bir liste gorurler. Admin, hatta kullanicinin kendisi bile, istedigi kolonun olagan davranisini tanimlayabilir, mesela bir ID kolonunun uzerinde hep COUNT DISTINCT yapilmasini tanimlayabilirsiniz, o zaman bu kolon rapora birakildiginda tekil id'lerin kac tane oldugu gorulecektir.

Raporu PDF, CSV olarak ihrac etmek (export) son derece basit, ki bu da ciddi bir raporlama ihtiyaci.

Thursday, March 22, 2012

Regex ve Postgresql

Kolonlarin icinden belli kaliplara uyan kisimlari cekip cikartmak icin

select substring(referrer from 'http://www.(.*?).../') from [TABLO] ;

Bu sorgu referrer adli kolon icindeki http://www.google.com/vs/vs/ gibi bir kaliptan sadece www. ve .com arasindaki "google" bolumunu cekip cikartacak.

Wednesday, March 21, 2012

Tarih Boyutu

Veri ambari icin Tarih boyutundan bahsettik. Bu boyut gereken tum tarihleri gun, ay, yil, vs icin ayri kolonlarda olacak sekilde iceren bir tablodur. Bu tarih verisi tabii ki son derece statik / degismeyen bir veri olacaktir, mesela 1990'dan itibaren tum tarihleri her gunu icerecek sekilde kapsayabilir. Bizim ihtiyaclarimiz icin dakika da gerekiyordu, bu verileri uretmek icin bir Python script yazdik. Tarihi boyut haline getirmenin avantajlari o tarih aniyla alakali her veriyi ayri kolon olarak o satira yazabilmek. Mesela o tarih is gunu mu., hangi ceyrege (quarter) ait, vs gibi bir suru ozetleyici bilgi bu boyuta eklenebilir. Raporlama araclari bu kolonlari aninda kullanmaya baslayabilirler.
from datetime import datetime
from datetime import date
from datetime import timedelta

d = timedelta(minutes=1)
curr = datetime(1990, 1, 1, 0, 0)
for i in range(30 * 365 * 24 * 60 ):
quarter = int((curr.month-1)/3)+1
if curr.weekday(): weekday = "True"
else: weekday = "False"
print "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%s" % (i+1, curr.year, curr.month,
curr.day, curr.hour, curr.minute, quarter, weekday)
curr += d
Script'i isletip sonuclari > ile istediginiz cikti dosyasina yonlendirebilirsiniz.

PostgreSql

Bir suredir PostgreSql tabani ile calismiyorduk, is icin gerekli oldu, kuvvetli bir taban. Ubuntu 11'de apt-get ile gelen en son versiyon 9.1 Bu taban MySql gibi acik kaynak, ve anlatildigina gore amaclari tamamen Oracle'in yerine gecebilmek. O yuzden komutlari Oracle komutlarina birebir uyumlu yaratiyorlar. Kurmak icin

sudo apt-get install postgresql

Faydali bazi komutlar surada bulunabilir. PG postgres adli bir Unix kullanicisi icin kurulacak o yuzden shell bazli tum PG komutlari basinda sudo -u postgres gerekli. Paket kurulunca bilgisayariniz baslayinca otomatik olarak baslamak uzere ayarli olacak, acip, kapatmak icin

sudo service postgresql [komut]

ki [komut] stop, start, restart olabilir.

Bazi tiyolar: Postgres'den veri cekip veri yuklemenin en hizli yollarindan biri CSV temelli. Veri almak icin



psql [taban ismi]  -h [makina] -p [port] -U [kullanici] -c "COPY (SELECT * from [tablo] where [sart]) TO stdout " > [csv dosya ismi]



Ya da sql dosyasi icinde

copy( .. SELECT .. ) to '/tmp/out' with csv header

gibi bir kullanim olabilir. Dikkat: bu durumda komut postgres kullanicisi tarafindan isletilecektir, bu kullanicinin sizin $HOME dizininize erisimi olmayabilir, o yuzden ustte /tmp/ kullanildi. Uzaktaki bir makina uzerinde SQL komut satirinda

copy( .. SELECT .. ) TO STDOUT with CSV HEADER > /tmp/out

ta kullanilabilir.  Ama en iyisi herhalde


psql [taban]  -h [makina] -p [port] -U [kullanici] -c "COPY (`cat komut.sql`) TO stdout with delimiter ',' CSV HEADER "  > /tmp/out

Bu komut uzaktaki bir taban uzerinde bir SQL dosyasi isletilir ve ciktiyi CSV olarak kaydeder. Parametrize edilmis halde biz run_csv.sh adli bir dosya icinde

psql taban  -h localhost -p 5432 -U postgres  -c "COPY (`cat $1`) TO stdout with delimiter ',' CSV HEADER "

kullaniriz, ve run_csv.sh dosya.sql > out

seklinde bunu kullanabiliriz.

Dosya yuklemek icin

psql [taban] -c "COPY [tablo] FROM '[dosya ismi]'";

Uzak tabanlara baglanmak: Eger -h ile uzaktaki (remote) tabanlarda sIk olarak psql komutlari veriyorsaniz, ve habire sifre sorulmasindan kurtulmak istiyorsaniz, .pgpass teknigini kullanabilirsiniz. Bu $HOME dizininizde olmasi gereken bir dosyadir, ve

makina:port:db:kullanici:sifre

formatindadir. Dosyanin chmod 0600 yapilmasi gerekiyor. Not: eger psql komutunu sudo -u postgres ile isletiyorsaniz (ki uzaktaki bir makina icin gerekli degil) o zaman .pgpass dosyasinin sizin makinanizdaki postgres kullanicisinin ana dizininde olmasi gerekiyor, bizim makinamizda bu /var/lib/postgres diye bir yerdeydi (su - postgres ile o kullaniciya girerek kontrol edebilirsiniz). Tabii ki dosya chown ile postgres'e ait yapilmali.

Ben PG ile calisirken cogunlukla run.sh adli bir script'i ayni dizinde tutarim. Bunun icinde mesela

psql dellstore2 -h localhost -p 5432 -U postgres < $1

gibi bir satir olabilir, taban onceden tanimlanmistir, cunku genellikle gelistirme sirasinda tek bir taban ile calisirim, ve gelistirirken,

sh run.sh test.sql

gibi komutlar isletirim. Boylece ustteki sql dosyasi direk belirtilen taban uzerinde isletilir. .pgpass icinde de

localhost:5432:dellstore2:postgres:[sifre]

ibaresi vardir.

Eger hstore adli bir veri tipini kullanmak istiyorsaniz,

sudo -u postgres psql [taban]

ile girdikten sonra

CREATE EXTENSION hstore;

komutunu kullanabilirsiniz.

Eger yeni Unix kullanicilarina Postgres uzerinde admin haklari vermek istiyorsaniz (ki bu eger admin'seniz kisisel hesabiniz icin iyi olur, yoksa pg_dump komutu bile kullanilamiyor), sudo -u postgres psql ile girdikten sonra

CREATE ROLE unix_kullanici_isminiz PASSWORD 'bir sifre' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;

ile kullanicinizi Postgres uzerinde super kullanici yapabilirsiniz.

Silmek

Postgresql'i apt-get remove ile silmek ise yaramayabilir (hala PG sureclerini isler gorduk, silme isleminden sonra bile). Daha kuvvetli bir silme islemi icin

sudo apt-get --purge remove postgresql\*

Dis dunyaya PG baglantisini 5432 portunu acmak istiyorsak, /etc/postgresql/9.1/main/postgresql.conf icinde

listen_addresses = '*'

tanimlanmis olmali.

GUI

Sema, ana / yabanci anahtar, tablolar hakkinda detayli bilgiler, SQL isletmek icin faydali bir GUI, Squirrel.

squirrel-sql.sourceforge.net

Thursday, March 15, 2012

Bulut

Sirketler bulut servislerini daha sIk kullanir olmuslar, mevcut yazilim sirketimde email, takvim, vs gibi isler Google Apps for Business'a havale edilmis durumda, kod idaresi ise tamamen Github uzerinde. Eger mevcut bir Github kullanici isminiz var ise (ki cogu yazilimcinin var), bir yazilim sirketine katilmak demek o sirketteki bir baska Github kullanicisinin size sirketin kod deposuna eklemesinden ibaret!

Tuesday, March 13, 2012

Almanya'da Calisma Vizesi - Gecici

Eger bir Alman sirketinden is teklifi aldiysaniz, vize icin yapmaniz gerekenler surada:

Ana site istanbul.diplo.de. Randevu icin numara 0212-340-4900. Ama bu numarayi aramadan once Is Bankasi ya da Yapi Kredi bankasina gidip herhangi bir vezneden Istanbul Alman Konsoloslugunda islem icin para yatirin, bedel 23 lira (arti 3 lira islem = 26 lira). Size verilecek dekontun alt kisimda bir numara var, bu numara telefonda sizden istenecek. Telefon gorusmesinde randevu icin gun belirlenecek, ama ondan once tabii tum gerekli dokumanlara sahip olup olmadiginizdan emin olun. Gerekli olanlar,
1. [ ] Müracaat şahsen yapılmak zorunda

2. [ ] Vize İşlem ücreti, Reşit olanlar için 60 Euro, Reşit olmayanlar için 30 Euro
Euro ve tam olarak getirilmesi gerekmektedir

3. [ ] 3 adet Biometrik vesikalık resim
Resmin özelliği;
* Son 6 ayda çekilip en son görünüşü yansıtmalı
* 45 X 35 mm ebatlarında olmalı.
* Kenarları çerçevesiz olması gerekmekte
* Yüzü önden yansıtmalı, başınız açık ve gözlerin tümü gözükmeli

4. [ ] 10 yıldan eski olmayan en az 12 ay geçerli Pasaport: Pasaportta vize basılması için VİZELER sayfalarında en az 2 boş sayfa olması gerekiyor.

5. [ ] Eğer Çocuk var ise Başvuru formundaki çocuklar kısmı eksiksiz olarak doldurulmalı. Çocuklar Türkiyede kalsalar dahi eksiksiz olarak doldurulmalı.

6. [ ] 2 adet İkamet Müsadesi vize başvuru formu
Almanca olarak eksikiz, okunaklı bir biçimde doldurulmuş ve başvuru sahibinin kendi elyazısı ile imzalanmış 2 adet Ikamet Müsadesi Başvuru Formu. Forma başvurunuzdan önce vize bölümünün girişinden ücretsiz veya http://www.almanya.org.tr [islemiyor] veya http://www.iks.com sayfasından ulaşabilirsiniz.

7. [ ] Almanyadaki firma ile yapılan, İş Sözleşmesi aslı ve 2 fotokopisi
Sözleşmede yer alması gereken bilgiler:
- Sözleşme süresi
- Aylık maaş
- Yapılacak işle ilgili ayrımtılı bilgi

8. [ ] Türkiyedeki firma ile, İş Sözleşmesi aslı ve 2 fotokopisi, Tercümenin aslı ve fotokopisi. Başvuru sahibinin, Türkiye deki mesleki pozisyonu ile ilgili evraklarının aslı ve ikişer fotokopisi.İş sözleşmesi ve başvuranın, başvuru anına kadar yaptığı görevleri, faatliyetleri. Yeminli tercüman tarafından Almancaya tercüme edilmiş olmalı.Tercümelerinde aslı ve ikişer fotokopileri sunulmalı. Başvuru sahibi önceden Türkiyede calışmamış ise mesleki pozisyonu ile ilgili evraklar istenmiyor.Bu durumda son okul diplomasını sunabilirler.Yeminli tercüman tarafından Almancaya tercüme edilmiş olmalı. Tercümelerinde aslı ve ikişer fotokopileri sunulmalı.

9. [ ] Türkiyedeki mesleki durum hakkında belgelerin aslı ve 2 fotokopisi,Tercüme aslı ve 2 fotokopisi. Yeminli tercümandan almancaya tercümesi aslı ve 2 fotokopisi

10. [ ] Almanyadaki Firmanın,Ticaret Sanayi Odası Kaydı veya buna muadil bir belgenin aslı ve iki fotokopisi

11. [ ] Almanyadaki işverenin teyid yazısı aslı ve 2 fotokopisi

12. [ ] Var ise eski Pasaportlar sunulmalı

Uyarı :
Lütfen randevu saatinizden 15 dk önce konsolosluga geliniz. Vize gişesine başvurmadan vize bölümü iç avlusunda bulunan UPS Servisine müracaat ediniz ve pasaportunuzun iadesi ile ilgili tüm bilgileri oradan ediniz, UPS hizmet bedeli 13 ile 18 YTL arasındadır ve nakit ödenmek zorundadır. Başvuruya gittiğinizde yanınızda cep tel. büyük çanta, bilgisayar, eşyalar getirmeyiniz, bunları emanet edebileceğiniz bir yer bulunmamaktadır. Size belirtmiş olduğumuz tüm genel evrakları eksiksiz olarak yanınızda getirmeniz gerekir ancak başvuruya gittiğinizde gişedeki konsolosluk görevlisi özel durumlardan dolayı ek evrak talebinde bulunabilir.
Başvuru formuna başvurunuzdan önce vize bölümünün girişinden ücretsiz veya http://www.almanya.org.tr [islemiyor] veya http://www.iks.com sayfasından ulaşabilirsiniz. Randevudan önce form mutlaka doldurulmuş ve imzalanmış olmalı.
Vizeyi teslim aldığınızda vize üstündeki bilgilerin, özellikle vizenin geçerlilik tarihleri ve ad - soyad bilgilerin doğruluğunu hemen kontrol ediniz. Şayet hatalar mevcut ise, derhal vize bölümüne başvurmalısınız.
Bu istenenlerden, mesela yeminli tercumana benim ihtiyacim olmadi. Egitim, is tecrubemi ispatlayan tum belgeler Ingilizce idi, onlarin metninin bazen tamamini, bazen bir kismini Google Translate servisinden Almanca'ya tercume ettirdim, ve o tercumeyi belge kopyasi ile birlikte zimbaladim. Tecrubesi Turkiye'deki sirketlerden olanlar Ingilizce olarak tavsiye, vs. belgesi isteyebilirler belki. Turkiye universitelerinin diplomalari uzerinde de Ingilizce bolumu var yanilmiyorsam, o da ayni sekilde.

Size is teklifi yapan Alman sirket resmi is teklifin bir PDF olarak gonderebilir, hatta bu iyi olur, siz bu teklif uzerine dijital olarak imzanizi koyabilirsiniz (ben Python bazi bir kod ile bunu yaptim, GIMP ile de yapilabilir), sonra "imzali" belgeyi geri gonderirsiniz, mustakbel sirketiniz kendi imzasini ekler (o da ayni sekilde) ve final dokumani size gonderir. Bosuna asil belgeyi normal posta ile gondermeye gerek yok, zaten cok zaman alir. Ben bu nihai PDF'i iki kere yazicidan basip goturdum, kabul edildi.

60 Euro nakit olarak goturulmeli.

Vize basvurusu icin gereken iki formu PDF olarak alttaki zip icinde bulabilirsiniz. Bu belgeleri otomatik olarak doldurabilecek bir programdan surada bahsettik, formfill.py icin gereken loc ve fill dosyalari da bu zip icinde. Siz sadece fill dosyasindaki detaylari kendinize gore ayarlayacaksiniz, gerisini zaten mevcut loc dosyasina gore formfill halledecek. Ozellikle 54. Madde icin gerekli belge sanki herkesden ozellikle saklanan (!) bir form, konsolosluk sitesindeki de yanlis dosya zaten. Bizim paylastigimizi kullanin.

Indir

Size is teklifi yapan sirketin "Ticaret Sanayi Odası Kaydı" isteniyor, yani sirketin resmi bir sirket oldugunu gosteren bir seyler.. Bana "Handelsreg Auszug" isimli ve "Wiedergabe des aktuellen Registerinhalts" diye baslayan bir dokuman (yine PDF olarak) gonderildi, bu kabul oldu.

Habire "iki kopya", "iki kopya" sozleri dikkatinizi cekmistir; ozetle her seyden iki kopya yapin.

Randevu gunu

Her nedense calisma vizesi "aile birlesimi" kategorisi altina alinmis, o yuzden tum isleriniz bu baslik / kisiler / dugmeler ile olacak. Neyse, girer girmez once sag orta kisimdaki pasaport postalama servisine gidin, buradan bir posta paketi satin almaniz lazim, 15 lira civari idi galiba, bu bos posta paketini basvuruda isteyecekler, cunku pasaportunuzun vizeli halini size sonradan boyle gonderecekler. Bu paketi alinca, girise gore en sonda sagdaki belge duzenleyici arkadasa gitmeniz lazim, ona yakin bir yerlerde oturup isminizin okunmasini bekleyin. Sonra belgelerinizi ona verin, o belgeleri tasnif edip, eksik varsa size soyler. Bu yaziyi okudugunuz icin sizde tabii ki eksik olmayacak (!) ama olursa, unutulmus bir kopya durumu olursa mesela, bu arkadas hemen orada kopya yapabiliyor, ama parasiyla tabii, yaninizda bozuk para olsun.

Tasnif bitince, girise gore orta solda olan makineden gerekli dugmeyi basip sira numaranizi alin. Bu numara ile en sondaki siralarda beklemeye baslayabilirsiniz, bu sira artik nihai vize gorusmesi. Sira okununca iceri girin, bu kadar. Vize gorusmesinde belgeler kontrol edilecek, detayli bilgi gerekiyorsa bazi sorular sorulacak, problem degil.

Vize icin ne kadar beklemek gerekir? Degisebiliyor. Eger gereginden fazla uzun surerse Almanya'daki sirketiniz gerekli resmi daireyi arayip durumu kontrol edebilir, onlari sIkIstirabilir. ups.com.tr sitesinden bu arada paketinizin durumunu kontrol edebilirsiniz.

Saturday, March 3, 2012

Skillicorn Veri Madenciligi Kitabi

David Skillicorn'un Understanding Complex Datasets with Matrix Decomposition kitabinin kullandigi veriler, Matlab, C, Python kodlarini biraraya koymaya basladik, alttaki zip dosyasinda bulunabilir. Kitap ozellikle matris ayristirma teknigi kullanarak veri madenciligi konusunu isliyor, SVD, NMF, ICA gibi teknikler anlatiliyor.

Link