Python, veri bilimi için uygun bir dil değil
(blog.genesmindsmachines.com)- Veri analizi, görselleştirme ve özetleme gibi derin öğrenme dışı veri işlerinde Python işlev olarak yeterli olsa da kullanım deneyimi karmaşık ve verimsiz bir akışa kaymaya yatkın
- Laboratuvar örneklerinin genelinde, R’ye kıyasla Python’ın basit grafik dönüşümleri ve istatistiksel hesaplamalar için bile daha fazla kod ve zaman gerektirdiği eğilimi tekrar tekrar gözlemleniyor
pandas,matplotlib,NumPygibi araçlar kullanılsa bile söz dizimi, indeksleme, parantezler ve metod zinciri yapısı yüzünden, mantıktan çok uygulama ayrıntılarına (logistics) takılıp kalınan durumlar sık yaşanıyor- Buna karşılık R’nin tidyverse ekosistemi, veri işleme akışını doğal dil düzeyinde ifade ederek iş mantığını doğrudan koda aktarmayı kolaylaştırıyor
- Python, veri bilimi dili olarak mantık ile lojistiği ayırma konusunda yapısal sınırlara sahip ve bu, dilin ve ekosistemin tasarımından kaynaklanan bir sorun
Python ve R’nin gerçek kullanım deneyiminin karşılaştırması
- Laboratuvardaki üyeler dili serbestçe seçiyor, ancak Python kullananların fazla olduğu ve bunların basit ek analiz isteklerini hızlıca yerine getiremediği kalıbı tutarlı biçimde ortaya çıkıyor
- Kutu grafiği → violin plot, histogram → yoğunluk grafiği, çizgi grafiği → ısı haritası gibi görselleştirme dönüşümlerini bile anında yapmak zor olabiliyor
- R’de birkaç satırda biten işler, Python’da “masaya dönüp yeniden kod yazmak gerekecek” kadar yük gibi hissediliyor
- Python uzmanlarıyla ortak dersler yürütülürken bile gereken kod uzunluğu ve karmaşıklığında R ile büyük fark ortaya çıkıyor
- “Neden bu kadar karmaşık olmak zorunda?” tepkisi çeşitli durumlarda tekrar tekrar görülüyor; bunun kişisel beceriden değil dil ve kütüphane mimarisindeki yapısal farktan kaynaklandığı düşünülüyor
- Aynı mantıkta bile Python’da indeksleme, veriyi ayırma, yeniden birleştirme ve birden çok metodu bağlama ihtiyacı yapıyı uzatıyor
- R tidyverse,
filter → group_by → summarizegibi doğal bir zincirle doğrudan ifade imkânı sunuyor
Python’ın yaygın kullanılma nedeni ve sınırları
- Python’ın veri bilimindeki konumu, kendine özgü uygunluğundan çok tarihsel yayılımı, genel amaçlı oluşu ve ekosisteminin büyüklüğüne dayanıyor
- Derin öğrenme alanı, PyTorch ve yapay zeka ekosistemi sayesinde açık biçimde Python merkezli
- Ancak veri temizleme, keşif, görselleştirme ve istatistiksel modelleme tarafında hâlâ çok sayıda rahatsızlık noktası var
- Bu popülerlik “tarihsel bir kazaya (historical accident) yakın” olarak tanımlanıyor; R’ye kıyasla dil yapısının ağırlığı farklı örneklerde tekrar tekrar ortaya çıkıyor
İyi bir veri bilimi dilinin koşulları
- Veri keşfi, özetleme, model uydurma ve görselleştirme odaklı işlerde etkileşimli ortam, düşük kurulum maliyeti ve hızlı yineleme en kritik unsurlar
- Derlenmiş dillerden çok betik tabanlı yorumlayıcı diller daha uygun
- Performanstan önce kod sadeliği, hata riskinin azaltılması ve bilişsel yükün en aza indirilmesi gelmeli
- Gerekirse tüm sistemi değil, yalnızca bazı işlemleri yüksek performanslı bir dille (
Rustgibi) yeniden yazmak yeterli olabilir
- Gerçekçi olarak değerlendirilebilecek diller R ve Python
Matlab,Mathematicagibi seçenekler ya ticari ya da ekosistem açısından sınırlıJuliasık anılsa da, yazar yeterince kullanmadığı için değerlendirmeyi erteliyor
“Mantık vs lojistik” sorunu
- Veri analizi dili, neyin hesaplanacağını (mantık) ve nasıl hesaplanacağını (lojistik) ayırabilmeli
- Veri tipleri, indeksler, döngüler ve elle birleştirme ile uğraşmak gerekiyorsa, artık lojistiğe saplanılmış demektir
- Palmer Penguins örneğinde, R tidyverse ortalama ve standart sapma hesaplarını doğal dile yakın bir akışla ifade ediyor
- Veri akışını parçalayıp sonra yeniden birleştirme sürecine ihtiyaç duymuyor
pandasbenzer işlevler sunuyor, ancak string belirtimleri, parantezler, metod zincirleri,reset_indexgibi ek işler yüzünden okunabilirlik ve sadelik düşüyor- Aynı iş saf Python ile uygulanmak istendiğinde
- Döngü kurma → grup anahtarı oluşturma → bölme → ortalama hesaplama → varyans hesaplama → standart sapma hesaplama → yeniden birleştirme → sıralama gibi adımlar gerekiyor
- Her şeyin elle yapılması gerektiğinden lojistik kodunun mantığı ezip geçtiği tipik bir örnek ortaya çıkıyor
Sonuç ve devam yazısı için işaretler
- Python, veri analizinde mantıktan çok uygulama ayrıntılarına odaklanmaya zorlayan yapısal sorunları tekrar tekrar gösteriyor
- Bunun, dilin kendi özellikleri, kütüphane tasarım sınırları ve ekosistem genelindeki alışkanlıkların birleşik sonucu olduğu düşünülüyor
- Devam yazısında, Python’ın R’ye göre veri analizini neden daha zorlaştırdığını açıklayan somut teknik nedenler ele alınacak
Ek tartışma ve karşılaştırma açıları (okur geri bildirimleri dahil)
tidyverse, temel R’ye göre daha uzun olabilir; ancak ifade gücü, tutarlılık ve veri işleme soyutlaması açısından güçlü olduğu görüşü de var- Buna karşılık, R’nin modülerlik, test ve CLI uygulaması gibi yazılım geliştirme yönlerinde ciddi rahatsızlıklar yarattığı itirazı da dile getiriliyor
- Python, logging, sanal ortamlar, paketleme ve sınıf yapısı gibi geliştirici deneyimi açısından güçlü; ancak
matplotlibiçin sezgisel olmayan tasarım,pandasiçin tutarsız söz dizimi,scikit-learniçin tasarım sorunları sık sık gündeme geliyor
- Bazı görüşlerde Python, “kararsız ve düşük kaliteli kodu hızla çoğaltan bir dil” olarak görülüyor;
sürdürülebilir geliştirme için statik tipli dillerin daha iyi olduğu da söyleniyor
2 yorum
Veri karmaşıklığı ve miktarı artıp adım adım bölünmüş işleme ihtiyaç duyulurken, aynı zamanda yapılandırılmamış veri, yapılandırılmış modeller ve LLM aracılığıyla işleme de gerekiyorsa, kullanım senaryosu da çok olduğundan en uygun dil değil midir?
Hacker News görüşleri
boxplotuviolin plota ya daline plotuheatmape çevirmek gibi çeşitli dönüşüm örnekleri verilmişAslında bu tartışma Python'dan çok matplotlib ile ilgili
Python'da ggplot tasarımını istiyorsanız plotnine kullanabilirsiniz
R kodunun daha kısa görünmesinin nedeni, R'nin standart dışı değerlendirme (non-standard evaluation) yaklaşımıdır
Python dil düzeyinde bu tür genişletmelere izin vermez
İlgili içerik için Computing on the language bağlantısına bakın
Standart dışı değerlendirme etkileşimli ortamlarda kullanışlı olsa da, karmaşık analiz kodları yazarken aslında bir dezavantaj haline gelir
Basit işler için bile dolaylı yollara başvurmak gerekebilir
Elixir'deki gibi önde pipe operatörü kullanmanın daha iyi olduğunu düşünüyorum
Python da
getattrgibi numaralarla benzer bir sözdizimini taklit edebilir, ama bu sonuçta dilden çok kütüphane API tasarımı meselesiR ancak kütüphaneler ve reçeteler olduğunda kolay; bunlar yoksa gerçekten zorlaşıyor ve çoğu kişi de uğraşmıyor
matplotlib'in hantallığını soyutlarken zengin özellikler de sunuyor
Seaborn öğreticisi
Programlama dillerinde neden tabloların birinci sınıf nesne olmadığını merak ediyorum
Çoğu dilde tablolarla çalışmak için pandas ya da polars gibi ayrı API'ler öğrenmek gerekiyor
R'de
data.framebirinci sınıf nesneye yakın, ama pratikte daha çok dplyr'ıntibbleı kullanılıyorTablo verisini ele alan bir ifade dili hâlâ standartlaşmış değil
Polars ile dplyr benzer bir felsefeyi paylaşıyor, ama sonuçta tek ortak temel sanki SQL gibi görünüyor
Python kusursuz değil ama bence R de değil
tablo, matris, grafik, durum makinesi gibi yapılar dil seviyesinde desteklenmediği için kullanım alanları sınırlı kalıyor
Bir dilin varsayılan olarak sunduğu araçlar, o dilin “güzel yolunu” belirler
Eskiden key-value store da harici bir kütüphaneydi, ama artık neredeyse standart haline geldi
Bir gün ana akım dillerin de bu tür tablo tabanlı programlamayı içine alacağını düşünüyorum
Q dili, Rye karşılaştırma yazısı, Lil deney aracı
tibblevedata.table,data.frame'den türediği için R'nin temel fonksiyonları aynen çalışırBu üç nesne arasında dönüşüm yapmak da çok kolaydır
Bu ölçek farklarını zarif biçimde ele alabilecek standart bir API tasarlamak kolay değil
Ama dplyr dokümantasyon ve onboarding tarafında kazanarak sektörde benimsenmeyi elde etti
Yazının ana fikri fena değil ama yazarın iddiasının dayanaklarını fazla erken açığa vurması üzücü
R, data frame işleme konusunda güçlü ama dosya yönetimi ve bakım tarafında zayıf
Bu tür iş çoksa Python daha iyi bir tercih oluyor; hız da önemliyse tercih Julia'ya kayıyor
Hangi dilin seçileceği önceliklere bağlı
Öğrencilerin pandas ile grafik gibi tablo dışı problemleri çözmeye çalıştığını sık görüyorum; böyle durumlarda araç seçimini yeniden düşünmek gerekiyor
numpy kullanılırsa ortalama ve varyans hesapları zaten gömülü geliyor
Python ile R'nin öğrenme zorluğu benzer, ama Python'ın gücü başka uygulamalarla entegrasyon tarafında
Büyük dosyaları işlerken Python, özet verileri analiz ederken R daha verimli
Her dili doğru iş için doğru araç olarak kullanmak gerekir
Bir Python programcısı olarak R'yi de kullandım; Python “her şeyi epey iyi yapan ama hiçbirinde kusursuz olmayan bir dil”
Bütün gün veri analizi yapacaksanız R öğrenmek mantıklı
R, istatistikçilerin düşünme biçimine göre tasarlanmış bir dil
Başta yabancı geliyor ama o zihinsel geçiş aslında faydalı oluyor
Yine de ben çoğunlukla Python'da çalışıyorum
pandas ile veri bilimi yapmak mümkün ama hantal ve karmaşık geldi
polars ile biraz iyileşti, ama duckdb kullanınca her şey tamamen değişti
SQL sorgularını doğrudan notebook içinde çalıştırıp parquet dosyaları üzerinde analiz yapıyorum
SQL hücreleriyle Python hücrelerini karıştırınca kod daha temiz oluyor
Yazının sonundaki Python vs R karşılaştırmasına bakınca “Bu SQL ile yazılsa çok daha iyi olmaz mı?” diye düşündüm
Son Python örneği gereksiz yere uzun
defaultdictvestatistics.stddevkullanılsa çok daha kısa olurÇoğu zaman bunun anlamlı olup olmadığı düşünülmeden uygulanıyor
Aslında buna sample_std_dev demek daha doğru olur
itertools.groupbyda kullanılabilirKod çok kısalmaz ama niyeti açıkça ifade edebilir
Kısaltmaya çalışırken okunabilirlikten ödün vermek iyi değil
Julia'nın TidierData.jl paketiyle aynı örneği denedim; R sürümüyle neredeyse birebir aynı çıkıyor
@chain,@group_by,@summarizegibi makro sözdizimleri R'nin tidyverse'üne benziyorYazarın neden şikâyet ettiğini pek anlayamıyorum
Python'ın veri bilimi için optimize edilmemiş olması zaten gayet açık bir gerçek
Python bir DSL değil; MATLAB bile bilimsel hesaplama için tasarlanmış olsa da çok popüler bir dil değil
İyi bir dil, kusursuz hava durumundan çok yaşaması rahat bir şehir gibidir
Python da “havası çok iyi olmayan ama gelişen bir Kuzey Avrupa şehri” gibi
Yazının konusu biraz tıklama avcılığı kokuyor; çok üretken bir tartışma değil bence
Keşke Julia daha yaygın kullanılsa
Daha önce psikometri makalesi için bir algoritmayı Julia ile yeniden uygulamıştım ve MATLAB'dan üç kat hızlı çalışmıştı
İlgili makale bağlantısı
Son örnek, gerçekçi bir Python kodundan çok Python karşıtı bir taşlama gibi duruyor
Standart sapmayı elle yazmak lisans ödevi seviyesinde bir şey
Gerçekte hem R hem Python içeride bu tür döngüleri çalıştırıyor
Ama gerçek sektör ortamında Python ile mühendislik ekipleriyle işbirliği yapmak çok daha kolay
Daha önce R kodunu production'a aldım ve çok kırılgandı
R, keşifsel veri analizi (EDA) için harika ama büyük ölçekli yazılım geliştirme için uygun değil