Cách tốt nhất để định hình lại / tái cấu trúc dữ liệu là gì?


12

Tôi là trợ lý nghiên cứu cho một phòng thí nghiệm (tình nguyện viên). Tôi và một nhóm nhỏ đã được giao nhiệm vụ phân tích dữ liệu cho một tập hợp dữ liệu được lấy từ một nghiên cứu lớn. Thật không may, dữ liệu được thu thập với một ứng dụng trực tuyến thuộc loại nào đó và nó không được lập trình để xuất dữ liệu ở dạng có thể sử dụng nhất.

Những hình ảnh dưới đây minh họa vấn đề cơ bản. Tôi được cho biết rằng đây được gọi là "Định hình lại" hoặc "Tái cấu trúc".

Câu hỏi: Quá trình tốt nhất để chuyển từ Hình 1 sang Hình 2 với tập dữ liệu lớn với hơn 10k mục là gì?

Đây là một mẫu, tập tin thực tế có hơn 10k mục.  Tôi đã mã hóa màu sắc để giúp rõ ràng

Đây là những gì tất cả cần phải được chuyển đổi thành.


1
Vui lòng chia thành hai câu hỏi riêng biệt và cung cấp dữ liệu mẫu (bạn cũng có thể bỏ qua nền của mình trừ khi có liên quan). Gần như, trên (1) bạn sẽ muốn tìm một ánh xạ và sau đó hợp nhất để đính kèm các số. (2) phụ thuộc nhiều vào loại thao tác bạn muốn thực hiện; gói R phổ biến cho các loại điều bao gồm data.table, dplyr, plyr, và reshape2- Tôi khuyên bạn nên tránh Excel và các bảng tổng hợp nếu có thể.
Max Ghenis

Tôi đoán các vấn đề làm sạch dữ liệu của bạn có phạm vi rộng hơn mức có thể được đề cập trong các loại câu hỏi chung mà bạn hỏi. Bạn có thể muốn xem OpenRefine.org. Một vài video và tải xuống có thể giúp bạn rất nhiều với phần phân tích này.
John

3
Câu hỏi này dường như lạc đề vì nó liên quan đến việc làm sạch và tổ chức dữ liệu thô sơ, chứ không phải thống kê.
Nick Stauner

2
Tôi muốn nói rằng nó không lạc đề vì làm sạch dữ liệu của bạn, vì "thô sơ" như quy trình có thể, là điều cần thiết để sử dụng nó. Đó là một phần của một vấn đề lớn hơn.
Shadowtalker

2
@NickStauner, IIRC Tôi đã bỏ phiếu để đóng là 'không rõ ràng / cần thêm thông tin', không phải là ngoài chủ đề. Dường như với tôi, việc làm sạch dữ liệu nằm trong phạm vi số liệu thống kê lớn, và mặc dù tôi nhận ra những người tốt có thể không đồng ý, tôi nghĩ những câu hỏi như vậy có thể thuộc chủ đề. Hãy xem xét rằng chúng tôi có thẻ làm sạch dữ liệu và các chuỗi CV này: 1 , 2 , 3 , & 4 .
gung - Phục hồi Monica

Câu trả lời:


12

Như tôi đã lưu ý trong nhận xét của mình , không có đủ chi tiết trong câu hỏi để một câu trả lời thực sự được đưa ra. Vì bạn cần trợ giúp thậm chí tìm các thuật ngữ đúng và hình thành câu hỏi của bạn, tôi có thể nói ngắn gọn một cách chung chung.

2 ) và sắp xếp lại các hàng và cột là các tác vụ làm sạch dữ liệu điển hình.

Theo một nghĩa nào đó, việc làm sạch dữ liệu có thể được thực hiện trong bất kỳ phần mềm nào và có thể được thực hiện bằng Excel hoặc với R. Sẽ có những ưu và nhược điểm đối với cả hai lựa chọn:

  • Excel: Excel gần như chắc chắn là lựa chọn phổ biến nhất để làm sạch dữ liệu (xem R fortunes # 59 pdf ). Nó cũng được coi là một lựa chọn kém của các nhà thống kê. Lý do chính là khó đảm bảo rằng bạn đã nắm bắt được mọi thứ hoặc bạn đã xử lý mọi thứ giống hệt nhau và không có hồ sơ về những thay đổi mà bạn đã thực hiện, vì vậy bạn không thể xem lại những thay đổi đó sau này. Mặt trái của việc sử dụng Excel là sẽ dễ dàng hơn để xem những gì bạn đang làm và bạn không cần phải biết nhiều để thực hiện các thay đổi. (Các nhà thống kê sẽ coi sau này là một con bổ sung .)
  • R: R sẽ yêu cầu một đường cong học tập dốc. Nếu bạn không quen thuộc với R hoặc lập trình, những thứ có thể được thực hiện khá nhanh chóng và dễ dàng trong Excel sẽ gây khó chịu khi thử trong R. Mặt khác, nếu bạn phải làm điều này một lần nữa, thì việc học sẽ được thời gian chi tiêu tốt Ngoài ra, khả năng viết và lưu mã của bạn để làm sạch dữ liệu trong R sẽ làm giảm bớt các nhược điểm được liệt kê ở trên. Sau đây là một số liên kết sẽ giúp bạn bắt đầu với các tác vụ này trong R:

    Bạn có thể nhận được nhiều thông tin tốt về Stack Overflow :

    Quick-R cũng là một tài nguyên quý giá:

    Bắt số vào chế độ số:

    Một nguồn vô giá khác để tìm hiểu về R là trang web trợ giúp thống kê của UCLA :

    Cuối cùng, bạn luôn có thể tìm thấy nhiều thông tin với Google cũ:


Cập nhật: Đây là một vấn đề phổ biến liên quan đến cấu trúc dữ liệu của bạn khi bạn có nhiều phép đo cho mỗi "đơn vị nghiên cứu" (trong trường hợp của bạn là một người). Nếu bạn có một hàng cho mỗi người, ví dụ, dữ liệu của bạn được cho là ở dạng 'rộng', nhưng sau đó bạn nhất thiết sẽ có nhiều cột cho biến phản hồi của mình. Mặt khác, bạn có thể chỉ có một cột cho biến phản hồi của mình (kết quả là có nhiều hàng cho mỗi người), trong trường hợp đó, dữ liệu của bạn được cho là ở dạng 'dài'. Di chuyển giữa hai định dạng này thường được gọi là 'định hình lại' dữ liệu của bạn, đặc biệt là trong thế giới R.

  • Hàm R tiêu chuẩn cho việc này là ? Định hình lại . Có một hướng dẫn sử dụng reshape()trên trang web trợ giúp thống kê của UCLA.
  • Nhiều người nghĩ reshapelà khó làm việc. Hadley Wickham đã đóng góp một gói gọi là reshape2 , nhằm mục đích đơn giản hóa quy trình. Trang web cá nhân của Hadley cho reshape2 đã có ở đây , tổng quan về Quick-R ở đây và có một hướng dẫn dễ nhìn ở đây .
  • Có rất nhiều câu hỏi về SO về cách định hình lại dữ liệu. Hầu hết trong số họ là về việc đi từ rộng đến dài, bởi vì đó thường là những gì các nhà phân tích dữ liệu phải đối mặt. Câu hỏi của bạn là về việc đi từ dài đến rộng, ít phổ biến hơn, nhưng vẫn còn nhiều chủ đề về điều đó, bạn có thể xem qua chúng với tìm kiếm này .
  • Nếu trái tim của bạn đang cố gắng làm điều này với Excel, có một chủ đề về cách viết macro VBA cho Excel để sao chép chức năng định hình lại ở đây: làm tan / tái cấu trúc trong Excel bằng VBA?

2
Câu hỏi này, và câu trả lời này, là một minh họa tuyệt vời về lý do tại sao kiến ​​thức lập trình ngày càng cần thiết cho hầu hết các loại nghiên cứu. Tôi sẽ viết lên một câu trả lời đầy đủ hơn cho câu hỏi này mà tôi cũng sẽ đăng trên blog của mình, nhưng tôi muốn nhận được bình luận này trước khi tôi quên.
Shadowtalker

2
Tôi đồng ý ở một mức độ nào đó nhưng "cần thiết" và "bất kỳ loại nghiên cứu nào" sẽ đi hơi xa. Rất nhiều ngành học thường không xử lý dữ liệu bẩn và nhiều nhà nghiên cứu hàng đầu chưa bao giờ cần phải chạm vào ngôn ngữ lập trình.
Behacad

Wow, cảm ơn tất cả các bạn. Tôi sẽ mất một chút để xử lý và tích hợp tất cả các thông tin này rất mới đối với tôi. Một chút của một tiếp tuyến meta có vẻ như tôi đã thúc đẩy câu hỏi của mình ... Hãy tưởng tượng bạn rơi vào một vùng đất xa lạ không có kiến ​​thức về ngôn ngữ / văn hóa của nó, đây là tôi và các số liệu thống kê. Tôi đánh giá cao thời gian bạn đã thực hiện trong phản hồi của bạn.
Wilkoe

Tôi đã thêm một chỉnh sửa với hy vọng làm rõ câu hỏi ban đầu của mình, mặc dù câu hỏi dường như đã bị đóng.
Wilkoe

Câu hỏi đã bị đóng, @ user48538, và phiên bản này rõ ràng lạc đề hơn so với trước đây, thật không may. Nếu bạn có 10k hàng, bạn chắc chắn không muốn thử làm điều này trong Excel. Bạn thực sự phải sử dụng R hoặc phần mềm lập trình tương tự. Tên của hoạt động cụ thể là định hình lại tập dữ liệu của bạn từ 'dài' đến 'rộng', tôi sẽ thêm một vài liên kết cho bạn. Ngoài ra, nếu bạn là một tình nguyện viên đại học, không có nền tảng về số liệu thống kê hoặc lập trình, thì rất thiếu trách nhiệm với bất kỳ ai giao nhiệm vụ này cho bạn, IMHO. Không có cách này nên là nhiệm vụ của bạn.
gung - Phục hồi Monica

0

Hãy thử sử dụng R:

> ddf
   sess_id user_id     quest  response
1        1       a       age        29
2        1       a satisfied  st_agree
3        1       a    gender      male
4        1       a     phone    iphone
5        2       a       age        29
6        2       a satisfied not_agree
7        2       a    gender    female
8        2       a     phone    iphone
9        3       b       age        29
10       3       b satisfied     agree
11       3       b    gender      male
12       3       b     phone   android
> 
> library(reshape2)
> dcast(ddf, sess_id+user_id ~ quest, value.var='response')
  sess_id user_id age gender   phone satisfied
1       1       a  29   male  iphone  st_agree
2       2       a  29 female  iphone not_agree
3       3       b  29   male android     agree

0

Trong scala, đây được gọi là thao tác "phát nổ" và có thể được thực hiện trên DataFrame. Nếu dữ liệu của bạn là một rdd, trước tiên bạn chuyển đổi sang dataFrame thông qua toDFlệnh và sau đó sử dụng .explodephương thứ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.