İnsanlar neden Pandaları SQL'e tercih ediyor?


69

1996'dan beri SQL kullanıyorum, bu yüzden önyargılı olabilirim. MySQL ve SQLite 3'ü kapsamlı bir şekilde kullandım ancak Microsoft SQL Server ve Oracle'ı da kullandım.

Pandalarla yaptığım işlemlerin büyük çoğunluğu SQL ile daha kolay yapılabilir. Bu, bir veri kümesini filtrelemeyi, görüntülenecek belirli sütunları seçmeyi, değerlere bir işlev uygulamayı vb. İçerir.

SQL, bir optimize edici ve veri kalıcılığına sahip olma avantajına sahiptir. SQL ayrıca net ve anlaşılır hata mesajlarına sahiptir. Pandalar, kimi zaman ihtiyaç [ stuff ]duyduğunuz [[ stuff ]], bazen de ihtiyaç duyduğunuz zamanlarda tek bir kullanmak için uygun olan, biraz şifreli bir API'ye sahiptir .loc. Pandaların karmaşıklığının bir kısmı, çok fazla aşırı yüklenmenin yaşanmasından kaynaklanmaktadır.

Bu yüzden Pandaların neden bu kadar popüler olduğunu anlamaya çalışıyorum.


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
Sean Owen,

Yanıtlar:


51

Asıl soru, insanların neden DataFrame soyutlamaları için saf SQL soyutlamalarından daha üretken olduklarıdır.

TLDR; DataFrames, SQL (insan) gelişimi ve hata ayıklama işlemiyle ilgili değildir.

Temel sebep, DataFrame soyutlamalarının ayrıntılı ve okunaksız yuvalardan kaçınırken SQL ifadeleri oluşturmanıza izin vermesidir. İç içe geçmiş rutinleri yazma, onları kontrol etmeleri için yorum yapma ve ardından yorum yapma şekli tek bir dönüşüm satırı ile değiştirilir. İşleri doğal olarak bir repl'de satır satır çalıştırabilir (Spark'ta bile) ve sonuçları görüntüleyebilirsiniz.

Bir tabloya yeni bir dönüştürülmüş (dize sütunlu sütun) ekleyerek, ardından gruplayarak ve bazı toplamalar yaparak bir örnek ele alın. SQL oldukça çirkinleşiyor. Pandalar bunu çözebilir, ancak gerçekten büyük veriye veya belirli bölümlere gelince bazı şeyleri kaçırıyor (belki de yakın zamanda geliştirildi).

DataFrames, pandalarla birlikte bazı SQL planlamacılara dönüştürülmemiş olsalar bile, SQL rutinlerine yönelik üst düzey bir API olarak görülmelidir.

-

Muhtemelen bu konuda pek çok teknik tartışma olabilir, ancak aşağıdaki kullanıcı bakış açısını düşünüyorum.

SQL’lerin aksine, Panda’ların veri manipülasyonu hakkında çok daha fazla soru görebilmenizin basit bir nedeni, SQL’in tanım gereği, bir veritabanı kullanmak anlamına gelmesi ve bu günlerde oldukça fazla veri bitmesi gerekmesidir. bire bir yapılan (görevler .csv, web api, vb.). Bu durumlarda veri tabanından yükleme, saklama, işleme ve çıkarma mümkün değildir.

Bununla birlikte, kullanım durumunun Pandalar veya SQL kullanarak haklı olabileceği durumlar göz önüne alındığında, kesinlikle yanlış değilsiniz. Çok sayıda, tekrarlayan veri işleme görevlerini yerine getirmek ve çıktılarını sürdürmek istiyorsanız, her zaman önce SQL üzerinden geçmeyi denemeyi öneririm. Nedenini gördüklerimden, bu durumlarda bile birçok kullanıcının SQL üzerinden geçmemesinin iki katı olduğunu düşünüyorum.

Birincisi, pandaların SQL üzerinden elde ettiği en büyük avantaj, daha geniş bir Python evreninin bir parçası olmasıdır; bu, tek bir tıklamayla düştüğümde, verilerimi yükleyebilir, temizleyebilir, değiştirebilir ve görselleştirebilirim (hatta SQL'i Pandalar aracılığıyla çalıştırabilirim ...). Diğeri, oldukça basit bir şekilde, çok fazla kullanıcının SQL'in yeteneklerini bilmediği yönündedir. Her yeni başlayan, SQL 'in (SELECT, FROM, WHERE, vs.)' çıkarım sözdizimini ', verilerinizi bir DB'den bir sonraki yere almak için bir araç olarak öğrenir. Bazıları daha gelişmiş gruplama ve yineleme sözdiziminin bir kısmını alabilir. Ancak bundan sonra, uzmanlara (DBA, Veri Mühendisleri, vb.) Ulaşana kadar, bilgide oldukça önemli bir uçurum olma eğilimindedir.

tl; dr: Genellikle, SQL'in yeteneklerinin kapsamı çevresinde kullanım durumu, kolaylık ya da bilgi eksikliği söz konusudur.


2
Veri tabanını satır satır işlemek için kullanıldığında SQL'in büyük ölçüde temel almasının büyük bir rol oynadığını düşünüyorum. Ayrıca verinin çoğunlukla pandalara ait veriler olduğunu düşünün, ancak farklı SQL motorları iş
Dave,

3
Uygulanabilir olmadığını söyleyemem. Verileri pandaların veri çerçevesine sokabiliyorsanız, muhtemelen bir PostgreSQL DB'sine aktarabilirsiniz. Ama birincisi ve bittiğinde, muhtemelen tasarruf edeceğinizden daha fazla çaba ve zaman harcar.
jpmc26

2
Bazı ETL yaklaşımlarının program merkezli kararlar gibi göründüğünü kabul ediyorum. Yani, verileri manipüle etmeyi ve ardından bu "mükemmel" yükü veritabanına sunmayı tercih ediyorlar. Ancak, belirttiğiniz gibi, eğer birkaç SQL sorgusu ile yapılabiliyorsa, ekstra programatik katman gereksizdir. Tam olarak son zamanlarda karşılaştığım şey. OP ve cevabınızın da belirttiği gibi, "eski okul" veya DBA merkezli insanların baktıkları ve neden SQL'de yapmadıklarını (hatta sadece birkaç basit sorgu!) Söyleyebilir. Bununla birlikte, pandaların son derece çeşitli veri setleri için çok güçlü olduğunu gördüm.
SaltySub2

1
@SaltySub Programatik katmandan bir şeyleri SQL'e kaydırmanın sadece bir anlamı: Bu, adil bir nokta ve mükemmel bir şekilde geçerli olabilir, ancak SQL prosedürlerinde uygulama mantığını gömmek kendi özel baş ağrısı lezzetini getirebilir.
Elektrik Başkanı,

1
@ElectricHead Doğru bir denge olması gerektiğine katılıyorum. Bir dizi SQL sorgusu görevleri uygun bir şekilde gerçekleştirebiliyorsa, kesinlikle daha kolay ve daha verimli olabilir. Tersine, belirttiğiniz gibi, eğer SQL işlemlerine vs. büyük miktarda mantık koymak zorunda kalırsanız pandalar güçlü bir şekilde düşünülmelidir. Özellikle farklı veritabanı lezzetleri kullanıyorsanız yukarıdaki gibi - SQL sözdizimi farkları çok kıllı hale gelebilir.
SaltySub2

29

Bu iki şeyin uygulanmasında örtüşme olduğu kadar, bu da elmaları portakallarla karşılaştırmaktır.

pandalar, genel amaçlı bir programlama dili olan Python'da uygulanan bir veri analizi aracıdır. SQL ilişkisel verileri sorgulamak için etki alanına özgü bir dildir (genellikle SQLite, MySQL, Oracle, SQL Server, PostgreSQL vb. Örneklerin olduğu ilişkisel bir veritabanı yönetim sisteminde).

SQL ima ediyor

  • Sadece küçük bir SQLite veritabanı olsa bile, iş yükü için uygun olabilecek ya da olmayabilir RDBMS'de verilerle çalışmak,
  • veritabanı etki alanı bilgisi (son kullanıcı, geliştirici ve / veya yönetici; “SQL daha hızlıdır” önerisi, sık sık gördüğüm büyük bir aşırı basitleştirmedir) ve
  • Özellikle veri analizi gibi özel uygulamalarda (basit verilerin basit raporlarını oluşturmak yerine) SQL'i etkin bir şekilde kullanma konusundaki önemsiz öğrenme eğrisini aşmak.

* SQL'in etki alanına özgü olduğu gerçeğinin altını çizmeye değer olduğu, NoSQL veritabanları gibi ilişkisel veritabanları için giderek daha yaygın alternatiflerle çalışmakla daha az ilgili hale gelmeye başlamasının önemi yoktur . Bu, verilerin nasıl depolandığı ve yapılandırıldığındaki temel bir değişimi temsil eder ve ulaşmak için hedeflenen SQL standardizasyonunun gelişimi gibi evrensel olarak yaygın bir erişim yolu yoktur.

Öte yandan Python (pandalar oldukça "pythonic" dir, bu yüzden burada geçerlidir) esnek ve çeşitli geçmişlerden gelen insanlar için erişilebilirdir. İşlevsel bir dil ve tam özellikli bir OOP dili olarak "komut dosyası dili" olarak kullanılabilir. Görselleştirme yetenekleri ve veri kaynağı birlikte çalışabilirliği pandaların içine yerleştirilmiştir, ancak Python'un iş akışınıza yapabileceklerini (çoğu şeydir) dahil etmekte özgürsünüz; Bilimsel Python ekosistemi ballooned ve bu şekilde büyük araçlar içerir etmiştir Jupyter Notebook ve gerekli scipy gibi kütüphaneler matplotlib ve Numpy (üzerine inşa pandas). Pandaların veri analizinde önemli unsurlar R'dir.-Spired ve genellikle her şeyi bir veritabanına koyarak ve analizlerini SQL'de yazarken R (veya muhtemelen giderek artan bir şekilde pandalar!

Pandaların SQL'den daha iyi olduğunu söylemiyorum ya da tam tersi, ancak SQL çok etki alanına özgü bir araçken pandalar dev, esnek ve erişilebilir bir ekosistemin bir parçası. İlişkisel veritabanlarının büyük bir parçası olduğu jeo-uzamsal veri sistemleri ile çalışıyorum ve SQL güçlü ve gerekli bir araç. Bununla birlikte, pandalar günlük araç setimin daha önemli bir parçası olmasa da eşit derecede önemlidir ve SQL genellikle - belki de bazı ön işlemlerle - veri almaya mahkumdur, bu yüzden onunla pandalarda şeyler yapabilirim.


1
Bu tek doğru cevap, seçilen cevap olmalı. SQL ve Pandalar iki farklı şeydir, insanların karşılaştırmaya çalıştığı şeyi anlamıyorum.
saat

Bazı kullanıcıların bir yerden veri toplaması ve masaj yapması ve bazı sayıları tükürmesi için kod benzeri bir şey yazmanın son kullanıcı bir bakış açısı olduğunu düşünüyorum. Tamamen şaşırmadım; Ben eski ama başka özellik Oracle veritabanı ile sunulan veriler analistler ne o bile ilk fikir değil var nasıl ilk elden tecrübe yaşadım olduğunu o şöyle dursun veri almak için bağlanmaya ve nasıl. Teknolojinin anlaşılmasının temel bir eksikliğine ihanet ettiğine inanıyorum - SQL'in kapsamının ne kadar çabuk yanlış anlaşıldığının altını çizmeyi umuyorum.
Elektrik Başkanı

NoSQL durumlarıyla ilgisiz olmak konusunda biraz zorlanacağım. Örneğin, PostgreSQL'in JSON depolama alanı ile yaptığı basamakları göz önünde bulundurun.
jpmc26

Sözlerimi dikkatlice seçmeye çalıştım; PostgreSQL, birçok şeyi iyi yapmasına rağmen hala bir RDBMS'dir (SQL Server destekleyici grafiklere rağmen). Ancak, bir dokunuş rahatlattım çünkü hala iyi bir nokta: bazı geçişler var ve daha da önemlisi, bazı NoSQL sistemleri için SQL API'leri var. Bu ise SQL evrensel dil değildir ve tüm veriler ilişkisel yapılandırılmıştır olsa geçit.
Electric Head,

Bence pandalarda mümkün olan SQL'de her şeyi yapabilirsin. SQL esnek değil ama çok optimize edildi.
Medya

22

İlk olarak, pandalar o kadar popüler değil. Hem pandaları hem de SQL'i kullanıyorum. İlk önce görevi anlamaya çalışıyorum - eğer SQL'de yapılabilirse, SQL'i tercih ediyorum çünkü pandalardan daha verimli. Büyük bir veri üzerinde çalışmayı deneyin (10.000.000 x 50). Hem SQL'de hem de pandalarda bir grup çalışması yapmayı deneyin . Anlayacaksın.

Kolon değerlerini diziye bölmek ve üzerinde bazı şeyler yapmak gibi kullanışlı olan yerlerde pandalar kullanıyorum (bu diziden yalnızca bazı değerleri seçmek gibi). Şimdi bu tür bir görev SQL'de kodlamak nispeten zor, ancak pandalar görevinizi kolaylaştıracak.


Bu verimsizlik pandalara özgü mü? C # 'da oldukça fazla bellek içi veri manipülasyonu yaptım ve oldukça kolay ve verimli buldum, belleğe sığması ve tek seferde olması şartıyla (yani, veri değiştikçe indeksleri kademeli olarak güncellemeye gerek kalmadı).
CodesInChaos

pandalar hızlıya daha elverişli olmalı, ancak doğru kullanırsanız hızlı olamayacağı anlamına gelmez. Sonunda, bir veritabanında veri üzerinde bir SQL sorgusu çalıştırmak sihir değildir - herhangi bir şey gibi kaynaklar gerektirir, bu sadece (doğru yaparsanız!) Umarım dikkatli bir şekilde yapılandırılmış etli veritabanı sunucularında kaynakları kullanırsınız. . Boru hattınızı pandalar veya benzerlerinden (örneğin hepsini belleğe yüklemek yerine veri akışı olarak) doğru bir şekilde elde etmek, bazı çabaların ne kadar başarılı olduğunu belirleyecektir.
Elektrik Başkanı,

@CodesInChaos SQl - qr.ae/TUIpzE - pandaların bu cevabı var . Orada panda kullanmanın avantajları ve dezavantajları açıklanmaktadır.
Ankit Seth,

12

Ben SQL'imi bilmeme rağmen, her durumda R 'dplyr (dil, mutlaka araç değil) kullanacak insanlardan biriyim.

Pandas / dplyr / data.table boru hatlarında gördüğüm en büyük yarar, işlemlerin atomik olması ve yukarıdan aşağıya okunabilmesi.

SQL'de tüm betiği ayrıştırmanız gerekir, etrafta zıplayarak (neyin toplandığını, neyin birleştirildiğini ve nasıl - sol? İç? Sağ?, Ne olduğunu tam olarak kavramak için uygulanan filtreler var mı?).

Pandas ve diğerlerinde, boru hattının her adımı kendi içindedir, girdi verileriyle bir şey yapar ve çıktı verilerini döndürür, bu sıralı işlem, her işlem için net bir şekilde tanımlanmış bir durum olduğundan, ne olup bittiğinin nedenini kolaylaştırabilir bir sorgu seviyesi.

Ve evet, WITHifadeler ve benzeri şeyler yapabilirsiniz, ancak çok daha fazla kod gerektirir ve borulama ile karşılaştırıldığında hangi nesnenin kullanıldığı net değildir.


6

Pandas / Python için oldukça yeniyim ama SQLServer DBA, mimar, yönetici vb. Olarak 20 yaşım var. Pandaları çok seviyorum ve kendi kendime her zaman Panda'larda işleri rahat ettirmeden önce çalışmasını sağlamak için zorluyorum. rahat SQL dünyası.

RDBMS'ler Neden Daha İyi? RDBMS'lerin avantajı, sorgu hızını ve veri okuma işlemlerini optimize etme konusundaki uzun yıllara dayanan deneyimleridir. Etkileyici olanı, aynı anda yazma hızını optimize etme ve yüksek eşzamanlı erişimi yönetme ihtiyacını dengeleyerek bunu yapabilmeleridir. Bazen bu ek masraflar basit, tek kullanıcılı kullanım durumları söz konusu olduğunda Panda'lara olan avantajını artırıyor. Ancak o zaman bile, deneyimli bir DBA, yazma hızı üzerinden okuma hızı için yüksek düzeyde optimize edilecek bir veritabanını ayarlayabilir. DBA'lar veri depolamayı optimize etmek, stratejik disk sayfa boyutlandırma, sayfa doldurma / doldurma, veri denetleyicisi ve disk bölümleme stratejileri, optimize edilmiş I / O planları, hafıza içi veri sabitleme, önceden tanımlanmış yürütme planları, indeksleme, veri sıkıştırma gibi özelliklerden faydalanabilir. , ve daha fazlası. Pek çok Panda geliştiricisinden aldıkları izlenimini alıyorum orada mevcut derinliği anlamıyorum. Genellikle düşündüğüm şey, Pandas geliştiricisinin bu optimizasyonlara ihtiyaç duyacak kadar büyük veriye sahip olmaması durumunda, sizi kutudan ne kadar süre kazanabileceklerini takdir etmedikleridir. RDBMS dünyası, bunu optimize etmek için 30 yıllık deneyime sahiptir, böylece büyük veri setlerinde ham hız gerekiyorsa, RDBMS'ler yenilebilir.

Python / Pandalar Neden Daha İyidir: Bununla birlikte, hız her şey değildir ve birçok kullanımda itici faktör değildir. Verileri nasıl kullandığınıza, paylaşılıp paylaşılmadığına ve işlemin hızına önem verip vermediğinize bağlıdır. RDBMS'ler genellikle veri yapılarında daha katıdır ve veri şekilleriyle daha belirleyici olmaları için geliştiriciye yük getirir. Pandalar burada daha gevşek olmanı sağlar. Ayrıca, ve bu benim en sevdiğim sebep, gerçek bir programlama dilinde. Programlama dilleri, verilere gelişmiş mantık uygulamak için size sonsuz derecede esneklik sağlar. Elbette, SQL'in yaklaşamayacağı zengin modül ekosistemi ve 3. parti çerçeveleri de var. Ham veriden web sunumuna ya da tek bir kod tabanında veri görselleştirmesine kadar gidebilmek ÇOK uygundur. Aynı zamanda çok daha taşınabilir. Python'u, insanlara daha hızlı ulaşmak için sonuçlarınızın erişimini uzatan genel dizüstü bilgisayarlar da dahil olmak üzere hemen hemen her yerde çalıştırabilirsiniz. Veritabanları bu konuda mükemmel değil.

Benim tavsiyem? Kendinizi daha büyük ve daha büyük veri kümelerine mezun olarak bulursanız, dalmaya ve RDBMS'lerin nasıl yardımcı olabileceğini öğrenmeye borçlusunuz. Milyon sıra, çok masalı katılım, 5 dakikadan 2 saniyeye ayarlanmış toplam sorguları gördüm. Alet kemerinizde bu anlayışın olması sizi daha iyi bir veri bilimcisi yapar. Bugün Pandalar'daki her şeyi yapabilirsiniz, ancak bir gün RDBMS'nin en iyi seçenek olduğu bir ödeviniz olabilir.


5

Pandaların yapabileceği şeyler, o SQL yapamaz

  1. df.describe()
  2. Komplo, örneğin df['population'].plot(kind='hist')
  3. Makine öğrenme algoritmalarının eğitimi için doğrudan bir veri çerçevesi kullanın

Pandaların yapabileceği şeyler, SQL'in de yapabileceğinin farkında değildim.

  1. İhracat csv için: df.to_csv('foobar.sv'). Excel ile çalışmak isteyen bir işletme sahibine bir şey göstermek istediğinizde bu önemlidir. Ve orada da var df.to_excel. Fakat SQL'de yapabilirsiniz SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;(teşekkür ederim, vy32!)

1
Güzel. Bunların çoğu SQL'de uygulanabilecek fonksiyonlar gibi görünse de. (SQL'nin doğrudan CSV dışa aktarması vardır.)
vy32

Lütfen bana CSV'ye ihracat yapan bir sorgu gönderebilir misiniz? (Yalnızca bazı SQL tabanlı veritabanları için bunu yapan araçları biliyorum, ancak hiç bir sorgu görmedim ... bu yüzden bunun SQL spesifikasyonunun bir parçası olduğundan şüpheliyim)
Martin Thoma

1
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; Bakınız dev.mysql.com/doc/refman/8.0/en/select-into.html
vy32

Çok teşekkür ederim vy!
Martin Thoma

Tabi ki. Unutmayın, dosya istemci üzerinde değil SQL sunucusunda sona erer.
vy32,

3

Bahsetmek istediğim bu cevaplarda ele alınmayan tek şey, aynı zamanda SQL'i nasıl kullandığınıza bağlı olmasıdır. Örneğin arcpy atın. Bazı nedenlerden dolayı, arcpy.da işlevlerinden hiçbiri birçok özelliğe sahip değildir. Bu gerçekten garip çünkü hemen hemen her diğer python sql kütüphanesinde var. Arcpy.da işlevlerindeki Where cümlesi de yaklaşık 120 karakterle sınırlıdır. Bu, temel olarak, veritabanınızla yapmaya çalıştığınız görece çok sayıda şey varsa, tek gerçek seçeneğinizin, seçtiğiniz arcpy.da işlevini birçok kez çağırmak, her seferinde where deyimini değiştirmektir. Bu sürecin daha hızlı ilerlemesini sağlamak için kullanabileceğiniz birkaç püf noktası vardır - örneğin, veri kümenizin parçalarını yineleyebilirsiniz - ancak kelimenin tam anlamıyla bu püf noktalarının her biri sadece bir arcpy.da kullanmaktan çok daha yavaştır. Tüm tablonuzu bir pandalar veri çerçevesine yüklemek için arama imleci ve ardından pandalar, numpy kullanarak ve manipüle ederek verileriniz gerçekten bu kadar büyükse, dask. Burada vurgulamalıyım ki bu durumda pandalar biraz daha hızlı değil. İğrenç bir şekilde daha hızlı. O kadar hızlı ki, daha önce yapmadığım için kelimenin tam anlamıyla kendime gülüyordum. Pandaları kullanmak bir senaryoyu yürütme zamanını bir saatten daha kısa bir süre boyunca düşürdü - 3.5 saatten 1,5 saatten atlayıp, tam anlamıyla 12 dakikaya atlayıp atılmadığını unutuyorum. o kadar hızlı ki, daha önce yapmadığım için kelimenin tam anlamıyla kendime gülüyordum. Pandaları kullanmak bir senaryoyu yürütme zamanını bir saatten daha fazla bir sürede düşürdü - 3.5 saatten 1,5 saat atlayıp, tam anlamıyla 12 dakikaya atlayıp atılmadığını unutuyorum. o kadar hızlı ki, daha önce yapmadığım için kelimenin tam anlamıyla kendime gülüyordum. Pandaları kullanmak bir senaryoyu yürütme zamanını bir saatten daha kısa bir süre boyunca düşürdü - 3.5 saatten 1,5 saatten atlayıp, tam anlamıyla 12 dakikaya atlayıp atılmadığını unutuyorum.

Unutulmaması gereken bir şey, bu sql ile yapmış olabilir iken öğrenmek için çok daha uzun sürdü olurdu. Access'te özellikle sql için olan işlemleri öğrenmek zorunda kalırdım - bu betiğin verilerinin bittiği yer - - Access'te sql, aslında bunu yaparken düşündüğüm gibi olması gerektiği kadar güçlü değildi. Tüm verilerimi bir sqlite3 veritabanına yazmak, orada işlemek ve daha sonra Access'e koymak zorunda kalırdım. Bu bana benzer performans sonuçları vermiş olsa da, gelecekteki senaryolarımı daha zor hale getirebilirdi.

Yani evet, bazen Pandalar ve emrinizde olan sql seçeneklerini kullanmaktan kesinlikle daha iyidir . Sql yapmam gereken her şey pandalardaki bir işlevle yapıldı. İsterseniz pandalarla birlikte sql sözdizimini de kullanabilirsiniz. Pandaları ve sql'yi birlikte kullanmamak için çok az sebep var.

Pandalar ve uyuşuk hakkında bahsetmek istediğim bir şey daha bu kütüphanelerin her ikisinin de doğaya dayalı yaklaşımlar olduğudur. Bu kütüphanelerle veri çerçeveleri ve seriler arasında dolaşabilirsiniz, ancak bu yapılardaki verileri değiştirmek çok zordur, bu nedenle daha verimli kod - set tabanlı - bu kitaplıkların her ikisiyle de yalnızca çok daha kolay olur. yap. Set tabanlı yaklaşımları kullanarak demiryoluyla döşenmemişse "yönlendirilmiş" olmak, SQL ile yaşadığım bir şey değil.

Panda'lardan bahsetmeyi unuttuğum bir şey daha var. Para . Pandalar, birçok Data Science işinin nasıl kullanılacağını bilmenizi istediği bir araçtır. Neredeyse baktım her Veri Bilimi işi, veritabanı yönetimi tipi işlerden daha fazlasını ödüyor. Fark ettim ki bunun tek istisnası Veri Mühendisliği, ama bu iş ilanları çok daha az gördüm. Pandalar bir bakışta size daha fazla para kazandırıyor gibi görünüyor.


5
Belki de modern meseleler söz konusu olduğunda, bir problemi çözmek için uyguladığınız yaklaşımların aksine özgeçmişinizde doğru terimleri kullanmakla ilgili bir sorun yoktur (bu terimlerin kelimeyi nispeten hızlı öğrendiğini varsayarsak). Buzzword, problem çözmekten daha önemli. X için problem çözme A, B, C teknolojisini öğrenme ve kullanmayı tersine çevirmeli. Merak ediyorum ki çoğu geliştirme ekibi şu anda buzzword-ism ve trendlikten dolayı işleri parçalayıp çözmediğini, o zaman problem çözmeyi ikincil olarak mı yoksa "eski okul" olarak mı düşündüğünüzü çünkü buzzword'ü bilmediğiniz / kullanmadınız.
SaltySub2

1
@ElectricHeatonumda python ile sql içeren kendi fonksiyonunuzu yazıyorsanız, imleci yanlış kullanmak ve pandalar / numpy kullanmaktan daha kötü sorgular yazmak daha kolaydır. Bütün sql modüllerinin / kütüphanelerinin aynı olmadığını unutmayın. Benim durumumda, arcpy.da.SearchCursors ve benzerleriyle, tuhaf sınırlamalar nedeniyle, bir sürü kayda verimli bir şekilde bir şeyler yapmak için iyi bir yol yoktur. Pandalar / numpy kullanırsam, bir şeyler yapmanın iyi bir yolu olur ve python kullanırken istediğim şey budur.

1
Ahhh tamam. Numpy / panda kullanarak vs python dbapi uygulaması yoluyla bir net SQL boru hattı demek? Bu durumda, evet anladım, orada benden tartışma yok; bakım gerekli! Bana açıkça set işlemlerini anlamanız gereken, ancak bir veritabanı istemcisinden aptalca sorgular çalıştırırken oldukça hızlı bir şekilde anlayacağınız olan vs sade SQL olarak okuyor.
Elektrik Başkanı,

1
@Steve Evet, insanların pandalardaki veya benzerlerindeki döngülerdeki şeyleri dinamik olarak değiştirmeye çalışmasına engel olmayacak :) Bence SQL'i anlamak pandalarda etkili bir şekilde çalışmayı sağlıyor (bazı kavramlarda benzerliği gizledikleri gibi değil).
Elektrik Başkanı,

1
@ Steve Aslında pandalar da güçlü ... Sanırım hayal kırıklıklarımdan biri hem kendimi de dahil olmak üzere hem çözüm geliştiren, hem de müşterileri geliştirmek için para harcanan eğilimleri takip eden ve zaman geçirmeyen, hayal kırıklıklarından biri. Ancak yalın prototipleme / mvp'de bile ölçeklendirme için uygun zemin hazırlaması gerekir. SQL, noSQL ve Pandalar ... farklı aşamalarda uygun işler ve projeler için kendi amaçlarına sahiptir. Geçtiğimiz yıl artı, yalın bir prototip / mvp için noSQL kesinlikle birden fazla şekilde bana yardımcı oldu. SQL bunun için overkill olurdu.
SaltySub2

3

Çok fazla zaman serisi veri analizi yaptığımı ve bunun için pandalar resampleve reindexyöntemlerin çok değerli olduğunu ekleyeceğimi düşündüm . Evet, SQL'de benzer şeyler yapabilirsiniz ( DateDimensiontarihle ilgili sorgulara yardımcı olmak için bir tablo oluşturma eğilimindeyim ), ancak pandaların kullanımlarını çok daha kolay buluyorum.

Ayrıca, başkalarının söylediği gibi, modellememin geri kalanı Python'da ve sık sık web çağrılarıma veya CSV dosyalarına sahibim.


2

Bu soruya kendi tecrübelerime dayanarak cevap vermeye çalışacağım. Diğer cevapların aksine Sqlderin öğrenme ve büyük veri ile ilgili şeyleri tercih ederim . Bunun çok sayıda nedeni var. Görüldüğü gibi burada ,

Pandalar, tablo verilerinde sezgisel, güçlü ve hızlı veri analizi deneyimi sağlar. Bununla birlikte, Pandalar yalnızca bir yürütme iş parçacığı kullandığından ve tüm verilerin aynı anda bellekte kalmasını gerektirdiğinden, gigabayt ölçeğinin ötesindeki veri kümelerine iyi ölçeklenemez.

B+

Diğer bir fark, Sql'deki CRUD işlemlerinin pandalarda mümkün olmayan farklı yetkilendirme politikalarıyla dağıtılmış olarak gerçekleştirilebilmesidir.

Hangisinin daha iyi olduğunu söylemek demek değildir, hepsi sizin görevinize bağlıdır. Büyük ölçekli hesaplamalar için sql'i tercih ediyorum, küçük olanlar için pandaları tercih ediyorum.

Pandalarda olmayan, daha sonra başvuracağım veri çıkarma konusunda hızlı deneyim için gerçekten önemli olan başka şeyler var. Şimdilik, sadece buraya bir göz atın .


1

Panda, jupyter notebooklar şeklinde python, sinir ağları alanındaki veri bilimcileri tarafından kullanılan en popüler araç kutusudur. Python "the" dilini başlatıyor. SQL arka ucunu kullanmak bile mümkün ancak SQL ile pandaya bağlı değilsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.