Zephyrnet Logosu

Pandalarda SQL Dosyalarını Okuma ve Yazma

Tarih:

Birkaç yıl önce Veri Analizi öğrenmeye başladığımda öğrendiğim ilk şey SQL ve Pandalar oldu. Bir veri analisti olarak, SQL ve Pandas ile çalışma konusunda güçlü bir temele sahip olmak çok önemlidir. Her ikisi de veri analistlerinin veritabanlarında depolanan verileri verimli bir şekilde analiz etmesine ve değiştirmesine yardımcı olan güçlü araçlardır.

SQL ve Pandalara Genel Bakış

SQL (Structured Query Language), ilişkisel veritabanlarını yönetmek ve değiştirmek için kullanılan bir programlama dilidir. Öte yandan Pandas, veri işleme ve analizi için kullanılan bir Python kitaplığıdır.

Veri analizi, büyük miktarda veriyle çalışmayı içerir ve veritabanları genellikle bu verileri depolamak için kullanılır. SQL ve Pandalar, veri analistlerinin verileri verimli bir şekilde ayıklamasına, işlemesine ve analiz etmesine olanak tanıyan, veritabanlarıyla çalışmak için güçlü araçlar sağlar. Veri analistleri, bu araçlardan yararlanarak, başka türlü elde edilmesi zor olacak verilerden değerli içgörüler elde edebilir.

Bu yazıda, bir veritabanını okumak ve yazmak için SQL ve Pandaların nasıl kullanılacağını keşfedeceğiz.

DB'ye bağlanma

Kitaplıkları Yükleme

Pandas ile SQL veri tabanına bağlanmadan önce gerekli kütüphaneleri kurmalıyız. Gereken iki ana kitaplık Pandas ve SQLAlchemy'dir. Pandas, girişte bahsedildiği gibi büyük veri yapılarının depolanmasına izin veren popüler bir veri işleme kitaplığıdır. Bunun aksine SQLAlchemy, SQL veritabanına bağlanmak ve SQL veritabanıyla etkileşim kurmak için bir API sağlar.

Komut isteminde aşağıdaki komutları çalıştırarak Python paket yöneticisi pip'i kullanarak her iki kitaplığı da kurabiliriz.

$ pip install pandas
$ pip install sqlalchemy

Bağlantının Yapılması

Kurulan kitaplıklar ile artık SQL veritabanına bağlanmak için Pandaları kullanabiliriz.

Başlamak için, bir SQLAlchemy motor nesnesi oluşturacağız. create_engine(). create_engine() işlevi, Python kodunu veritabanına bağlar. Veritabanı türünü ve bağlantı ayrıntılarını belirten bir bağlantı dizesini bağımsız değişken olarak alır. Bu örnekte, SQLite veritabanı türünü ve veritabanı dosyasının yolunu kullanacağız.

Aşağıdaki örneği kullanarak bir SQLite veritabanı için bir motor nesnesi oluşturun:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db')

Bizim örneğimizde SQLite veritabanı dosyası student.db, Python betiğiyle aynı dizindeyse, aşağıda gösterildiği gibi dosya adını doğrudan kullanabiliriz.

engine = create_engine('sqlite:///student.db')

Pandalar ile SQL Dosyalarını Okumak

Şimdi bir bağlantı kurduğumuza göre verileri okuyalım. Bu bölümde, read_sql, read_sql_table, ve read_sql_query işlevleri ve bunların bir veritabanıyla çalışmak için nasıl kullanılacağı.

Panda'yı kullanarak SQL Sorgularını yürütme read_sql() işlev

The read_sql() bir SQL sorgusu yürütmemize ve sonuçları bir Pandas veri çerçevesine almamıza izin veren bir Pandas kitaplığı işlevidir. bu read_sql() işlevi, SQL ve Python'u birbirine bağlayarak her iki dilin gücünden yararlanmamızı sağlar. işlev sarar read_sql_table() ve read_sql_query(). read_sql() işlev, sağlanan girdiye göre dahili olarak yönlendirilir; bu, girdinin bir SQL sorgusu yürütmesi gerekiyorsa şuraya yönlendirileceği anlamına gelir: read_sql_query(), ve eğer bir veritabanı tablosu ise, şuraya yönlendirilecektir: read_sql_table().

The read_sql() sözdizimi aşağıdaki gibidir:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

SQL ve con parametreleri gereklidir; geri kalanı isteğe bağlıdır. Ancak, bu isteğe bağlı parametreleri kullanarak sonucu değiştirebiliriz. Her bir parametreye daha yakından bakalım.

  • sql: SQL sorgusu veya veritabanı tablosu adı
  • con: Bağlantı nesnesi veya bağlantı URL'si
  • index_col: Bu parametre, SQL sorgu sonucundan bir veya daha fazla sütunu veri çerçevesi dizini olarak kullanmamızı sağlar. Tek bir sütun veya bir sütun listesi alabilir.
  • coerce_float: Bu parametre, sayısal olmayan değerlerin kayan sayılara dönüştürülmesi veya dize olarak bırakılması gerekip gerekmediğini belirtir. Varsayılan olarak true olarak ayarlanmıştır. Mümkünse, sayısal olmayan değerleri kayan tiplere dönüştürür.
  • params: Parametreler, dinamik değerleri SQL sorgusuna geçirmek için güvenli bir yöntem sağlar. Bir sözlük, tuple veya listeyi geçirmek için params parametresini kullanabiliriz. Veritabanına bağlı olarak, parametrelerin sözdizimi değişir.
  • parse_dates: Bu, sonuç veri çerçevesindeki hangi sütunun tarih olarak yorumlanacağını belirtmemizi sağlar. Tek bir sütunu, bir sütun listesini veya sütun adı olarak anahtarı ve sütun formatı olarak değeri içeren bir sözlüğü kabul eder.
  • columns: Bu, listeden yalnızca seçilen sütunları getirmemizi sağlar.
  • chunksize: Büyük bir veri kümesiyle çalışırken yığın boyutu önemlidir. Sorgu sonucunu daha küçük parçalar halinde alarak performansı artırır.

İşte nasıl kullanılacağına bir örnek read_sql():

Kodu:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql("SELECT * FROM Student", engine, index_col='Roll Number', parse_dates='dateOfBirth')
print(df)
print("The Data type of dateOfBirth: ", df.dateOfBirth.dtype) engine.dispose()

Çıktı:

 firstName lastName email dateOfBirth
rollNumber
1 Mark Simson [email protected] 2000-02-23
2 Peter Griffen [email protected] 2001-04-15
3 Meg Aniston [email protected] 2001-09-20
Date type of dateOfBirth: datetime64[ns]

Veritabanına bağlandıktan sonra, veritabanından tüm kayıtları döndüren bir sorgu yürütürüz. Student tablo ve bunları DataFrame'de saklar df. "Roll Number" sütunu, kullanılarak bir dizine dönüştürülür. index_col parametresi ve "dateOfBirth" veri türü, "datetime64[ns]" nedeniyle parse_dates. Kullanabiliriz read_sql() sadece veri almak için değil, aynı zamanda ekleme, silme ve güncelleme gibi diğer işlemleri gerçekleştirmek için. read_sql() genel bir işlevdir.

Veritabanından Belirli Tabloları veya Görünümleri Yükleme

Belirli bir tabloyu veya görünümü Pandalar ile yükleme read_sql_table() veri tabanından bir Pandas veri çerçevesine veri okumak için başka bir tekniktir.

Nedir read_sql_table?

Pandalar kitaplığı şunları sağlar: read_sql_table herhangi bir sorgu yürütmeden SQL tablosunun tamamını okumak ve sonucu bir Pandas veri çerçevesi olarak döndürmek için özel olarak tasarlanmış işlev.

Sözdizimi read_sql_table() aşağıdaki gibidir:

pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

Dışında table_name ve şema, parametreler şu şekilde açıklanır: read_sql().

  • table_name: parametre table_name veritabanındaki SQL tablosunun adıdır.
  • schema: Bu isteğe bağlı parametre, tablo adını içeren şemanın adıdır.

Veritabanına bağlantı oluşturduktan sonra kullanacağımız read_sql_table yüklemek için işlev Student tabloyu bir Pandas DataFrame'e dönüştürün.

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_table('Student', engine)
print(df.head()) engine.dispose()

Çıktı:

 rollNumber firstName lastName email dateOfBirth
0 1 Mark Simson [email protected] 2000-02-23
1 2 Peter Griffen [email protected] 2001-04-15
2 3 Meg Aniston [email protected] 2001-09-20

Bunun, bellek açısından yoğun olabilecek büyük bir tablo olduğunu varsayacağız. nasıl kullanabileceğimizi keşfedelim. chunksize Bu sorunu gidermek için parametre.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Kodu:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df_iterator = pd.read_sql_table('Student', engine, chunksize = 1) for df in df_iterator: print(df.head()) engine.dispose()

Çıktı:

 rollNumber firstName lastName email dateOfBirth
0 1 Mark Simson [email protected] 2000-02-23
0 2 Peter Griffen [email protected] 2001-04-15
0 3 Meg Aniston [email protected] 2001-09-20

Lütfen unutmayın ki chunksize Burada 1 kullanıyorum çünkü masamda sadece 3 kaydım var.

DB'yi Doğrudan Pandaların SQL Söz Dizimi ile Sorgulama

Veritabanından içgörü çıkarmak, veri analistleri ve bilim adamları için önemli bir kısımdır. Bunu yapmak için, read_sql_query() fonksiyonu.

read_sql_query() nedir?

Pandaları Kullanmak read_sql_query() işlevi, SQL sorguları çalıştırabilir ve sonuçları doğrudan bir DataFrame'e alabiliriz. bu read_sql_query() işlevi özellikle için oluşturulur SELECT ifadeler. gibi diğer işlemler için kullanılamaz. DELETE or UPDATE.

Sözdizimi:

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None, dtype=None, dtype_backend=_NoDefault.no_default)

Tüm parametre açıklamaları, read_sql() işlev. İşte bir örnek read_sql_query():

Kodu:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_query('Select firstName, lastName From Student Where rollNumber = 1', engine)
print(df) engine.dispose()

Çıktı:

 firstName lastName
0 Mark Simson

Pandas ile SQL Dosyaları Yazma

Verileri analiz ederken, birkaç girişin değiştirilmesi gerektiğini veya verileri içeren yeni bir tablo veya görünümün gerekli olduğunu keşfettiğimizi varsayalım. Yeni bir kaydı güncellemek veya eklemek için bir yöntem kullanmaktır. read_sql() ve bir sorgu yazın. Ancak, bu yöntem uzun olabilir. Pandalar, denilen harika bir yöntem sağlar. to_sql() bunun gibi durumlar için.

Bu bölümde öncelikle veritabanında yeni bir tablo oluşturacağız ve daha sonra var olan bir tabloyu düzenleyeceğiz.

SQL Veritabanında Yeni Tablo Oluşturma

Yeni bir tablo oluşturmadan önce, önce tartışalım to_sql() detayda.

Nedir to_sql()?

The to_sql() Pandas kitaplığının işlevi, veritabanını yazmamıza veya güncellememize izin verir. bu to_sql() işlevi, DataFrame verilerini bir SQL veritabanına kaydedebilir.

sözdizimi to_sql():

DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

Bir tek name ve con parametrelerin çalıştırılması zorunludur to_sql(); ancak, diğer parametreler ek esneklik ve özelleştirme seçenekleri sağlar. Her parametreyi ayrıntılı olarak tartışalım:

  • name: Oluşturulacak veya değiştirilecek SQL tablosunun adı.
  • con: Veritabanının bağlantı nesnesi.
  • schema: Tablonun şeması (isteğe bağlı).
  • if_exists: Bu parametrenin varsayılan değeri “başarısız”dır. Bu parametre, tablo zaten mevcutsa yapılacak eyleme karar vermemizi sağlar. Seçenekler arasında "başarısız", "değiştir" ve "ekle" yer alır.
  • index: index parametresi bir boolean değeri kabul eder. Varsayılan olarak, True olarak ayarlanmıştır, yani DataFrame'in indeksi SQL tablosuna yazılacaktır.
  • index_label: Bu isteğe bağlı parametre, dizin sütunları için bir sütun etiketi belirlememizi sağlar. Varsayılan olarak, dizin tabloya yazılır, ancak bu parametre kullanılarak belirli bir ad verilebilir.
  • chunksize: SQL veritabanında bir seferde yazılacak satır sayısı.
  • dtype: Bu parametre, sütun adları olarak anahtarları ve veri türleri olarak değerleri içeren bir sözlüğü kabul eder.
  • method: method parametresi, SQL'e veri eklemek için kullanılan yöntemi belirtmeye izin verir. Varsayılan olarak Yok olarak ayarlanmıştır, bu da pandaların veritabanına dayalı olarak en verimli yolu bulacağı anlamına gelir. Yöntem parametreleri için iki ana seçenek vardır:
    • multi: Tek bir SQL sorgusuna birden fazla satır eklenmesine izin verir. Ancak, tüm veritabanları çok satırlı eklemeyi desteklemez.
    • çağrılabilir fonksiyon: Burada insert için özel bir fonksiyon yazabilir ve metod parametrelerini kullanarak çağırabiliriz.

İşte kullanarak bir örnek to_sql():

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') data = {'Name': ['Paul', 'Tom', 'Jerry'], 'Age': [9, 8, 7]}
df = pd.DataFrame(data) df.to_sql('Customer', con=engine, if_exists='fail') engine.dispose()

Veritabanında "Ad" ve "Yaş" adlı iki alanla Müşteri adlı yeni bir tablo oluşturulur.

Veritabanı anlık görüntüsü:

to_sql() çıktısı

Mevcut Tabloları Pandas Dataframes ile Güncelleme

Bir veritabanındaki verileri güncellemek, özellikle büyük verilerle uğraşırken karmaşık bir iştir. Ancak, kullanarak to_sql() Pandas'taki işlev bu görevi çok daha kolaylaştırabilir. Veritabanındaki mevcut tabloyu güncellemek için, to_sql() fonksiyonu ile birlikte kullanılabilir. if_exists parametre "değiştir" olarak ayarlandı. Bu, mevcut tablonun üzerine yeni veriler yazacaktır.

İşte bir örnek to_sql() bu, daha önce oluşturulmuş olanı günceller Customer masa. Diyelim ki, içinde Customer tablosunda Paul adlı bir müşterinin yaşını 9'dan 10'a güncellemek istiyoruz. Bunu yapmak için önce DataFrame'deki ilgili satırı değiştirebilir ve ardından to_sql() veritabanını güncelleme işlevi.

Kodu:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_table('Customer', engine) df.loc[df['Name'] == 'Paul', 'Age'] = 10 df.to_sql('Customer', con=engine, if_exists='replace') engine.dispose()

Veritabanında Paul'ün yaşı güncellendi:

to_sql() çıktısı

Sonuç

Sonuç olarak, Pandas ve SQL, okuma ve SQL veritabanına veri yazma gibi veri analizi görevleri için güçlü araçlardır. Pandas, SQL veritabanına bağlanmak, veritabanındaki verileri bir Pandas veri çerçevesine okumak ve veri çerçevesi verilerini veritabanına geri yazmak için kolay bir yol sağlar.

Pandas kitaplığı, bir veri çerçevesindeki verilerin işlenmesini kolaylaştırırken SQL, bir veritabanındaki verileri sorgulamak için güçlü bir dil sağlar. Verileri okumak ve yazmak için hem Pandaları hem de SQL'i kullanmak, özellikle veriler çok büyük olduğunda, veri analizi görevlerinde zamandan ve emekten tasarruf sağlayabilir. Genel olarak, SQL ve Panda'lardan birlikte yararlanmak, veri analistlerinin ve bilim adamlarının iş akışlarını kolaylaştırmasına yardımcı olabilir.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?