2011-09-25 66 views
6

Tôi có một ứng dụng đường ray được lưu trữ trên Heroku mà tôi muốn kết hợp một số phân tích dữ liệu trực tiếp. Lý tưởng nhất, tôi rất muốn tìm ra cách để chạy mô hình hồi quy tăng cường tổng quát, mà tôi biết có sẵn trong cả R (http://cran.r-project.org/web/packages/gbm/index.html) và Stata (http://www.stata-journal.com/article.html?article=st0087). Tôi muốn lưu cây gbm kết quả và sau đó, trong ứng dụng của tôi, sử dụng nó để dự đoán kết quả mới dựa trên đầu vào của người dùng.Tùy chọn Phân tích dữ liệu/thống kê dữ liệu cho ứng dụng Heroku Rails?

Nếu không thể, tôi sẽ mở để sử dụng các thuật toán khai phá dữ liệu khác. Quan trọng nhất đối với tôi là khả năng tích hợp nó vào ứng dụng Heroku của tôi để nó có thể chạy mà không có máy cục bộ của tôi.

Tùy chọn Tôi đã nhìn vào:

1) Heroku Hỗ trợ đề nghị vendoring thư viện R vào một viên ngọc ruby. Tôi tương đối mới với ruby ​​và đường ray, đây có phải là điều tôi có thể làm được không. Tôi đã nhìn xung quanh để được hướng dẫn về các thư viện vendoring trong đá quý, nhưng đã không thể tìm thấy nhiều.

2) Một chủ đề khác tại đây (http://stackoverflow.com/questions/6495232/statistic-engine-that-work-with-heroku) đã đề cập CloudNumbers, nhưng dường như không thể gọi dịch vụ từ Ứng dụng Rails.

3) Trong một nghiên cứu điển hình của họ, Heroku đề cập đến FlightCaster, sử dụng Clojure, Hadoop và EC2 cho việc học máy của họ (http://www.infoq.com/articles/flightcaster-clojure-rails). Tôi thấy rằng Heroku hỗ trợ Clojure, nhưng có cách nào để tích hợp nó (hoặc cụ thể hơn là Incanter) vào ứng dụng Rails của tôi không?

Vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng nào.

Trả lời

6

Tôi sẽ trả lời câu hỏi này từ góc độ R. Nói chung, bạn sẽ phải đối mặt với hai vấn đề:

1) Giao diện với R, bất kể nơi nó đang chạy

2) Việc làm này từ Heroku, nơi có một tập đặc biệt của những thách thức.

Có một vài phương pháp tiếp cận chung để là người đầu tiên trong số này - bạn có thể sử dụng một ràng buộc cho R (rsruby, rinruby, vv), bạn có thể bao ra cho R (ví dụ, từ ruby ​​R -e "RCODEHERE"), bạn có thể truy cập R dưới dạng dịch vụ web (xem gói Rook và cụ thể là một cái gì đó như https://github.com/jeffreyhorner/rRack/blob/master/Rook/inst/exampleApps/RJSONIO.R) hoặc bạn có thể truy cập R theo cách thủ công bằng cách sử dụng một cái gì đó như rserve.

Trong số này, việc bẻ khóa ra R là cách dễ nhất để thực hiện nếu bạn chỉ thực hiện một thao tác đơn lẻ và không phải lo lắng về hiệu suất. Bạn sẽ cần phải phân tích cú pháp đầu ra quay lại, nhưng đó là cách nhanh nhất trong trải nghiệm của tôi cho một thao tác đơn lẻ.

Để sử dụng đáng kể hơn, tôi khuyên bạn nên sử dụng một trong các liên kết hoặc thiết lập R làm dịch vụ web trên một ứng dụng Heroku khác và gọi cho nó qua HTTP. Thách thức tiếp theo là nhận được R chạy trên Heroku - nó không có sẵn như là một phần của môi trường tiêu chuẩn, và nó là một hệ thống tập tin chỉ đọc mà không có quyền truy cập root, vì vậy bạn không thể chỉ làm sudo apt-get install.

Có thể bán R thành đá quý - ai đó đã bắt đầu thực hiện việc này tại https://github.com/deet-uc/rsruby-heroku, nhưng cá nhân tôi không thể làm cho nó hoạt động. Cũng có thể xây dựng R trực tiếp trên Heroku bằng cách cài đặt tất cả các phụ thuộc, v.v.- đây là phương pháp mà tôi đã thực hiện tại https://github.com/noahhl/rookonheroku (bước 1 là tất cả những gì bạn cần nếu bạn không sử dụng Rook).

Lưu ý rằng Heroku có thể không cho phép bạn quay lên một quy trình thứ hai trong cùng một chuỗi với ứng dụng Rails của bạn, đó là những gì hầu hết các ràng buộc thực hiện. Điều này có thể làm cho nó khá khó khăn để có được những ràng buộc làm việc, đó là lý do tại sao tôi có xu hướng ủng hộ hoặc bắn phá ra để R, hoặc lộ nó như là một webservice và truy cập nó thông qua HTTP.

Các vấn đề liên quan