Friday, February 20, 2015

iPython, rpy2, rmagic

iPython icinden (ya da bizim Emacs eklentisi emacs-ipython icinden) R kodlari cagirmak icin bazi kurulum numaralari; ozellikle alttaki ornek icin.

R kurulacak, biz suradan Ubuntu 12 (precise) icin r-base-core_3.1.2-1precise0_amd64.deb indirdik ve sudo dpkg -i [deb dosyasi] ile kurduk, sonra R kutuphaneleri, R komut satiri icinden,

install.packages("lme4")
install.packages("HSAUR2")

ile kurulabilir. Bu cagrilar bir pencere acip hangi bolgedeki servise baglanmak istediginizi sorar, birini secin, indirim, kurulum baslar. iPython baglantisi icin

sudo pip install rpy2

En son versiyon icin

sudo pip install --upgrade rpy2

Bende rpy2 kurulumu sirasinda hata mesajlari geldi, -llzma derleyici secenegi ile alakali (o kutuphane bulunamamis),

sudo apt-get install liblzma-dev

sonrasi hata gitti. Zaten ipython kurulmus olmali, o da pip ile olur.

Ornek icin

%load_ext rpy2.ipython
%R library(lme4)

%R data("respiratory", package = "HSAUR2")
%R write.csv(respiratory, 'respiratory2.csv')
%R resp <- subset(respiratory, month > "0")
%R resp$baseline <- rep(subset(respiratory, month == "0")$status,rep(4, 111))
%R resp_lmer <- glmer(status ~ baseline + month + treatment + gender + age + centre + (1 | subject),family = binomial(), data = resp)
%R -o resp_lmer_summary resp_lmer_summary = summary(resp_lmer)
%R -o exp_res exp_res = exp(fixef(resp_lmer))
print resp_lmer_summary
print exp_res


Simdi bu isin bir kismini Python ile bir kismini R ile yapalim,

import pandas as pd
df = pd.read_csv('respiratory2.csv',index_col=0)
baseline = df[df['month'] == 0][['subject','status']].set_index('subject')
df['status'] = (df['status'] == 'good').astype(int)
df['baseline'] = df.apply(lambda x: baseline.ix[x['subject']],axis=1)
df['centre'] = df['centre'].astype(str)
df = df[df['month'] > 0]
%R -i df
%R resp_lmer <- glmer(status ~ baseline + month + treatment + gender + age + centre + (1 | subject),family = binomial(), data = df)
%R -o res res = summary(resp_lmer)
%R -o exp_res exp_res = exp(fixef(resp_lmer))
print res
print exp_res


Bu ayni sonucu verecektir.

%R ile -i ile degisken veriliyor, -o ile degisken aliniyor. Pandas dataframe objeleri sorunsuz R'ye verilebiliyor.

%R icinde print ile birsey basmak, bazi ortamlarda islemiyor, o sebeple summary() sonucunu bile biz bir degiskene set edip onu python ile ekrana basiyoruz.

R'yi hala bazi durumlarda kullanmak lazim, mesela ustte gosterilen R lme4 glmer kullanimi (karisim etkileri -mixed effects- modelleri) halen statsmodels'da kodlanmis degil.

Friday, February 13, 2015

Python Bazli Tasinabilir Mobil UI Kodlari - Kivy

Kivy bazli yazilan Python UI kodlari hem Android hem iOS uzerinde isleyebiliyor. Android kodlamasi icin Java kullanmak istemeyenler icin iyi bir secenek olabilir. Kodun telefona gonderilmesi icin birkac yontem var, birisi Kivy "isletici" bir programi kurmak, bu isletici programin kendi apk'si var, ya Google Play'den ya da Kivy sitesinden bu apk indirilebilir.

Bu isletici programi telefonda baslatinca program dizin sisteminde /storage/emulated/0/kivy adli bir dizine bakacak, ve altinda gordugu tum alt dizinleri Kivy programlari olarak kabul edecek. Bir Kivy programinin olusturulmasi cok kolay, iki dosya yeterli. Biri android.txt digeri main.py. Text dosyasi

title=Hello World
author=Burak Bayramli
orientation=portrait

Merhaba Dunya uygulamasi

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()


Kendi APK'mizi kendimiz Olusturmak

Python kodlarindan direk APK'ye gitmek te mumkun. Burada Kivy'nin alt projeleri olan buildozer ve python-for-android gibi cozumler var. Bu projelerden python-for-android ile, anladigimiz kadariyla (daha kullanmadik) numpy, PIL, opencv gibi yerli kodlari APK icine dahil etmek mumun. Tek problem python-for-android sadece Linux uzerinde isliyor.  Fakat Kivy, VirtualBox uzerinden isletilebilecek ve icinde gerekli tum araclar onceden kurulmus bir sanal makina imajini sitesinden paylasiyor. Ya bu, ya da kendimiz Ubuntu kurarak python-for-android'i kullanabiliriz. 

Sunday, February 8, 2015

Julia



Bilimsel hesaplama alaninda yeni bir dil: Julia. C, Fortran gibi diller statik tipleme kullanir, kodlamasi zor ve hizlidir, Python, R, Matlab gibi diller kullanmasi kolay, dinamik ama yavastir. Julia her iki tarafin guclu taraflarini birlestirmeye ugrasiyor. Sahsen Python'da gordugumuz bazi eksikleri cevaplandirmasi acisindan bizim ilgimizi cekti. Julia LLVM bazli bir JIT kullanir, LLVM'i bir suredir takip ediyoruz, saglam bir teknoloji (ve Java VM bazli cozumlere alternatif saglamasi acisindan faydali oldu, Scala gibi).

Julia yazilan herhangi turden bir kodu "C performansina yakin" hizda isletilmesini amacliyor. Python'da ayni performansi elde etmek icin cogunlukla Numba ya da C cagrisi kullanmak lazim, bu cetrefil kodlama demek, Julia bu isi paketten ciktigi haliyle halleder. Ayrica paralelizasyon, hem ayni makinadaki, hem diger makinalardaki birden fazla islemciyi (ssh uzerinden) basagrisi yaratmadan hesap surecinin parcasi haline getirebiliyor. Python'da programcilar rahatsiz eden bir konuyu adreslemisler yani, Python derleyicisinde GIL adli bir kilit vardir ve bu sebeple gercek thread kullanimi mumkun olmaz, multiprocessing gibi paketlerle arka planda surec yaratan cozumler kullanilabilir, fakat bu cozumler dilin dogal bir uzantisi gibi durmazlar. Julia bu isi temelden cozuyor.

Bir baska iyi haber: IPython not defterinin bir varyasyonu Julia icin  kodlanmakta: IJulia.

Ubuntu'da kurmanin en kolay yolu

sudo add-apt-repository ppa:staticfloat/juliareleases
sudo add-apt-repository ppa:staticfloat/julia-deps
sudo apt-get update
sudo apt-get install julia


Friday, February 6, 2015