Tại sao mọi người thích Pandas hơn SQL?


69

Tôi đã sử dụng SQL từ năm 1996, vì vậy tôi có thể bị thiên vị. Tôi đã sử dụng rộng rãi MySQL và SQLite 3, nhưng cũng đã sử dụng Microsoft SQL Server và Oracle.

Phần lớn các hoạt động tôi đã thấy được thực hiện với Pandas có thể được thực hiện dễ dàng hơn với SQL. Điều này bao gồm lọc một tập dữ liệu, chọn các cột cụ thể để hiển thị, áp dụng hàm cho các giá trị, v.v.

SQL có lợi thế là có một trình tối ưu hóa và lưu giữ dữ liệu. SQL cũng có thông báo lỗi rõ ràng và dễ hiểu. Pandas có một API hơi khó hiểu, trong đó đôi khi nó phù hợp để sử dụng một lần duy nhất [ stuff ], những lúc khác bạn cần [[ stuff ]]và đôi khi bạn cần một .loc. Một phần của sự phức tạp của Pandas phát sinh từ thực tế là có quá nhiều quá tải đang diễn ra.

Vì vậy, tôi đang cố gắng để hiểu tại sao Pandas rất phổ biến.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Sean Owen

Câu trả lời:


51

Câu hỏi đầu tiên thực sự là tại sao mọi người làm việc hiệu quả hơn với trừu tượng DataFrame hơn là trừu tượng SQL thuần túy.

TLDR; SQL không hướng đến quá trình phát triển và gỡ lỗi (con người), DataFrames là.

Lý do chính là các tóm tắt DataFrame cho phép bạn xây dựng các câu lệnh SQL trong khi tránh dài dòng và lồng nhau không thể đọc được. Mô hình viết các thói quen lồng nhau, nhận xét chúng để kiểm tra chúng, và sau đó bỏ qua chúng được thay thế bằng các dòng chuyển đổi duy nhất. Bạn có thể tự nhiên chạy mọi thứ theo từng dòng trong một thay thế (ngay cả trong Spark) và xem kết quả.

Xem xét ví dụ, về việc thêm một cột được chuyển đổi mới (cột xâu chuỗi) vào một bảng, sau đó nhóm theo nó và thực hiện một số phép gộp. SQL trở nên khá xấu xí. Gấu trúc có thể giải quyết điều này nhưng thiếu một số thứ khi nói đến dữ liệu thực sự lớn hoặc trong các phân vùng cụ thể (có lẽ được cải thiện gần đây).

DataFrames nên được xem như là một API cấp cao cho các thói quen SQL, ngay cả khi với gấu trúc, chúng hoàn toàn không được kết xuất với một số trình hoạch định SQL.

-

Bạn có thể có nhiều cuộc thảo luận kỹ thuật xung quanh vấn đề này, nhưng tôi đang xem xét quan điểm người dùng bên dưới.

Một lý do đơn giản tại sao bạn có thể thấy nhiều câu hỏi hơn xung quanh thao tác dữ liệu của Pandas trái ngược với SQL là sử dụng SQL, theo định nghĩa, có nghĩa là sử dụng cơ sở dữ liệu và rất nhiều trường hợp sử dụng ngày nay chỉ đơn giản là yêu cầu bit dữ liệu cho ' nhiệm vụ một lần và thực hiện (từ .csv, web api, v.v.). Trong các trường hợp này, tải, lưu trữ, thao tác và trích xuất từ ​​cơ sở dữ liệu là không khả thi.

Tuy nhiên, xem xét các trường hợp trong trường hợp sử dụng có thể biện minh cho việc sử dụng Pandas hoặc SQL, bạn chắc chắn không sai. Nếu bạn muốn thực hiện nhiều tác vụ thao tác dữ liệu lặp đi lặp lại và duy trì kết quả đầu ra, tôi luôn khuyên bạn nên thử qua SQL trước. Từ những gì tôi đã thấy lý do tại sao nhiều người dùng, ngay cả trong những trường hợp này, không thông qua SQL là hai lần.

Thứ nhất, gấu trúc có lợi thế lớn hơn SQL là nó là một phần của vũ trụ Python rộng hơn, có nghĩa là trong một cú trượt tôi có thể tải, dọn dẹp, thao tác và trực quan hóa dữ liệu của mình (tôi thậm chí có thể thực thi SQL thông qua Pandas ...). Một điều khác, khá đơn giản là tất cả quá nhiều người dùng không biết mức độ của các khả năng của SQL. Mọi người mới bắt đầu học 'cú pháp trích xuất' của SQL (CHỌN, TỪ, Ở ĐÂU, v.v.) như một phương tiện để đưa dữ liệu của bạn từ DB đến nơi tiếp theo. Một số có thể chọn một số cú pháp nhóm và lặp trước nâng cao hơn. Nhưng sau đó, có xu hướng có một lỗ hổng kiến ​​thức khá lớn, cho đến khi bạn tìm đến các chuyên gia (DBA, Data Engineers, v.v.).

tl; dr: Nó thường tùy thuộc vào trường hợp sử dụng, sự thuận tiện hoặc lỗ hổng kiến ​​thức về phạm vi khả năng của SQL.


2
Tôi nghĩ rằng SQL phần lớn được thiết lập dựa trên một phần lớn, khi rất nhiều người từ các lĩnh vực kỹ thuật khác được sử dụng để xử lý từng dòng dữ liệu. Cũng xem xét rằng dữ liệu chủ yếu chỉ là dữ liệu cho gấu trúc nhưng các công cụ SQL khác nhau hỗ trợ các chức năng được xây dựng khác nhau có thể gây khó chịu cực nhanh nếu bạn phải cắt và thay đổi trong ngày làm việc của mình
Dave

3
Tôi sẽ không nói nó không khả thi. Nếu bạn có thể lấy dữ liệu vào khung dữ liệu gấu trúc, có lẽ bạn có thể chuyển dữ liệu đó vào DB PostgreQuery. Nhưng đối với một và thực hiện, nó có thể tốn nhiều công sức và thời gian hơn bạn sẽ tiết kiệm.
jpmc26

2
Tôi đồng ý rằng một số cách tiếp cận ETL dường như là các quyết định tập trung vào lập trình viên. Đó là, họ thích thao tác dữ liệu sau đó trình bày tải trọng "hoàn hảo" này cho cơ sở dữ liệu. Tuy nhiên, như bạn chỉ ra, nếu nó có thể được thực hiện thông qua một số truy vấn SQL, thì lớp lập trình bổ sung là không cần thiết. Chính xác những gì tôi phải đối mặt gần đây. Như OP và câu trả lời của bạn chỉ ra, đó có thể là những người "trường học cũ" hoặc trung tâm DBA nhìn vào nó và nói, tại sao không làm điều đó trong SQL (thậm chí chỉ một vài truy vấn đơn giản!). Điều đó nói rằng, tôi đã tìm thấy gấu trúc rất mạnh cho các tập dữ liệu cực kỳ đa dạng.
SaltySub2

1
@SaltySub Chỉ cần một điểm để chuyển mọi thứ ra khỏi lớp lập trình thành SQL: Đó là một điểm công bằng và có thể hoàn toàn hợp lệ, nhưng đi sâu vào logic ứng dụng trong các thủ tục SQL có thể mang lại hương vị đau đầu đặc biệt của riêng nó.
Đầu điện

1
@ElectricHead Tôi đồng ý rằng cần phải có một sự cân bằng đúng đắn. Nếu một loạt các truy vấn SQL có thể thực hiện các nhiệm vụ đầy đủ, nó chắc chắn có thể dễ dàng và hiệu quả hơn. Ngược lại, như bạn chỉ ra, nếu người ta phải đặt một lượng lớn logic vào các thủ tục SQL, v.v. thì gấu trúc nên được xem xét mạnh mẽ. Đặc biệt như trên nếu bạn đang sử dụng các hương vị cơ sở dữ liệu khác nhau - sự khác biệt cú pháp SQL có thể rất nhiều lông sau đó.
SaltySub2

29

Có nhiều sự trùng lặp trong ứng dụng của hai điều này, đây là so sánh táo với cam.

pandas là một bộ công cụ phân tích dữ liệu được triển khai bằng Python, một ngôn ngữ lập trình có mục đích chung. SQL là ngôn ngữ dành riêng cho miền để truy vấn dữ liệu quan hệ (thường là trong hệ thống quản lý cơ sở dữ liệu quan hệ mà SQLite, MySQL, Oracle, SQL Server, PostgreQuery, v.v. là ví dụ).

SQL ngụ ý

  • làm việc với dữ liệu trong RDBMS * có thể phù hợp hoặc không phù hợp với khối lượng công việc, ngay cả khi đó chỉ là một cơ sở dữ liệu SQLite nhỏ,
  • kiến thức miền cơ sở dữ liệu (với tư cách là người dùng cuối, nhà phát triển và / hoặc quản trị viên; đề xuất rằng "SQL nhanh hơn" tôi thường thấy là một sự đơn giản hóa quá mức lớn) và
  • khắc phục đường cong học tập không đáng kể trong việc sử dụng SQL một cách hiệu quả, đặc biệt là trong các ứng dụng chuyên môn như phân tích dữ liệu (trái ngược với việc tạo các báo cáo đơn giản về dữ liệu đơn giản).

* Thật đáng để nhấn mạnh thực tế rằng SQL rất đặc thù cho miền, nó trở nên ít liên quan hơn khi làm việc với các lựa chọn thay thế ngày càng phổ biến cho các cơ sở dữ liệu quan hệ như sở dữ liệu NoQuery . Điều này thể hiện một sự thay đổi cơ bản trong cách lưu trữ và cấu trúc dữ liệu và thực sự không có cách nào phổ biến để truy cập nó giống như sự phát triển của tiêu chuẩn hóa SQL nhằm đạt được.

Mặt khác, Python (gấu trúc khá "pythonic" vì vậy nó đúng ở đây) rất linh hoạt và dễ tiếp cận với mọi người từ nhiều nguồn gốc khác nhau. Nó có thể được sử dụng như một "ngôn ngữ kịch bản", như một ngôn ngữ chức năng và ngôn ngữ OOP đầy đủ tính năng. Khả năng trực quan hóa và khả năng tương tác nguồn dữ liệu được tích hợp vào gấu trúc, nhưng bạn có thể tự do kết hợp bất cứ điều gì Python có thể làm vào quy trình công việc của bạn (đó là hầu hết mọi thứ); hệ sinh thái Python khoa học đã phình to và bao gồm các công cụ tuyệt vời như Jupyter Notebook và các thư viện scipy cần thiết như matplotlibnumpy (mà gấu trúc xây dựng). Các yếu tố quan trọng trong phân tích dữ liệu của gấu trúc là R-cảm ơn và bạn thường sẽ không tìm thấy các nhà thống kê ầm ĩ và suy nghĩ về việc họ có sử dụng R (hoặc có thể ngày càng nhiều gấu trúc hơn không) trong việc đưa mọi thứ vào cơ sở dữ liệu và viết các phân tích của họ bằng SQL.

Tôi không nói gấu trúc tốt hơn SQL hay ngược lại, nhưng SQL là một công cụ rất đặc trưng cho miền trong khi gấu trúc là một phần của hệ sinh thái khổng lồ, linh hoạt và dễ tiếp cận. Tôi làm việc với các hệ thống dữ liệu không gian địa lý, trong đó cơ sở dữ liệu quan hệ là một phần rất lớn và SQL là một công cụ mạnh mẽ và thiết yếu. Tuy nhiên, gấu trúc là một phần không kém phần quan trọng trong bộ công cụ hàng ngày của tôi và SQL thường được chuyển sang tìm nạp dữ liệu - có lẽ với một số tiền xử lý - vì vậy tôi có thể làm mọi thứ với gấu trúc.


1
Đây là câu trả lời đúng duy nhất, nó nên là câu trả lời được chọn. SQL và Pandas là hai thứ khác nhau, tôi không hiểu mọi người đang cố gắng so sánh cái gì.
gents

Tôi nghi ngờ đó là viễn cảnh của người dùng cuối khi viết một cái gì đó giống như mã để tìm nạp và xoa bóp một số dữ liệu từ đâu đó và nhổ ra một số con số. Tôi không hoàn toàn ngạc nhiên; Tôi đã có trải nghiệm đầu tiên về cách các nhà phân tích dữ liệu trình bày với một cơ sở dữ liệu Oracle cũ nhưng không đáng chú ý thậm chí không có ý tưởng đầu tiên về nó gì và làm thế nào để kết nối với nó chứ đừng nói đến việc lấy dữ liệu ra. Tôi tin rằng nó phản bội sự thiếu hiểu biết cơ bản về công nghệ - Tôi thực sự đã thêm một chút để hy vọng nhấn mạnh việc hiểu sai phạm vi của SQL nhanh chóng như thế nào.
Đầu điện

Tôi sẽ thách thức bạn về việc không liên quan đến các tình huống của NoQuery. Ví dụ, hãy xem xét những bước tiến mà PostgreSQL đã thực hiện với bộ lưu trữ JSON của nó.
jpmc26

Tôi đã cố gắng chọn từ ngữ của tôi một cách cẩn thận; PostgreSQL vẫn là một RDBMS mặc dù đã làm rất nhiều việc tốt (vì SQL Server mặc dù có hỗ trợ các biểu đồ). Nhưng, tôi đã nới lỏng từ ngữ một chạm vì nó vẫn là một điểm tốt: có một số giao thoa và quan trọng là, API SQL tồn tại cho một số hệ thống NoQuery. Mặc dù đó chéo, SQL không phải là ngôn ngữ phổ quát và không phải tất cả dữ liệu đều có cấu trúc tương quan.
Đầu điện

Tôi nghĩ bạn có thể làm mọi thứ trong SQL có thể có trong gấu trúc. SQL không linh hoạt nhưng được tối ưu hóa rất nhiều.
Truyền thông

22

Đầu tiên, gấu trúc không phổ biến lắm. Tôi sử dụng cả gấu trúc và SQL. Đầu tiên tôi cố gắng hiểu nhiệm vụ - nếu nó có thể được thực hiện bằng SQL, tôi thích SQL hơn vì nó hiệu quả hơn gấu trúc. Hãy thử làm việc trên một dữ liệu lớn (10.000.000 x 50). Cố gắng làm một số groupby hoạt động trong cả hai SQL và gấu trúc. Bạn sẽ hiểu.

Tôi sử dụng gấu trúc nơi nó có ích - như chia các giá trị cột thành một mảng và thực hiện một số nội dung trên đó (như chỉ chọn một số giá trị trong mảng đó). Bây giờ loại nhiệm vụ này tương đối khó mã hóa trong SQL, nhưng gấu trúc sẽ giảm bớt nhiệm vụ của bạn.


Đây có phải là không hiệu quả cụ thể cho gấu trúc? Tôi đã thực hiện khá nhiều thao tác dữ liệu trong bộ nhớ trong C # và thấy nó khá dễ dàng và hiệu quả, miễn là nó phù hợp với bộ nhớ và là một lần (tức là không cần phải cập nhật chỉ mục khi dữ liệu thay đổi).
CodeInChaos

gấu trúc có nghĩa là thuận tiện hơn nhanh, nhưng điều đó không có nghĩa là nó không thể nhanh nếu bạn sử dụng đúng cách. Cuối cùng, việc thực hiện truy vấn SQL trên dữ liệu trong cơ sở dữ liệu không phải là phép thuật - nó đòi hỏi tài nguyên như bất cứ thứ gì, chỉ là (nếu bạn làm đúng!) Bạn hy vọng sẽ sử dụng tài nguyên trên các máy chủ cơ sở dữ liệu được cấu hình cẩn thận . Bắt đường ống của bạn ngay trong gấu trúc hoặc tương tự (ví dụ: truyền dữ liệu thay vì tải tất cả vào bộ nhớ) sẽ xác định mức độ thành công của một số nỗ lực.
Đầu điện

@CodesInChaos Có câu trả lời này của gấu trúc vs SQl - qr.ae/TUIpzE . Ở đó nó được mô tả những lợi thế và bất lợi của việc sử dụng gấu trúc.
Ankit Seth

12

Tôi là một trong những người sẽ sử dụng (trong trường hợp của tôi) dplyr của R (ngôn ngữ, không nhất thiết là công cụ) trong mọi trường hợp nếu tôi có thể biết mặc dù tôi biết SQL của mình.

Lợi ích chính tôi thấy trong các đường ống Pandas / dplyr / data.table là các hoạt động là nguyên tử và có thể được đọc từ trên xuống dưới.

Trong SQL, bạn cần phân tích toàn bộ tập lệnh, nhảy xung quanh (cái gì được tổng hợp, cái gì được nối và làm thế nào - bên trái? Bên trong? Phải?, Có bộ lọc nào được áp dụng không?) Để nắm bắt hoàn toàn những gì đang xảy ra.

Trong Pandas et al, mỗi bước của đường ống đều khép kín, nó thực hiện một số thứ với dữ liệu đầu vào và trả về dữ liệu đầu ra, quá trình tuần tự này giúp dễ dàng lý giải về những gì đang xảy ra vì có một trạng thái được xác định rõ ràng cho từng hoạt động thay vì chỉ trên một mức truy vấn.

Và vâng, bạn có thể thực hiện các WITHcâu lệnh và như vậy nhưng nó đòi hỏi nhiều mã hơn và không rõ đối tượng nào đang được sử dụng so với đường ống.


6

Tôi khá mới mẻ với Pandas / Python nhưng đã có hơn 20 năm làm DBA SQL, kiến ​​trúc sư, quản trị viên, v.v. Tôi yêu Pandas và tôi đang thúc đẩy bản thân luôn cố gắng làm mọi thứ hoạt động ở Pandas trước khi trở lại với sự thoải mái của tôi, thế giới SQL ấm cúng.

Tại sao RDBMS lại tốt hơn: Ưu điểm của RDBMS là kinh nghiệm nhiều năm tối ưu hóa tốc độ truy vấn và hoạt động đọc dữ liệu. Điều ấn tượng là họ có thể làm điều này đồng thời cân bằng nhu cầu tối ưu hóa tốc độ ghi và quản lý truy cập đồng thời cao. Đôi khi các chi phí bổ sung này nghiêng lợi thế cho Pandas khi nói đến các trường hợp sử dụng đơn giản, một người dùng. Nhưng ngay cả khi đó, một DBA dày dạn có thể điều chỉnh cơ sở dữ liệu để được tối ưu hóa cao cho tốc độ đọc trên tốc độ ghi. DBA có thể tận dụng những thứ như tối ưu hóa lưu trữ dữ liệu, định cỡ trang đĩa chiến lược, điền / đệm trang, bộ điều khiển dữ liệu và chiến lược phân vùng đĩa, kế hoạch I / O được tối ưu hóa, ghim dữ liệu trong bộ nhớ, kế hoạch thực hiện được xác định trước, lập chỉ mục, nén dữ liệu , và nhiều cái khác. Tôi nhận được ấn tượng từ nhiều nhà phát triển Pandas mà họ không ' T hiểu được độ sâu có sẵn ở đó. Điều tôi nghĩ thường xảy ra là nếu nhà phát triển Pandas không bao giờ có dữ liệu đủ lớn để cần những tối ưu hóa này, họ sẽ không đánh giá cao thời gian họ có thể giúp bạn tiết kiệm. Thế giới RDBMS có 30 năm kinh nghiệm tối ưu hóa điều này vì vậy nếu cần tốc độ thô trên các bộ dữ liệu lớn, thì RDBMS có thể bị đánh bại.

Tại sao Python / Pandas tốt hơn: Điều đó nói rằng, tốc độ không phải là tất cả và trong nhiều trường hợp sử dụng không phải là yếu tố lái xe. Nó phụ thuộc vào cách bạn sử dụng dữ liệu, liệu nó có được chia sẻ hay không và bạn có quan tâm đến tốc độ xử lý hay không. RDBMS thường cứng nhắc hơn trong cấu trúc dữ liệu của họ và đặt gánh nặng lên nhà phát triển để có tính quyết định hơn với hình dạng dữ liệu. Gấu trúc cho phép bạn lỏng lẻo hơn ở đây. Ngoài ra, và đây là lý do yêu thích của tôi, bạn đang ở một ngôn ngữ lập trình thực sự. Ngôn ngữ lập trình cho phép bạn linh hoạt hơn rất nhiều để áp dụng logic nâng cao cho dữ liệu. Tất nhiên, cũng có hệ sinh thái phong phú của các mô-đun và khung bên thứ 3 mà SQL không thể đến gần. Có thể đi từ dữ liệu thô đến cách trình bày web hoặc trực quan hóa dữ liệu trong một cơ sở mã là RẤT thuận tiện. Nó cũng di động hơn nhiều. Bạn có thể chạy Python gần như bất cứ nơi nào, kể cả các sổ ghi chép công khai có thể mở rộng phạm vi kết quả của bạn để đến với mọi người nhanh hơn. Cơ sở dữ liệu không nổi trội về điều này.

Lời khuyên của tôi? Nếu bạn thấy mình tốt nghiệp với các bộ dữ liệu lớn hơn và lớn hơn, bạn nợ nó để đi sâu và tìm hiểu cách RDBMS có thể giúp đỡ. Tôi đã thấy hàng triệu hàng, tham gia nhiều bảng, tổng hợp các truy vấn được điều chỉnh từ 5 phút xuống còn 2 giây. Có sự hiểu biết này trong vành đai công cụ của bạn chỉ khiến bạn trở thành một nhà khoa học dữ liệu tròn trịa hơn. Bạn có thể có thể làm mọi thứ trong Pandas ngày hôm nay nhưng một ngày nào đó bạn có thể có một nhiệm vụ trong đó RDBMS là lựa chọn tốt nhất.


5

Những điều gấu trúc có thể làm, mà SQL không thể làm

  1. df.describe()
  2. Âm mưu, ví dụ df['population'].plot(kind='hist')
  3. Sử dụng một khung dữ liệu trực tiếp để đào tạo các thuật toán học máy

Những điều Pandas có thể làm, tôi không biết rằng SQL cũng có thể làm được

  1. Xuất sang csv : df.to_csv('foobar.sv'). Điều này rất quan trọng khi bạn muốn hiển thị một cái gì đó cho chủ doanh nghiệp muốn làm việc với Excel. Và có df.to_excelnhư vậy. Nhưng trong SQL, bạn có thể làm được SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;(cảm ơn bạn, vy32!)

1
Đẹp. Mặc dù hầu hết trong số này có vẻ giống như các hàm có thể được thực hiện trong SQL. (SQL không xuất trực tiếp CSV.)
vy32

Bạn có thể vui lòng gửi cho tôi một truy vấn xuất sang CSV không? (Tôi chỉ biết các công cụ thực hiện việc này cho một số cơ sở dữ liệu dựa trên SQL, nhưng tôi chưa bao giờ thấy truy vấn ... vì vậy tôi nghi ngờ rằng đây là một phần của đặc tả SQL)
Martin Thoma

1
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; Xem dev.mysql.com/doc/refman/8.0/en/select-into.html
vy32

Cảm ơn bạn rất nhiều, vy! Tôi nghĩ rằng tôi sẽ điều chỉnh câu trả lời của mình khi tôi về nhà :-)
Martin Thoma

Điều chắc chắn. Hãy nhớ rằng, tệp kết thúc trên máy chủ SQL, không phải máy khách.
vy32

3

Điều duy nhất không được đề cập trong các câu trả lời mà tôi muốn đề cập là nó cũng phụ thuộc vào cách bạn sử dụng SQL. Lấy arcpy chẳng hạn. Vì một số lý do, không có hàm arcpy.da nào có tính năng thực thi nhiều. Điều này thực sự kỳ lạ bởi vì hầu hết các thư viện sql python khác đều có. Câu lệnh Where trong các hàm arcpy.da cũng bị giới hạn trong khoảng 120 ký tự. Điều này về cơ bản có nghĩa là nếu bạn có bất kỳ số lượng tương đối cao nào mà bạn đang cố gắng thực hiện với cơ sở dữ liệu của mình thì lựa chọn thực sự duy nhất của bạn là gọi hàm arcpy.da đã chọn của bạn nhiều lần, thay đổi câu lệnh where mỗi lần bạn làm. Có một vài thủ thuật bạn có thể sử dụng để làm cho quá trình này diễn ra nhanh hơn - ví dụ, bạn có thể lặp lại các đoạn dữ liệu của mình - nhưng theo nghĩa đen thì mỗi thủ thuật này chậm hơn nhiều so với chỉ sử dụng một arcpy.da. công cụ tìm kiếm để tải toàn bộ bảng của bạn vào khung dữ liệu của gấu trúc và sau đó thao tác với nó bằng cách sử dụng gấu trúc, gọn gàng và, nếu dữ liệu của bạn thực sự lớn như vậy. Tôi cần nhấn mạnh ở đây rằng gấu trúc không chỉ nhanh hơn một chút trong trường hợp này. Nó nhanh hơn một cách kinh tởm. Nó nhanh hơn nhiều đến nỗi tôi đã tự cười mình vì đã không làm điều đó sớm hơn. Sử dụng gấu trúc đã giảm một thời gian thực thi kịch bản xuống từ hơn một giờ - tôi quên nếu đây là bước nhảy từ 3,5 giờ hoặc từ 1,5 giờ - đến 12 phút theo nghĩa đen. Nhanh hơn nhiều đến nỗi tôi đã tự cười mình vì đã không làm điều đó sớm hơn. Sử dụng gấu trúc đã giảm một thời gian thực thi kịch bản xuống từ hơn một giờ - tôi quên nếu đây là bước nhảy từ 3,5 giờ hoặc từ 1,5 giờ - đến 12 phút theo nghĩa đen. Nhanh hơn nhiều đến nỗi tôi đã tự cười mình vì đã không làm điều đó sớm hơn. Sử dụng gấu trúc đã giảm một thời gian thực thi kịch bản xuống từ hơn một giờ - tôi quên nếu đây là bước nhảy từ 3,5 giờ hoặc từ 1,5 giờ - đến 12 phút theo nghĩa đen.

Một điều cần lưu ý là trong khi tôi có thể làm điều này với sql, nó sẽ khiến tôi mất nhiều thời gian hơn để học. Tôi sẽ phải học các hoạt động cụ thể cho sql trong Access - đó là nơi dữ liệu cho tập lệnh này kết thúc - - sql trong Access không mạnh như tôi cần khi tôi thực sự xem xét việc này - hoặc Tôi sẽ phải ghi tất cả dữ liệu của mình vào cơ sở dữ liệu sqlite3, thao tác trên đó và sau đó đưa nó vào Access. Mặc dù điều này có thể mang lại cho tôi kết quả hiệu suất tương tự, nhưng nó sẽ khiến kịch bản của tôi khó sửa đổi hơn trong tương lai.

Vì vậy, đôi khi Pandas và hoàn toàn tốt hơn so với việc sử dụng các tùy chọn sql bạn có theo ý của bạn . Tất cả mọi thứ tôi cần phải làm trong sql đã được thực hiện với một chức năng trong gấu trúc. Bạn cũng có thể sử dụng cú pháp sql với gấu trúc nếu bạn muốn. Có rất ít lý do để không sử dụng gấu trúc và sql song song.

Một điều nữa tôi muốn đề cập về Pandas và numpy là cả hai thư viện này đều do các cách tiếp cận dựa trên tập hợp tự nhiên. Bạn có thể lặp qua các tệp dữ liệu và xây dựng chuỗi với các thư viện này, nhưng thực sự rất khó để sửa đổi dữ liệu trong các cấu trúc như vậy, vì vậy bạn sẽ kết thúc việc viết mã hiệu quả hơn - dựa trên - với cả hai thư viện này vì nó dễ dàng hơn nhiều làm Được "hướng dẫn" nếu không sử dụng các cách tiếp cận dựa trên tập hợp không phải là điều tôi đã trải nghiệm với SQL.

Một điều lớn hơn tôi quên đề cập đến với Pandas. Tiền . Pandas là một công cụ mà rất nhiều công việc Khoa học dữ liệu muốn bạn biết cách sử dụng. Khá nhiều công việc Khoa học dữ liệu mà tôi đã xem đã trả nhiều hơn các công việc loại quản lý cơ sở dữ liệu. Ngoại lệ duy nhất mà tôi nhận thấy là trong Kỹ thuật dữ liệu, nhưng tôi đã thấy ít hơn những bài đăng công việc đó. Gấu trúc trông giống như nó làm cho bạn nhiều tiền hơn trong nháy mắt.


5
Có lẽ buồn khi nói đến các công việc hiện đại, đó là về việc có từ thông dụng phù hợp trong hồ sơ của bạn trái ngược với các cách tiếp cận bạn thực hiện để giải quyết vấn đề (giả sử bạn có thể học từ thông dụng tương đối nhanh). Nó giống như từ thông dụng quan trọng hơn việc giải quyết vấn đề. Khi giải bài toán cho X nên liên quan đến việc học và sử dụng công nghệ A, B, C, chứ không phải ngược lại. Tôi tự hỏi nếu bây giờ hầu hết các nhóm phát triển phá vỡ mọi thứ vì buzzword-ism và xu hướng, sau đó suy nghĩ về việc giải quyết vấn đề như một thứ yếu hoặc "trường học cũ" bởi vì bạn không biết / sử dụng từ thông dụng.
SaltySub2

1
@ElectricHãy trải nghiệm theo kinh nghiệm của tôi nếu bạn đang viết hàm riêng của mình liên quan đến sql trong python, việc sử dụng sai con trỏ và viết các truy vấn xấu sẽ dễ dàng hơn so với sử dụng gấu trúc / numpy. Hãy nhớ rằng không phải tất cả các mô-đun / thư viện sql đều được làm giống nhau. Trong trường hợp của tôi, với arcpy.da.SearchCursors và những thứ tương tự, thực sự không có cách nào tốt để làm một cái gì đó cho một loạt các bản ghi một cách hiệu quả vì những hạn chế kỳ lạ. Nếu tôi sử dụng gấu trúc / numpy, sẽ có một cách tốt để làm mọi thứ và đó là điều tôi muốn khi sử dụng trăn.

1
Ahhh, được. Bạn có nghĩa là một đường ống SQL quê nhà thông qua triển khai dbapi python so với sử dụng numpy / pandas? Trong trường hợp đó, yeah gotcha, không có đối số từ tôi ở đó; yêu cầu chăm sóc! Nó đọc với tôi là SQL đơn giản mà bạn rõ ràng cần phải hiểu các thao tác được thiết lập, nhưng sẽ phát hiện ra điều đó khá nhanh khi chạy các truy vấn ngớ ngẩn từ máy khách cơ sở dữ liệu.
Đầu điện

1
@Steve Vâng, sẽ không ngăn mọi người cố gắng tự động sửa đổi các công cụ trong các vòng lặp trong gấu trúc hoặc tương tự :) Tôi nghĩ rằng việc hiểu SQL giúp làm việc với gấu trúc một cách hiệu quả (mặc dù không giống như chúng che giấu sự giống nhau trong một số khái niệm).
Đầu điện

1
@Steve Quả thực gấu trúc cũng rất mạnh ... Tôi đoán một trong những nỗi thất vọng của tôi là cả nhà phát triển và quản lý, bao gồm cả bản thân tôi, không dành thời gian thích hợp để đánh giá các giải pháp và theo đuổi xu hướng (nơi có liên quan đến việc thúc đẩy bản thân / công ty). Nhưng ngay cả trong nguyên mẫu nạc / mvp, người ta sẽ phải đặt nền tảng thích hợp để nhân rộng. SQL, noQuery và Pandas ... đều có mục đích của chúng cho các nhiệm vụ và dự án phù hợp ở các giai đoạn khác nhau. Trong năm vừa qua, noQuery cho một nguyên mẫu nạc / mvp chắc chắn đã giúp tôi theo nhiều cách hơn một. SQL sẽ là quá mức cần thiết cho điều đó.
SaltySub2

3

Tôi nghĩ rằng tôi sẽ thêm rằng tôi thực hiện nhiều phân tích dữ liệu dựa trên chuỗi thời gian, và gấu trúc resamplereindexphương pháp là vô giá để thực hiện điều này. Có, bạn có thể thực hiện những điều tương tự trong SQL (Tôi có xu hướng tạo một DateDimensionbảng để trợ giúp với các truy vấn liên quan đến ngày), nhưng tôi chỉ tìm thấy các phương thức gấu trúc dễ sử dụng hơn nhiều.

Ngoài ra, như những người khác đã nói, phần còn lại của mô hình của tôi là bằng Python và tôi thường có các cuộc gọi web hoặc tệp CSV.


2

Tôi sẽ cố gắng trả lời câu hỏi này dựa trên kinh nghiệm của riêng tôi. Ngược lại với các câu trả lời khác, tôi thích Sqlhọc sâu và những thứ liên quan đến dữ liệu lớn. Có rất nhiều lý do cho điều đó. Như nó có thể được nhìn thấy ở đây ,

Pandas cung cấp trải nghiệm phân tích dữ liệu trực quan, mạnh mẽ và nhanh chóng trên dữ liệu dạng bảng. Tuy nhiên, vì Pandas chỉ sử dụng một luồng thực thi và yêu cầu tất cả dữ liệu phải có trong bộ nhớ cùng một lúc, nên nó không mở rộng tốt cho các bộ dữ liệu vượt quá thang gigabyte.

B+

Một điểm khác biệt nữa là các hoạt động CRUD trong Sql có thể được áp dụng phân phối với các chính sách ủy quyền khác nhau không thể có trong gấu trúc.

Nó không có nghĩa là để nói cái nào tốt hơn, tất cả phụ thuộc vào nhiệm vụ của bạn. Đối với tính toán quy mô lớn, tôi thích Sql và đối với những người nhỏ, tôi thích gấu trúc.

Có những thứ khác không có trong gấu trúc thực sự quan trọng đối với trải nghiệm nhanh để trích xuất dữ liệu mà tôi sẽ đề cập sau. Để bây giờ, chỉ cần nhìn vào đây .


1

Panda phổ biến hơn vì python ở dạng máy tính xách tay jupyter là hộp công cụ phổ biến nhất được sử dụng bởi nhà khoa học dữ liệu trong khu vực mạng thần kinh. Python đang trở thành "ngôn ngữ". Thậm chí có thể sử dụng phụ trợ SQL nhưng bạn không bị ràng buộc với SQL chỉ với gấu trúc.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.