Python - Cơ sở dữ liệu quan hệ
Chúng tôi có thể kết nối với cơ sở dữ liệu quan hệ để phân tích dữ liệu bằng cách sử dụng pandasthư viện cũng như một thư viện bổ sung khác để thực hiện kết nối cơ sở dữ liệu. Gói này được đặt tên làsqlalchemy cung cấp đầy đủ chức năng ngôn ngữ SQL được sử dụng trong python.
Cài đặt SQLAlchemy
Quá trình cài đặt diễn ra rất đơn giản bằng Anaconda mà chúng ta đã thảo luận trong chương Môi trường khoa học dữ liệu . Giả sử bạn đã cài đặt Anaconda như được mô tả trong chương này, hãy chạy lệnh sau trong Cửa sổ nhắc nhở Anaconda để cài đặt gói SQLAlchemy.
conda install sqlalchemy
Đọc bảng quan hệ
Chúng tôi sẽ sử dụng Sqlite3 làm cơ sở dữ liệu quan hệ của mình vì nó rất nhẹ và dễ sử dụng. Mặc dù thư viện SQLAlchemy có thể kết nối với nhiều nguồn quan hệ khác nhau bao gồm MySql, Oracle và Postgresql và Mssql. Đầu tiên chúng tôi tạo một công cụ cơ sở dữ liệu và sau đó kết nối với công cụ cơ sở dữ liệu bằng cách sử dụngto_sql chức năng của thư viện SQLAlchemy.
Trong ví dụ dưới đây, chúng tôi tạo bảng quan hệ bằng cách sử dụng to_sqlchức năng từ khung dữ liệu đã được tạo bằng cách đọc tệp csv. Sau đó, chúng tôi sử dụngread_sql_query hàm từ gấu trúc để thực thi và thu thập kết quả từ các truy vấn SQL khác nhau.
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)
Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.
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
Chèn dữ liệu vào bảng quan hệ
Chúng tôi cũng có thể chèn dữ liệu vào bảng quan hệ bằng cách sử dụng hàm sql.execute có sẵn trong gấu trúc. Trong đoạn mã dưới đây, chúng ta có tệp csv trước đó dưới dạng tập dữ liệu đầu vào, lưu trữ nó trong một bảng quan hệ và sau đó chèn một bản ghi khác bằng 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)
Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.
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
Xóa dữ liệu khỏi các bảng quan hệ
Chúng ta cũng có thể xóa dữ liệu vào các bảng quan hệ bằng cách sử dụng hàm sql.execute có sẵn trong gấu trúc. Đoạn mã dưới đây xóa một hàng dựa trên điều kiện đầu vào đã cho.
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)
Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả như sau.
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