จัดระเบียบกระบวนการเพื่อล้างข้อมูล


34

จากการเล่นน้ำกับวิทยาศาสตร์ข้อมูลโดยใช้ R ฉันได้ตระหนักว่าการล้างข้อมูลที่ไม่ดีเป็นส่วนสำคัญในการเตรียมข้อมูลสำหรับการวิเคราะห์

มีวิธีปฏิบัติหรือกระบวนการที่ดีที่สุดในการล้างข้อมูลก่อนประมวลผลหรือไม่? ถ้าเป็นเช่นนั้นมีเครื่องมืออัตโนมัติหรือกึ่งอัตโนมัติที่ใช้แนวทางปฏิบัติที่ดีที่สุดเหล่านี้หรือไม่?


1
อาจจะเป็นความคิดที่ดีที่จะล้างบิตสิ่งที่คุณหมายภายใต้การทำความสะอาดข้อมูล , ลักษณะบิตสับสนสำหรับความคิดของฉัน
MolbOrg

2
อธิบายเพิ่มเติมว่าการทำความสะอาดข้อมูลหมายถึงอะไรจะมีประโยชน์ ในบริบทที่ฉันทำงานการทำความสะอาดไม่เกี่ยวข้องกับการจัดรูปแบบ - ฉันแค่เรียกว่าการแยก / นำเข้า - แต่มันจะหมายถึงการพูดคุยข้อมูลผู้ใช้ที่มีเสียงดังและตรวจสอบเพื่อเชื่อมโยงกัน เทคนิคที่ใช้คือชุดข้อมูลเฉพาะจากกฎทางสถิติอย่างง่ายไปจนถึงอัลกอริธึมคลุมเครือโดยเฉพาะเมื่อข้อมูลกระจัดกระจาย
AdrianBR

คำตอบ:


21

R มีบางส่วนมาตรฐานฟังก์ชั่นสำหรับการจัดการข้อมูลซึ่งสามารถนำมาใช้สำหรับการทำความสะอาดข้อมูลในของฐานแพคเกจ ( gsub, transformฯลฯ ) เช่นเดียวกับในแพคเกจของบุคคลที่สามต่างๆเช่นstringr , Reshape / reshape2และplyr / dplyr . ตัวอย่างและแนวทางปฏิบัติที่ดีที่สุดของการใช้งานสำหรับแพคเกจเหล่านี้และฟังก์ชั่นของพวกเขาจะอธิบายไว้ในบทความต่อไปนี้: http://vita.had.co.nz/papers/tidy-data.pdf

นอกจากนี้ R เสนอแพคเกจบางอย่างที่เน้นการทำความสะอาดและการแปลงข้อมูลเป็นพิเศษ:

วิธีการที่ครอบคลุมและเชื่อมโยงกันเพื่อให้ข้อมูลในการทำความสะอาดในการวิจัยรวมทั้งตัวอย่างและการใช้editrulesและdeducorrectแพคเกจรวมทั้งรายละเอียดของขั้นตอนการทำงาน ( กรอบ ) ของข้อมูลการทำความสะอาดในการวิจัยจะนำเสนอในบทความต่อไปนี้ซึ่งผมขอแนะนำ: http :


2
ฉันยังต้องการเพิ่มdplyrซึ่งเป็นการปรับปรุงใหม่ของplyrเครื่องมือบางอย่างและdata.tableเป็นวิธีที่แตกต่างอย่างสิ้นเชิงในการจัดการข้อมูล ทั้งโดย Hadley Wickham
shadowtalker

@ssdecontrol: ฉันเห็นด้วย - อัปเดตคำตอบ ฮัดลีย์เป็นนักเขียนของdplyrแพคเกจ แต่ไม่ได้ของdata.tableอย่างใดอย่างหนึ่ง
Aleksandr Blekh

16

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

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

ตัวอย่างเช่นสำหรับผู้ที่จัดการกับข้อมูลที่มาจากเว็บไซต์โซเชียล (twitter, facebook, ... ) การดึงข้อมูลมักจะให้ไฟล์ที่มีรูปแบบที่เฉพาะเจาะจงมาก - แม้ว่าจะไม่ได้มีโครงสร้างที่ดีเสมอไป . สำหรับกรณีเหล่านี้awkสคริปต์ง่าย ๆสามารถล้างข้อมูลสร้างไฟล์อินพุตที่ถูกต้องสำหรับการประมวลผลในภายหลัง จากชุดมายากลหนึ่งยังอาจชี้ให้เห็นgrep, sed, cut, join, paste, sortและหลากหลายทั้งเครื่องมืออื่น ๆ

ในกรณีที่ไฟล์ต้นฉบับง่ายมีจำนวนมากเกินไปก็อาจจำเป็นต้องสร้างชุดของวิธีการในการล้างข้อมูล ในกรณีดังกล่าวโดยปกติแล้วจะดีกว่าหากใช้ภาษาสคริปต์ (นอกเหนือจากเชลล์) เช่น Python, Ruby และ Perl สิ่งนี้ช่วยให้การสร้างAPIของการเลือกข้อมูลเฉพาะอย่างตรงไปตรงมาและนำมาใช้ใหม่ บางครั้งAPIดังกล่าวบางครั้งจะเผยแพร่ต่อสาธารณะโดยนักเขียนของพวกเขาเช่นIMDbPY , Stack Exchange APIและอื่น ๆ อีกมากมาย

ดังนั้นการตอบคำถาม: มีวิธีปฏิบัติที่ดีที่สุดหรือไม่? มันมักจะขึ้นอยู่กับงานของคุณ หากคุณจะจัดการกับรูปแบบข้อมูลเดิมเสมอควรเขียนสคริปต์ที่มีการจัดระเบียบเพื่อประมวลผลล่วงหน้า ในขณะที่ถ้าคุณเพียงแค่ต้องง่ายและทำความสะอาดอย่างรวดเร็วในชุดข้อมูลที่บางนับบนเครื่องมือ POSIX สคริปต์กระชับเปลือกที่จะดำเนินงานทั้งหมดมากเร็วกว่าสคริปต์ Python หรือดังนั้น เนื่องจากการล้างข้อมูลขึ้นอยู่กับทั้งชุดข้อมูลและตามวัตถุประสงค์ของคุณจึงยากที่จะทำทุกอย่างเรียบร้อยแล้ว ยังมี API จำนวนมากที่ทำให้คุณผ่านพ้นปัญหาไปได้ครึ่งทาง


อืม - รับข้อมูล, จัดรูปแบบข้อมูล (awk sed grep grep), ลบจุดรบกวนเป็นขั้นตอนแรกจากนั้นไปลึกยิ่งขึ้น ดังนั้นจึงไม่ใช่เรื่องยากที่การประมวลผลล่วงหน้าในตอนแรกหากใช้ตัวควบคุมอุณหภูมิของคุณ
MolbOrg

@ MolbOrg ใช่นั่นคือสิ่งที่ฉันหมายถึง ผมเรียกว่าฮาร์ด preprocessing สคริปต์ฝั่งและนุ่ม preprocessingใช้ขั้นตอนวิธีการทำเหมืองข้อมูลทั่วไปที่ลดขนาดของปัญหา (ทำความสะอาดฐานข้อมูล) ฉันยังตั้งข้อสังเกตว่าส่วนที่สอง preprocessing ยากจริงมาก่อนที่จะมีขั้นตอนอื่น หากยังไม่ชัดเจนกับเงื่อนไขดังกล่าวฉันยินดีพิจารณาข้อเสนอแนะอื่น ๆ เพื่อปรับปรุงคำตอบ
รูเบนส์

1
อาใช่ไม่ได้ให้ความสนใจพอข้อมูลดิบประมวลผลเบื้องต้น atm ที่ผ่านการทดสอบ - ใช่ perl oneliner ช้าลง 3 ครั้งจากนั้น grep) สำหรับ 3.5kk สตริงใน 300MB สำหรับ perl ใช้เวลา 1.1 วินาทีสำหรับ grep 0.31 วินาที บทความเลื่อยฉันที่จุดที่ regexp Perl ช้าช้ามากแล้วมันอาจจะเป็นในทางปฏิบัติ (ฉันสงสัยว่ายังเป็นที่สำหรับ grep เกินไป) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@ MolbOrg การอ้างอิงที่ดี! AFAIK, grepใช้ POSIX พื้นฐาน regex โดยค่าเริ่มต้นและช่วยให้การขยาย POSIX regex เมื่อทำงานเป็นgrep -Eและสำหรับ PCRE grep -Pเมื่อทำงานเป็น
รูเบนส์

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

11

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

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

นอกจากนี้วิธีการวิเคราะห์ข้อมูลบางวิธียังทำงานได้ดีขึ้นเมื่อข้อมูลที่ผิดพลาดหรือขาดหายไปถูกปล่อยว่างเปล่า (หรือ N / A) แทนที่จะใส่เข้าไปหรือให้ค่าเริ่มต้น สิ่งนี้เป็นจริงเมื่อมีการแสดงถึงความไม่แน่นอนและความไม่รู้อย่างชัดเจนเช่นฟังก์ชั่น Dempster-Shafer Belief

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

จากความกังวลเหล่านี้ฉันสงสัยวิธีการหรือกระบวนการใด ๆ ที่ปฏิบัติต่อการทำความสะอาดข้อมูลในแบบผิวเผินนักรบหรือแบบอัตโนมัติเต็มรูปแบบ มีปีศาจมากมายซ่อนตัวอยู่ในรายละเอียดเหล่านั้นและมันจ่ายเพื่อให้พวกเขาให้ความสนใจอย่างจริงจัง


1
ในฐานะที่เป็นความคิดเห็นด้าน: ฉันคิดว่าการระบุข้อมูลที่น่ากลัวที่เกิดจากปัญหาบางอย่างขึ้นไปข้างบนท่อเป็นทักษะทอง หลายครั้งที่ฉันสงสัยว่าทำไมการวิเคราะห์ของฉันจึงให้ผลลัพธ์แปลก ๆ และเมื่อฉันดูที่ท่อส่งฉันพบข้อผิดพลาดบางอย่าง เช่นฉันสงสัยว่าทำไมข้อมูลทั้งหมดของฉันที่บิดเบือนราคาสูงอย่างมาก - วิธีออกจากแบบจำลองทางจิตของฉัน เมื่อฉันถามไปรอบ ๆ ฉันพบว่าผู้รับเหมาช่วงบางคนเข้าใจผิดการบรรยายสรุปและส่งมอบข้อมูลสำหรับกลุ่มที่มีรายได้สูงในขณะที่เราต้องการข้อมูลแบบผสม ...
Christian Sauer

ใช่ ข้อผิดพลาดข้อมูลเป็นสัญญาณบ่งบอกถึงปัญหากระบวนการ การทราบว่ามีข้อผิดพลาดเกิดขึ้นที่ใดและกลไกจะช่วยในกระบวนการทำความสะอาดได้อย่างมาก แต่ยังดีกว่าคือการแก้ไขปัญหากระบวนการเพื่อให้พวกเขาผลิตข้อมูลสะอาด (หรือสะอาด)
MrMeritology

5

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

ข้อผิดพลาดดังกล่าวขึ้นอยู่กับโดเมนเป็นอย่างมาก - ในการค้นหาคุณต้องมีความรู้เกี่ยวกับโดเมนสิ่งที่มนุษย์ทำได้ดีกระบวนการอัตโนมัติไม่มาก

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


5

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

มีตัวถัก R package ที่ดีซึ่งช่วยในการวิจัยที่ทำซ้ำได้มากมาย

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

คุณสามารถตรวจสอบของฉันการประเมินเตรียมพร้อมสำหรับการทำซ้ำงานวิจัยหลักสูตรที่ Coursera


3

OpenRefine (เดิมคือ Google Refine) เป็นเครื่องมือที่ยอดเยี่ยมที่คุณสามารถทำการล้างและแปลงข้อมูลแบบโต้ตอบได้ ผลลัพธ์สุดท้ายของคุณสามารถส่งออกไปยังรูปแบบมาตรฐานที่หลากหลาย (json, csv) หรือรูปแบบที่กำหนดเองใด ๆ (เช่น: wiki)

รายการที่ซ้ำกันที่แน่นอนสามารถจัดการได้ใน OpenRefine โดยการเรียงลำดับ + โดยใช้คุณสมบัติ "blank down" นอกจากนี้ยังมีคุณสมบัติการจัดกลุ่มสตริง (ฟัซซี่) โดยประมาณซึ่งคุณสามารถจัดกลุ่มรายการซ้ำที่คล้ายกันเช่นชื่อ บริษัท หรือที่อยู่ คุณลักษณะนี้เพียงอย่างเดียวทำให้มันยอดเยี่ยม


1
นี่เป็นเครื่องมือที่ยอดเยี่ยมและไม่ได้รายงาน
Thanks_in_advance

2

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

https://www.coursera.org/learn/data-cleaning

มันจะดีกว่าเสมอที่จะทำด้วยตนเองแทนการอัตโนมัติเนื่องจากแต่ละชุดข้อมูลมีปัญหาและปัญหาของตัวเองและไม่ใช่ทุกขั้นตอนจะใช้กับชุดข้อมูลทั้งหมด

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