Angkhana Prommarat, PhD

Angkhana Prommarat, PhD

Senior Data Management Training and Development Specialist at Big Data Institute (Public Organization), BDI

บทความทั้งหมด

All Articles

Author Category Post Filter
Chunking: ตัวช่วยสำคัญในการจัดการข้อมูลขนาดใหญ่ใน Python DataFrame 
เคยหรือไม่ที่คุณต้องเผชิญกับไฟล์ข้อมูลขนาดใหญ่จนโปรแกรมค้าง หรือหน่วยความจำ (RAM) ของเครื่องคอมพิวเตอร์ทำงานเกินขีดจำกัดจนไม่สามารถเปิดไฟล์เพื่ออ่านหรือประมวลผลได้ ปัญหานี้มักเกิดขึ้นบ่อยครั้งเมื่อต้องจัดการกับข้อมูลที่มีปริมาณมหาศาล โดยเฉพาะข้อมูลที่มีโครงสร้างซับซ้อน เช่น ไฟล์ CSV ขนาดใหญ่ ไฟล์บันทึก (Log files) ที่มีข้อมูลจำนวนมาก หรือแม้แต่ข้อมูลจากแหล่งข้อมูล Streaming ที่ไหลเข้ามาอย่างต่อเนื่อง การพยายามโหลดข้อมูลทั้งหมดเข้าสู่หน่วยความจำพร้อมกัน ไม่เพียงแต่จะทำให้เกิดปัญหาด้านทรัพยากรเท่านั้น แต่ยังส่งผลกระทบต่อประสิทธิภาพการทำงานของโปรแกรมโดยรวมอีกด้วย แล้วเราจะสามารถจัดการและประมวลผลข้อมูลขนาดใหญ่เหล่านี้ได้อย่างไรกัน  วันนี้ เราจะมาทำความรู้จักกับเทคนิคสำคัญที่ช่วยให้การจัดการข้อมูลขนาดใหญ่ ให้เป็นเรื่องที่ง่ายและมีประสิทธิภาพมากยิ่งขึ้น นั่นก็คือ “Chunking”   Chunking คืออะไร?  Chunking คือเทคนิคการแบ่งข้อมูลที่มีขนาดใหญ่ออกเป็นชิ้นส่วนย่อย ๆ ที่มีขนาดเล็กลง (หรือ “chunks”) เพื่อให้คอมพิวเตอร์สามารถประมวลผลข้อมูลทีละส่วน โดยไม่ต้องโหลดข้อมูลทั้งหมดลงในหน่วยความจำพร้อมกัน ซึ่งจะช่วยหลีกเลี่ยงปัญหา Memory Error ที่เกิดจากการใช้หน่วยความจำที่มากเกินไป   ทำไมต้องใช้ Chunking?  การนำเทคนิค Chunking มาใช้ มีข้อดีสำหรับการทำงานกับ Big Data โดยตรง เช่น   Chunking กับการจัดการ DataFrame ขนาดใหญ่ใน Python  ในบริบทของการวิเคราะห์ข้อมูลด้วยภาษา Python นั้น DataFrame จากไลบราลี่ Pandas เป็นโครงสร้างข้อมูลแบบตารางสองมิติที่ใช้งานกันอย่างแพร่หลาย โดยมีแถว (Rows) แทนข้อมูลแต่ละรายการ และ คอลัมน์ (Columns) แทนคุณลักษณะหรือตัวแปรต่าง ๆ อย่างไรก็ตามไฟล์ข้อมูลที่บรรจุ DataFrame ที่มีจำนวนแถวและคอลัมน์มหาศาลนั้น การพยายามอ่านข้อมูลโดยใช้คำสั่งอ่านไฟล์มาตรฐาน เช่น pd.read_csv() อาจไม่สามารถทำได้ เนื่องจากปัญหา MemoryError ที่กล่าวไว้ข้างต้น ดังนั้นบทความนี้ จะแนะนำขั้นตอนการจัดการกับ DataFrame ขนาดใหญ่โดยใช้ Chunking ซึ่งประกอบด้วย 3 ขั้นตอนหลัก ดังนี้  ขั้นตอนที่ 1 มุ่งเน้นกับข้อมูลที่ตรงประเด็น (Focus on relevant data)   ก่อนจะเริ่มแบ่งข้อมูลเป็น chunks การลดปริมาณข้อมูลที่ต้องโหลดในแต่ละส่วนย่อยตั้งแต่ต้น จะช่วยลดภาระการประมวลผลลงได้อย่างมาก ขั้นตอนนี้จึงมีความสำคัญไม่แพ้การทำ Chunking เริ่มต้นจากการพิจารณาว่ามีคอลัมน์ใดที่ต้องการนำไปประมวลผลบ้าง และมีเงื่อนไขอื่นใดอีกหรือไม่ที่จะสามารถกรองข้อมูลเฉพาะส่วนที่เกี่ยวข้องได้ เพื่อให้ได้ข้อมูลที่ตรงประเด็นที่สุด ในกรณีที่เราไม่ใช่เจ้าของข้อมูลโดยตรง การขอพจนานุกรมข้อมูล (Data Dictionary) จากเจ้าของข้อมูลจะช่วยให้เข้าใจความหมายของแต่ละคอลัมน์และเลือกคอลัมน์ที่จำเป็นได้อย่างถูกต้อง  ตัวอย่าง: สมมติเราใช้ไฟล์ชุดข้อมูลรถยนต์มือสอง (autos.csv จาก Kaggle Used Cars Dataset) และมีโจทย์ที่ต้องการวิเคราะห์ความสัมพันธ์ระหว่างราคารถกับคุณลักษณะบางอย่างของรถยนต์มือสอง แทนที่จะโหลดคอลัมน์ทั้งหมดที่มี เราควรกำหนดตัวแปรเพื่อเลือกเฉพาะคอลัมน์ที่เกี่ยวข้องกับการวิเคราะห์ตั้งแต่ขั้นตอนการอ่านไฟล์ โดยใช้พารามิเตอร์ usecols ร่วมกับคำสั่งอ่านไฟล์ของ Pandas เช่น   pd.read_csv(‘autos.csv’, usecols= [‘price’, ‘vehicleTypes’, ‘brand’, …])  นอกจากนี้ หากมีเงื่อนไขสำหรับกรองข้อมูลเบื้องต้น เช่น ต้องการเฉพาะรถยนต์ที่เสนอขาย (Angebot) เท่านั้น ในคอลัมน์ประเภทข้อเสนอ (offerType) ก็ควรกำหนดเงื่อนไขการกรองนี้ไว้ด้วย ดังภาพตัวอย่างโค้ด  อย่างไรก็ตาม การกรองข้อมูลแถวในแนวยาว (เช่น df_sale = df[df[‘offerType’] == ‘Angebot’]) จะทำได้ก็ต่อเมื่อ DataFrame ที่เลือกคอลัมน์แล้วมีขนาดพอดีกับหน่วยความจำ หาก DataFrame นั้นมีขนาดใหญ่มากจนเกินหน่วยความจำ ก็มีความจำเป็นจะต้องทำการ Chunking เสียก่อน   ขั้นตอนที่ 2 โหลดข้อมูลทีละส่วน (Load Data in Chunks)  ขั้นตอนนี้เป็นหัวใจของการทำ Chunking  สำหรับไฟล์ข้อมูลขนาดใหญ่ที่ไม่สามารถโหลดเข้าหน่วยความจำทั้งหมดได้ เราจะใช้พารามิเตอร์ chunksize ในฟังก์ชันอ่านไฟล์ของ Pandas โดยระบุขนาดของ chunk ที่ต้องการ เมื่อมีการประมวลผล Pandas จะไม่ส่งคืน DataFrame ทั้งก้อนให้ทันที แต่จะส่งคืนวัตถุที่เรียกว่า Iterator ซึ่งเราสามารถวนลูปเพื่อดึงข้อมูลมาประมวลผลได้ทีละส่วน (ทีละ chunk) ตามขนาดที่ได้กำหนดไว้  จากตัวอย่างโค้ดในภาพ 1 หากไฟล์ข้อมูล มี DataFrame ขนาดใหญ่ที่ไม่สามารถกรองข้อมูลรายแถวออกมาได้ทันที เราจำเป็นจะต้องใช้พารามิเตอร์เพื่อกำหนดขนาด chunksize ร่วมกับการอ่านไฟล์ด้วย Pandas ดังนี้  df = pd.read_csv(‘autos.csv’, chunksize = 50000)  เมื่อมีการกำหนด chunksize=50000 คำสั่งอ่านไฟล์จะส่งคืน Iterator ซึ่งเราต้องทำการวนลูป เพื่ออ่านและประมวลผลข้อมูลทีละส่วน เช่น กระบวนการกรองข้อมูลรายแถว chunk_filtered = chunk[chunk[‘offerType’] == ‘Angebot’] โดยแต่ละส่วนจะมีข้อมูลไม่เกิน 50,000 แถว และส่งคืนกลับมาในรูปแบบ DataFrame ขนาดเล็กหนึ่งก้อน การประมวลผลจะดำเนินการไปเรื่อย ๆ จนกระทั่งอ่านข้อมูลจากไฟล์ได้ครบทุกส่วน เมื่อการประมวลผลแต่ละส่วนเสร็จสิ้น เราจะได้ DataFrame ขนาดเล็กหลาย ๆ ก้อนที่ถูกกรองเป็นที่เรียบร้อย   ขั้นตอนที่ 3 บันทึกข้อมูลที่แก้ไขแล้วลงในไฟล์ใหม่ (Save modified data to new file)  หลังจากที่เราได้ทำการโหลดและประมวลผลข้อมูลขนาดใหญ่ทีละส่วนตามขั้นตอนที่ 2 แล้ว ขั้นตอนสุดท้ายที่สำคัญคือการรวม DataFrame ขนาดเล็กเหล่านี้เข้าด้วยกันโดยการใช้คำสั่ง pd.concat() เพื่อสร้าง DataFrame ขนาดใหญ่ที่สมบูรณ์ซึ่งมีเฉพาะข้อมูลที่เราต้องการ เช่น  df_sale = pd.concat(filtered_chunks)  และบันทึกข้อมูลนี้ลงในไฟล์ใหม่ เพื่อให้สามารถนำไปใช้งานต่อในขั้นตอนการวิเคราะห์ข้อมูลขั้นสูงได้โดยไม่ต้องโหลดข้อมูลดิบขนาดใหญ่อีกต่อไป  เทคนิค Chunking ใน Python Pandas ที่นำเสนอในบทความนี้ ถือเป็นแนวทางที่มีประสิทธิภาพอย่างยิ่งในการจัดการกับ DataFrame ขนาดใหญ่เกินหน่วยความจำ ด้วยสามขั้นตอนสำคัญ เราสามารถเอาชนะข้อจำกัดนี้ ทำให้การทำงานกับชุดข้อมูลขนาดมหึมาเป็นไปได้อย่างราบรื่น เป็นระบบ และพร้อมสำหรับการวิเคราะห์ Big Data โดยนักวิทยาศาสตร์ข้อมูลและวิศวกรข้อมูลสามารถประยุกต์ใช้ได้โดยไม่ต้องกังวลกับปัญหา MemoryError อีกต่อไป  แหล่งข้อมูลอ้างอิง 
16 May 2025
รู้จักกับแผนภูมิเรดาร์และวิธีการสร้างแผนภูมิเรดาร์ (Radar Chart) ในโปรแกรม Tableau
แผนภูมิเรดาร์ (Radar Chart) หรือแผนภูมิใยแมงมุม (Spider Chart) เป็นแผนภูมิสองมิติที่เรียบง่ายแต่เต็มเปี่ยมไปด้วยพลังแห่งการแสดงภาพข้อมูล (Data Visualization) มีลักษณะแกนพุ่งออกจากจุดศูนย์กลางคล้ายใยแมงมุม โดยแกนทั้งหมดมีการกระจายออกด้วยมุมที่เท่ากันและดึงออกจากกันอย่างสม่ำเสมอ แผนภูมิเรดาร์เหมาะสำหรับการนำเสนอข้อมูลหลากหลายตัวแปรตั้งแต่สามตัวแปรขึ้นไป โดยเฉพาะตัวแปรเชิงปริมาณ สามารถใช้เปรียบเทียบตัวชี้วัดต่าง ๆ เพื่อวิเคราะห์จุดแข็งและจุดอ่อนของสิ่งที่กำลังสนใจ ตัวอย่างเช่น การเปรียบเทียบความสามารถในการเขียนโปรแกรมด้วยภาษาต่าง ๆ ของพนักงาน             จากภาพตัวอย่าง สมมติว่าบริษัทหนึ่งกำลังจะมีการคัดเลือกพนักงาน เพื่อทำงานด้านการเขียนโปรแกรมด้วยภาษาไพธอน (Python) และภาษาอาร์ (R) บริษัทดังกล่าวสามารถวิเคราะห์ข้อมูลจากแผนภูมิเรดาร์ได้ว่า ควรจะเลือกพนักงาน A ในการรับผิดชอบงานชิ้นนี้ เนื่องจากพนักงาน A มีทักษะการใช้ทั้งภาษาไพธอนและภาษาอาร์ดีที่สุดเมื่อเทียบกับพนักงานคนอื่น ๆ นั่นเอง             จากตัวอย่างข้างต้น จะเห็นได้ว่าแผนภูมิเรดาร์มีประโยชน์ในการวิเคราะห์ข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ ทั้งนี้การสร้างแผนภูมิเรดาร์มีขั้นตอนที่แตกต่างกันไปตามประเภทของโปรแกรมที่ใช้งาน เช่น ในโปรแกรม Excel หรือ Looker Studio มีขั้นตอนการสร้างที่ค่อนข้างง่ายและสะดวกรวดเร็ว ในขณะที่ในโปรแกรม Tableau อาจทำได้ยากกว่า และถึงแม้ว่าตัวโปรแกรม Tableau จะมีการออกแบบให้มีเมนูส่วนขยาย (Extension) เพื่อเพิ่มแผนภูมิ (Add-On Chart) โดยเฉพาะแผนภูมิเรดาร์ ในส่วนของการสร้างแดชบอร์ด แต่ก็ยังมีข้อจำกัดในเรื่องการใช้ชุดข้อมูลกับส่วนขยายดังกล่าว ในบทความนี้เราจะมาแนะนำวิธีการสร้างแผนภูมิเรดาร์ในโปรแกรม Tableau ตั้งแต่เริ่มต้น โดยข้อมูลตัวอย่างที่ถูกนำมาใช้สำหรับการสร้างแผนภูมิเรดาร์ในบทความนี้เป็นข้อมูลจำลอง (Mocked Data) ที่ผู้เขียนบทความสร้างขึ้นมาตามตารางด้านล่างนี้               การสร้างแผนภูมิเรดาร์ในโปรแกรม Tableau ประกอบด้วย 3 ขั้นตอนหลัก ได้แก่ การจัดการรูปแบบของข้อมูล, ขั้นตอนการสร้างแผนภูมิเรดาร์ และขั้นตอนการลดความยุ่งเยิงและการตกแต่งแผนภูมิเรดาร์ (Declutter and Decoration) มีรายละเอียดดังต่อไปนี้ 1.การจัดการรูปแบบของข้อมูล จากรูปแบบของข้อมูลจำลองข้างต้น จะเห็นได้ว่ารูปแบบดังกล่าวยังไม่สามารถที่จะนำเข้าโปรแกรม Tableau เพื่อสร้างแผนภูมิเรดาร์ได้ในทันที จำเป็นจะต้องมีการจัดรูปแบบใหม่เสียก่อน โดยรูปแบบข้อมูลที่สามารถนำไปใช้งานได้ ต้องเป็นข้อมูลที่อยู่ในรูปแบบรายการ (Transaction Data) ซึ่งสามารถจัดการได้โดยง่ายในโปรแกรม Tableau Desktop โดยเริ่มจาก 1.1 ดาวน์โหลดข้อมูลตัวอย่างจาก link จากนั้นเปิดโปรแกรม Tableau Desktop ขึ้นมา ที่แถบเครื่องมือหัวข้อ To File เลือก Microsoft Excel แล้วนำเข้าไฟล์ข้อมูลตัวอย่างที่ชื่อว่า “Radar data.xlsx”  เลือกชีท “programming skills” ลากวางดังภาพ 1.2 กดปุ่ม Ctrl ค้างไว้และเลือกฟิลด์ทักษะต่าง ๆ ประกอบด้วย Python, R, C, SQL, HTML และ JavaScript ซึ่งฟิลด์ที่ถูกเลือกนั้นจะถูกแสดงเป็นไฮไลท์ขึ้นมา จากนั้นคลิกปุ่มลูกศร (ของฟิลด์ใดฟิลด์หนึ่งที่ถูกไฮไลท์) และเลือกคำสั่ง Pivot 1.3 เปลี่ยนชื่อฟิลด์ จาก Pivot Field Names และ Pivot Field Values เป็น ภาษาโปรแกรมมิ่ง และ คะแนนทักษะ ตามลำดับ จะได้รูปแบบของข้อมูลที่พร้อมนำไปใช้สร้างแผนภูมิเรดาร์ 2. ขั้นตอนการสร้างแผนภูมิเรดาร์ 2.1 การสร้างสูตรฟิลด์คำนวณ หลักการสร้างสูตรมุม เริ่มจากมุมภายในวงกลมมีค่าเป็น 2*PI เมื่อถูกหารด้วยจำนวนของภาษาโปรแกรมมิ่ง ทำให้มุมภายในวงกลมนั้นถูกแบ่งออกเป็นจำนวน 6 มุม กางมุมละ PI/3 จากนั้นมีการหมุนปรับ (Rotation) มุมไป PI/2 เพื่อทำให้มีมุม 1 มุม ตั้งอิงอยู่บนแกน Y โดยสูตรการสร้างระยะห่างจากจุดศูนย์กลาง หรือรัศมี คำนวณจากผลรวมคะแนนทักษะ โดยสูตรการสร้างระยะแกน X คำนวณจากการแตกเวกเตอร์ของระยะห่างจากจุดศูนย์กลางบนแนวแกน X โดยสูตรการสร้างระยะแกน Y คำนวณจากการแตกเวกเตอร์ของระยะห่างจากจุดศูนย์กลางบนแนวแกน Y 2.2 การสร้างแผนภูมิเรดาร์ 3. ขั้นตอนการลดความยุ่งเหยิงและการตกแต่ง (Declutter and Decoration) แผนภูมิเรดาร์ 3.1 การลดความยุ่งเหยิง เพื่อที่จะลดความยุ่งเหยิงของแผนภูมิลง เราจะทำการซ่อนแกนที่แสดงตัวเลขบนแผนภูมิ โดยการคลิกขวาในแต่ละแกน เลือก Show Header เพื่อทำให้เครื่องหมายถูกข้างหน้าคำสั่งหายไป 3.2 การใส่รายละเอียดลงในกล่อง Tooltip (Tooltip คือกล่องข้อความที่จะแสดงรายละเอียดเมื่อนำเมาส์ไปวางค้างไว้) ทำการลากฟิลด์ ทักษะคะแนน ใส่กล่อง Tooltip ที่อยู่ในการ์ด Marks จากนั้นคลิกเข้าไปที่กล่อง Tooltip เพื่อจัดการข้อความภายในให้อยู่ในรูปแบบที่ต้องการ ตัวอย่างดังภาพ 3.3 การตกแต่งสีของแผนภูมิเรดาร์ สามารถปรับแต่งสีแผนภูมิโดยคลิกไปที่กล่อง Color ในการ์ด Marks คลิกเลือก Edit Color… จากนั้นปรับสีตามต้องการ หากต้องการปรับความโปร่งแสงของแผนภูมิ สามารถทำได้โดยเลื่อนมาตรวัดในส่วน Opacity 3.4 การเพิ่มภาพกรอบเรดาร์เป็นพื้นหลัง ที่เมนูบาร์ (Menu Bar) คลิกเมนู Map เลือกBackground Images แล้วเลือกชุดข้อมูล จากนั้นคลิกAdd Image… เลือกภาพพื้นหลังที่ต้องการ โดยในบทความนี้ เรามีการใช้กรอบเรดาร์หกเหลี่ยมด้านเท่าเป็นพื้นหลัง จากนั้นปรับค่าX Field หรือระยะรัศมีที่ไม่ได้ตั้งอยู่บนเส้นทแยงมุมของหกเหลี่ยม (r) ปรับค่าในส่วน Left และ Right เท่ากับ -8.66 และ 8.66 ตามลำดับ และกำหนดเครื่องหมายบวกหรือลบเป็นค่าตามแนวแกน X โดยค่าดังกล่าวคำนวณได้จากการแตกเวกเตอร์ตามแนวแกน X นั่นคือ 10 * COS(PI/6) และเช่นเดียวกันกับY Field หรือระยะรัศมีที่ตั้งอยู่บนเส้นทแยงมุมของหกเหลี่ยม (R)  ในส่วน Bottom และ Top เท่ากับ -10 และ 10 ตามลำดับ โดยค่าดังกล่าวเป็นค่าคะแนนเต็มของทักษะการเขียนโปรแกรม และกำหนดเครื่องหมายบวกหรือลบเป็นค่าตามแนวแกน Y 3.5 การติดป้ายกำกับข้อความ จะช่วยให้แผนภูมิเรดาร์แสดงรายละเอียดที่ชัดเจนยิ่งขึ้น การติดป้ายกำกับสามารถทำได้โดยการคลิกขวาที่แต่ละมุมของภาพพื้นหลัง แล้วเลือก Annotate จากนั้นเลือก Area… แล้วระบุข้อความที่ต้องการ   ผู้เขียนหวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่สนใจในการแสดงภาพข้อมูล (Data Visualization) ให้สามารถสร้างแผนภูมิเรดาร์ที่สวยงามนี้ เพื่อแสดงการเปรียบเทียบและวิเคราะห์จุดเด่นและจุดด้อยของตัวชี้วัดได้อย่างมีประสิทธิภาพยิ่งขึ้น  เนื้อหาโดย อังคณา พรหมราชตรวจทานและปรับปรุงโดย ดวงใจ จิตคงชื่น...
28 December 2023
PDPA Icon

We use cookies to optimize your browsing experience and improve our website’s performance. Learn more at our Privacy Policy and adjust your cookie settings at Settings

Privacy Preferences

You can choose your cookie settings by turning on/off each type of cookie as needed, except for necessary cookies.

Accept all
Manage Consent Preferences
  • Strictly Necessary Cookies
    Always Active

    This type of cookie is essential for providing services on the website of the Personal Data Protection Committee Office, allowing you to access various parts of the site. It also helps remember information you have previously provided through the website. Disabling this type of cookie will result in your inability to use key services of the Personal Data Protection Committee Office that require cookies to function.
    Cookies Details

  • Performance Cookies

    This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

  • Functional Cookies

    This type of cookie enables the Big Data Institute (Public Organization)’s website to remember the choices you have made and deliver enhanced features and content tailored to your usage. For example, it can remember your username or changes you have made to font sizes or other customizable settings on the page. Disabling these cookies may result in the website not functioning properly.

  • Targeting Cookies

    "This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

Save settings
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.