- SQLite ve Python'ı yerel olarak kullanarak, tam teşekküllü bir veri ambarına veya Spark kümesine ihtiyaç duymadan gerçekçi bir SQL uygulama ortamı oluşturun.
- Öncelikle temel SQL becerilerini öğrenin: WHERE ile filtreleme, birden fazla tabloyu birleştirme ve GROUP BY ve HAVING ile veri toplama.
- Şemaları birincil ve yabancı anahtarlar içeren birden fazla tabloya normalleştirin, ardından analizlerinizde ilişkileri yeniden oluşturmak için JOIN işlemlerini kullanın.
- Yerel uygulamalarınızı etkileşimli SQL platformlarıyla birleştirerek mülakat tarzı sorulara hazırlanın ve modern veri araçlarıyla ilgili özgüveninizi yeniden kazanın.
Birkaç yıl aradan sonra SQL ve Python'a geri dönmeye çalışıyorsanız, kendinizi kaybolmuş hissetmeniz tamamen normaldir. Özellikle de önceki işinizde kullandığınız özel araçlar ve artık sahip olmadığınız rahat Databricks not defterleri varsa. Python, SQL ve hatta PySpark gerektiren modern iş ilanları, her kılavuz "talepler veri setinizi veri ambarınıza yükleyin" gibi bir şeyle başladığında ve siz de "İşte tam olarak sahip olmadığım şey bu" diye düşündüğünüzde göz korkutucu görünebilir.
İyi haber şu ki, bu öğrenme deneyiminin büyük bir kısmını kendi dizüstü bilgisayarınızda yeniden oluşturabilirsiniz. Ücretsiz araçlar, küçük örnek veri kümeleri ve yapılandırılmış bir dizi uygulama problemi kullanarak, bu kılavuzda, gerçekçi bir yerel ortamın nasıl oluşturulacağını, SQL'in nasıl çalıştığını (temel sorgulardan JOIN'lere ve toplama işlemlerine kadar) ve bu SQL sorgularını Python'da nasıl sarmalayacağınızı, böylece modern veri işlerinde karşılaşacağınız türden görevleri tam olarak nasıl uygulayabileceğinizi sade bir dille anlatacağız.
SQLite ve Python kullanarak basit bir yerel uygulama ortamı oluşturmak
SQL ve Python'ı birlikte kullanmak için tam teşekküllü bir veri ambarına veya Spark kümesine ihtiyacınız yok.Öğrenme ve mülakat hazırlığı için SQLite gibi hafif bir gömülü veritabanı fazlasıyla yeterlidir. SQLite tüm verilerini diskte tek bir dosyada saklar, bu da onu oyuncak projeler, prototipler ve eğitim amaçlı alıştırmalar için mükemmel kılar.
Kavramsal olarak, bir SQLite veritabanı, birden fazla sayfaya sahip bir elektronik tabloya çok benzer.: her sayfa bir tabloher satır bir kayıtve her sütun bir alanİlişkisel veritabanı terminolojisinde tablolara bazen "ilişkiler", satırlara "tuple" ve sütunlara "nitelikler" denir, ancak uygulamalı çalışmalarda günlük kullanılan tablo, satır ve sütun terimlerini rahatlıkla kullanabilirsiniz.
Python, sqlite3 adı verilen yerleşik bir SQLite sürücüsüyle birlikte gelir.Bu, ayrı bir veritabanı sunucusu kurmanıza gerek olmadığı anlamına gelir. Python betiğiniz bir bağlantı açacaktır. .sqlite dosyayı (yoksa oluşturarak) elde edin. imleç (Dosya tanıtıcısına çok benzeyen) bir nesne oluşturun ve ardından bu imleç aracılığıyla SQL komutları gönderin. execute(). Bizim görmek SQLite SELECT ve WHERE sorguları Veri okuma ve filtreleme işlemlerine dair pratik örnekler içeren kılavuz.
Bu makale Python'dan SQLite çalıştırmaya odaklanırken, "SQLite için Veritabanı Tarayıcısı" adlı kullanışlı bir GUI aracı da mevcuttur. (Bazen SQLite için DB Browser olarak dağıtılır). Bununla tabloları görsel olarak inceleyebilir, birkaç satırı elle ekleyebilir veya düzenleyebilir ve basit SQL ifadeleri çalıştırabilirsiniz. Veritabanı dosyaları için bir metin editörü gibidir: hızlı manuel düzenlemeler GUI'de daha kolaydır, ancak tekrarlayan veya karmaşık her şey Python'da betik olarak yazılmalıdır.
İlişkisel veritabanları, Python listeleri veya sözlüklerinden daha katıdır: tanımlanmış bir şemada ısrar ederler.Bir tablo oluşturduğunuzda, sütun adlarını ve beklediğiniz veri türlerini (metin, tamsayı, tarih/saat vb.) belirtmeniz gerekir. SQLite daha sonra verileri, veri kümeniz belleğe rahatça sığacak boyutun ötesine geçse bile, aramaları verimli tutacak şekilde depolar ve indeksler. Pratik öğrenme yolları ve uygulamalı örnekler için lütfen ilgili kaynaklara bakın. análisis de datos con SQL.
SQL ve Python kullanarak tablo oluşturma ve veri ekleme
Pratik yapmaya başlamak için öncelikle bir tabloya ihtiyacınız var – bunu verilerinizin şeklini tasarlamak olarak düşünün.Diyelim ki küçük bir müzik kütüphanesi tablosu oluşturmak istiyorsunuz. Python'ın kütüphanesini kullanarak... sqlite3 Bu modül sayesinde bir veritabanı dosyasına bağlanabilir, varsa tablonun eski sürümünü silebilir ve ardından açıkça tanımlanmış sütun tiplerine sahip yeni bir tablo oluşturabilirsiniz.
İşte bu akışın Python'da kavramsal olarak nasıl göründüğü.: siz ararsınız sqlite3.connect('music.sqlite') Veritabanı dosyasını açmak veya oluşturmak için, ardından çağrı yapın. conn.cursor() Bir imleç elde etmek için. Bu imleç aracılığıyla aşağıdaki gibi SQL komutları çalıştırabilirsiniz. DROP TABLE IF EXISTS Songs Önceki şemaları temizlemek için, ardından CREATE TABLE Songs (title TEXT, plays INTEGER) İki sütunlu yeni bir tablo tanımlamak.
Tablo oluşturulduktan sonra, DDL'den (Veri Tanımlama Dili) DML'ye (Veri İşleme Dili) geçiş yaparsınız. INSERT ifadeleriPython'da her zaman parametreli sorgular kullanmalısınız: yazın INSERT INTO Songs (title, plays) VALUES (?, ?) ve şu şekilde bir demet geçirin: ('Thunderstruck', 20) ikinci argüman olarak execute()Soru işaretleri, Python'ın güvenle yerine koyacağı yer tutuculardır ve SQL enjeksiyonu sorunlarından ve alıntı hatalarından kaçınmanıza yardımcı olur.
Ekleme veya güncelleme işlemlerini gerçekleştirdikten sonra aramanız gerekir. conn.commit() Değişikliklerinizi diske kaydetmek içinOnaylayana kadar işlemler yalnızca bir işlem arabelleğinde kalır. Bu, basit dosya yazma işlemlerinden farklıdır ve erken dönemde edinilmesi gereken en önemli alışkanlıklardan biridir: sorgula, değiştir, sonra onayla.
Verilerinizi geri okumak için şunu kullanırsınız: SELECT ifadeyi ve imleç üzerinde yinelemeyi gerçekleştirin.. Örneğin, SELECT title, plays FROM Songs Her satırı Python demeti (tuple) olarak aktaracaktır, örneğin: ('Thunderstruck', 20)İmleç tüm sonuçları aynı anda yüklemez; bunun yerine satırları yavaş yavaş getirir, bu da daha büyük veri kümeleriyle uğraşırken faydalı olur.
SQL sorgusunun temel öğeleri ve WHERE ile filtreleme
Her SQL sorgusu, standart bir sırayla görünen küçük bir madde kümesi üzerine kuruludur.: SELECT, FROM, WHERE, GROUP BY, HAVING, ve ORDER BYEn azından hangi sütunları istediğinizi belirtmeniz gerekir (SELECT) ve hangi tablodan (FROMİsteğe bağlı maddeler daha sonra sonuçları iyileştirir, birleştirir, birleştirilmiş sonuçları filtreler ve sıralar.
MKS WHERE Bu madde, herhangi bir gruplandırma veya toplama işlemi gerçekleşmeden önce satırları filtreler.Sayısal sütunlar için karşılaştırma operatörleri kullanabilirsiniz, örneğin: =, != (Ya da <>), >, <, >=, <=Metin sütunları, bu özelliklerin yanı sıra desen eşleştirme yoluyla da desteklenir. LIKE ve üyelik kontrolleri aracılığıyla INTarih/saat değerleri de aynı ilişkisel karşılaştırmaları destekler ve aralıklar genellikle şu şekilde ifade edilir: BETWEEN.
SQL'de boş değerlerin işlenmesi, ayrıntılı bir şekilde ele alınmayı hak edecek kadar tuhaf bir konudur.Düzenli karşılaştırmalar gibi = hem de != Beklediğiniz gibi davranmayın. NULLDolayısıyla SQL sağlar IS NULL hem de IS NOT NULL Eksik değerleri kontrol etmek için. Mantıksal (Boolean) sütunlar genellikle şu şekilde çalışır: = hem de !=Ama yine de ihtiyacınız var. IS NULL Mantıksal değerin kendisi eksik olabilir.
Birden fazla koşulu bir araya getirirken şunu unutmayın: AND hem de OR öncelik kurallarına uymakEğer yazarsanız... age < 5 OR age > 10 AND breed = 'Ragdoll'SQL, değerlendirmeyi yapacaktır. AND Öncelikle, "5 yaşından küçük veya 10 yaşından büyük Ragdoll kedileri" ifadesini kullanmak için parantez kullanmalısınız: (age < 5 OR age > 10) AND breed = 'Ragdoll'Bu mantıksal kombinasyonlara aşina olmak, gerçek dünya analitik çalışmaları için çok önemlidir.
Desen eşleştirme ile LIKE Belirli parçalarla başlayan, biten veya bunları içeren dizeleri aramanıza olanak tanır.Yüzde işareti % herhangi bir karakter dizisi için joker karakterdir, bu nedenle breed LIKE 'R%' "R" harfiyle başlayan köpek ırklarını bulur. fav_toy LIKE 'ball%' Adı "top" ile başlayan oyuncaklar bulur ve coloration LIKE '%m' “m” ile biten renk desenlerini bulur. Şununla eşleştirilir: AND/ORBu da güçlü bir metin filtreleme araç seti haline geliyor.
Örnek bir veri kümesiyle tek tablolu sorguları uygulama pratiği yapma
Kas hafızasını geliştirmek için faydalı bir yöntem, kafanızda küçük bir şema oluşturmak ve bu şemaya karşı birçok sorgu çözmektir.Birini hayal edin cat Sütunları şu şekilde olan bir tablo id, name, breed, coloration, age, sex, ve fav_toyBu size, en temel sorgu kalıplarını uygulamak için yeterli çeşitlilik (metin, sayılar, basit kategorik veriler) sağlar.
Mantıksal (boolean) kontroller için genellikle bir sütuna göre filtreleme yapılır ve ardından ek koşullar eklenir.Kaydedilmiş favori oyuncağı olmayan "sıkıcı" erkek kedileri listelemek için şunları seçmeniz gerekir: name nerede sex = 'M' hem de fav_toy IS NULLBu, boş değer kontrollerinin, belirli bir satır alt kümesini izole etmek için basit karşılaştırmalarla nasıl birlikte kullanıldığını göstermektedir.
Belirli ırkları hedeflemek veya dışlamak için, eşitliği mantıksal olumsuzlama ile birleştirirsiniz.Sadece belirli yaşlardaki Ragdoll kedilerini seçmek şu amaçlarla kullanılır: breed = 'Ragdoll'Persler ve Siyamlılar hariç tutulduğunda şöyle görünebilir: breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese'Bazı veritabanları desteklerken... NOT IN ('Persian', 'Siamese')Açık kalıbı uygulamak, anlayışınızı pekiştirmenize yardımcı olur. NOT hem de LIKE.
"Oyuncaklara bayılan ve İran veya Siyam kedisi olmayan dişi kediler" gibi alıştırmalar, metin filtrelerini, eşitlik operatörlerini ve mantıksal işlemleri birleştirmenizi gerektirir.Siz seçerdiniz. id, name, breed, coloration ve satırları şu şekilde sınırlandırın: sex = 'F', fav_toy = 'teaser've istenmeyen ırkları dışlayan bileşik bir koşul. Parantez içindeki ifadelere dikkat etmek, tüm alt koşulların amaçlanan kombinasyonda uygulanmasını sağlar.
Bu basit SQL örneklerini iyice öğrendikten sonra, parametreli sorgular kullanarak bunları Python üzerinden yeniden uygulayın.Kısa metinler yazarak köpek cinsi, minimum yaş veya oyuncak tipi gibi bilgileri isteyin. input()onları prize takın WHERE Bu, sorgu yazma ile gerçek uygulama kodu arasında köprü görevi gören ve birçok genç veri uzmanının beklediği şeydir.
SQL JOIN'lerini Anlamak ve Uygulamak
Oyuncak sorunlarını geride bıraktığınız anda, sürekli olarak birden fazla masaya katılacaksınız.JOIN işlemleri, ilgili veri kümelerini birbirine bağlamanın yoludur: müşterileri siparişlere, sanatçıları sanat eserlerine, oyunları şirketlere vb. SQL'de, tablolar arasında hangi sütunların eşleşmesi gerektiğini tanımlarsınız ve veritabanı motoru satırları birleştirerek tek bir sonuç kümesi oluşturur.
Mülakatlarda ve gerçek projelerde karşılaşacağınız dört temel işe alım türü vardır.: INNER JOIN (çoğu zaman sadece yazılır) JOIN), LEFT JOIN, RIGHT JOIN, ve FULL OUTER JOINİç birleştirme (inner join) yalnızca her iki tabloda da eşleşen anahtarların bulunduğu satırları döndürür; sol birleştirme (left join) ise sol tablodaki tüm satırları koruyarak boşluğu doldurur. NULLSağ tabloda eşleşme olmadığında; sağ birleştirme simetrik bir işlem yapar; ve tam dış birleştirme, mümkün olan yerlerde eşleşerek ve kullanarak her iki taraftan da her satırı döndürür. NULL değil.
Düşünmek LEFT JOIN hem de RIGHT JOIN "Bu tarafa daha çok güvenin" operasyonları olarakSol birleştirmede, sol tablo birincil doğruluk kaynağıdır: sağ tablo hiçbir şey katkıda bulunmasa bile, soldaki her satır çıktıda en az bir kez görünür. Tam birleştirmede ise, hiçbir taraf ayrıcalıklı değildir – her iki tablodaki tüm anahtarları bir araya getirir ve çakıştıkları yerlerde hizalarsınız.
Çoklu tablo sorgularının okunabilirliğini korumak için tablolarınıza her zaman takma ad verin.Yazmak yerine... SELECT artist.name tekrar tekrar yaz FROM artist AS a ve ardından sütunlara şu şekilde referans verin: a.name. Benzer şekilde, piece_of_art olabilir poa, ve museum olabilir mSorgunuz üç veya daha fazla birleştirmeye (join) ulaştığında, iyi takma adlar (alias) netlik ile karmaşa arasındaki farkı yaratır.
Klasik bir eğitim düzeninde üç masa kullanılır: artist, museum, ve piece_of_art. artist masa tutabilir id, name, birth_year, death_year ve suluboya veya heykel gibi ana bir alan. museum masa mağazaları id, name hem de country. piece_of_art masa tutar id, name, artist_id hem de museum_idSon iki sütun, her bir sanat eserini yaratıcısına ve bulunduğu yere bağlayan yabancı anahtarlardır.
Bu şema ile iç birleştirmeler, sol birleştirmeler ve koşullu filtreler üzerinde pratik yapabilirsiniz.Örneğin, 1800'den sonra doğmuş ve 50 yıldan fazla yaşamış sanatçıları eserlerinin adlarıyla birlikte listelemek için şu listeyi eklemeniz gerekir: artist hem de piece_of_art on artist.id = piece_of_art.artist_id ve ardından filtreleyin death_year - birth_year > 50 hem de birth_year > 1800Seçilen sütunlara takma ad verin. artist_name hem de piece_name açıklık için.
Müze isimleri ve ülkeleriyle birlikte tüm sanat eserlerini görmek için – müzesi bulunmayan “kayıp” eserler de dahil. – şunu kullanırdınız LEFT JOIN itibaren piece_of_art için museum on museum_idBu sayede, müze ile bağlantısı olmayan sanat eserleri de sonuçta yer almaya devam eder. NULL Müze sütunlarında. Filtreleme satırları şu şekildedir: artist_id IS NULL Bu sayede, bilinmeyen sanatçıların eserlerini tespit edebilir ve aynı zamanda bu eserlere sahip müzelerle bağlantı kurabilirsiniz.
Daha ileri seviye egzersizlerde aynı anda üç tabloyu birleştirmeniz isteniyor.Her bir sanat eserini hem sanatçısının adıyla hem de müze adıyla listelemek için, şu listeye katılmanız gerekir: museum için piece_of_art on museum.id = piece_of_art.museum_idsonra katıl artist on artist.id = piece_of_art.artist_id. Sade bir şekilde kullanarak JOIN (İç birleştirme) kasıtlı olarak sanatçısı veya müzesi olmayan eserleri dışarıda bırakarak, birleştirme türünün satır sayısını nasıl etkilediği konusunda size bir fikir verir.
Uygulamada Gruplandırma, GROUP BY ve HAVING
Verileri alıp birleştirmeyi öğrendikten sonraki en önemli beceri, onları özetlemektir.. Birleştirme fonksiyonları gibi SUM(), AVG(), COUNT(), MAX(), ve MIN() Satır kümeleri üzerinde ölçümler hesaplayın. GROUP BY Veri setinizi gruplara ayırır ve bu işlevleri her grup içinde uygular; örneğin, her yıl, her şirket veya her sanatçı için bir grup. Bu kavramları uygulamak için yapılandırılmış kursları tercih ediyorsanız, şunlara bakın: kapsamlı SQL kursu.
Basit bir şeyi hayal edin sales_table sütunlu year, month, ve sales. Düz bir SELECT SUM(sales) AS total_sales FROM sales_table Bu size tüm satırlardaki genel toplamı verir. Ekleme işlemi GROUP BY year Soruyu değiştiriyor: Artık tek bir genel rakam yerine yıllık toplam satışları soruyorsunuz.
Temel kural şudur: Tablonuzdaki her bir toplama işlemi uygulanmamış sütun... SELECT görünmelidir GROUP BY. Seçerseniz year hem de SUM(sales)Siz gruplandırıyorsunuz year. Seçerseniz year hem de month Toplamlarla birlikte, daha sonra her ikisine göre de gruplandırırsınız. year hem de monthKavramsal olarak, gruplandırılmış sütunların farklı kombinasyonları grupları tanımlar.
WHERE hem de HAVING İkisi de filtre görevi görüyor, ancak farklı aşamalarda etkili oluyorlar.. WHERE Gruplandırma veya toplama işlemi gerçekleşmeden önce ham satırları filtreler. HAVING Gruplandırılmış sonuçları toplama ifadeleri kullanarak filtreler. Örneğin, şunları yapabilirsiniz: WHERE production_year BETWEEN 2000 AND 2009 ve sonra HAVING SUM(revenue) > 4000000 Sadece "iyi oyunları" dört milyon dolardan fazla gelir elde eden şirketleri bünyemizde tutmak.
Daha gerçekçi bir uygulama şeması şöyledir: games tablo gibi sütunlarla id, title, company, type, production_year, system, production_cost, revenue, ve ratingBu tek tablo ile ortalama alma, sayım yapma, toplama, gruplandırma ve sıralama gibi analitik SQL'in temel işlemlerini gerçekleştirebilirsiniz.
Örneğin, 2010 ile 2015 yılları arasında piyasaya sürülen ve 7'den yüksek puan alan oyunların ortalama üretim maliyetini hesaplamak için...siz seçerdiniz AVG(production_cost) ve satırları şu şekilde sınırlandırın: WHERE production_year BETWEEN 2010 AND 2015 AND rating > 7Bu, klasik bir mülakat sorusu ve bunu kolayca Python'a entegre edip ortaya çıkan tek sayıyı yazdırabilirsiniz.
Aynı kaynaktan doğrudan yıllık bazda istatistikler de oluşturabilirsiniz. games tablo. Gruplandırarak production_yeardaha sonra hesaplayın COUNT(*) AS count, AVG(production_cost) AS avg_cost, ve AVG(revenue) AS avg_revenueBu tür bir sorgu, BI panolarında ve raporlama araçlarında son derece yaygın olan, kompakt bir zaman serisi görünümü sağlar.
Şirketleri tüm yıllardaki brüt karlarına göre sıralamak için, aşağıdaki verileri bir araya getirebilirsiniz: companyİşte kullanışlı bir örnek: SELECT company, SUM(revenue - production_cost) AS gross_profit_sum FROM games GROUP BY 1 ORDER BY 2 DESC. İşte GROUP BY 1 hem de ORDER BY 2 Sütun konumlarını kullanın SELECT Liste yapısı, işleri özlü tutmaya yardımcı olur ancak daha sonra sütunları yeniden sıralayarak sorguları bozmamak için dikkatli kullanılmalıdır.
Daha karmaşık komut istemleri, filtreleri, gruplandırmayı ve toplama sonrası filtreleri bir araya getirir.Örneğin, "iyi oyunlar"ı 2000 ile 2009 yılları arasında üretilen, 6'nın üzerinde puan alan ve geliri üretim maliyetinden fazla olan oyunlar olarak tanımladığınızı varsayalım. Her şirket için, bu tür oyunların sayısını ve toplam gelirlerini istiyorsunuz, ancak yalnızca iyi oyunlardan elde edilen geliri 4,000,000'u aşan şirketler için. Satırları şu şekilde filtreleyebilirsiniz: WHERE on production_year, ratingve karlılık, gruplandırılmış company, hesapla COUNT(company) hem de SUM(revenue), sonra uygula HAVING SUM(revenue) > 4000000Bu tek sorgu, analitik görevlerde karşılaşacağınız gerçek dünyadaki zihinsel adımların çoğunu kapsar.
Birden fazla tablo ve anahtar içeren verilerin modellenmesi
Tek tablolu tasarımlar sizi oldukça ileriye götürür, ancak ilişkisel veritabanları, verileri birden fazla tabloya normalleştirdiğinizde en iyi performansını gösterir.Normalizasyon, gereksiz depolamayı ortadan kaldırma ve ilişkileri anahtarlar aracılığıyla temsil etme işlemidir. Bu, veritabanınızı daha küçük, daha hızlı ve hataya daha az eğilimli hale getirir.
Basit ama öğretici bir örnek, Twitter benzeri sosyal grafiklerin taranmasından geliyor.Örneğin, kullanıcı hesaplarını ve aralarındaki "takip" ilişkilerini izlemek istediğinizi varsayalım. Basit bir yaklaşım, her satırda hem takipçi hem de takip edilen adlarının metin olarak tekrarlandığı tek bir tablo oluşturmak olabilir. Bu da hızla yoğun tekrarlara ve tutarsız yazım hatalarına yol açar.
Bunun yerine, şeyleri şu şekilde ayırırsınız: People masa ve bir Follows tablo. People tamsayı olabilir id birincil anahtar olarak, benzersiz name (ekran adı veya kullanıcı adı) ve bir retrieved Bu, söz konusu hesabın arkadaş listesini daha önce tarayıp taramadığınızı gösteren bir işarettir. Follows tamsayı çiftlerini tutar from_id hem de to_idBu, bir kullanıcıdan diğerine yönlendirilmiş bağlantıları temsil eder.
Bu model üç temel kavram tarafından yapılandırılır: mantıksal anahtarlar, birincil anahtarlar ve yabancı anahtarlar.Mantıksal anahtar, dış dünyanın bir kayda atıfta bulunmak için kullandığı şeydir; burada, Twitter kullanıcı adı. nameBirincil anahtar genellikle veritabanı tarafından oluşturulan bir tamsayıdır (idHer satırı benzersiz şekilde tanımlayan ve indeksleme ve karşılaştırması ucuz olan bir tamsayıdır. Yabancı anahtar, başka bir tablodaki birincil anahtara işaret eden bir tamsayıdır. from_id hem de to_id içinde Follows Tablo, yabancı anahtarlar aracılığıyla referans veriyor. People.id.
Veri kalitesini sağlamak için tablo tanımlarınızda kısıtlamalar belirtirsiniz.. Örneğin, name TEXT UNIQUE in People Bu, aynı tutamağa sahip iki satırı yanlışlıkla ekleyememenizi sağlar. UNIQUE(from_id, to_id) kısıtlama Follows Aynı takip kenarını birden fazla kez saklamanızı engeller. Bu kısıtlamalar, Python'da upsert mantığı yazmaya başladığınızda birer güvenlik ağı görevi de görür.
Python'da sqlite3 modül, yaygın bir kullanım şeklidir. INSERT OR IGNORE bu kısıtlamalara zarif bir şekilde saygı göstermekEğer bir şey eklemeye çalışırsanız... name Eğer zaten mevcutsa, SQLite hata vermek yerine işlemi sessizce atlayacaktır. Daha sonra kontrol edebilirsiniz. cursor.rowcount Bir satırın gerçekten eklenip eklenmediğini görmek ve buna güvenmek için cursor.lastrowid atanan kişiyi keşfetmek id Yeni eklenen kullanıcılar için.
Kodunuz yeni bir ekran adı aldığında, öncelikle karşılık gelen kullanıcı adını aramaya çalışmalıdır. id. Eğer bir SELECT id FROM People WHERE name = ? Bir satır döndürürse, o tamsayıyı yeniden kullanırsınız. Aksi takdirde, adı eklersiniz. retrieved = 0Kaydet ve sonra oku lastrowidBu "bul veya ekle" kalıbı, birçok veri alım komut dosyasının temelini oluşturur.
Hem takip edilen hem de takip edilenin kimlik numaraları bilindikten sonra, ilişkinin kaydedilmesi işlemi gerçekleştirilir. Follows sadece başka INSERT OR IGNORE. senin UNIQUE(from_id, to_id) Kısıtlama, yinelenen kayıtları ele alır ve satır yinelemelerini ayrıntılı olarak yönetmek yerine, bir sonraki hangi profillerin taranacağına dair daha üst düzey mantığa odaklanabilirsiniz.
Normalleştirilmiş tablolardan ilişkileri yeniden oluşturmak için JOIN kullanma
Normalleştirilmiş şemalar, dolaylılık karşılığında gereksiz tekrarları ortadan kaldırır: tekrarlanan dizeler yerine tamsayılar depolarsınız, ancak artık tam resmi yeniden oluşturmak için tabloları birleştirmeniz gerekir.İşte SQL tam olarak bunu yapıyor. JOIN Bu yapı, JOIN işlemlerinin yoğun olarak kullanıldığı sorgular için tasarlanmıştır ve bir kez alıştıktan sonra, bu tür sorgular tamamen doğal hissettirir.
Sosyal grafik örneğinde, hangi kullanıcının kim olduğunu görmek istiyorsanız... id = 2 takip ediyorSiz de katılabilirsiniz. Follows için People hedef tarafta. Kavramsal olarak, koşuyorsunuz. SELECT * FROM Follows JOIN People ON Follows.to_id = People.id WHERE Follows.from_id = 2Bu işlem, takip edilen her öğe için hem sayısal kenarı hem de insan tarafından okunabilir adı içeren birleştirilmiş satırlar oluşturur.
Sonuçtaki her satır, her iki tablodaki sütunları birleştiren bir "meta satır"dır.İlk iki sütun şöyle olabilir: (from_id, to_id) itibaren FollowsSonraki sütunlar ise şunlara aittir: People - sevmek (id, name, retrieved). Çünkü JOIN koşul zorunlu kılar Follows.to_id = People.idBu ilişkiyi açıkça görebilirsiniz: her satırın ikinci ve üçüncü sütunları birbirine eşleşiyor.
Bu aynı model doğal olarak daha fazla tabloya da yayılır.Bunu zaten gördünüz. artist, piece_of_art, ve museumve Twitter tarayıcısı bunu şu şekilde gösteriyor: People hem de FollowsDaha karmaşık analitik süreçlerde, çok yönlü soruları yanıtlamak için olgu tablolarını (olaylar, siparişler) birden fazla boyut tablosuyla (kullanıcılar, ürünler, kampanyalar) birleştirebilirsiniz.
Kodunuzda hata ayıklama yaparken veya şemanın nasıl bir araya geldiğini öğrenirken, "Python'ı çalıştır, ardından SQLite için DB Browser ile incele" iş akışı son derece etkilidir.Veritabanını doldurmak için komut dosyanızı çalıştırın, dosyayı kilitli tutan tüm GUI örneklerini kapatın, ardından dosyayı açın. .sqlite Dosyayı tarayıcıda açın. Oradan her tablonun içeriğini inceleyebilir ve anlık sorgular çalıştırabilirsiniz. SELECT Varsayımlarınızı doğrulamak için sorgular.
Bir uyarı: SQLite dosya kilitlerini zorunlu kılar, bu nedenle DB Browser veritabanını düzenleme modunda açık tutuyorsa, Python betiğiniz bağlanmada veya değişiklikleri kaydetmede başarısız olabilir.Çözüm, Python kodunuzu tekrar çalıştırmadan önce veritabanını grafik arayüzden kapatmak (veya tarayıcıyı tamamen kapatmak) olacaktır. Veritabanı dosyanızı kilitleyen araçları kapatma alışkanlığı edinmek, gizemli "veritabanı kilitli" hatalarından sizi kurtaracaktır.
Şema tasarımı, kısıtlamalar, Python'da parametreli sorgular, JOIN'ler, GROUP BY ve HAVING gibi teknikleri bir araya getirmek size güçlü bir yerel laboratuvar sunar. İş yerinde yapacağınız SQL ve Python çalışmalarının tam olarak aynısını uygulamak için. Sadece SQLite ve birkaç iyi yapılandırılmış örnek tablo ile mülakat tarzı soruları prova edebilir, analitik mantığı prototipleyebilir ve modern veri araçlarına olan güveninizi yeniden kazanabilirsiniz.
DataLemur gibi platformlar ve etkileşimli kurslar işte burada devreye giriyor.
Yerel uygulamalarınıza ek olarak, etkileşimli platformlar size anında geri bildirimle daha yönlendirilmiş bir deneyim sunabilir.Gerçek dünya endüstri deneyiminden doğan araçlar – örneğin, günlerini SQL ve Python yazarak ve A/B testleri yaparak geçiren eski Facebook ve Google veri mühendisleri tarafından oluşturulan platformlar – genellikle içeriklerini gerçek mülakat soruları ve analitik senaryolar etrafında şekillendirir.
Veri görüşmeleri için istatistik, makine öğrenimi ve iş sezgisi konularını ele alan kitaplar teori açısından harika kaynaklardır.Ancak bunlar her zaman birçok öğrencinin aradığı uygulamalı SQL oyun alanını sağlamaz. İşte bu boşluğu bazı modern araçlar doldurmayı amaçlıyor: Yüzlerce mülakat tarzı soruyu tarayıcı içi bir SQL ve analiz ortamına yeniden paketleyerek, yerel kurulum konusunda endişelenmeden sorgularınızı çalıştırmanıza, ince ayar yapmanıza ve tekrar çalıştırmanıza olanak tanıyorlar. Ayrıca aşağıdaki gibi uygulamalı örnekleri de deneyebilirsiniz. müşteri kaybı risk değerlendirmesi SQL'i temel makine öğrenimi iş akışlarıyla birleştirmek.
Burada ele aldığımız konuları yansıtan etkileşimli SQL kurslarını da bulacaksınız.: tek tablolu sorgular ile SELECT hem de WHEREİki veya üç tablo arasında birleştirme, toplama ve gruplandırma, alt sorgular ve daha fazlası. Bu kursların çoğu, oyunlar, müzeler veya işlem satışları gibi gerçekçi veri kümelerine dayanır; böylece sorular, yapay bulmacalar yerine gerçek iş sorunları gibi görünür.
PySpark, DuckDB veya dbt gibi araçların dokümantasyonundan bunalmış hissediyorsanız, SQL temelleriniz sağlamlaşana kadar bunları ertelemek son derece mantıklıdır.Öncelikle SQLite ve Python'a odaklanmak, küme yapılandırması veya bulut izinleriyle uğraşmadan temel sorgu kalıplarını içselleştirmenizi sağlar. Temeller ikinci doğanız haline geldikten sonra, PySpark öğrenmek yeni sorgu kavramlarından ziyade dağıtılmış yürütme ile ilgili hale gelir.
Sonuç olarak, basit bir yerel kurulum, yapılandırılmış alıştırma problemleri ve ara sıra etkileşimli platformların kullanımı bir araya getirildiğinde başarı sağlanır. Size her şeyin en iyisini sunar: ortamınız üzerinde tam kontrol, güçlü kavramsal temel ve önde gelen işverenlerin sevdiği soru tarzlarına maruz kalma. Düzenli pratikle, bir zamanlar göz korkutucu olan SQL, Python ve veri mühendisliği araçlarının karışımı, yeni rollerde güvenle kullanabileceğiniz tanıdık, hatta keyifli bir araç seti haline gelir.
Özetle, önünüzdeki yol açık: Python ile bir SQLite veritabanı oluşturun, birkaç gerçekçi tablo tasarlayın, temel ve orta seviye SQL kalıplarını (filtreler, birleştirmeler, toplama, gruplandırma, HAVING) uygulayın, bu sorguları Python betiklerine sarın ve isteğe bağlı olarak, tam olarak sizin bulunduğunuz noktada olan uzmanlar tarafından oluşturulmuş etkileşimli SQL platformlarıyla öğreniminizi destekleyin.Bu sayede teknik sezgilerinizi yeniden geliştirecek, modern veri yığınlarıyla ilgili kaygılarınızı azaltacak ve günümüzün veri rollerinin SQL ve Python gereksinimlerini karşılamaya hazır olacaksınız.