2011-07-28 28 views
7

Trong môi trường python của tôi, các gói Rpy và Scipy đã được cài đặt.Python: xử lý một lượng lớn dữ liệu. Scipy hoặc Rpy? Và làm thế nào?

Vấn đề tôi muốn giải quyết là:

1) Tập dữ liệu tài chính khổng lồ được lưu trữ trong tệp văn bản. Không thể tải vào Excel

2) Tôi cần tổng hợp một số trường nhất định và nhận tổng số.

3) Tôi cần hiển thị 10 hàng hàng đầu dựa trên tổng số.

Gói nào (Scipy hoặc Rpy) phù hợp nhất cho tác vụ này?

Nếu có, bạn có thể cung cấp cho tôi một số gợi ý (ví dụ: tài liệu hoặc ví dụ trực tuyến) có thể giúp tôi triển khai giải pháp không?

Tốc độ là mối quan tâm. Lý tưởng là scipy và Rpy có thể xử lý các tệp lớn ngay cả khi các tệp quá lớn mà chúng không thể được lắp vào bộ nhớ

+0

Bạn có thể tìm thấy một số thông tin hữu ích tại http://www.dabeaz.com/generators-uk/ – lazy1

+1

'Tập hợp lớn' có ý nghĩa gì trong trường hợp của bạn? – radek

Trả lời

2

Như @ gsk3 ghi chú, bigmemory là một gói tuyệt vời cho điều này, cùng với các gói biganalyticsbigtabulate (có nhiều hơn, nhưng đây là giá trị kiểm tra ra). Ngoài ra còn có ff, mặc dù điều đó không dễ sử dụng.

Phổ biến với cả R và Python là hỗ trợ cho HDF5 (xem gói ncdf4 hoặc NetCDF4 trong R), giúp bạn truy cập nhanh chóng và dễ dàng các tập dữ liệu lớn trên đĩa. Cá nhân, tôi chủ yếu sử dụng bigmemory, mặc dù đó là R cụ thể. Như HDF5 có sẵn trong Python và rất, rất nhanh, nó có thể sẽ là đặt cược tốt nhất của bạn trong Python.

5

Không cần Rpy hoặc Scipy, mặc dù có thể dễ dàng hơn một chút. Vấn đề này có vẻ lý tưởng cho một trình phân tích cú pháp từng dòng. Đơn giản chỉ cần mở tập tin, đọc một hàng vào một chuỗi, quét hàng vào một mảng (xem numpy.fromstring), cập nhật số tiền đang chạy của bạn và chuyển sang dòng tiếp theo.

1

Tôi không biết gì về Rpy. Tôi biết rằng SciPy được sử dụng để thực hiện việc thu thập số lượng nghiêm trọng với các tập dữ liệu thực sự lớn, vì vậy nó sẽ làm việc cho vấn đề của bạn.

Như zephyr lưu ý, bạn có thể không cần một trong hai; nếu bạn chỉ cần giữ một số tiền chạy, bạn có thể làm điều đó bằng Python. Nếu đó là tệp CSV hoặc định dạng tệp phổ biến khác, hãy kiểm tra xem có mô-đun Python phân tích cú pháp đó cho bạn không và sau đó viết vòng lặp tổng các giá trị thích hợp.

Tôi không chắc chắn cách nhận mười hàng hàng đầu. Bạn có thể thu thập chúng trên bay khi bạn đi, hoặc bạn cần phải tính toán các khoản tiền và sau đó chọn các hàng? Để thu thập chúng, bạn có thể muốn sử dụng từ điển để theo dõi 10 hàng tốt nhất hiện tại và sử dụng các khóa để lưu trữ chỉ số bạn đã sử dụng để xếp hạng chúng (để dễ dàng tìm và quăng ra một hàng nếu hàng khác thay thế nó). Nếu bạn cần phải tìm các hàng sau khi tính toán được thực hiện, hãy slurp tất cả các dữ liệu vào một numpy.array, hoặc người nào khác chỉ cần đi qua một lần thứ hai thông qua các tập tin để kéo ra mười hàng.

3

File I/O của Python không có hiệu suất kém, vì vậy bạn chỉ có thể sử dụng trực tiếp mô-đun file. Bạn có thể xem những chức năng nào có sẵn trong đó bằng cách nhập help (file) vào trình thông dịch tương tác. Tạo tệp là một phần của chức năng ngôn ngữ cốt lõi và không yêu cầu bạn phải import file.

Cái gì như:

f = open ("C:\BigScaryFinancialData.txt", "r"); 
for line in f.readlines(): 
    #line is a string type 
    #do whatever you want to do on a per-line basis here, for example: 
    print len(line) 

Disclaimer: Đây là một câu trả lời Python 2. Tôi không chắc chắn 100% hoạt động trong Python 3.

Tôi sẽ để cho bạn biết cách hiển thị 10 hàng trên cùng và tìm tổng số hàng. Điều này có thể được thực hiện với logic chương trình đơn giản mà không phải là một vấn đề mà không có bất kỳ thư viện đặc biệt. Tất nhiên, nếu các hàng có một số định dạng phức tạp gây khó khăn cho việc phân tích các giá trị, bạn có thể muốn sử dụng một số loại mô-đun để phân tích cú pháp, ví dụ help(re) thành trình thông dịch tương tác).

2

Dữ liệu của bạn lớn đến mức nào, nó có lớn hơn bộ nhớ của PC không? Nếu nó có thể được nạp vào bộ nhớ, bạn có thể sử dụng numpy.loadtxt() để tải dữ liệu văn bản vào một mảng numpy. ví dụ:

import numpy as np 
with file("data.csv", "rb") as f: 
    title = f.readline() # if your data have a title line. 
    data = np.loadtxt(f, delimiter=",") # if your data splitted by "," 
    print np.sum(data, axis=0) # sum along 0 axis to get the sum of every column 
Các vấn đề liên quan