Python - İlişkisel Veritabanları
Verileri analiz etmek için ilişkisel veritabanlarına bağlanabiliriz. pandaskütüphane ve veritabanı bağlantısını uygulamak için başka bir ek kitaplık. Bu paketin adısqlalchemy Python'da kullanılmak üzere tam SQL dili işlevselliği sağlayan.
SQLAlchemy'yi yükleme
Kurulum, Veri Bilimi Ortamı bölümünde tartıştığımız Anaconda'yı kullanarak çok basittir . Anaconda'yı bu bölümde anlatıldığı gibi kurduğunuzu varsayarak, SQLAlchemy paketini kurmak için Anaconda Komut Penceresinde aşağıdaki komutu çalıştırın.
conda install sqlalchemy
İlişkisel Tabloları Okuma
Çok hafif ve kullanımı kolay olduğu için Sqlite3'ü ilişkisel veri tabanımız olarak kullanacağız. SQLAlchemy kitaplığı MySql, Oracle ve Postgresql ve Mssql dahil olmak üzere çeşitli ilişkisel kaynaklara bağlanabilir. Önce bir veritabanı motoru oluştururuz ve ardından veritabanı motorunato_sql SQLAlchemy kütüphanesinin işlevi.
Aşağıdaki örnekte ilişkisel tabloyu kullanarak to_sqlcsv dosyası okunarak zaten oluşturulmuş bir veri çerçevesinden işlev. Sonra kullanırızread_sql_query çeşitli SQL sorgularından sonuçları çalıştırmak ve yakalamak için pandalardan işlev.
from sqlalchemy import create_engine
import pandas as pd
data = pd.read_csv('/path/input.csv')
# Create the db engine
engine = create_engine('sqlite:///:memory:')
# Store the dataframe as a table
data.to_sql('data_table', engine)
# Query 1 on the relational table
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')
# Query 2 on the relational table
res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine)
print('Result 2')
print(res2)
Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.
Result 1
index id name salary start_date dept
0 0 1 Rick 623.30 2012-01-01 IT
1 1 2 Dan 515.20 2013-09-23 Operations
2 2 3 Tusar 611.00 2014-11-15 IT
3 3 4 Ryan 729.00 2014-05-11 HR
4 4 5 Gary 843.25 2015-03-27 Finance
5 5 6 Rasmi 578.00 2013-05-21 IT
6 6 7 Pranab 632.80 2013-07-30 Operations
7 7 8 Guru 722.50 2014-06-17 Finance
Result 2
dept sum(salary)
0 Finance 1565.75
1 HR 729.00
2 IT 1812.30
3 Operations 1148.00
İlişkisel Tablolara Veri Ekleme
Pandalarda bulunan sql.execute fonksiyonunu kullanarak ilişkisel tablolara da veri ekleyebiliriz. Aşağıdaki kodda csv dosyasını girdi veri seti olarak bir önceki haline getirdik, onu ilişkisel bir tabloda sakladık ve sonra sql.execute kullanarak başka bir kayıt ekledik.
from sqlalchemy import create_engine
from pandas.io import sql
import pandas as pd
data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
# Store the Data in a relational table
data.to_sql('data_table', engine)
# Insert another row
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])
# Read from the relational table
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)
Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.
id dept name salary start_date
0 1 IT Rick 623.30 2012-01-01
1 2 Operations Dan 515.20 2013-09-23
2 3 IT Tusar 611.00 2014-11-15
3 4 HR Ryan 729.00 2014-05-11
4 5 Finance Gary 843.25 2015-03-27
5 6 IT Rasmi 578.00 2013-05-21
6 7 Operations Pranab 632.80 2013-07-30
7 8 Finance Guru 722.50 2014-06-17
8 9 IT Ruby 711.20 2015-03-27
İlişkisel Tablolardan Veri Silme
Pandalarda bulunan sql.execute fonksiyonunu kullanarak verileri ilişkisel tablolara da silebiliriz. Aşağıdaki kod, verilen giriş koşuluna göre bir satırı siler.
from sqlalchemy import create_engine
from pandas.io import sql
import pandas as pd
data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
data.to_sql('data_table', engine)
sql.execute('Delete from data_table where name = (?) ', engine, params=[('Gary')])
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)
Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonucu verir.
id dept name salary start_date
0 1 IT Rick 623.3 2012-01-01
1 2 Operations Dan 515.2 2013-09-23
2 3 IT Tusar 611.0 2014-11-15
3 4 HR Ryan 729.0 2014-05-11
4 6 IT Rasmi 578.0 2013-05-21
5 7 Operations Pranab 632.8 2013-07-30
6 8 Finance Guru 722.5 2014-06-17