Python - Database Relasional
Kita dapat terhubung ke database relasional untuk menganalisis data menggunakan pandasperpustakaan serta perpustakaan tambahan lain untuk mengimplementasikan konektivitas database. Paket ini dinamai sebagaisqlalchemy yang menyediakan fungsionalitas bahasa SQL lengkap untuk digunakan dalam python.
Menginstal SQLAlchemy
Instalasi sangat mudah menggunakan Anaconda yang telah kita bahas di bab Data Science Environment . Dengan asumsi Anda telah menginstal Anaconda seperti yang dijelaskan di bab ini, jalankan perintah berikut di Anaconda Prompt Window untuk menginstal paket SQLAlchemy.
conda install sqlalchemy
Membaca Tabel Relasional
Kami akan menggunakan Sqlite3 sebagai database relasional kami karena sangat ringan dan mudah digunakan. Padahal pustaka SQLAlchemy dapat terhubung ke berbagai sumber relasional termasuk MySql, Oracle dan Postgresql dan Mssql. Pertama-tama kita membuat mesin database dan kemudian menyambungkan ke mesin database menggunakanto_sql fungsi pustaka SQLAlchemy.
Dalam contoh di bawah ini kami membuat tabel relasional dengan menggunakan to_sqlfungsi dari kerangka data yang sudah dibuat dengan membaca file csv. Kemudian kami menggunakanread_sql_query berfungsi dari panda untuk mengeksekusi dan menangkap hasil dari berbagai kueri SQL.
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)
Ketika kita mengeksekusi kode di atas, hasilnya adalah sebagai berikut.
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
Memasukkan Data ke Tabel Relasional
Kami juga dapat memasukkan data ke dalam tabel relasional menggunakan fungsi sql.execute yang tersedia di panda. Pada kode di bawah ini kita sebelumnya file csv sebagai kumpulan data masukan, menyimpannya dalam tabel relasional dan kemudian memasukkan catatan lain menggunakan sql.execute.
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)
Ketika kita mengeksekusi kode di atas, hasilnya adalah sebagai berikut.
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
Menghapus Data dari Tabel Relasional
Kami juga dapat menghapus data ke dalam tabel relasional menggunakan fungsi sql.execute yang tersedia di pandas. Kode di bawah ini menghapus baris berdasarkan kondisi input yang diberikan.
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)
Ketika kita mengeksekusi kode di atas, hasilnya adalah sebagai berikut.
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