Friday, November 29, 2013

Log Lineer Modeller ve Kosulsal Rasgele Alanlar (Log Linear Models and Conditional Random Fields -CRF-)

Saturday, November 23, 2013

Sayfadan Video Indirme, videolectures.net, rtmpdump

Komut satiri araclari kullanarak mesela videolectures.net gibi bir siteden nasil video indiririz? Once rtmpdump kurmak lazim,

sudo apt-get install rtmpdump

Bu aracin hangi adrese isaret edecegini bilmesi lazim. Fakat o gereken adres web adresi degil, o web sayfasindan sonra arka planda baglanilan baska bir adres. Bu adresi bulmak icin kendi network iletisiminizi "takibe" alabilirsiniz, su komutu isletin,

sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT && rtmpsrv

Bu bir servis baslatacak ve bekleyecek. Simdi web sayfasina girin, mesela

http://videolectures.net/cikm08_elkan_llmacrf

Sayfaya girilip video baslayinca arkada isleyen servisin ciktisina bakin. Buradaki cikti video indirmek icin gerekli rtmpdump komutunu listelemis olacaktir.

Servisi Ctrl-C ile durdurun ve rtmpdump isleminizi baslatin.

Eger indirme sirasinda baglanti koparsa, tekrar kalinan yerden baslatmak icin komuta -e secenegi eklenebilir.

Not: Eger rtmpdump, hemen iptables ardindan baslamiyorsa, o zaman makinanizi reboot edip tekrar deneyebilirsiniz.

Not: videolectures.net gibi siteler mesela bir dersi parca parca verebiliyor, bu durumda ana adrese, mesela ikinci parca icin /video/2 ekini yapmak gerekiyor. Mesela

http://videolectures.net/cikm08_elkan_llmacrf/video/2

adresi icin su rtmpdump cikti

rtmpdump \
-r "rtmp://hydro2.videolectures.net:1935/vod" \
-a "vod" \
-f "LNX 11,2,202,327" \
-W "http://media.videolectures.net/rel.1383672220/common/swf/PlayerViidea.swf" \
-p "http://videolectures.net" \
-y "mp4:v00e/a3/unhk5n6cclzlkipr25rxyh5i2manetf7.mp4" \
-o bir_dosya_ismi.flv


Not: rtmpdump bazen bazi bolumleri tekrar tekrar kayit edebiliyor. Mesela 1:00 ve 1:05 arasi, 1:05 ve 1:10 arasinda tekrarlanabiliyor. Cozum: video'yu goruntulemek icin VLC kullanirsaniz bu program otomatik olarak tekrarlanan bolumleri atlamayi biliyor.

Kaynak

Tuesday, November 19, 2013

Veri Bilimi, Ceviklik, Anlik Veri Ambari

Suradaki yazidan devam edelim:

Yeni yaklasima gore veri ambari semasinin onceden yaratilmadigini, Hadoop merkezli teknolojiler ile sonradan, ihtiyaca gore ortaya cikarildigini soyledik. Bunu yapiyoruz cunku yapabiliyoruz, elimizde devasa bir analiz kapasitesi var, ayrica yapisiz, daginik, bol miktarda ve (basta) kirli veri setleri var.

Bu baglamda bazi ticari teknolojilerden bahsettik. Fakat bahsedilen teknolojilerin onemli bir problemi, ticari olmalaridir. Altyapi dunyasinda acikca gorduk ki acik yazilim daha tercih edilen bir yaklasim - programcilar bir projeden digerine, bir isten digerine yanlarinda rahatca tasiyabilecekleri teknolojileri tercih ediyorlar, ayrica acik urunlerin etrafinda daha rahat bir kullanici agi olusabiliyor, bu sorularin daha cabuk cevaplanmasi demek olabilir, daha iyi kullanici belgelendirmesi, hatalarin daha hizli tamiri demek olabilir.. "Satis temsilcisi", "deneme amacli yazilim indirme" gibi islerle ugrasmaya gerek kalmaz (Platfora sirketi mesela bize bu sekilde bir yazilim saglayamadi).

Peki eger acik yazilim urunlerini merkeze koyarsak, yeni veri bilim isi neye benzer? Bir soru daha: Bir veri bilimci (data scientist) gunluk baglamda nasil calisir? Nelere odaklidir? Her gun ustune biraz daha ekledigi is birimi, obegi hangi tur cabanin etrafinda doner?

Bu sorulari cevaplamaya calisan bir kitap: Cevik Veri Bilimi (Agile Data Science). 

 
Kitabin yaklasimina gore kullanilan araclar Hadoop etrafinda doner.

Tum veri HDFS (ya da Amazon S3'e) gonderilir [1]. Oradan Pig ile transform edilip, temizlenip, MongoDB'ye "yayinlama" amacli koyulur [2]. Ayni anda bir "veri Web arayuzu" yazilir, ve arayuz veriyi, gosterebildigi sekilde, yavas yavas sunmaya baslar. Ilk basta bu tek, atomik kayit bazli olabilir (kullanici verisi mesela), daha sonra toparlanarak ozetleme amacli ciktilar sunulur, bol bol, akla gelen her turlu grafik eklenir. Bu gelistirme eforu bir surec haline gelir, veri gonder /  geri cek / temizle / yayinla. Bu sirada sirkette herkes bu arayuzu kullanmaktadir, sirket lideri, programcilar, digerleri, o arayuz etrafinda / sayesinde bir veri anlayisi, veri bakisi olusur, ve yavas yavas kesifler ortaya cikmaya baslar.

Yapay ogrenim (machine learning) firsatlari bu noktada ortaya cikmaya baslayabilir, bunlar kodlaninca onlarin ciktisi da MongoDB'ye koyulur, yani "yayinlanir". MongoDB'de olan rahat bir sekilde hem veri arayuzune, hem de ana programa alinabilir (kullanicilarini analiz ettigimiz program yani), boylece cember tamamlanmis olur. Bu surec devam ettirilir.

Platfora, Datameer, Hunk (Splunk) gibi urunler genel anlayis olarak dogru yoldalar, yani veri ambarini dinamik olarak yaratmak, "siz bize Hadoop kumenizi gosterin, biz ona baglanip size guzel raporlar sunariz" bakisinda bir avantaj var. Sadece bunu bahsedilen urunler uzerinden yapmak, onlari her sirketin kendi amaclari icin kullanabilmek kulfetli hatta yetersiz kalabilir. Bu acidan Cevik Veri Bilimi veri bilimciye kendi araclarini kullanmasini ogutler, ve surekli bir GUI gelistirerek rutin bir sekilde veride gorulen, kesfedilen sonuclari arka arkaya yayinlanmasini tavsiye eder. Kitabin arac demeti Hadoop, Pig, Flask, MongoDB, Amazon Elastic Map/Reduce, dotCloud urunleri / servisleridir.

Rutin bir sekilde veri yayinlamak, elde avucta ne varsa onu hemen gostermek surekli buyuyen, gun gectikce daha cok islev edinen bir uygulamanin insasi, veri bilimci baglaminda "bu adam ne uzerinde calisiyor?" sorusunu da rahatca cevaplar. Ne bulunmussa, uzerinde ne calisilmissa, gittigi yer bellidir. Yapay ogrenim ile bulunanlarin yayini da ayni sekilde tek bir yere gitmesi faydalidir. Alternatif olarak mesela veri bilimci bir odaya kapanip lojistik regresyon, kmeans, vs gibi algoritmalari ardi ardina veri uzerinde kullanarak iki ay sonra bir sey "bulacaktir", fakat bu bulunan sonuc ile ne yapilacaktir? Koridorda yuruyen CEO'ya kenara cekilip "bakin vs vs buldum, simdi bunu kullanalim" mi denilecektir? Pek cok acidan Cevik Veri Bilimi yaklasiminin veri analiz surecine faydalari var.

--

[1] Niye Hadoop? Cunku tiklama verisi tanim itibariyle "buyuktur", bu veri bir kere bir yere gidince, tum diger alakali verinin de onunla beraber ayni yere gitmesi gerekir.

[2] Ham veri "buyuk" ise o veriden analiz sonrasi cikan veriyi tutacak yapi da "buyuk" olmalidir, yani anahtar / deger temelli NoSQL tarzinda bir yapi olmalidir, Hadoop ve NoSQL tabanlarin atbasi seklinde surekli yanyana bahsedilmesinin bir sebebi de bu.

Wednesday, November 13, 2013

Anlik Veri Ambari

Suradaki prezentasyondan notlar:

Eski veri ambari teknolojileri / firmalariyla 1 terabayt depolamak, islemek $10,000'a varabilecek bir masraftir. Ucuz makinalari birlestirerek ortaya cikartilan Hadoop kumeleri ile ayni veriyi birkac yuz dolarlik masrafla isleyebilirsiniz. Bu buyuk bir degisim.

Bunun sonucu olarak yaklasimda bazi degisiklikler oldu: Hadoop durumunda ambar "semasi" onceden tanimlanmaz, bu sebeple veri transferi (ETL) ile ugrasmak gerekmez. Bu kararin onceden verilmesine gerek yoktur. Elde ne veri varsa, duz dosya, zip formatinda dosya, vs. olarak Hadoop'a tikilir.

Daha sonra, gereken analize gore esle / indirge kodlari ile veriler istenildigi sekilde birlestirilir. Bu yapilabilir cunku 300, 400, 1000 makinayi yanyana getirmek kolaydir (bulut servisinde mesela), ve performans artik ucuz satin alinabilen bir seydir. Hadoop durumunda her sorgu aslinda bir "anlik ambar" yaratabilir.

Hatta Platfora, Zoomdata gibi teknolojiler, urunler bu sorgularin gorsel araclar uzerinden yapilmasina izin veriyor. Tiklama, secme gibi aksiyonlar, arka planda esle / indirge uretiyorlar ve gelen cevap gorsel sekilde onunuzdeki raporda gosteriliyor.

Tuesday, November 12, 2013

SASHA: Esle/Indirge Altyapisi

Github'da yeni projemiz:

https://github.com/burakbayramli/sasha

Bu altyapi ile mrjob usulu tanimlanan class job dosyalari ile esle/indirge hesaplamalari yapilabilir. Arka planda mesajlarin iletimi icin zeromq kullaniliyor. Esle/indirge mimarileri (mesela Hadoop) bilindigi gibi indirgeme islemi sirasinda ayni anahtarlari ayni makinaya, kod parcasina gonderir, biz bu dagitim icin mod(hash(anahtar), kume_buyuklugu) gibi bir mantik kullaniyoruz. Matematiksel mod bolum sonrasi kalan. artik degeri verir, hash ise bir string icin sayisal deger cikarir. Ikisini biraraya koyarsak, sayisal degeri kume buyuklugune bolunce artik deger hicbir zaman bolenden (kumedeki servis sayisi) buyuk olamaz, o zaman bu deger yuk dagitimi icin hizli bir sekilde kullanilabilir.