วิธีที่ดีที่สุดในการปรับรูปร่าง / ปรับโครงสร้างข้อมูลคืออะไร


12

ฉันเป็นผู้ช่วยวิจัยสำหรับห้องแล็บ (อาสาสมัคร) ฉันและกลุ่มย่อยได้รับมอบหมายให้ทำการวิเคราะห์ข้อมูลสำหรับชุดข้อมูลที่ดึงมาจากการศึกษาขนาดใหญ่ น่าเสียดายที่ข้อมูลถูกรวบรวมด้วยแอปออนไลน์บางประเภทและไม่มีการตั้งโปรแกรมให้ส่งออกข้อมูลในรูปแบบที่ใช้งานได้มากที่สุด

รูปภาพด้านล่างแสดงถึงปัญหาพื้นฐาน ฉันบอกว่านี่เรียกว่า "Reshape" หรือ "Restructure"

คำถาม: กระบวนการที่ดีที่สุดสำหรับการเปลี่ยนจากรูปภาพ 1 เป็นรูปภาพ 2 พร้อมชุดข้อมูลขนาดใหญ่ที่มีรายการมากกว่า 10k คืออะไร

นี่คือตัวอย่างไฟล์จริงมีมากกว่า 10k รายการ  ฉันใส่รหัสสีเพื่อช่วยให้ชัดเจน

นี่คือสิ่งที่ทุกอย่างจะต้องมีการแปลงเป็น


1
โปรดแยกคำถามนี้ออกเป็นสองคำถามแยกต่างหากและให้ข้อมูลตัวอย่าง (คุณสามารถละเว้นพื้นหลังของคุณยกเว้นที่เกี่ยวข้อง) ประมาณวันที่ (1) คุณจะต้องค้นหาการจับคู่แล้วรวมเพื่อแนบหมายเลข (2) ขึ้นอยู่กับประเภทของกิจวัตรที่คุณต้องการทำ แพคเกจ R ที่นิยมสำหรับประเภทของสิ่งนี้ ได้แก่data.table, dplyr, plyrและreshape2- ผมขอแนะนำให้หลีกเลี่ยง Excel และตารางเดือยถ้าเป็นไปได้
Max Ghenis

ฉันเดาว่าปัญหาการล้างข้อมูลของคุณนั้นกว้างขวางกว่าที่จะกล่าวถึงในคำถามทั่วไปที่คุณถาม คุณอาจต้องการดู OpenRefine.org วิดีโอและการดาวน์โหลดบางส่วนอาจช่วยคุณได้มากในการวิเคราะห์ส่วนนี้
John

3
คำถามนี้ดูเหมือนจะไม่ได้อยู่ที่หัวข้อเพราะเป็นเรื่องเกี่ยวกับการทำความสะอาดข้อมูลพื้นฐานและการจัดระเบียบไม่ใช่สถิติ
Nick Stauner

2
ฉันจะบอกว่ามันไม่ได้อยู่นอกหัวข้อเพราะการทำความสะอาดข้อมูลของคุณในฐานะ "ขั้นพื้นฐาน" ตามกระบวนการอาจเป็นสิ่งสำคัญที่จะใช้มัน มันเป็นส่วนหนึ่งของปัญหาที่ใหญ่กว่า
shadowtalker

2
@NickStauner, IIRC ฉันโหวตให้ปิดเพราะ 'ไม่ชัดเจน / ต้องการข้อมูลเพิ่มเติม' ไม่ใช่เป็นนอกหัวข้อ ดูเหมือนว่าสำหรับฉันแล้วการทำความสะอาดข้อมูลอยู่ในขอบเขตของสถิติที่มีขนาดใหญ่และแม้ว่าฉันจะรู้ว่าคนดีสามารถไม่เห็นด้วย แต่ฉันคิดว่าคำถามดังกล่าวอาจอยู่ในหัวข้อ พิจารณาว่าเรามีข้อมูลที่ทำความสะอาดแท็กเหล่านี้และหัวข้อ CV: 1 , 2 , 3และ4
gung - Reinstate Monica

คำตอบ:


12

ตามที่ฉันบันทึกไว้ในความคิดเห็นของฉันมีรายละเอียดไม่เพียงพอในคำถามเพื่อให้ได้คำตอบที่แท้จริง เนื่องจากคุณต้องการความช่วยเหลือแม้ในการค้นหาคำศัพท์ที่ถูกต้องและกำหนดคำถามของคุณฉันสามารถพูดโดยทั่วไปในเวลาสั้น ๆ

คำที่คุณกำลังมองหาคือการทำความสะอาดข้อมูล นี่เป็นกระบวนการของการรับข้อมูลดิบ (สกปรก) ที่จัดรูปแบบไม่ดีและทำให้เป็นรูปร่างสำหรับการวิเคราะห์ การเปลี่ยนและจัดรูปแบบปกติ ("สอง" ) และจัดระเบียบแถวและคอลัมน์ใหม่เป็นงานการล้างข้อมูลทั่วไป 2

ในบางกรณีการทำความสะอาดข้อมูลสามารถทำได้ในซอฟต์แวร์ใด ๆ และสามารถทำได้ด้วย Excel หรือด้วย R จะมีข้อดีข้อเสียของตัวเลือกทั้งสอง:

  • Excel: Excel เป็นตัวเลือกที่ใช้กันทั่วไปในการล้างข้อมูล (ดู R ฟอร์จูน # 59 pdf ) มันก็ถือว่าเป็นทางเลือกที่ไม่ดีจากนักสถิติ เหตุผลหลักคือยากที่จะตรวจสอบให้แน่ใจว่าคุณได้จับทุกอย่างหรือว่าคุณปฏิบัติต่อทุกอย่างเหมือนกันและไม่มีการบันทึกการเปลี่ยนแปลงที่คุณทำดังนั้นคุณจึงไม่สามารถกลับมาเปลี่ยนแปลงได้ในภายหลัง ข้อดีของการใช้ Excel คือการดูสิ่งที่คุณกำลังทำง่ายขึ้นและคุณไม่จำเป็นต้องรู้อะไรมากมายเกี่ยวกับการเปลี่ยนแปลง (สถิติจะพิจารณาหลังเพิ่มเติมCon .)
  • R: R จะต้องมีการเรียนรู้ที่สูงชัน หากคุณไม่คุ้นเคยกับ R หรือการเขียนโปรแกรมสิ่งที่สามารถทำได้อย่างรวดเร็วและง่ายดายใน Excel จะทำให้คุณผิดหวังในการลองใช้ R ในทางกลับกันหากคุณต้องทำสิ่งนี้อีกครั้งการเรียนรู้จะเป็นไปได้ ใช้เวลาอย่างดี นอกจากนี้ความสามารถในการเขียนและบันทึกรหัสของคุณสำหรับการทำความสะอาดข้อมูลใน R จะช่วยลดข้อเสียที่ระบุไว้ข้างต้น ต่อไปนี้เป็นลิงค์บางส่วนที่จะช่วยคุณเริ่มต้นทำงานเหล่านี้ใน R:

    คุณสามารถรับข้อมูลที่ดีมากมายจากStack Overflow :

    Quick-Rยังเป็นทรัพยากรที่มีค่า:

    รับตัวเลขเข้าสู่โหมดตัวเลข:

    แหล่งข้อมูลอันล้ำค่าอีกประการหนึ่งสำหรับการเรียนรู้เกี่ยวกับ R คือเว็บไซต์ช่วยเหลือสถิติของ UCLA :

    สุดท้ายคุณสามารถค้นหาข้อมูลจำนวนมากด้วย Google แบบเก่าที่ดี:

    • การค้นหานี้: การล้างข้อมูลใน rแสดงจำนวนบทช่วยสอน (ซึ่งไม่เคยทำมาก่อน FTR)

อัปเดต:นี่เป็นปัญหาทั่วไปเกี่ยวกับโครงสร้างของชุดข้อมูลของคุณเมื่อคุณมีการวัดหลายรายการต่อ 'หน่วยการเรียนรู้' (ในกรณีของคุณ, บุคคล) หากคุณมีหนึ่งแถวสำหรับทุกคนข้อมูลของคุณจะถูกกล่าวว่าอยู่ในรูปแบบ 'กว้าง' แต่คุณจะต้องมีหลายคอลัมน์สำหรับตัวแปรตอบกลับของคุณ ในทางกลับกันคุณสามารถมีเพียงหนึ่งคอลัมน์สำหรับตัวแปรตอบกลับของคุณ (แต่มีหลายแถวต่อคนดังนั้นผลลัพธ์) ซึ่งในกรณีนี้ข้อมูลของคุณถูกกล่าวว่าอยู่ในรูปแบบ 'ยาว' การย้ายระหว่างสองรูปแบบเหล่านี้มักจะเรียกว่า 'ปรับเปลี่ยน' ข้อมูลของคุณโดยเฉพาะในโลก R

  • ฟังก์ชั่น R มาตรฐานสำหรับเรื่องนี้คือ? Reshape มีคำแนะนำในการใช้reshape()บนเว็บไซต์ช่วยเหลือสถิติของ UCLA
  • หลายคนคิดreshapeว่ายากที่จะทำงานด้วย Hadley Wickhamได้มีส่วนร่วมกับแพคเกจที่เรียกว่าreshape2ซึ่งมีวัตถุประสงค์เพื่อลดความซับซ้อนของกระบวนการ เว็บไซต์ส่วนตัวของ Hadley สำหรับ reshape2 อยู่ที่นี่ภาพรวม Quick-R อยู่ที่นี่และมีการสอนที่ดูดี ที่นี่
  • มีคำถามมากมายเกี่ยวกับ SO เกี่ยวกับวิธีการปรับรูปร่างข้อมูลใหม่ ส่วนใหญ่เกี่ยวกับการไปจากกว้างถึงยาวเพราะนั่นคือสิ่งที่นักวิเคราะห์ข้อมูลต้องเผชิญ คำถามของคุณเกี่ยวกับการจากนานไปกว้างซึ่งไม่ค่อยพบบ่อยนัก แต่ยังมีอีกหลายกระทู้ที่เกี่ยวกับเรื่องนั้นคุณสามารถดูได้จากการค้นหานี้
  • หากหัวใจของคุณตั้งอยู่บนความพยายามที่จะทำเช่นนี้กับ Excel มีเธรดเกี่ยวกับการเขียนแมโคร VBA สำหรับ Excel เพื่อทำซ้ำฟังก์ชั่นการก่อร่างใหม่ที่นี่: ละลาย / ฟื้นฟูใน Excel โดยใช้ VBA?

2
คำถามนี้และคำตอบนี้เป็นภาพประกอบที่ดีว่าทำไมความรู้การเขียนโปรแกรมจึงมีความจำเป็นมากขึ้นสำหรับการวิจัยทุกประเภท ฉันจะเขียนคำตอบแบบเต็มสำหรับคำถามนี้ว่าฉันจะโพสต์บนบล็อกของฉันด้วย แต่ฉันต้องการรับความคิดเห็นนี้ก่อนที่ฉันจะลืม
shadowtalker

2
ฉันเห็นด้วยในระดับหนึ่ง แต่ "จำเป็น" และ "การวิจัยใด ๆ " กำลังไปไกล สาขาวิชาจำนวนมากมักไม่จัดการกับข้อมูลที่สกปรกและนักวิจัยชั้นนำหลายคนไม่จำเป็นต้องสัมผัสภาษาการเขียนโปรแกรม
Behacad

ว้าวขอบคุณทุกคน ฉันจะใช้เวลาเล็กน้อยในการประมวลผลและรวมข้อมูลทั้งหมดนี้ซึ่งเป็นสิ่งใหม่สำหรับฉัน ดูเหมือนว่าฉันจะถามคำถามของฉัน ... ลองจินตนาการว่าตัวเองตกอยู่ในดินแดนต่างประเทศที่ไม่มีความรู้ด้านภาษา / วัฒนธรรมนี่คือฉันและสถิติ ฉันขอขอบคุณเวลาที่คุณตอบคำถามทั้งหมด
Wilkoe

ฉันได้เพิ่มการแก้ไขโดยหวังว่าจะทำให้คำถามเริ่มต้นชัดเจนขึ้นแม้ว่าคำถามนั้นจะถูกปิด
Wilkoe

คำถามถูกปิด @ user48538 และรุ่นนี้ชัดเจนกว่าหัวข้อก่อนหน้า แต่น่าเสียดาย หากคุณมี 10k แถวคุณไม่ต้องการลองทำสิ่งนี้ใน Excel คุณต้องใช้ R หรือซอฟต์แวร์การเขียนโปรแกรมที่คล้ายกันจริงๆ ชื่อของการดำเนินการเฉพาะคือเปลี่ยนรูปร่างชุดข้อมูลของคุณจาก 'ยาว' เป็น 'กว้าง' ฉันจะเพิ่มลิงก์อีกเล็กน้อยให้คุณ นอกจากนี้หากคุณเป็นอาสาสมัครระดับปริญญาตรีที่มีพื้นฐานด้านสถิติหรือการเขียนโปรแกรมน้อยมากไม่มีความรับผิดชอบใด ๆ เลยที่จะมอบหมายงานนี้ให้คุณ IMHO ไม่มีทางที่มันควรจะเป็นงานของคุณ
gung - Reinstate Monica

0

ลองทำตามโดยใช้ 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

ในสกาล่าสิ่งนี้เรียกว่าการดำเนินการ "ระเบิด" และสามารถทำได้บน dataFrame หากข้อมูลของคุณเป็น rdd อันดับแรกคุณจะแปลงเป็น dataFrame ผ่านtoDFคำสั่งจากนั้นใช้.explodeวิธีการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.