Pandas

Pandas

ข่าวและบทความที่เกี่ยวข้อง

All Pandas

PostType Filter En

บทความ

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

บทความ

Pandas vs. PySpark เลือกเครื่องมือที่ใช่ให้เหมาะกับงานข้อมูลของคุณ?
Pandas และ PySpark เป็นเครื่องมือที่ใช้สำหรับการจัดการและวิเคราะห์ข้อมูลใน Python โดย Pandas เป็นไลบรารียอดนิยมที่ใช้สำหรับการทำงานกับชุดข้อมูลขนาดเล็ก ถึงขนาดกลาง ในหน่วยความจำบนเครื่องเดียว (single-node) ซึ่งมีฟังก์ชันหลากหลายสำหรับการจัดการและวิเคราะห์ข้อมูล ในทางตรงกันข้าม PySpark ซึ่งสร้างขึ้นบน Apache Spark ได้รับการออกแบบมาเพื่อการประมวลผลแบบกระจาย (distributed computing) ทำให้สามารถประมวลผลชุดข้อมูลขนาดใหญ่ได้บนหลายเครื่องใน cluster เดียว Pandas คืออะไร Pandas เป็นหนึ่งใน library แบบ open-source ที่ถูกใช้งานมากที่สุดใน Python สำหรับข้อมูลที่มีโครงสร้างแบบตารางเพื่อการวิเคราะห์ข้อมูลได้หลากหลาย เช่น การกรองข้อมูล การรวมข้อมูล การแปลงข้อมูล รวมถึงการทำความสะอาดและเตรียมข้อมูล จนไปถึงการทำ Machine Learning และอื่น ๆ อีกมากมาย โดยสามารถอ่านไฟล์ได้ในหลายรูปแบบ เช่น CSV, JSON, SQL และรูปแบบอื่นๆ จากนั้นจะสร้างข้อมูลในรูปแบบ DataFrame ซึ่งเป็นวัตถุที่มีโครงสร้างประกอบด้วยแถวและคอลัมน์ (คล้ายกับตาราง SQL) ตัวอย่างการใช้งาน Pandas DataFrame เริ่มต้นใช้งาน Pandas library โดยการ import library และสร้าง DataFrame ด้วยฟังก์ชัน pd.DataFrame โดยได้ผลลัพธ์ออกมาเป็นตารางที่มี index เริ่มที่ index 0 ตัวอย่าง Pandas Transformations ฟังก์ชันต่าง ๆ ในกระบวนการแปลงของ Pandas DataFrame ซึ่งรวมถึงฟังก์ชันทางคณิตศาสตร์ หรือฟังก์ชันทางสถิติ ที่สามารถเลือกทำได้ในทั้ง DataFrame หรือเลือกทำในแต่ละ column เป็นตัวช่วยให้จัดการและวิเคราะห์ข้อมูลยืดหยุ่นมากขึ้น ตัวอย่างเช่น PySpark คืออะไร PySpark เป็น API ของ Python สำหรับ Apache Spark ซึ่งเป็นกรอบการประมวลผลแบบกระจาย (distributed computing) ที่ออกแบบมาสำหรับการประมวลผลชุดข้อมูลขนาดใหญ่ใน cluster ของเครื่องคอมพิวเตอร์ โดยที่ PySpark ช่วยให้การประมวลผลและวิเคราะห์ข้อมูลแบบขนานเป็นไปได้โดยการกระจายการคำนวณไปยังหลาย node ใน cluster ซึ่งทำให้มีความสามารถในการขยายขนาด (scalability) และมีประสิทธิภาพสูงสำหรับงานวิเคราะห์ข้อมูลขนาดใหญ่ ซึ่ง PySpark มี API DataFrame ที่มีลักษณะคล้ายกับ Pandas ทำให้ผู้ใช้งานสามารถทำการจัดการข้อมูลได้คล้ายกัน แต่บนชุดข้อมูลที่กระจายกันอยู่ (Distributed Datasets) ตัวอย่างการใช้งาน PySpark DataFrame PySpark DataFrame เป็นวัตถุที่ไม่สามารถเปลี่ยนแปลงค่าได้ (immutable) ซึ่งหมายความว่าไม่สามารถเปลี่ยนแปลงได้เมื่อสร้างขึ้นแล้ว มีความสามารถในการทนต่อข้อผิดพลาด (fault-tolerant) และการทำ Transformations จะเป็น Lazy evaluation ซึ่งหมายความว่าจะไม่ถูกดำเนินการจนกว่าจะมีการเรียกใช้ Actions เช่น count(), collect(), show() เป็นต้น ซึ่ง PySpark DataFrames จะถูกกระจายอยู่ใน cluster (ซึ่งหมายถึงข้อมูลใน PySpark DataFrames จะถูกจัดเก็บในเครื่องคอมพิวเตอร์ต่าง ๆ ใน cluster เดียว) และการดำเนินการใด ๆ ใน PySpark จะถูกดำเนินการแบบขนานบนเครื่องทั้งหมดใน cluster เริ่มต้นโดยการ import และสร้าง SparkSession และสร้าง DataFrame ด้วย spark.createDataFrame  โดยได้ผลลัพธ์ออกมาเป็นตารางที่ไม่มี index และเมื่อต้องการแสดงตาราง ให้ใช้ฟังก์ชัน show() และสามารถอ่านไฟล์ได้ เช่น การอ่าน csv file ด้วยฟังก์ชัน spark.read.csv ตัวอย่าง PySpark Transformations การทำ Transformations ใน PySpark มีลักษณะเป็นแบบ Lazy evaluation ซึ่งหมายความว่าจะไม่ถูกดำเนินการจนกว่าจะมีการเรียกใช้ Actions ตัวอย่างการแปลงใน PySpark มีดังนี้ ตัวอย่างการใช้งาน PySpark SQL PySpark รองรับการใช้คำสั่ง SQL เพื่อดำเนินการแปลงข้อมูล (Transformation) ซึ่งที่ต้องทำคือการสร้างตาราง (Table) หรือมุมมอง (View) จาก PySpark DataFrame ตัวอย่าง Note !! วิธีการตัดสินใจเลือกระหว่างใช้ Pandas หรือ PySpark การตัดสินใจเลือกระหว่าง Pandas หรือ PySpark มีหลายองค์ประกอบในการตัดสินใจ ไม่ว่าจะเป็น ขนาดของข้อมูล ทรัพยากรในการประมวลผลที่มีอยู่ และความต้องการเฉพาะของงานวิเคราะห์ข้อมูล References บทความโดย ดร.ภิรมย์มาส เตชิตณัฏฐ์ศรุต ตรวจทานและปรับปรุงโดย ดร.ขวัญศิริ ศิริมังคลา
2 October 2024

บทความ

เชื่อมต่อ BigQuery ด้วย Python ใน 3 ขั้นตอน
การสำรองและกู้คืนข้อมูล PostgreSQL และการ sync ไฟล์ด้วย rsync แบบอัตโนมัติ
22 August 2022
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.