Bài viết này cung cấp tổng quan về các câu lệnh SQL cơ bản cho các nhà khoa học dữ liệu và giải thích cách có thể khởi tạo một công cụ SQL trong Python và được sử dụng để truy vấn dữ liệu từ cơ sở dữ liệu
Là một nhà khoa học dữ liệu sử dụng Python, bạn thường cần lấy dữ liệu của mình từ cơ sở dữ liệu quan hệ được lưu trữ trên máy chủ cục bộ hoặc trên đám mây [e. g. đám mây AWS]. Có nhiều cách để tiếp cận điều này. Ví dụ: bạn có thể truy vấn dữ liệu của mình trong Oracle, lưu tệp dưới dạng tệp
engine = create_engine[*args, **kwargs]
7, sau đó nhập dữ liệu đó bằng Python. Tuy nhiên, cách hiệu quả nhất để sử dụng SQL trực tiếp trong Python. Kết hợp SQL và Pandas sẽ cung cấp cho bạn nhiều tùy chọn để truy vấn, xử lý và sử dụng dữ liệu cho dự án của bạn bằng PythonNhững điều đầu tiên đầu tiên. SQL là gì?
SQL [còn gọi là Ngôn ngữ truy vấn có cấu trúc] là ngôn ngữ lập trình được sử dụng để quản lý hoặc truy vấn dữ liệu được lưu trữ trong hệ thống quản lý cơ sở dữ liệu quan hệ [RDBMS]. SQL là ngôn ngữ thống trị để xử lý dữ liệu có cấu trúc trong đó các thực thể trong cơ sở dữ liệu [e. g. bảng hoặc thực thể bảng] có liên quan với nhau [đó là lý do tại sao các cơ sở dữ liệu này được gọi là cơ sở dữ liệu quan hệ]. Có các tùy chọn khác để xử lý dữ liệu đó, nhưng SQL là ngôn ngữ phổ biến nhất, được sử dụng rộng rãi trong ngành
"SQL" được phát âm như thế nào?
SQL được phát triển tại IBM vào đầu những năm 1970 và ban đầu nó được gọi là “SEQUEL [Ngôn ngữ truy vấn tiếng Anh có cấu trúc]”. Sau đó, tên này được đổi thành SQL [Ngôn ngữ truy vấn có cấu trúc] do vấn đề nhãn hiệu. Tuy nhiên, cách phát âm “see-qu-el” [/ˈsiːkwəl/ ] vẫn tồn tại trong ngôn ngữ và đó là cách phát âm được hầu hết các học viên áp dụng
[Mẹo chuyên nghiệp. khi bạn đi phỏng vấn, hãy chắc chắn rằng bạn phát âm nó “see-qu-el”, nếu bạn muốn công việc. ]
Cơ sở dữ liệu quan hệ trông như thế nào?
Amazon Web Services cung cấp định nghĩa tốt nhất cho một databl quan hệ
Cơ sở dữ liệu quan hệ là một tập hợp các mục dữ liệu với các mối quan hệ được xác định trước giữa chúng. Các mục này được tổ chức dưới dạng một tập hợp các bảng có cột và hàng. Các bảng được sử dụng để chứa thông tin về các đối tượng được biểu diễn trong cơ sở dữ liệu. Mỗi cột trong bảng chứa một loại dữ liệu nhất định và một trường lưu trữ giá trị thực của một thuộc tính. Các hàng trong bảng đại diện cho một tập hợp các giá trị có liên quan của một đối tượng hoặc thực thể. Mỗi hàng trong một bảng có thể được đánh dấu bằng một mã định danh duy nhất được gọi là khóa chính và các hàng giữa nhiều bảng có thể được tạo liên quan bằng cách sử dụng khóa ngoại. Dữ liệu này có thể được truy cập theo nhiều cách khác nhau mà không cần tự tổ chức lại các bảng cơ sở dữ liệu
Cơ sở dữ liệu có thể có thiết kế rất phức tạp, với nhiều bảng và mỗi bảng có nhiều thực thể [cột] và nhiều hàng. Sẽ cực kỳ khó khăn hoặc thậm chí là không thể truy vấn dữ liệu khi không biết mối quan hệ giữa các bảng. ERD [Sơ đồ mối quan hệ thực thể] được sử dụng để trực quan hóa các mối quan hệ này và cũng hiển thị các thực thể trong mỗi bảng và kiểu dữ liệu của chúng. Quản trị viên cơ sở dữ liệu của bạn sẽ có thể cung cấp ERD cho cơ sở dữ liệu của bạn
ERD mẫu — https. //www. mô hình trực quan. com/guide/data-modeling/what-is-entity-relationship-diagram/
SQL được sử dụng như thế nào trong Python?
Có nhiều cách để sử dụng SQL trong Python. Nhiều thư viện đã được phát triển cho mục đích này có thể được sử dụng. SQLite và MySQL là ví dụ về các thư viện này
Trong bài viết này, chúng ta sẽ sử dụng Python Pandas kết hợp với thư viện
engine = create_engine[*args, **kwargs]
8Tạo Công cụ SQL
Bắt đầu nào. Chúng ta cần cài đặt và sau đó nhập các thư viện trước. Chúng tôi sẽ sử dụng tính năng
engine = create_engine[*args, **kwargs]
9 từ thư viện này!pip install sqlalchemyimport pandas as pd
from sqlalchemy import create_engine
Sau khi thư viện được nhập, chúng ta cần tạo một công cụ SQL bằng cách sử dụng lệnh này để tạo một lớp mới`. Ví dụ động cơ`
engine = create_engine[*args, **kwargs]
Đối số đầu tiên thường là một chuỗi biểu thị phương ngữ cơ sở dữ liệu và đối số kết nối ở dạng URL và có thể được viết là
dialect[+driver]://user:password@host/dbname[?key=value..]
trong đó
dialect[+driver]://user:password@host/dbname[?key=value..]
0 là tên cơ sở dữ liệu, chẳng hạn như dialect[+driver]://user:password@host/dbname[?key=value..]
1, dialect[+driver]://user:password@host/dbname[?key=value..]
2, dialect[+driver]://user:password@host/dbname[?key=value..]
3, v.v. , và dialect[+driver]://user:password@host/dbname[?key=value..]
4tên của một DBAPI, chẳng hạn như dialect[+driver]://user:password@host/dbname[?key=value..]
5, dialect[+driver]://user:password@host/dbname[?key=value..]
6, dialect[+driver]://user:password@host/dbname[?key=value..]
7, v.v. Thông tin chi tiết về điều này có thể được tìm thấy tại https. //www. sqlalchemy. tổ chức/Truy vấn dữ liệu sử dụng câu lệnh SQL
Bây giờ bạn đã được kết nối với cơ sở dữ liệu, bạn có thể gửi truy vấn dữ liệu. để sử dụng
dialect[+driver]://user:password@host/dbname[?key=value..]
8, bạn cần bọc các câu lệnh SQL của mình trong một vùng chứa, gửi nó đến cơ sở dữ liệu, nhận lại phản hồi, sau đó đặt phản hồi vào một khung dữ liệu dialect[+driver]://user:password@host/dbname[?key=value..]
9. Hai mệnh đề chính phải có trong mọi truy vấn là sql = """0 và
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """1
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """
0 cho phép bạn chọn một tập hợp con các cột [hoặc tất cả chúng] từ một bảng,
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]sql = """
1 chỉ định [các] cột đang được lấy từ bảng nào
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
Ví dụ: đoạn mã sau sẽ trả về tất cả các thực thể [cột] từ
sql = """4lưu phản hồi vào một khung dữ liệu và hiển thị phần đầu
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
Thay vào đó, bạn cũng có thể lấy các cột cụ thể từ bảng, sử dụng mã này để thay thế
SELECT entity_1, entity_2, entity_3
FROM table_1
Nếu bạn đang xử lý nhiều bảng [mà bạn chắc chắn sẽ làm trong một dự án trong thế giới thực], bạn có thể cần chỉ định thực thể nào từ bảng nào vì các thực thể quan tâm có thể đến từ các bảng khác nhau trong cơ sở dữ liệu. Chúng ta sẽ thảo luận cách nhiều thực thể từ nhiều bảng có thể là truy vấn, nhưng ví dụ này dành cho các thực thể từ một bảng. Trong trường hợp này, bạn có thể sử dụng
sql = """5 trong câu lệnh SQL của mình
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
SELECT table_1.entity_1, table_1.entity_2
FROM table_1
Bạn cũng có thể gán bí danh cho từng tên thực thể hoặc tên bảng nhằm mục đích đơn giản hóa hoặc dễ đọc
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
Nếu bạn muốn lấy các hàng riêng biệt từ một cột, bạn có thể gửi câu lệnh SQL này
SELECT DISTINCT entity_1
FROM table_1
Nếu bạn muốn sắp xếp dữ liệu của mình theo một cột cụ thể [hoặc nhiều cột], bạn có thể sử dụng
sql = """6 và chỉ định thứ tự bạn muốn
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """7 [tăng dần] hoặc
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """8 [giảm dần]. Hãy nhớ rằng, nếu bạn sử dụng nhiều cột trong
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
sql = """6 thì thứ tự SQL sắp xếp dữ liệu sẽ từ trái sang phải
SELECT *
FROM table_1
"""df = pd.read_sql_query[sql, engine]
df.head[]
SELECT entity_1, entity_2, entity_3
FROM table_1
ORDER BY entity_1 DESC, entity_3 ASC
Đôi khi bạn đang xử lý một tập dữ liệu rất lớn, nhưng bạn có thể chỉ cần truy xuất một tập dữ liệu giới hạn từ cơ sở dữ liệu. Nếu trường hợp này, bạn có thể sử dụng
SELECT entity_1, entity_2, entity_3
FROM table_1
0SELECT *
FROM table_1
LIMIT 10
Nếu bạn muốn bao gồm một điều kiện cho truy vấn, bạn có thể sử dụng
SELECT entity_1, entity_2, entity_3
FROM table_1
1 Bạn có thể sử dụng điều kiện boolean hoặc SELECT entity_1, entity_2, entity_3
FROM table_1
2 cho các thực thể chuỗi. Ví dụengine = create_engine[*args, **kwargs]
0hoặc
SELECT entity_1, entity_2, entity_3
FROM table_1
3hoặc
SELECT entity_1, entity_2, entity_3
FROM table_1
4Ký tự đại diện [hoặc ký tự đại diện] là ký hiệu được sử dụng để thay thế hoặc đại diện cho một hoặc nhiều ký tự trong một từ. Một cái quen thuộc là
SELECT entity_1, entity_2, entity_3
FROM table_1
5 được sử dụng cho SELECT entity_1, entity_2, entity_3
FROM table_1
6hoặc SELECT entity_1, entity_2, entity_3
FROM table_1
7 được sử dụng cho SELECT entity_1, entity_2, entity_3
FROM table_1
8 Chúng ta có thể sử dụng các ký tự đại diện một cách hiệu quả trong SQL khi truy vấn các thực thể chuỗi bằng cách sử dụng câu lệnh SELECT entity_1, entity_2, entity_3
FROM table_1
9 trong SQL. Sự khác biệt giữa SELECT table_1.entity_1, table_1.entity_2
FROM table_1
0 và SELECT table_1.entity_1, table_1.entity_2
FROM table_1
1 là SELECT table_1.entity_1, table_1.entity_2
FROM table_1
0 cũng chiếm dấu gạch dưới, nhưng SELECT table_1.entity_1, table_1.entity_2
FROM table_1
1 thì không. Trong Python, bạn nên sử dụng SELECT table_1.entity_1, table_1.entity_2
FROM table_1
4 thay vì một SELECT table_1.entity_1, table_1.entity_2
FROM table_1
0. Câu lệnh dưới đây trả về tất cả các hàng trong đó SELECT table_1.entity_1, table_1.entity_2
FROM table_1
6 bắt đầu bằng SELECT table_1.entity_1, table_1.entity_2
FROM table_1
7engine = create_engine[*args, **kwargs]
1SELECT table_1.entity_1, table_1.entity_2
FROM table_1
8 làm cho truy vấn này không nhạy cảm với trường hợp ký tự và SELECT table_1.entity_1, table_1.entity_2
FROM table_1
9 trả về tất cả các hàng trong đó thực thể KHÔNG giống như ký tự đại diệnĐể xử lý các giá trị null, bạn có thể sử dụng
engine = create_engine[*args, **kwargs]
2hoặc
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
0Thường thì bạn cần tổng hợp dữ liệu, nhóm dữ liệu và áp dụng các điều kiện cho dữ liệu được tổng hợp. Những tuyên bố tổng hợp này bao gồm
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
1 Ví dụengine = create_engine[*args, **kwargs]
3Khi sử dụng tổng hợp, bạn nên sử dụng
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
2 thay vì SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
3 nhưengine = create_engine[*args, **kwargs]
4Để nhóm dữ liệu của bạn theo thực thể cụ thể, bạn có thể sử dụng
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
4engine = create_engine[*args, **kwargs]
5Tham gia bàn
Khi truy vấn dữ liệu từ nhiều bảng, bạn cần nối các bảng này. Có nhiều cách nối bảng trong SQL. Hình bên dưới minh họa các phép nối này. Bạn có thể sẽ làm việc với các phép nối bên trong thường xuyên hơn, nhưng điều quan trọng là phải hiểu tác dụng của từng loại phép nối
Các kiểu nối bảng khác nhau trong SQL — https. //www. công xưởng. com/sql/tham gia
Việc nối các bảng chỉ có thể được thực hiện khi có một thực thể chung giữa hai bảng và bạn cần xác định mối quan hệ đó bằng cách sử dụng
SELECT t.entity_1 AS name, t.entity_2 AS id
FROM table_1 AS t
5engine = create_engine[*args, **kwargs]
6Những câu lệnh này bao gồm những điều cơ bản về SQL trong Python. Bạn có thể kết hợp các câu lệnh này dựa trên cơ sở dữ liệu bạn đang xử lý, loại dữ liệu bạn cần. Có nhiều câu lệnh khác mà bạn có thể sử dụng. https. //www. w3schools. com/sql/ cung cấp tổng quan toàn diện hơn về các câu lệnh SQL
Nick Minaie, Tiến sĩ [Hồ sơ LinkedIn] là cố vấn cấp cao và nhà khoa học dữ liệu có tầm nhìn xa, đồng thời đại diện cho sự kết hợp độc đáo giữa kỹ năng lãnh đạo, chuyên môn khoa học dữ liệu đẳng cấp thế giới, sự nhạy bén trong kinh doanh và khả năng dẫn dắt sự thay đổi của tổ chức. Nhiệm vụ của anh là thúc đẩy thực hành Trí tuệ nhân tạo [AI] và Học máy trong ngành