Data ข้อมูลมันสกปรกอะไรขนาดนั้น ทำไมต้องเสียเวลามากมายทำความสะอาด?เวลาพูดว่า “ทำความสะอาด”หลายๆคนมักจะนึกถึงเพียงการแก้ไขข้อมูลที่ผิดพลาด เช่น สะกดชื่อผิด ตัวเลขไม่ถูกต้อง เป็นต้น จริงๆแล้วนั่นเป็นเพียงส่วนหนึ่งของกระบวนการทั้งหมด เป้าหมายคือทำให้ข้อมูลดิบอยู่ในรูปแบบที่ใช้งานได้และให้ผลลัพธ์ที่ถูกต้อง ในงานวิจัยจะเรียกกระบวนการนี้ว่า “data wrangling” หรือ “การทะเลาะกับข้อมูล” ซึ่งให้ความหมายครอบคลุมกว่า แต่ปกติก็จะเรียกกันง่ายๆว่า “data cleaning” นั่นแหละ Show
November 18, 20162703 views0 เป็นเรื่องที่รู้กันในวงการ data science ว่าการทำความสะอาดข้อมูลนั้นกินเวลาถึง 70–80% ของการทำงาน นักวิทยาศาสตร์ข้อมูล (data scientist) หลายคนถึงกับบอกว่าตัวเองเป็น data janitor หรือภารโรงข้อมูล ซะมากกว่า Table of Contents
การทำความสะอาดข้อมูลคือทำอะไร?เวลาพูดว่า “ทำความสะอาด”หลายๆคนมักจะนึกถึงเพียงการแก้ไขข้อมูลที่ผิดพลาด เช่น สะกดชื่อผิด ตัวเลขไม่ถูกต้อง เป็นต้น จริงๆแล้วนั่นเป็นเพียงส่วนหนึ่งของกระบวนการทั้งหมด เป้าหมายคือทำให้ข้อมูลดิบอยู่ในรูปแบบที่ใช้งานได้และให้ผลลัพธ์ที่ถูกต้อง ในงานวิจัยจะเรียกกระบวนการนี้ว่า “data wrangling” หรือ “การทะเลาะกับข้อมูล” ซึ่งให้ความหมายครอบคลุมกว่า แต่ปกติก็จะเรียกกันง่ายๆว่า “data cleaning” นั่นแหละ แล้วมีปัจจัยอะไรบ้างที่ทำให้ต้องทำความสะอาดกันอุตลุดแบบนั้น ลองมาดูกันครับ 1. ข้อมูลถูกเก็บไว้ในหลากหลายประเภทไฟล์ประเภทไฟล์ข้อมูลแต่ละแบบมีความยากง่ายในการนำมาใช้ต่างกัน ทั้งนี้ก็ขึ้นอยู่กับเครื่องมือที่ใช้ในการวิเคราะห์ด้วยว่ารองรับ input ในรูปแบบไหนบ้าง เราก็ต้องแปลงให้ตรงตามนั้น
บางทีเราก็ต้องใช้ข้อมูลจากหลายๆแหล่งซึ่งอยู่ใน format ที่ต่างกันร่วมกัน อาจจะต้องแปลงให้เป็น format เดียวกันก่อน นอกจากนี้ ถ้าทำเว็บ ขนาดไฟล์ข้อมูลมีความสำคัญมาก ต้องรวมให้เล็กที่สุดเพื่อให้โหลดเร็วๆ ถ้าข้อมูลชุดหนึ่งเป็น json อีกอันเป็น csv เราก็อาจจะพิจารณาแปลง csv เป็น json แล้วรวมไฟล์ทั้งสองเข้าด้วยกันจะได้ลดจำนวนไฟล์ และกำจัดสิ่งไม่จำเป็นออกจากไฟล์ไปให้หมด 2. ข้อมูลไม่อยู่ในรูปแบบที่ต้องการเมื่อเดือนก่อนผมได้ร่วมทำงานชิ้นหนึ่งเกี่ยวกับข้อมูลกรุงเทพฯ และต้องการเปรียบเทียบจำนวนวัดกับอาบอบนวด ข้อมูลที่หามาได้มีพิกัด (latitude, longitude) ของวัดทุกแห่ง แต่อาบอบนวดมีเพียงจำนวนตามเขต เราจึงต้องแปลงพิกัดของวัดเป็นเขต แล้วนับจำนวนวัดแบ่งตามเขต เพื่อจะให้ข้อมูลทั้งสองชุดเปรียบเทียบกันได้ 3. การเก็บข้อมูลมักมีข้อผิดพลาดข้อมูลที่เก็บโดยคนก็มีข้อจำกัดของมนุษย์ทั่วไป ลืมบ้าง ขี้เกียจบ้าง สะกดผิดบ้าง จดผิดบ้าง กะเอาแล้วผิดพลาดบ้าง ยิ่งถ้าบวกกับการแปลงจากเอกสารเขียนมือเป็นอิเล็กทรอนิคส์อีกขั้นตอนหนึ่งก็เพิ่มความสนุกสนานได้ไม่น้อย ข้อมูลที่เก็บโดยอัตโนมัติหรือเป็นอิเล็กทรอนิคส์ตั้งแต่แรกมักมีคุณภาพที่ดีกว่า แต่ก็มีปัญหาได้เช่นกัน ยิ่งสำหรับระบบใหม่ๆ เพราะโปรแกรมก็ถูกเขียนโดยคนอยู่ดี ถ้าไม่ทดสอบให้ดีก็จะเกิดปัญหาจดผิด หรือลืมจดได้เหมือนกัน นอกจากนี้การเก็บข้อมูลอัตโนมัติบางครั้งก็มีข้อจำกัด เช่น app บางตัวรวบรวม log การใช้งาน (click, change page, scroll, etc.) แล้วส่งไปที่ server ทุกๆ 1 นาที ดังนั้นแม้จะส่ง log ไป 100 events แต่ timestamp ที่ถูกบันทึกลงใน database ของทั้ง 100 events นั้นก็เป็นเวลาเดียวกัน คือเวลาที่มาถึง server ไม่ใช่เวลาที่ event นั้นเกิดขึ้นจริงๆ ถ้าจะเอามาเรียงลำดับก่อนหลังว่าเกิดอะไรขึ้นบนเครื่อง user ก็ลำบาก การจัดการกับข้อมูลที่ผิดพลาดมีความยากง่ายต่างกันไปแล้วแต่กรณี บางครั้งก็ต้องตัดสินใจว่าจะทำอย่างไรกับข้อมูลที่กรอกมาไม่ครบ จะโยนทิ้งไปเฉยๆหรือว่าใส่ค่า default เข้าไปแทน ถ้าข้อมูลหายไปจะทำอย่างไร ใช้ข้อมูลวันอื่นแทนได้ไหม ถ้าข้อมูลผิด สามารถแก้เป็นข้อมูลที่ถูกได้ไหม 4. นิยามของคำว่า “สะอาด” ต่างกันไปในแต่ละโครงการลองดูข้อมูลให้คะแนนร้านอาหารข้างล่างนี้ user restaurant rating A mcdonald’s 3 B mcdonalds 3 C mcdonald 4 D mcdonalds 5 E KFC 4 f subway 4 ถ้าถามว่ามีรีวิวกี่อัน ก็ถือว่าสะอาดพอและสามารถตอบได้ทันที แต่ถ้าถามว่ามีร้านอาหารในระบบกี่ร้าน ก็ต้องไปทำความสะอาดชื่อ McDonald’s ให้เขียนเหมือนกันเสียก่อนถึงจะตอบได้ ในการทำงานจริงๆก็เป็นแบบนี้แหละ ตอนแรกอยากรู้อย่างนึง ทำความสะอาดจนตอบได้ เกิดคำถามใหม่ พบปัญหาในข้อมูลใหม่ ก็ต้องทำความสะอาดก่อน ถึงจะวิเคราะห์กันต่อได้ ต่อให้หลายคนทำงานบนชุดข้อมูลเดียวกัน แต่ถ้าคนละโครงการ ขอบเขตของคำถามก็อาจจะแตกต่างกันไป ทำให้สุดท้ายแล้ว สะอาดของผม กับ สะอาดของคุณ ก็ไม่เหมือนกันอยู่ดี 5. ข้อมูลจำนวนมากก็ปัญหามากปัญหาอย่างแรกคือไม่รู้ว่ามีปัญหา ข้อมูลที่ใหญ่มากๆ เราไม่สามารถนั่งไล่อ่านจนหมด เช่น ถ้าข้อมูลรีวิวร้านอาหารข้างบนมีสักหนึ่งล้านแถว เราอาจจะไม่รู้ก็ได้ว่ามีคนสะกด McDonald’s ผิด เมื่อหลายเดือนก่อนผมเคยทำงานชิ้นหนึ่งเกี่ยวกับ Game of Thrones ซึ่งส่วนหนึ่งต้องนับว่าตัวละครถูกพูดถึงบน Twitter บ่อยแค่ไหนในแต่ละตอน ในตอนนึงตัวละครที่ชื่อ Ramsay มีบทบาทเด่นมาก และเมื่อนับว่า “Ramsay” ปรากฏในทวีตกี่ครั้งก็แสดงให้เห็นว่าถูกกล่าวถึงบ่อยทีเดียว อยู่มาวันนึงผมก็เอะใจขึ้นมาว่าจะมีคนสะกด Ramsay ผิดเป็น Ramsey รึเปล่านะ ผลที่ได้คือเพียบเลยครับ ต้องแก้งานใหม่เพราะตัวเลขเพิ่มขึ้นเกือบเท่าตัว ปัญหาถัดไปคือใช้เวลามาก
6. ยิ่งวิเคราะห์ไป ปัญหาก็ยิ่งเผยตัวออกมาเรื่อยๆบ่อยครั้งเหลือเกินที่คุณนึกว่าทำความสะอาดเรียบร้อยแล้ว เมื่อนำไปใช้งาน ก็พบว่ามีบางอย่างน่าสงสัย สุดท้ายก็เจอว่ามันคือปัญหาในข้อมูล ต้องกลับไปนั่งปัดกวาดขยะอีกรอบ ทำวนไปครับ นี่แหละชีวิต ผมเคยทำงานเปรียบเทียบระหว่างแต่ละรัฐของสหรัฐอเมริกา ดึงข้อมูล แปลงข้อมูล ทำทุกอย่างจนวาดแผนที่ลงสีได้เรียบร้อยสวยงาม จากนั้นก็ใส่ tooltip ให้ดูจำนวนข้อมูลในแต่ละรัฐ ทำเสร็จก็นั่งกดเล่นดูด้วยความสบายใจว่าจะเสร็จแล้ว ปรากฏว่าเฮ้ยทำไมรัฐ Kansas มันมีคนเยอะขนาดนี้ คือ Kansas นี่อยู่กลางประเทศและไม่มีเมืองใหญ่ๆเลย ถ้าจะมีข้อมูลเยอะกว่า New York หรือ California นี่เป็นอะไรที่แปลกพึลึกมาก ไล่ถามย้อนไปมาสรุปว่าชุดข้อมูลที่ใช้เนี่ย ความแม่นยำของพิกัดการันตีที่ระดับประเทศ พูดง่ายๆคือถ้าเกิด user คนไหนไม่มีตำแหน่งที่ละเอียดพอ รู้แค่ว่าอยู่อเมริกา ก็จะใส่พิกัดให้เขาคนนั้นเป็น กลางประเทศอเมริกา นั่นละครับ Kansas Kansas ข้อแนะนำในเมื่อรู้แล้วว่าเป็นแบบนี้ ก็จงคิดเสมอว่าต้องทำหลายรอบแน่นอนครับ จะหวังทำความสะอาดรอบเดียวเสร็จนี่ยาก
มี tool หลายตัวเหมือนกัน ที่พยายามแก้ปัญหาเหล่านี้ จะลองใช้ดูก็ได้ครับ
ถ้าเป็น library
ขั้นตอนการ Clean ข้อมูลมีกี่ขั้นตอนขั้นตอนเบื้องต้นในการ Clean ข้อมูล 4 ขั้นตอน ได้แก่. Parsing คือ การแจกแจงข้อมูล หรือการใช้หัวข้อของชุดข้อมูล ... . Correcting คือ การแก้ไขข้อมูลที่ผิดพลาด เช่น ในช่องเพศ มีการใส่ตัวเลข หรือแม้กระทั่งตัวเลขที่ผิดปกติไปเนื่องจากมี 0 เกินมา ก็เป็นได้. จุดประสงค์ของการทำความสะอาดข้อมูลคืออะไร *Data cleaning หมายถึง การทำความสะอาดข้อมูล หรือการทำข้อมูลให้สมบูรณ์ เป็นกระบวนการตรวจสอบและการแก้ไข (หรือลบ) รายการข้อมูลที่ไม่ถูกต้องออกไปจากชุดข้อมูล ตารางหรือฐานข้อมูล ซึ่งเป็นหลักสำคัญของฐานข้อมูล เพราะหมายถึงความไม่สมบูรณ์ ความไม่ถูกต้อง ความไม่สัมพันธ์กับข้อมูลอื่นๆ เป็นต้น จึงต้องมีการแทนที่ การปรับปรุง หรือการ ...
การทำความสะอาดข้อมูลมีความสำคัญอย่างไรการทำความสะอาดข้อมูล Data cleansing หรือ data cleaning หรือ data scrubbing คือ กระบวนการตรวจสอบ การแก้ไข หรือการลบ เพื่อให้รายการข้อมูลที่ไม่ถูกต้องออกไปจากชุดข้อมูล ตารางหรือฐานข้อมูล ซึ่งเป็นหลักสำคัญของฐานข้อมูล เพราะหมายถึงความไม่สมบูรณ์ ความไม่ถูกต้อง ความไม่สัมพันธ์กับข้อมูลอื่น ๆ เป็นต้น จึงทำให้ผู้เชี่ยวชาญหลาย ...
การเตรียมข้อมูล (Data Preparation) หมายถึงอะไรการเตรียมข้อมูลเป็นกระบวนการจัดเตรียมข้อมูลดิบเพื่อให้เหมาะกับการประมวลผลและการวิเคราะห์เพิ่มเติม ขั้นตอนที่สำคัญ ได้แก่ การเก็บรวบรวม การทำความสะอาด และการระบุประเภทข้อมูลสำหรับข้อมูลดิบในรูปแบบที่เหมาะสมสำหรับอัลกอริทึมของแมชชีนเลิร์นนิ่ง (ML) แล้วจึงสำรวจและแสดงผลข้อมูลต่อไป การเตรียมข้อมูลอาจใช้เวลาถึง 80% ของเวลา ...
|