Pandalar SQL'e Karşı - 4. Bölüm: Pandalar Daha Kullanışlı

Nov 25 2022
tl;dr: Bu gönderide Pandalar ile SQL'i üç eksenin üçüncüsünde karşılaştırıyoruz: uygunluk.
Openverse'te gamene tarafından fotoğraf (CC BY 2.0)

tl;dr: Bu gönderide Pandalar ile SQL'i üç eksenin üçüncüsünde karşılaştırıyoruz: uygunluk. Pandas veri çerçevesi veri modelinin veri bilimi ve makine öğrenimi kullanım durumları için daha uygun olduğu altı yolu açıklıyoruz.

Pandalar ile SQL arasındaki destansı savaşımızın bu dördüncü sunumunda, veri bilimi ve makine öğrenimi için Pandaların SQL'den daha uygun olduğunu gösteriyoruz. Pandas, veri bilimcileri tarafından veri bilimcileri için tasarlandı ve açık kaynak veri bilimi topluluğu tarafından coşkuyla geri getirilen binlerce iyileştirmeden yararlandı - tümü daha fazla fayda ve kullanım kolaylığı göz önünde bulundurularak. Bu yüzden iyi bir uyum olması şaşırtıcı değil!

Başlamadan önce, önceki Pandalar ve SQL tekliflerimizi kaçırdıysanız, yine de buradan ulaşabilirsiniz: 1. Bölüm: Yemek Alanı ve Michelin Tarzı Restoran , 2. Bölüm: Pandalar Daha Kısa ve 3. Bölüm: Pandalar Daha Fazla esnek _ Önceki gönderilerimiz, veri çerçevesi veri modeli ile veri çerçevesi cebirinin karşılaştırmalarına odaklanıyordu — bu gönderide, veri çerçevesi ergonomisine, özellikle de veri çerçevelerinin nasıl kullanıldığına odaklanıyoruz.

Kolay arama için, Pandas veri çerçevelerinin ilişkisel/SQL benzerlerinden daha kullanışlı olmasının çeşitli yollarının kullanışlı bir listesi:

  1. Pandalarda, ilerledikçe artımlı olarak sorgular oluşturabilirsiniz; SQL'de yapamazsınız.
  2. Pandalarda, ara sonuçları çalıştırmak ve adlandırmak kolaydır; SQL'de daha zordur.
  3. Pandalarda, verileri hızlı bir şekilde anlamak kolaydır; SQL'de çok daha zordur.
  4. Pandas, görselleştirme için yerel desteğe sahiptir; SQL yapmaz.
  5. Pandas, makine öğrenimi yapmayı kolaylaştırır; SQL yapmaz.
  6. Pandas, kullanıcıların ara adımların doğruluğunu doğrulamasına yardımcı olmak için düzeni korur ve kullanıcıların sırayla çalışmasına olanak tanır; SQL yapmaz.

1. Pandas'ta ilerledikçe artımlı olarak sorgular oluşturabilirsiniz; SQL'de yapamazsınız.

Pandalar ve SQL arasındaki önemli bir ayrım, Pandaların, kullanıcıların daha karmaşık sorgular oluşturmak için işlemleri diğerlerinin üzerine artımlı olarak katmanlamasına izin vermesidir. Aynı zamanda, kullanıcılar bu sorgu parçalarının ara sonuçlarını inceleyebilir - ilerledikçe doğruluğunu doğrulama çabası içinde. Pandalar ile hata ayıklama çok kolay!

Veri kümemizde Geary Sokağı'na karşılık gelen izinlere odaklanmak istediğimizi varsayalım. Veri kümesinin bu alt kümesini şu şekilde çıkarabiliriz:

Fark etmiş olabileceğimiz bir şey, Geary'nin burada olarak kodlanmış birçok mahalleyi kapsadığıdır 'Neighborhoods - Analysis Boundaries'. 'Neighborhoods - Analysis Boundaries'Sadece bu sütunu incelemek istediğimizi (ve kalan 42 sütunu bıraktığımızı) varsayalım , tümceyi [['Neighborhoods - Analysis Boundaries']]önceki ifadenin sonuna ekleyebiliriz.

Bu çok fazla satır: 1966. Ardından, son iki adımımız olarak, Geary'de en çok izne sahip mahalleleri belirlemek istediğimizi varsayalım. Bunu yapmanın bir yolu, a ve 'sort_values'ardından a eklemektir 'value_counts'.

İlginç, yani en iyi mahalle Tenderloin, ardından Outer Richmond. Bu işlem dizisinin kesinlikle SQL'de ifade edilebilmesine rağmen, çok daha acı verici olacağını unutmayın. Bir kişinin SQL sorgusunun sonuna işleçler ekleyemeyiz: sorguda değişiklik yapmamız gereken belirli yerler vardır. Örneğin, hangi sütunların görüntüleneceğini değiştirmek için SELECT, sorgunun bölümünü erkenden değiştirmemiz gerekir. Bunun yerine Pandas, operasyonel (veya zorunlu olarak) düşünmenize ve ara sonuçları incelerken nihai sonucunuzu adım adım oluşturmanıza olanak tanır.

2. Pandalarda, ara sonuçları çalıştırmak ve adlandırmak kolaydır; SQL'de daha zordur.

Pandalar, gerçek bir programlama dili olan Python'a gömülü olduğu için, veri çerçeveleri üzerinde çalışmak için birçok tanıdık programatik deyimi ödünç alır. Özellikle, bir değişkene bir veri çerçevesi ifadesi atayabiliriz; bu değişkenler daha sonra çalıştırılabilir ve/veya diğer değişkenlere atanabilir.

Açıklamak için basit bir örnek alacağız. Bu veri kümesi bir veri temizleme mücadelesinden olduğundan, birçok boş değer olabileceğinden şüphelendiğimizi varsayalım. Aşağıdakileri kullanarak sütun başına kaç tane olduğunu kontrol edebiliriz:

Bu bir sürü boş değer! Veri kümemin temizlenmiş bir sürümünü oluşturmak istediğimi varsayalım, eşik 190000 boş olmayan değerlere ayarlı olarak çok fazla boş değere sahip sütunları bırakıyorum. (Genel veri kümesi yaklaşık 199000 satıra sahiptir.)

Vay canına — sütun sayısı 43'ten 13'e düşüyor. Burada gördüğümüz gibi , standart programatik değişken atamasını kullanarak kolayca yeni bir değişken tanımlayabildik 'sf_permits_cleaned'(tıpkı önceki değişkeni oluşturduğumuz gibi ) ve ardından üzerinde işlem yapabildik. 'missing_values_count'Bu yaklaşım programcılar için doğaldır. SQL'de, görünümler aracılığıyla benzer bir etki elde edilebilir, ancak görünümleri tanımlamak ve bunlar üzerinde çalışmak daha az sezgisel ve daha külfetlidir.

3. Pandalarda, verileri hızlı bir şekilde anlamak kolaydır; SQL'de çok daha zordur.

Pandas, bir veri çerçevesinin verilerini ve meta verilerini anlamanın hızlı yollarını sunar. Bunun örneklerini, basitçe değişken adını kullanarak bir veri çerçevesini yazdırdığımızda veya işlevleri kullandığımızda zaten gördük 'head/tail()'. Kolaylık sağlamak için, belirli satırlar ve sütunlar bir ekrana sığacak şekilde gizlenerek '...'kullanıcıların verilerin üst düzey bir resmini elde etmesine yardımcı olur.

Sütunların ve türlerinin bir özetini incelemek istiyorsak, Pandas tarafından sunulan 'info()'ve veri kümesinin sütunlarını, türlerini ve boş değerlerin sayısını listeleyen kullanışlı bir işlevdir. Yeni oluşturduğumuz veri çerçevesini incelemek için bu işlevi kullanabiliriz.

Öyle görünüyor ki hala boş değerler içeren tek sütun açıklama sütunu; diğer tüm sütunlar tamamen doldurulur.

Sayısal sütunları hedef alan bir başka yararlı Panda işlevi, 'describe()'bu sütunların sayımlar, ortalamalar, standart sapmalar ve niceliklerle birlikte uygun bir özetini sağlayan işlevidir.

Hmm, yani 0 numaralı bir sokak var gibi görünüyor. Meraklı!

Ne yazık ki SQL, kişinin veri kümesinin şeklini ve özelliklerini anlamak için benzer kolaylıklar sunmuyor — bu amaç için özel sorgular yazmanız gerekir. Önceki örnek için, bu sorgunun uzunluğu sayısal sütunların sayısıyla orantılı olacaktır.

4. Pandas, görselleştirme için yerel desteğe sahiptir; SQL yapmaz.

Sayı tablolarının analizi yalnızca şimdiye kadar sizi alacaktır. Genellikle ihtiyacınız olan şey, veri çerçevelerindeki bilgileri anlamlandırmanın görsel yollarıdır. Verilerinizi ayrı bir görselleştirme veya BI (İş Zekası) aracına yüklemenizi gerektiren SQL'den farklı olarak Pandas, kitaplığın içinde yerleşik görselleştirme desteği sunar. Örneğin, çeşitli izinlerin 'plot()'bir çubuk grafiğini görmek için arayabilirim.'Current Status'

Görünüşe göre izinlerin büyük çoğunluğu tamamlanmış, düzenlenmiş ve dosyalanmış kategorilerde, az bir kısmı da diğer kategorilerde.

Bu özelliğin gücü açıktır: SQL veritabanlarının aksine, görselleştirmeler oluşturmak istiyorsanız kitaplıktan ayrılmanıza gerek yoktur — bunu hemen orada yapabilirsiniz! Görselleştirme deneyiminizi "güçlendirmek" istiyorsanız, Matplotlib , seaborn ve altair dahil olmak üzere pandalarla sıkı bir şekilde bütünleşen çok sayıda görselleştirme kitaplığı vardır . Ve benim gibi tembelseniz ve görselleştirmeler oluşturmak için herhangi bir kod yazmak istemiyorsanız, Pandalara özgü görselleştirme öneri kitaplığımız Lux'ı sizin için otomatik olarak, tümü veri kümenize ayarlanmış görselleştirmeler oluşturmak için kullanabilirsiniz. . Lux hakkında daha fazlasını buradan okuyun .

5. Pandas, makine öğrenimini kolaylaştırır; SQL yapmaz.

Makine öğrenimi, veri biliminin önemli bir bileşenidir ve kullanıcıların yalnızca resimler, video ve metin gibi yapılandırılmamış verileri anlamlandırmasını değil, aynı zamanda gelecekle ilgili tahminler yapmasını da sağlar. Pandas, veri bilimi ekosistemine sıkı bir şekilde entegre olduğundan , diğerleri arasında scikit-learn , pytorch , numpy gibi yaygın olanlar da dahil olmak üzere makine öğrenimi kitaplıklarıyla iyi çalışması şaşırtıcı değildir. Burada, veri kümemizdeki bir metin sütununu anlamlandırmak için nispeten yeni bir doğal dil işleme kitaplığı olan spaCy kitaplığını kullanacağız. SpaCy, diğerlerinin yanı sıra kelime gömme, varlık tanıma, konuşma etiketlemenin bir parçası, sınıflandırma gibi işlemleri gerçekleştirmek için çeşitli kelime önceden eğitilmiş modeller sunar. spaCy'yi kurmak için aşağıdaki komutları çalıştırıyoruz:

Artık yüklediğimize göre, veri kümemizdeki her bir izin başvurusunda (yani satırda) yer alan faaliyet türlerini (örneğin, yıkım, kaldırma, değiştirme, vb.) anlamak istediğimizi varsayalım. Bunu önceden anlamak zordur, ancak 'Description'. Bu alanda bahsedilen fiillerin bir listesini çıkarmak için paketi kullanalım. Bunun bir parçası olarak, önce spaCy'nin 'en_core_web_md'modelini yüklüyoruz ve ardından modeli kullanarak açıklamanın belirtecindeki her bir fiili çıkararak ve aşağıdaki gibi bir dizide saklayarak takip ediyoruz.

Dolayısıyla, yukarıda da görebileceğimiz gibi, model, birkaç tanesini kaçırsa da (örneğin, yükle) fiilleri ayıklamak için makul bir iş çıkarıyor. Önceden eğitilmiş büyük modellerin (örneğin, trafo modelleri) artan mevcudiyetiyle, bu tür modellerin pandalar içindeki günlük veri işlemeye daha da fazla entegre olmasını bekliyorum.

Makine öğreniminin SQL veritabanlarına entegrasyonu olağanüstü derecede zordur. Bazı veritabanları makine öğrenimine özgü yapılar sunarken (ör. BigQuery ML), kullanıcıların başarabilecekleri sınırlıdır ve ayrıntılı kontrolleri yoktur. Başka bir hantal yaklaşım, makine öğrenimi yapmak için UDF'leri kullanmaktır. Genellikle olan şey, kullanıcıların makine öğrenimi gerçekleştirmek için verilerini veritabanı bağlamının dışına aktarmasıdır.

6. Pandas, kullanıcıların ara adımların doğruluğunu doğrulamasına yardımcı olmak için düzeni korur ve kullanıcıların siparişe göre çalışmasına izin verir; SQL yapmaz.

Pandalar düzeni korur. Bu, daha karmaşık sorgu ifadeleri oluşturulduğundan hata ayıklama ve doğrulama için önemlidir. Fiillerin spaCy çıkarılmasından sonraki taze örneğimle devam ederek 'explode', önceki veri çerçevesindeki bireysel fiilleri fiil başına bir tane olmak üzere birden çok satıra genişletmek için işlevi kullanmak istediğimi varsayalım; Basitçe aşağıdaki gibi yapabilirim.

Şimdi orijinal satır 1'e karşılık gelen üç satırım olduğuna dikkat edin, her fiilden bir tane çıkarılmış. Bu düzenin korunması, bu adımın doğruluğunu doğrulamayı kolaylaştırır. Bir SQL veritabanı kullanarak, bu çok daha zor olacaktır çünkü sıra garanti değildir, bu nedenle belirli bir satırın nerede sona erdiğini görmek için tüm çıktıya bakmak gerekir (veya bunun yerine belirli bir çıktı sırasını uygulamak için bir yan tümce ekleyin).ORDER BY

Çözüm

Bu gönderide, son kullanıcı açısından Pandas'ın SQL'den daha kullanışlı olduğu çeşitli yolları ele aldık. Bu, düzenin korunması, artımlı kompozisyon, adlandırma ve manipülasyon ve yol boyunca inceleme yoluyla Pandas sorgularını doğru bir şekilde oluşturma kolaylığını içerir. Buna görselleştirme ve makine öğrenimi dahil olmak üzere diğer veri bilimi ve veri analizi gereksinimleriyle entegrasyon da dahildir: Pandas, hem kullanıcıların tamamen Pandas içinde tahmine dayalı modellemeyi görselleştirmesine ve gerçekleştirmesine olanak tanır, hem de çıktıları diğer popüler görselleştirme ve makine öğrenimi kitaplıklarına bağlamak için kancalar sağlar. paketler, özellikle PyData ekosistemi içinde. Nihayetinde Pandas, tam teşekküllü bir programlama dili olan Python'da oturur ve onu oluşturan tüm gücü miras alır.

Pandas'ın SQL'den daha kullanışlı olduğu veya tersinin olduğu başka örnekler aklınıza gelirse, duymak isteriz! Tweetimize yanıt vermekten çekinmeyin ve daha fazla Pandalar / Python / veri bilimi içeriği için bizi Twitter veya LinkedIn'de takip edin!