2011-09-20 32 views
24

Tôi sử dụng R để phân tích dữ liệu và tôi rất hài lòng với nó. Tuy nhiên, việc làm sạch dữ liệu có thể dễ dàng hơn một chút. Tôi đang nghĩ về việc học một ngôn ngữ khác phù hợp với nhiệm vụ này. Cụ thể, tôi đang tìm một công cụ để lấy dữ liệu thô, xóa các biến hoặc quan sát không cần thiết và định dạng nó để dễ tải trong R. Nội dung sẽ chủ yếu là dữ liệu số và chuỗi, trái với văn bản nhiều dòng.Python hoặc awk/sed để làm sạch dữ liệu

Tôi đang xem xét kết hợp awk/sed so với Python. (Tôi nhận ra rằng Perl sẽ là một lựa chọn khác, nhưng, nếu tôi sẽ học một ngôn ngữ đầy đủ khác, Python có vẻ là một lựa chọn tốt hơn, có thể mở rộng hơn.)

Lợi thế của sed/awk là nó sẽ nhanh hơn học. Điểm bất lợi là sự kết hợp này không thể mở rộng được như Python. Thật vậy, tôi có thể tưởng tượng một số "nhiệm vụ leo" nếu tôi học Python, điều đó sẽ ổn, nhưng không phải mục tiêu của tôi.

Sự cân nhắc khác mà tôi có là các ứng dụng cho các tập dữ liệu lớn. Theo tôi hiểu nó, awk/sed hoạt động theo từng dòng, trong khi Python thường sẽ kéo tất cả dữ liệu vào bộ nhớ. Đây có thể là một lợi thế khác cho sed/awk.

Có vấn đề nào khác mà tôi đang thiếu không? Bất kỳ lời khuyên nào mà bạn có thể cung cấp sẽ được đánh giá cao. (I bao gồm thẻ R cho người sử dụng R để đưa ra các khuyến nghị làm sạch của họ.)

+0

bằng cách "dọn dẹp", nghĩa là cắt bớt các ngoại lệ hoặc khôi phục tính nhất quán hoặc bất kỳ điều gì khác? bởi "dữ liệu", bạn có nghĩa là số lượng lớn hoặc chuỗi, hoặc chỉ đơn giản là văn bản? với tôi mục tiêu của câu hỏi hiện tại là quá chung chung. – nye17

+0

@ nye17, xin lỗi vì sự mơ hồ. Tôi đã thêm chi tiết hơn một chút. – Charlie

+2

Tôi sử dụng chủ yếu python cho bản thân mình, nhưng nếu nó là thao tác thuần túy của tập dữ liệu dựa trên văn bản, phục vụ như một giao diện dữ liệu cho R, tôi sẽ đề nghị perl, biểu hiện thường xuyên mạnh mẽ và linh hoạt trong giao dịch với văn bản. – nye17

Trả lời

15

Không làm hỏng cuộc phiêu lưu của bạn, nhưng tôi muốn nói không và đây là lý do:

  • R được vectorised nơi sed/awk không
  • R đã có cả Perl biểu thức chính quy và biểu thức thông thường mở rộng
  • R có thể dễ dàng hơn làm cho trông cậy vào thói quen thống kê (nói, sự đổ tội) nếu bạn cần nó
  • R có thể hình dung, tóm tắt, ...

và quan trọng nhất: bạn đã biết R.

Điều đó nói rằng, tất nhiên sed/awk là tuyệt vời cho các chương trình nhỏ hoặc thậm chí một lớp lót và Python là một ngôn ngữ tốt. Nhưng tôi cũng xem xét gắn bó với R.

+4

Tôi không nghĩ rằng anh ta đang xem xét thả R, mà là bổ sung nó. – Karl

3

Tôi khuyên bạn nên đầu tư lâu dài với ngôn ngữ thích hợp để xử lý các tệp dữ liệu, như python hoặc perl hoặc ruby, so với giải pháp ngắn/ngắn hạn. Tôi nghĩ rằng tất cả các nhà phân tích dữ liệu cần ít nhất ba ngôn ngữ; Tôi sử dụng C cho các tính toán khổng lồ, perl để xử lý các tệp dữ liệu và R cho phân tích tương tác và đồ họa.

Tôi đã học được perl trước khi python trở nên phổ biến. Tôi đã nghe những điều tuyệt vời về ruby ​​vì vậy bạn có thể muốn thử thay vào đó.

Đối với bất kỳ điều nào trong số này, bạn có thể làm việc với các tệp theo từng dòng; python không cần phải đọc toàn bộ tập tin trước.

+2

Chắc chắn, với báo trước rằng 'C + + có thể là C tốt hơn C' và tương tự, người hâm mộ Python cho rằng đó là tốt hơn so với Perl.Nhưng như một quy tắc chung, biết 'R, * a * ngôn ngữ kịch bản và * ngôn ngữ biên dịch di động hiện đại *' là một công thức tốt. –

+0

@DirkEddelbuettel Thật vậy, tôi bị kẹt vào cuối những năm 90, lập trình khôn ngoan; Tôi sợ rằng học sinh sẽ xem tôi theo cách mà tôi xem các lập trình viên của Fortran. – Karl

1

Tôi muốn giới thiệu 'awk' cho loại xử lý này.

Có lẽ bạn chỉ đang tìm kiếm/từ chối các quan sát không hợp lệ trong các tệp văn bản đơn giản.

awk nhanh như chớp ở nhiệm vụ này và rất đơn giản để lập trình.

Nếu bạn cần làm gì phức tạp hơn thì bạn có thể.

Python cũng là một khả năng nếu bạn không quan tâm đến việc đạt hiệu suất. Thư viện "rpy" có thể được sử dụng để tích hợp chặt chẽ các thành phần python và R.

10

Tôi thường xuyên sử dụng Python và Perl. Tôi biết sed khá tốt và một khi được sử dụng awk rất nhiều. Tôi đã sử dụng R trong phù hợp và spurts. Perl là tốt nhất của bó cho chức năng chuyển đổi dữ liệu và tốc độ.

  • Perl có thể làm về cơ bản mọi thứ mà bạn có thể làm, nhưng cũng rất nhiều. (Trong thực tế, a2p và s2p, mà đi kèm với perl, chuyển đổi awk và sed script để Perl.)
  • Perl được bao gồm trong hầu hết các hệ thống Linux/Unix. Khi đó không phải là trường hợp, có lý do chính đáng để học sed và awk. Lý do đó là chết lâu.
  • Perl có một bộ mô-đun phong phú cung cấp nhiều quyền lực hơn so với một người có thể nhận được từ awk hoặc sed. Ví dụ, các mô-đun này cho phép một lớp lót đảo ngược trình tự DNA, tính toán số liệu thống kê, phân tích cú pháp tệp CSV hoặc tính MD5. (xem http://cpan.org/ cho các gói)
  • Perl về cơ bản là terse như sed và awk. Đối với những người như tôi (và, tôi nghi ngờ, bạn), nhanh chóng chuyển đổi dữ liệu trên dòng lệnh là một lợi ích tuyệt vời. Python quá dài dòng để sử dụng dòng lệnh hiệu quả.

Tôi thành thật không biết suy nghĩ tại sao người ta học sed và lúng túng trước Perl.

Để ghi lại, tôi không phải là "một anh chàng Perl". Tôi thích nó như một con dao quân đội Thụy Sĩ, không phải là một tôn giáo.

+2

+1 cho một so sánh thông qua từ một nền mã hóa công bằng. – nye17

+0

+1 cho Perl. Mặc dù Python có thể dễ đọc hơn, Perl đánh bại nó bất cứ lúc nào về tốc độ và độ chặt. Và các tùy chọn dòng lệnh thực sự là một phước lành. –

+0

'Mỗi hệ thống Unix có đối số Perl' áp dụng nhiều hơn để giảm thiểu và lúng túng, và cả hai dễ dàng hơn để có được giữ ra nếu bạn cần (rùng mình) để làm việc trên Windoze. Và đưa chúng ta trở lại 'chỉ sử dụng R' của tôi vì Charlie rõ ràng sẽ có R trên Windows. Tôi đã từng viết nhiều bộ lọc dữ liệu trong Perl nhưng chuyển hoàn toàn sang R. –

1

Tôi đồng ý với Dirk. Tôi cũng nghĩ về điều tương tự và sử dụng các ngôn ngữ khác một chút. Nhưng cuối cùng tôi lại ngạc nhiên một lần nữa những gì người dùng có kinh nghiệm làm với R. Gói như ddply hoặc plyr có thể rất thú vị với bạn. Điều đó đang được nói SQL đã giúp tôi với dữ liệu tung hứng thường là

6

Tôi muốn giới thiệu sed/awk cùng với sự giàu có của số của các công cụ dòng lệnh khác trên nền tảng UNIX: comm, tr, sort, cut, join, grep, và được xây dựng trong các khả năng của trình bao như lặp và không có gì. Bạn thực sự không cần phải học một ngôn ngữ lập trình khác vì R có thể xử lý thao tác dữ liệu cũng như nếu không tốt hơn các ngôn ngữ kịch bản phổ biến khác.

+0

Jeff có điểm tốt: khi dán cùng với các đường ống, các công cụ dòng lệnh giống như những công cụ mà anh ta đề cập cho phép cắt và dicing dữ liệu rất nhanh và mạnh mẽ. Perl bổ sung (thay vì thay thế) nhiều trong số những công cụ này. Xem hướng dẫn sử dụng lõi của GNU tại http://www.gnu.org/s/coreutils/manual/html_node/index.html để biết tóm tắt. – Reece

+0

Và tốt hơn nữa, R có thể chơi với các đường ống tương tự nếu bạn sử dụng nhị phân 'r' nhị phân từ gói littler của Jeff và Dirk. Quay lại sử dụng R :) –

+0

Người hỏi đã không chỉ định một nền tảng, nhưng điều này có thể không phải là cách tiếp cận tốt cho phần lớn dân số trên Windows. Việc chuyển các công cụ Unix sang môi trường Windows đã không có vấn đề gì. – user287424

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