Hướng dẫn is python or sql better for data analysis? - python hay sql tốt hơn để phân tích dữ liệu?

Một thập kỷ trước, ngành công nghiệp dữ liệu đã đấu tranh với việc nhân rộng kho dữ liệu. Giải pháp xuất hiện là lấy dữ liệu ra khỏi kho và biến đổi nó trong bộ nhớ với các ngôn ngữ lập trình như Python và Java, sử dụng các công cụ như Hadoop, Spark và Dask. Điều này được đi kèm với việc chuyển từ kho dữ liệu sang hồ dữ liệu.

Nhưng các kho dữ liệu hiện đại đã loại bỏ vấn đề về khả năng mở rộng và chúng tôi hiện đang thấy xu hướng ngược lại: chuyển sang chuyển đổi dữ liệu trong kho. Thay đổi này phần lớn được thúc đẩy bởi DBT [công cụ xây dựng dữ liệu], đã sửa một số hạn chế quan trọng của SQL [ngôn ngữ truy vấn có cấu trúc] và đang thể hiện sự chấp nhận mạnh mẽ. DBT cho phép các nhà phân tích dữ liệu viết mã SQL mô -đun, buộc việc sử dụng GIT để giúp kiểm soát phiên bản và cho phép thử nghiệm mô hình. Điều này dường như lấy đi rất nhiều cuộc tranh luận truyền thống chống lại SQL trong cuộc tranh luận SQL vs Python cho đến bây giờ.

Có vẻ như sự phân công lao động sạch giữa SQL [truy vấn dữ liệu và hợp nhất] và Python [chuyển đổi dữ liệu phức tạp] đang mờ dần. Ví dụ: các công cụ như dask-SQL cho phép bạn cả truy vấn và chuyển đổi dữ liệu bằng cách sử dụng hỗn hợp các hoạt động SQL và mã python. Bài viết này so sánh hiệu suất, chức năng và kinh nghiệm của nhà phát triển SQL và Python.

Benn Stprint on & nbsp; Twitter

SQL vs Python: Hiệu suất

Chạy mã SQL trên kho dữ liệu thường nhanh hơn Python để truy vấn dữ liệu và thực hiện các tập hợp cơ bản. Điều này chủ yếu là do dữ liệu có một lược đồ được áp dụng và tính toán xảy ra gần với dữ liệu. Khi xử lý dữ liệu với Python hoặc các ngôn ngữ lập trình khác, trước tiên bạn cần trích xuất dữ liệu ra khỏi cơ sở dữ liệu và tải nó vào bộ nhớ cục bộ có khả năng giới thiệu độ trễ. Về mặt kỹ thuật, cơ sở dữ liệu cũng phải tải dữ liệu vào bộ nhớ, nhưng chi phí của hoạt động đó thấp hơn nhiều. & NBSP;

Điều đó nói rằng, thật khó để nói bất cứ điều gì có ý nghĩa cụ thể về so sánh hiệu suất giữa SQL và Python mà không chỉ định những thứ như công cụ thực thi SQL [SQLite, PostgreSQL, Snowflake, Muff] và các thư viện Python bạn đang sử dụng để xử lý dữ liệu [Pandas, Numpy với numba, xông]. & Nbsp;

Ví dụ, các giải pháp tính toán song song như DASK và các quy mô khác của Python mã thành các bộ dữ liệu lớn hơn bộ nhớ và có thể thấp hơn đáng kể thời gian xử lý. Quản lý cơ sở hạ tầng cơ bản để chạy tính toán trên các cụm từ xa thường là một rào cản đối với việc áp dụng các công cụ như vậy. Các giải pháp doanh nghiệp như Coiled đang loại bỏ rào cản này bằng cách tự động hóa việc khởi động và quản lý các cụm từ xa [từ chối trách nhiệm: Tôi làm việc ở đó].

Tuy nhiên, sử dụng SQL để chuyển đổi dữ liệu bên trong kho thường nhanh hơn rất nhiều đối với nhiều truy vấn và tập hợp cơ bản khi nó chuyển mã sang dữ liệu thay vì dữ liệu sang mã. Và trong khi một điểm chuẩn kỹ thuật chính thức nằm ngoài phạm vi của bài viết này, so sánh này cho thấy SQLite có thể nhanh hơn đáng kể so với các gấu trúc cho các truy vấn cơ bản và các truy vấn của bộ lọc. Tuy nhiên, để biết thêm bối cảnh, bạn có thể muốn kiểm tra các cuộc thảo luận về điểm chuẩn dữ liệu và tuyết ở đây.

Cơ sở dữ liệu phân tích hiện đại cũng được trang bị các bộ tối ưu hóa mạnh mẽ. Người dùng SQL có thể viết các truy vấn mô tả các phép biến đổi mong muốn nhưng để lại kế hoạch thực hiện thực tế cho chính kho. Bởi vì Python là ngôn ngữ lập trình đa năng, người dùng cần phải rõ ràng hơn nhiều về mỗi bước được thực hiện. Các công cụ như pyspark cung cấp các trình tối ưu hóa giải quyết vấn đề này.

Vì vậy, nếu chạy các truy vấn trên kho dữ liệu với SQL nhanh hơn ... tại sao mọi nhà khoa học, kỹ sư và nhà phân tích dữ liệu chuyển từ Python sang SQL?

SQL vs Python: Chức năng & NBSP;

Mặc dù SQL thường có thể nhanh hơn Python cho các truy vấn và tập hợp cơ bản, nhưng nó không có cùng một phạm vi chức năng. Như Furcy Pin viết, sức mạnh lớn nhất của SQL cũng là điểm yếu của nó: sự đơn giản. Ví dụ, viết mã SQL để thực hiện phân tích dữ liệu khám phá lặp, khoa học dữ liệu hoặc các tác vụ học máy có thể nhanh chóng có được thời gian dài và khó đọc.

Giải mã SQL phức tạp trên môi trường

SQL vs Python: Hiệu suất

Chạy mã SQL trên kho dữ liệu thường nhanh hơn Python để truy vấn dữ liệu và thực hiện các tập hợp cơ bản. Điều này chủ yếu là do dữ liệu có một lược đồ được áp dụng và tính toán xảy ra gần với dữ liệu. Khi xử lý dữ liệu với Python hoặc các ngôn ngữ lập trình khác, trước tiên bạn cần trích xuất dữ liệu ra khỏi cơ sở dữ liệu và tải nó vào bộ nhớ cục bộ có khả năng giới thiệu độ trễ. Về mặt kỹ thuật, cơ sở dữ liệu cũng phải tải dữ liệu vào bộ nhớ, nhưng chi phí của hoạt động đó thấp hơn nhiều. & NBSP;

SQL vs Python: Trải nghiệm nhà phát triển

Nhưng hiệu suất và chức năng không phải là tất cả. Sự phân chia SQL vs Python cũng có liên quan nhiều đến trải nghiệm của nhà phát triển mà hai ngôn ngữ. Hãy cùng xem xét ba thành phần cụ thể của trải nghiệm nhà phát triển: kiểm tra, gỡ lỗi và kiểm soát phiên bản mã.

Erik Benhardsson on & nbsp; Twitter

Kiểm tra

Chạy các bài kiểm tra đơn vị là rất quan trọng đối với bất kỳ đường ống dữ liệu nào sẽ chạy trong sản xuất. Là ngôn ngữ lập trình đa năng, Python cho phép bạn viết các bài kiểm tra đơn vị cho bất kỳ phần nào trong đường ống xử lý dữ liệu của bạn: từ truy vấn dữ liệu đến các mô hình học máy đến các hàm toán học phức tạp. Theo hiểu biết của tôi, điều này là không thể với SQL. DBT giảm thiểu điều này ở một mức độ nào đó, nhưng chức năng thử nghiệm của họ chỉ áp dụng để kiểm tra toàn bộ các mô hình SQL và không cung cấp chức năng kiểm tra đơn vị phức tạp của ngôn ngữ lập trình như Python.

Thư viện kiểm tra SQL giới hạn bản thân để kiểm tra dữ liệu nhưng không phải là mã. Các thư viện kiểm tra cơ sở dữ liệu này thường được thực hiện khi sản xuất như là phương sách cuối cùng để phá vỡ đường ống dữ liệu nếu dữ liệu không chính xác. Mặt khác, nó dễ dàng hơn để thực hiện các bài kiểm tra đơn vị Python trên CI của bạn để đảm bảo rằng mã bạn hợp nhất là chính xác. Ví dụ: bạn có thể sử dụng các thư viện Chispa và Beavis để kiểm tra mã pyspark và dask, tương ứng: & nbsp;


# test column equality in PySpark with chispa
from chispa.column_comparer import assert_column_equality
import pyspark.sql.functions as F

def remove_non_word_characters[col]:
    return F.regexp_replace[col, "[^\w\s]+", ""]

# define unit test function
def test_remove_non_word_characters_nice_error[]:
    data = [
        ["matt7", "matt"],
        ["bill&", "bill"],
        ["isabela*", "isabela"],
        [None, None]
    ]
    df = [spark.createDataFrame[data, ["name", "expected_name"]]
        .withColumn["clean_name", remove_non_word_characters[F.col["name"]]]]

    assert_column_equality[df, "clean_name", "expected_name"]

# test dataframe equality in Dask/pandas with beavis
import beavis

# create dask dataframes from pandas dataframes
df1 = pd.DataFrame[{'col1': [1, 2], 'col2': [3, 4]}]
df2 = pd.DataFrame[{'col1': [5, 2], 'col2': [3, 4]}]
ddf1 = dd.from_pandas[df1, npartitions=2]
ddf2 = dd.from_pandas[df2, npartitions=2]

# assert equality
beavis.assert_dd_equality[ddf1, ddf2]

Kiểm tra

Chạy các bài kiểm tra đơn vị là rất quan trọng đối với bất kỳ đường ống dữ liệu nào sẽ chạy trong sản xuất. Là ngôn ngữ lập trình đa năng, Python cho phép bạn viết các bài kiểm tra đơn vị cho bất kỳ phần nào trong đường ống xử lý dữ liệu của bạn: từ truy vấn dữ liệu đến các mô hình học máy đến các hàm toán học phức tạp. Theo hiểu biết của tôi, điều này là không thể với SQL. DBT giảm thiểu điều này ở một mức độ nào đó, nhưng chức năng thử nghiệm của họ chỉ áp dụng để kiểm tra toàn bộ các mô hình SQL và không cung cấp chức năng kiểm tra đơn vị phức tạp của ngôn ngữ lập trình như Python.

Thư viện kiểm tra SQL giới hạn bản thân để kiểm tra dữ liệu nhưng không phải là mã. Các thư viện kiểm tra cơ sở dữ liệu này thường được thực hiện khi sản xuất như là phương sách cuối cùng để phá vỡ đường ống dữ liệu nếu dữ liệu không chính xác. Mặt khác, nó dễ dàng hơn để thực hiện các bài kiểm tra đơn vị Python trên CI của bạn để đảm bảo rằng mã bạn hợp nhất là chính xác. Ví dụ: bạn có thể sử dụng các thư viện Chispa và Beavis để kiểm tra mã pyspark và dask, tương ứng: & nbsp;

Gỡ lỗi

Gỡ lỗi mã SQL khó hơn vì bạn có thể thiết lập một điểm dừng như trong tập lệnh Python để tạm dừng thực thi trong một tuyên bố để vào bảng điều khiển tương tác. Với SQL, bạn chỉ có thể thực hiện một câu lệnh hoàn chỉnh cùng một lúc. Sử dụng CTE và phân tách các mô hình DBT thành nhiều tệp giúp gỡ lỗi các mô hình trung gian dễ dàng hơn nhưng vẫn không mạnh bằng việc đặt điểm dừng ở bất cứ đâu trong mã của bạn.

Phiên bản mã

Theo truyền thống, kiểm soát phiên bản là một trong những lập luận chính trong sự ủng hộ của Python. DBT đang thay đổi trò chơi ở đây bằng cách buộc nhà phân tích dữ liệu thực hiện các truy vấn SQL mà họ đã sử dụng để chạy trực tiếp trong kho dữ liệu và thay vào đó lưu trữ chúng trong kho lưu trữ Git theo cấu trúc dự án DBT.

Tuy nhiên, nếu bạn đã viết một truy vấn SQL được lồng đủ dài và sau đó cố gắng sửa đổi nó, sự khác biệt Git sẽ khó đọc hơn so với một cơ sở mã được viết bằng Python nơi mã được chia thành các biến, hàm và các lớp.

Vậy bạn nên sử dụng những gì?dask-snowflake and dask-mongo that allow you to write SQL queries from inside a Python session and support distributed fetch to read and write in parallel. These tools bridge the gap to hit that sweet spot: use SQL for what it’s good at [querying, aggregating, and extracting data efficiently] and Python for its computational power and flexibility [iterative exploratory analysis, machine learning, complex math]. 


import dask_snowflake
import snowflake

with snowflake.connector.connect[...] as conn:
    ddf = dask_snowflake.from_snowflake[
       query="""
       SELECT * FROM TableA JOIN TableB ON ...
       """,
       conn=conn,
    ]

Tin tuyệt vời là hai vũ trụ không hoàn toàn bị cô lập với nhau nữa. Các công cụ đang nổi lên nhận ra lợi thế của từng ngôn ngữ và thu hẹp khoảng cách giữa chúng.

Ví dụ, nó phổ biến để truy vấn các hồ dữ liệu với SQL bằng các công cụ như AWS Athena cho phép bạn truy vấn dữ liệu trong thùng S3 với SQL. Các định dạng dữ liệu mở như sàn gỗ và mũi tên hỗ trợ các lược đồ đã đóng góp cho xu hướng này. Và ở phía bên kia của quang phổ, các kho dữ liệu như Snowflake đã bắt đầu thêm hỗ trợ cho việc truy vấn dữ liệu với API giống như dữ liệu, thông qua các công cụ như SnowPark.

Một nút cổ chai truyền thống cho Python đã nhanh chóng lấy dữ liệu ra khỏi kho dữ liệu. Điều này đã trở nên nhanh hơn đáng kể với các công cụ như dask-snowflake và dask-mongo cho phép bạn viết các truy vấn SQL từ bên trong phiên Python và hỗ trợ tìm nạp phân phối để đọc và viết song song. Các công cụ này thu hẹp khoảng cách để đạt được điểm ngọt ngào đó: sử dụng SQL cho những gì nó giỏi trong việc [truy vấn, tổng hợp và trích xuất dữ liệu một cách hiệu quả] và Python cho sức mạnh tính toán và tính linh hoạt của nó [phân tích khám phá lặp đi lặp lại, học máy, toán học phức tạp]. & NBSP;

Kiểm tra bài viết này để biết một cuốn sổ hoàn chỉnh tải dữ liệu từ Bông tuyết vào phiên Python, đào tạo mô hình XGBOOST trên dữ liệu và sau đó viết kết quả trở lại Snowflake.

Python có tốt hơn SQL để phân tích dữ liệu không?

Chạy mã SQL trên kho dữ liệu thường nhanh hơn Python để truy vấn dữ liệu và thực hiện các tập hợp cơ bản..

Tôi nên học Python hoặc SQL trước để phân tích dữ liệu?

Một điều cần nhớ là SQL là bước đầu tiên lớn đối với một số ngôn ngữ phức tạp hơn [Python, R, JavaScript, v.v.].Một khi bạn hiểu cách một máy tính nghĩ, thật dễ dàng để học một ngôn ngữ lập trình mới để phân tích dữ liệu của bạn.SQL is a big first step to some more complex languages [Python, R, JavaScript, etc.]. Once you understand how a computer thinks, it is easy to learn a new programming language to analyze your data.

Python có tốt cho nhà phân tích dữ liệu không?

Python là một ngôn ngữ lập trình đa năng phổ biến được sử dụng rộng rãi cho tính linh hoạt của nó, cũng như bộ sưu tập các thư viện rộng rãi của nó, có giá trị cho các phân tích và tính toán phức tạp.valuable for analytics and complex calculations.

Ngôn ngữ nào là tốt nhất để phân tích dữ liệu?

Các nhà phân tích dữ liệu sử dụng SQL [ngôn ngữ truy vấn có cấu trúc] để giao tiếp với cơ sở dữ liệu, nhưng khi nói đến việc làm sạch, thao tác, phân tích và trực quan hóa dữ liệu, bạn đang xem xét Python hoặc R.Python or R.

Bài Viết Liên Quan

Chủ Đề