Tôi có nên sử dụng cơ sở dữ liệu để xử lý số lượng lớn kết quả?


8

Lý lịch:

Tôi hiện đang chạy một thí nghiệm biến thể tham số số lượng lớn. Chúng đang được chạy trong Python 2.6+, sử dụng numpy. Những thí nghiệm này sẽ mất khoảng 2 tuần để chạy.

Gần như tôi đang thay đổi 3 tham số (biến độc lập) trên một phạm vi giá trị. Tôi đang sửa 6 biến độc lập hơn nữa (hiện tại) Tôi đang báo cáo về 4 biến phụ thuộc.

Một trong những tham số tôi đang thay đổi đang được phân phối trên một số quy trình (và máy tính). Đối với mỗi tham số này, tôi tạo một csvtệp riêng với mỗi hàng chứa giá trị của tất cả các biến (bao gồm độc lập, cố định và phụ thuộc). Trên tất cả các biến thể dự kiến ​​sẽ tạo ra khoảng 80.000 hàng dữ liệu

Hầu hết thời gian tôi chỉ nhìn vào giá trị của một trong các biến phụ thuộc, tuy nhiên tôi giữ các biến khác xung quanh, vì chúng có thể giải thích những gì đang xảy ra khi có điều gì đó bất ngờ xảy ra.

Trong phiên bản trước của thử nghiệm này, chỉ khác nhau giữa 2 tham số (mỗi giá trị chỉ có 2 giá trị) Tôi đã sao chép csvtệp này vào chương trình bảng tính và thực hiện một loạt các bản sao dán để tạo một bảng chỉ có biến phụ thuộc mà tôi quan tâm Việc thực hiện một số điều khó xử trong MS-Excel để cho phép tôi sắp xếp theo công thức. Điều này đã đủ đau đớn cho 6 bộ kết quả thí nghiệm mà tôi có. Khi chạy xong, tôi sẽ có thêm 2 đơn hàng kết quả.

Câu hỏi:

Tôi đã suy nghĩ một lần, tôi có thể kết xuất tất cả các kết quả từ các csvtệp vào cơ sở dữ liệu và truy vấn các phần thú vị. Sau đó lấy những kết quả đó và đưa chúng vào một bảng tính để phân tích. Tạo biểu đồ, tìm điểm được ghi tương đối với kết quả kiểm soát, v.v.

Tôi đang suy nghĩ theo đúng dòng? (Đây có phải là những gì mọi người làm?)

Cơ sở dữ liệu của tôi foo khá hoen rỉ những ngày này, ngay cả khi nó tốt tôi đang sử dụng MS-Access. Tôi cũng có ý định sử dụng MS-Access cho việc này.

Câu trả lời:


8

5105

Tôi thực sự khuyên bạn nên thực hiện phân tích / vẽ / v.v với cùng một công cụ mà bạn sẽ sử dụng để truy vấn dữ liệu của mình. Theo kinh nghiệm của tôi, khi thay đổi những gì cần phân tích chỉ cần thay đổi 1 dòng mã và chờ 2 giây, việc khai thác tối đa dữ liệu của bạn sẽ dễ dàng hơn nhiều. Sao chép dán cũng dễ bị lỗi CAO. Tôi đã thấy một số người ở điểm tuyệt vọng vì dữ liệu của họ không có ý nghĩa, chỉ để nhận ra rằng họ đã phạm sai lầm khi sao chép dữ liệu trong bảng excel của họ.

Nếu bạn đang ở tất cả quen thuộc với trăn, tôi sẽ đề nghị sử dụng gấu trúc hoặc (nếu bạn có nhiều dữ liệu hơn bạn có thể phù hợp trong bộ nhớ) pytables , mà sẽ cung cấp cho bạn tất cả những ưu điểm của một cơ sở dữ liệu (bao gồm cả tốc độ). Pandas có rất nhiều chức năng tiện ích để vẽ và phân tích dữ liệu, và bạn cũng sẽ có ngăn xếp trăn khoa học đầy đủ. Hãy xem cuốn sổ tay ipython này để biết ví dụ về việc sử dụng gấu trúc.

Tôi tin rằng các công cụ tương tự tồn tại cho R, cũng như các phần mềm thương mại như Matlab hoặc Stata.

HDF5 là một cách tốt để lưu trữ dữ liệu ban đầu và có hỗ trợ thư viện tốt trong nhiều ngôn ngữ.


Tôi cần phải phân tích và tạo dữ liệu riêng biệt. Dữ liệu của tôi sẽ mất khoảng 2 tuần để tạo. Điều này có thay đổi bất cứ điều gì trong câu trả lời của bạn?
Lyndon White

Xin lỗi, tôi đã không rõ ràng. Ý tôi là công cụ bạn sử dụng để truy vấn dữ liệu của bạn phải giống với công cụ phân tích và cốt truyện của bạn. Đó là một lợi thế lớn để có thể làm lại mọi thứ chỉ bằng cách chạy 1 tập lệnh. Tôi sẽ lưu trữ dữ liệu trong hdf5, nhưng nếu bạn thích cơ sở dữ liệu SQLite (như Geoff đề xuất), bạn cũng có thể đọc từ đó với SQLAlchemy trong python.
LKlevin

Ah đúng mà có ý nghĩa hơn. Và bạn cũng đang ủng hộ một phân tích có thể lập trình và lặp lại
Lyndon White

Đúng! Trả lời câu hỏi "làm thế nào chính xác tôi đã làm phân tích cho dữ liệu trong biểu đồ này?" sẽ dễ dàng hơn rất nhiều khi bạn chỉ cần nhìn vào kịch bản làm toàn bộ.
LKlevin

Bây giờ tôi đã bắt đầu phân tích bằng Pandas, tôi cảm thấy mình có thể chấp nhận câu trả lời này.
Lyndon White

5

Tôi rất khuyên bạn nên sử dụng một công cụ như Sumatra cho việc này. Tôi đã từng có một cách tiếp cận "dành cho người đi bộ" tương tự với bạn để theo dõi nhiều lần chạy mô phỏng với các thông số khác nhau, nhưng cuối cùng, nó chỉ trở thành một mớ hỗn độn vì bên cạnh việc không thể thiết kế một cách tiếp cận đặc biệt như vậy là chính xác dự đoán tất cả các trường hợp sử dụng và tiện ích mở rộng cần thiết (ví dụ: điều gì xảy ra nếu bạn cần giới thiệu một tham số bổ sung).

Sumatra theo dõi tất cả các lần chạy mô phỏng của bạn và lưu trữ chúng trong cơ sở dữ liệu mà sau này có thể được truy vấn (sử dụng API Python) để lọc và phân tích các bản ghi bạn quan tâm. Nó rất linh hoạt và không áp dụng quy trình làm việc cho bạn, mà tôi tìm thấy một điểm cộng lớn Ngoài ra, nó đi kèm với một giao diện web cho phép bạn nhanh chóng duyệt kết quả (hoặc kiểm tra / tải xuống các tệp được tạo), rất hữu ích. Cơ sở dữ liệu mặc định sử dụng SQLite và tôi có thể tưởng tượng rằng nó trở nên hơi chậm nếu bạn sử dụng nó để lưu trữ hơn 80.000 kết quả mô phỏng. Có một phụ trợ PostgreSQL nhưng tôi chưa bao giờ sử dụng nó vì vậy không thể chứng minh cho hiệu suất của nó.

Tôi nên nói rằng nó vẫn còn trong giai đoạn phát triển ban đầu và còn thiếu một vài thứ, nhưng tôi đã sử dụng nó cho hầu hết các mô phỏng của tôi trong năm qua và nó đã cứu tôi rất nhiều lần mà tôi không thể tưởng tượng được những gì tôi sẽ làm mà không có nó Cá nhân, tôi không bao giờ sử dụng nó cho các tính toán trên các máy tính khác nhau (hoặc trên một cụm), nhưng tôi nghĩ rằng nó hỗ trợ loại quy trình công việc này. Hãy hỏi trong danh sách gửi thư nếu bạn không chắc chắn hoặc không thể tìm thấy chính xác những gì bạn cần, đó là một cộng đồng nhỏ nhưng rất thân thiện và hữu ích.

Hãy cho tôi một tiếng hét nếu đây là điều bạn quan tâm và tôi rất vui khi chia sẻ quy trình làm việc và mã soạn sẵn của tôi để giúp bạn đi (hoặc chỉ để lấy cảm hứng).

Đối với phân tích dữ liệu thực tế, tôi đồng ý với LKlevin rằng gấu trúc và máy tính xách tay IPython là những công cụ cực kỳ hữu ích để biết (Sumatra cho phép bạn nhập các bản ghi vào gấu trúc, mặc dù hiện tại có một chút nhưng tôi chắc chắn rằng nó sẽ sớm được cải thiện). Tôi cũng có thể tưởng tượng rằng việc lưu dữ liệu / kết quả mô phỏng vào định dạng HDF5 có thể hữu ích, trong trường hợp đó, pytables là một công cụ tốt trong hộp công cụ. (Tôi dường như nhớ rằng hỗ trợ cho HDF5 được lên kế hoạch ở Sumatra, nhưng tôi không thể tìm thấy thông tin ngay bây giờ và tôi không chắc điều này đã được triển khai chưa.)

Cuối cùng, tôi chắc chắn có những công cụ khác trợ giúp với các loại nhiệm vụ này (xem "danh sách ngắn" trên slide thuyết trình này ). Nhưng cá nhân tôi chưa từng thử bất kỳ thứ nào trong số đó vì tôi rất hài lòng với chức năng và tính linh hoạt mà Sumatra cung cấp.


1

Có, bạn có thể kết xuất tất cả các kết quả vào cơ sở dữ liệu và có, một số người chọn sử dụng cơ sở dữ liệu. Tôi chưa phải đối phó với các tình huống sử dụng cơ sở dữ liệu, nhưng tôi đã dạy tại các hội thảo nơi các giảng viên khác dạy về việc sử dụng cơ sở dữ liệu để thu thập dữ liệu. Đối với cơ sở dữ liệu không lớn, theo những gì tôi hiểu, công nghệ cơ bản không thành vấn đề. Người hướng dẫn của tôi đã sử dụng SQLite3. Thật dễ dàng để cài đặt trong Linux, đạt tiêu chuẩn trong OS X và tôi tin rằng nó có sẵn cho Windows.

Có thể truy cập cơ sở dữ liệu SQLite thông qua thiết bị đầu cuối trong OS X và Linux; Tôi không chắc nó đã được thực hiện như thế nào trên Windows. Chẳng hạn, bạn cũng có thể tận dụng các gói Python để đọc và ghi vào cơ sở dữ liệu của mình bằng cách sử dụng gói sqlite3 trong thư viện chuẩn Python.

Nếu bộ dữ liệu của bạn thực sự lớn, việc triển khai cơ sở dữ liệu khác sẽ tốt hơn và tại thời điểm đó, bạn có thể muốn tham khảo ý kiến ​​chuyên gia cơ sở dữ liệu.


1

Nếu tất cả dữ liệu của bạn vừa vặn thoải mái trong bộ nhớ (giả sử, dưới 1 GB, do đó bạn có biên độ cho phân tích), thì DB quá mức cần thiết. Bạn chỉ có thể đọc toàn bộ tập tin trong bộ nhớ và chọn những phần bạn muốn. Mặt khác, khi dữ liệu của bạn bắt đầu tăng (hoặc có khả năng tăng quá lớn), DB có thể cung cấp cho bạn các truy vấn nhanh và dễ dàng ( "cung cấp cho tôi tất cả tốc độ mà năng lượng chính xác là 2 và nhiệt độ lớn hơn 27" ).

Một chủ đề khác là việc tạo ra dữ liệu. Vì dữ liệu của bạn mất hai tuần, tôi giả sử bạn đang tạo chúng trên cụm máy tính song song. Việc đặt DB cho ghi song song rất phức tạp và có khả năng làm chậm quá trình, vì dữ liệu đang được truyền và các khóa được đặt đúng chỗ. Vì bạn chỉ cần viết một lần, bạn có thể có mỗi quy trình tạo tệp văn bản tạm thời của riêng mình, viết kết quả ở đó và có một quy trình trung tâm đọc từng thứ này và đổ nó vào DB chính. Đối với trường hợp đơn giản nhất, tập lệnh này có thể đơn giản catvà lưu kết quả dưới dạng văn bản thuần túy.

Bây giờ, giả sử bạn muốn sử dụng DB. Nếu trường hợp sử dụng của bạn là một cái gì đó cao cấp hơn một chút so với tệp văn bản (bạn sẽ làm gì nếu bạn đã tải CSV bằng Numpy), tôi khuyên dùng HDF5 thông qua PyTables. Nó rất nhanh, đơn giản để thiết lập, nhận biết Numpy và với một loạt các tính năng nâng cao nếu bạn muốn điều chỉnh mọi thứ. Nó cũng hỗ trợ nén, truy vấn và lưu mảng. Nó cũng dễ dàng cài đặt trong Linux, Windows và Mac. Bố cục dữ liệu HDF5 không có gì nhiều hơn các bảng, giống như một bảng tính. Tệp kết quả .h5có thể được đọc từ nhiều ngôn ngữ máy tính nếu chúng được cài đặt thư viện thích hợp.

Mặt khác, bạn có SQL. Bạn có một cái trong stdlib của Python, vì vậy bạn sẽ cài đặt nó, nhưng nó không phù hợp lắm cho công việc số (chẳng hạn, bạn không thể lưu và khôi phục mảng Numpy một cách dễ dàng). Đây là tùy chọn tốt nhất nếu bạn cần các bên thứ ba giao tiếp từ các ngôn ngữ khác, vì nó rất nổi tiếng và có các hàm bao cho hầu hết mọi ngôn ngữ, nhiều trong số chúng được mặc định.

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.