In this lesson in PostgreSQL program which is an open source software program;
A. How to use PostgreSQL in the best way (psql)
B. PostgreSQL advanced functions
C. To examine how PostgreSQL and Python work well together, we'll use the New York Stock Exchange (NYSE) "Daily NYSE Group Volume in NYSE Listed" dataset.
Açık kaynak yazılımlı bir program olan PostgreSQL programında bu dersimizde;
A. PostgreSQL'in (psql) en iyi şekilde nasıl kullacağız
B. PostgreSQL gelişmiş işlevleri
C. PostgreSQL ve Python'un birlikte nasıl çalıştığını incelemek için New York Borsası'nda (NYSE Listelenen NYSE Listesinde Bulunan Günlük NYSE Grup Hacmi) veri kümesini inceleyeceğiz
Needs are;
A.PostgreSQL software
B. Python Instructions
Gereksinimler ise;
A. PostgreSQL yazılımı
B. Python Komutlar
The difficulty level of commands we use is middle.
Kullanacağımız komutların zorluk derecesi orta
İyi tasarlanmış PostgreSQL sorguları birçok satırlık Python kodunu değiştirebilir, böylece daha hızlı ve daha verimli bir geliştirme sağlanabilir.
Python, hızlı çalışmanıza ve sistemleri daha verimli bir şekilde entegre etmenize izin veren bir programlama dilidir ve PostgreSQL dünyanın en gelişmiş açık kaynak veritabanıdır. Bu ikisi çok iyi birlikte çalışıyorlar. Bu makale, basit bir sorunun çözümü için PostgreSQL'in (psql) en iyi şekilde nasıl kullanılacağını açıklamaktadır. Python kodunu bir probleme atmak cazip gelse de, her zaman en iyi seçim değildir.
Basit bir kullanım durumu
PostgreSQL ve Python'un birlikte nasıl çalıştığını incelemek için New York Borsası'ndaki (NYSE Listelenen NYSE Listesinde Bulunan Günlük NYSE Grup Hacmi) veri kümesini kullanacağız.Verileri indirmek için http://www.nyxdata.com/nysedata/asp/factbook/viewer_interactive.asp adresine gidin ve Pazar Etkinliği'ne tıklayın, ardından NYSE Listesinde Günlük NYSE Grup Hacmi ' ni tıklayın .
Daha sonra, "factbook.xls" dosyasını bilgisayarınıza kaydedip başlıkları kaldırmak için en üstteki "Excel" sembolünü tıklayın (aslında Tab tuşunu ayırıcı olarak kullanan bir CSV dosyasıdır) ve daha sonra " PostgreSQL tablosu.
Veri kümesini yüklemek
Verilerin nasıl göründüğü aşağıda. Rakamları virgülle ayrılmış binlerce dolar işaretleri içerdiğinden rakamları sayı olarak kolayca işleyemiyoruz.
2010 1/4/2010 1.425.504.460 4.628.151 $ 38.495.460.645
2010 1/5/2010 1.754.011.750 5.394.016 $ 43.932.043.406
2010 1/6/2010 1.655.507.953 5.494.460 $ 43.816.749.660
2010 1/7/2010 1.797.810.789 5.684.297 $ 44.104.237.184
Bunu değiştirmek için, geçici bir tablo tanımı oluşturabiliriz ve veriler yüklendikten sonra, (alter table) komutlar sayesinde uygun bir SQL veri türüne dönüştürebiliriz .
PostgreSQL'in copy işlevselliğini, CSV dosyasındaki verileri masaüstüne aktarmak için kullanabiliriz. (\copyVaryant) bir psql'in özgü komutudur ve verilerin istemci / sunucu akışı, yerel bir dosya okunurken ve herhangi bir PostgreSQL bağlantısı üzerinden içeriğini göndermede başlatılır.
Uygulama kodu ve SQL
Bu sorguyu çalıştırmak için psql uygulamasını kullanırız ve psql değişkenlerin kullanımını destekler. \set Komut setleri '2017-02-01'değişkene değer verir -start-,
sonra ifade ile değişkeni yeniden kullanabiliriz :'start'.
Yazma date :'start' ;
PostgreSQL'te dekore edilmiş bir literal ifade (date '2017-02-01')olarak adlandırılanla eşdeğerdir . Bu, değişmez değerin veri türünü ayarlamamızı sağlar; böylece PostgreSQL sorgu ayrıştırıcısı, onu bağlamdan tahmin etmemize veya onu çıkarmamamıza izin verir.
Bu SQL sorgusu ayrıca (interval), ayın sonunu hesaplamak için veri türünü kullanır; tabii ki, örneğimizde Şubat ayının son günüdür. Ayın ilk gününe bir aralık değeri eklemek bize sonraki ayın ilk gününü verir, bu nedenle bu günü sonuç kümesinden çıkarmak için "küçüktür" (<) katı işlecini kullanırız.
to_char() ı dönüşüm üzerinde ayrıntılı kontrol ile kendi metin temsiline dönüştüreceğiz. Biçim, şablon kalıplarından oluşur . Aşağıdaki kalıpları kullanacağız:
- Belirtilen basamak sayısıyla değer
- L: para birimi simgesi (yerel ayarı kullanır)
- G: grup ayırıcı (yerel ayarı kullanır)
İşte sorgumuzun sonucu:
Veri seti, Şubat 2017'de (NYSE açık olduğu günler) yalnızca 19 güne ait veri içeriyor. Her takvim günü için bir girişi görüntülemek ve eksik tarihleri eşleşen verilerle veya sıfır rakamla doldurmak istersek ne olur?
İşte tipik bir Python uygulaması:
Bu uygulamada, yukarıdaki SQL sorgusuna sonuç kümemizi getirmek ve ayrıca bir sözlükte saklamak için kullanıyoruz. Diktinin anahtarı ayın günüdür, dolayısıyla bir takvimin gün listesinde döngü yapabilir, elimizde eşleşen verileri alabilir ve herhangi bir veri olmadığında varsayılan sonuç kümesi (ör. Sıfırlar) yükleyebiliriz.
Aşağıda, programı çalıştırırken çıktı bulunmaktadır. Gördüğünüz gibi, psql çıktısına benzer bir çıktı seçtik, böylece aynı sonuca ulaşmak için gereken çabayı kolaylaştırdı.
PostgreSQL gelişmiş işlevleri
Aynı şey, tek bir SQL sorgusu ile sorunun çözülmesine "etkisiz" herhangi bir uygulama kodu olmadan gerçekleştirilebilir:
Bu sorguda sizin için yeni olabilecek birkaç temel SQL ve PostgreSQL tekniği kullanıyoruz:
SQL -- comment, açılıştan satır sonuna kadar, ya da bir /* comment */stille C-stilinde çalışarak stilde yazılan yorumları kabul eder .Herhangi bir programlama dili ile olduğu gibi, yorumlar sadece koddan zor olan girdileri not etmek için kullanılır.
generate_series(), bir PostgreSQL dönüşümlü bir fonksiyonu olup, dokümantasyonda "Bir basamak atlayarak baştan sona bir dizi değer üret" diye okunmaktadır. PostgreSQL takvimi bilindiği için, sorgunun içinde ayın ilk gününü tek bir parametre olarak herhangi bir aydan tüm günleri oluşturmak kolaydır.
generate_series()BETWEEN işleci de kapsayacak şekilde kapsar, dolayısıyla bir sonraki ayın ilk gününü bu ifadeyle hariç tutuyoruz -interval '1 day'.
Sonunda, bu sorgunun sonucu şudur:
60 satırlık Python kodunu basit bir SQL sorgusu ile değiştirdiğimizi unutmayın. Yolun altında tutmak için daha az kod ve daha etkin bir uygulama da var demektir. Burada, Python bir Hash Join Nested Loop süre yapıyor PostgreSQL Merge Left Join üzerinden iki sıralı ilişkiler belirliyor.
Haftalık değişiklikler hesaplanıyor
Analitik departmanın şimdi her gün için haftalık fark sağlamamızı istiyor olduğunu hayal edin. Bu, değişikliği dollars her tarih ve bir önceki haftanın aynı günü arasındaki sütunun yüzdesi olarak hesaplanan bir sütunu eklememiz gerektiği anlamına geliyor .
Ayrıca, takvim hafta hesaplamada çok yararlı değildir, ancak PostgreSQL için bu görev week yazmak kadar kolay :
Bu nedenle hesaplanan sütun da WITH dahil olmak üzere ihtiyaç duyduğumuz genişletilmiş veri kümesini almak için ortak bir tablo ifadesi (sorgunun bir parçası) kullanıyoruz last_week_dollars.
İfade extract('isodow' from date), ISO kurallarını takip eden haftanın gününü hesaplamaya olanak tanıyan standart bir SQL özelliğidir. ** partition by** olarak kullanıldığında, satırın aynı olan başka bir satıra eş olmasını sağlar isodow. lag()doların tarihe göre sıralı değeri; şu anki dolar değeriyle karşılaştırmak istediğimiz sayı budur .
İşte bu sorguyu çalıştırmanın sonucu:
Kod yazarken eğlenin ve SQL kodu olduğu gibi, SQL yazarken de eğlenin!
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it does not follow the Utopian Rules, and is considered as plagiarism. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.
https://opensource.com/article/17/12/python-and-postgresql
You can contact us on Discord.
[utopian-moderator]