Khi làm việc với dữ liệu khách hàng trong thương mại điện tử, các nhà khoa học dữ liệu thường cần cộng và trừ các giá trị ngày trực tiếp trong các truy vấn MySQL. Ví dụ: bạn có thể muốn xác định khách hàng nào đã đặt hàng gần đây đã tiếp tục thực hiện giao dịch mua khác trong 12 tháng tới
MySQL cung cấp hai hàm hữu ích để cộng và trừ các giá trị ngày và giờ khỏi các giá trị ngày giờ được lưu trữ trong MySQL -
df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
1 và df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
2. Cả hai đều làm việc theo cùng một cáchBạn chỉ cần xác định cột mà bạn muốn cộng hoặc trừ, sau đó xác định ngày hoặc khoảng thời gian bạn muốn cộng hoặc trừ. Sau đó, MySQL sẽ trả về một ngày với số năm, tháng, tuần, giây hoặc micro giây mong muốn của bạn được thêm hoặc xóa. Dưới đây là hướng dẫn nhanh để sử dụng chúng
Thiết lập máy chủ MySQL của bạn
Nếu bạn muốn tự chạy các truy vấn này bằng Python, trước tiên bạn cần có quyền truy cập vào máy chủ MySQL và cơ sở dữ liệu để truy vấn. Tôi chạy máy chủ MySQL của mình trong bộ chứa Docker và đã tạo cơ sở dữ liệu thử nghiệm dựa trên Bộ dữ liệu bán lẻ trực tuyến được sử dụng rộng rãi
Tôi đã tạo một vài hướng dẫn từng bước mà bạn có thể làm theo để tạo bộ chứa MySQL Docker và nhập cơ sở dữ liệu MySQL vào bộ chứa Docker, vì vậy bạn có thể làm theo trên cùng một dữ liệu. Nó chỉ mất một vài phút
Cài đặt và tải các gói
Tiếp theo, bạn sẽ cần cài đặt gói SQLAlchemy được sử dụng để truy vấn MySQL và các cơ sở dữ liệu khác thông qua Pandas và trình điều khiển PyMySQL để kết nối với máy chủ MySQL từ Python. Bạn có thể cài đặt những thứ này bằng trình quản lý gói Pip, sau đó nhập các mô-đun cần thiết vào sổ ghi chép Jupyter hoặc tập lệnh Python
!pip3 install sqlalchemy
!pip3 install pymysql
import pandas as pd
from sqlalchemy import create_engine
Tạo kết nối cơ sở dữ liệu
Tiếp theo, bạn sẽ cần tạo một chuỗi truy vấn PyMySQL và kết nối với máy chủ MySQL đang chạy trên bộ chứa Docker của bạn hoặc bất cứ nơi nào bạn lưu trữ cơ sở dữ liệu MySQL của mình
engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
CHỌN TỪ một bảng SQL
Khi bạn đã định cấu hình kết nối cơ sở dữ liệu của mình, bạn có thể tạo một câu lệnh SQL
df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
3 đơn giản để kiểm tra xem kết nối có hoạt động bình thường khôngdf = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
customer_idrevenueordersskusunitsfirst_order_datelast_order_date014646. 0279489. 02777031967192010-12-20 10. 09. 002011-12-08 12. 12. 00118102. 0256438. 4962151641222010-12-07 16. 42. 002011-12-09 11. 50. 00217450. 0187482. 1755127690292010-12-07 09. 23. 002011-12-01 13. 29. 00314911. 0132572. 622481794771802010-12-01 14. 05. 002011-12-08 15. 54. 00412415. 0123725. 4526444772422011-01-06 11. 12. 002011-11-15 14. 22. 00
Để trừ ngày, tuần, tháng, quý, giờ hoặc giây từ một ngày trong MySQL, bạn có thể sử dụng hàm
df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
2. Điều này sử dụng định dạng import pandas as pd
from sqlalchemy import create_engine
0 trong đó import pandas as pd
from sqlalchemy import create_engine
1 là một trong các giá trị ngày hoặc khoảng thời gian được phép trừ và sau đó trả về giá trị import pandas as pd
from sqlalchemy import create_engine
2 sau phép trừ ngày. Các giá trị khoảng thời gian và ngày được phép mà bạn có thể chuyển đến df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
2 là
4import pandas as pd from sqlalchemy import create_engine
5import pandas as pd from sqlalchemy import create_engine
6import pandas as pd from sqlalchemy import create_engine
7import pandas as pd from sqlalchemy import create_engine
8import pandas as pd from sqlalchemy import create_engine
9import pandas as pd from sqlalchemy import create_engine
0engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
1engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
2engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
3engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
4engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
5engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
6engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
7engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
8engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
9engine = create_engine['mysql+pymysql://root:*****@172.17.0.3:3306/ecommerce']
0df = pd.read_sql["SELECT * FROM customers", con=engine] df.head[]
1df = pd.read_sql["SELECT * FROM customers", con=engine] df.head[]
2df = pd.read_sql["SELECT * FROM customers", con=engine] df.head[]
Đây là một ví dụ về cách sử dụng hàm
df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
2 trong MySQL. Để có được ngày trước một ngày, chúng ta có thể sử dụng df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
4Để có được cùng một ngày năm ngoái, chúng ta có thể sử dụng
df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
5. Bạn có thể chỉ cần thay đổi giá trị được truyền sau df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
6 để trừ bất kỳ giá trị ngày hoặc giờ nào bạn muốn, sau đó sử dụng df = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
7 để gán giá trị cho một cột mới trong tập kết quả MySQLdf = pd.read_sql["SELECT * FROM customers", con=engine]
df.head[]
0customer_idfirst_order_dateday_after_first_orderthree_months_after_first_orderyear_after_first_order014646. 02010-12-20 10. 09. 002010-12-19 10. 09. 002010-09-20 10. 09. 002009-12-20 10. 09. 00118102. 02010-12-07 16. 42. 002010-12-06 16. 42. 002010-09-07 16. 42. 002009-12-07 16. 42. 00217450. 02010-12-07 09. 23. 002010-12-06 09. 23. 002010-09-07 09. 23. 002009-12-07 09. 23. 00314911. 02010-12-01 14. 05. 002010-11-30 14. 05. 002010-09-01 14. 05. 002009-12-01 14. 05. 00412415. 02011-01-06 11. 12. 002011-01-05 11. 12. 002010-10-06 11. 12. 002010-01-06 11. 12. 00