How to Transform Data to Structural Data
วิธีการแปลงข้อมูลให้เป็นข้อมูลเชิงโครงสร้าง

อ.ดร. สมศักดิ์ จันทร์เอม

วิทยาลัยนานาชาตินวัตกรรมดิจิทัล มหาวิทยาลัยเชียงใหม่

2 ธันวาคม 2568

โหลดคำสั่ง

ข้อมูลเชิงโครงสร้าง

ข้อมูลเชิงโครงสร้าง (Structured Data) คือข้อมูลที่มีรูปแบบแน่นอน เช่น ตารางในฐานข้อมูล (rows & columns) ซึ่งแต่ละคอลัมน์ระบุประเภทข้อมูลอย่างชัดเจน เช่น Customer_ID, Age, Gender, Purchase_Amount เป็นต้น

การแปลงข้อมูลให้เป็นเชิงโครงสร้าง (Data Transformation) มักประกอบด้วยขั้นตอนสำคัญ เช่น

  1. 🧹 Data Cleaning (การทำความสะอาดข้อมูล)

    • ลบค่าที่หายไปหรือไม่สอดคล้อง
    • จัดรูปแบบวันที่ ตัวเลข หรือข้อความให้เป็นมาตรฐานเดียวกัน
  2. 🔄 Data Integration (การรวมข้อมูล)

    • รวมข้อมูลจากหลายแหล่ง เช่น CSV, Excel, Database, API
  3. 🧩 Data Reshaping (การปรับโครงสร้างข้อมูล)

    • จากข้อมูลแบบไม่เป็นตาราง เช่น JSON, XML, Text logs
    • เปลี่ยนให้อยู่ในรูปแบบตาราง (rows × columns) ด้วยเทคนิค เช่น “flattening,” “pivot,” “melt,” หรือ “parse tree”
  4. 🔢 Feature Extraction (การสกัดคุณลักษณะ)

    • ดึงข้อมูลสำคัญจากข้อความ รูปภาพ หรือเสียง เช่น คำหลัก (keywords), ความยาวข้อความ, สีหลักในภาพ ฯลฯ
  5. 💾 Data Loading (การบันทึกลงระบบ)

    • นำข้อมูลที่ผ่านการแปลงแล้วไปเก็บในฐานข้อมูลเชิงสัมพันธ์ (SQL) หรือ Data Warehouse

ทำไมเราต้องแปลงข้อมูล? (Why Do We Need to Transform Data?)

Note

  • ข้อมูลดิบมักจะยุ่งเหยิง (messy): อาจมีรูปแบบไม่สอดคล้องกัน มีค่าสูญหาย หรือมีโครงสร้างซ้อนกัน

  • ข้อมูลที่ไม่มีโครงสร้างวิเคราะห์ได้ยาก: เครื่องมืออย่าง Excel, R, Python หรือ SQL ทำงานได้ดีที่สุดกับตารางที่เป็นโครงสร้าง

  • เครื่องมือทำภาพข้อมูลต้องการข้อมูลที่สะอาด: แผนภูมิและแดชบอร์ดต้องอาศัย data frame ที่จัดระเบียบดี

  • ยิ่งแม่นยำ ยิ่งได้อินไซต์ที่ดีกว่า: ข้อมูลที่สะอาดและมีโครงสร้างช่วยลดความผิดพลาดและยกระดับคุณภาพการวิเคราะห์

  • ข้อมูลโลกจริงแทบไม่พร้อมใช้งานทันที: โดยมากงานของนักวิเคราะห์ข้อมูล 70–80% ใช้ไปกับการทำความสะอาดและแปลงข้อมูล!

🧾 ตัวอย่างข้อมูลดิบ (รูปแบบข้อความ)

  • “ลูกค้า John Doe อายุ 32 ปี ซื้อสินค้าเป็นมูลค่า $120 ติดต่อได้ที่: john.d@example.com

  • “Jane Smith อายุ 28 ปี ทำการซื้อสินค้าเป็นมูลค่า $250 อีเมลของเธอคือ jane.s@example.com

  • “Bob Lee อายุ 45 ปี ใช้จ่าย $90 สามารถติดต่อเขาได้ที่ bob.lee@example.com

🟠 ปัญหาของข้อมูลข้อความดิบ:

  • ยากต่อการดึงค่าที่ต้องการเฉพาะ (เช่น อายุ ยอดซื้อ)

  • ไม่สามารถวิเคราะห์หรือสรุปผลได้หากไม่ผ่านการแปลงข้อมูล (data transformation)

  • ยังไม่พร้อมใช้งานใน Excel, R หรือฐานข้อมูลใด ๆ

ข้อควรพิจารณาก่อนแปลงข้อความดิบให้เป็นตารางเชิงโครงสร้าง

  1. คุณต้องการข้อมูลอะไรบ้าง?

    • ระบุฟิลด์ที่จำเป็น (เช่น ชื่อ (Name), อายุ (Age), อีเมล (Email), มูลค่าการซื้อ (Purchase Amount))

    • บางส่วนของข้อความอาจไม่จำเป็นและสามารถละเว้นได้ในขั้นตอนการแปลง

  2. รูปแบบสอดคล้องกันหรือไม่?

    • ตรวจสอบว่าทุกรายการมีรูปแบบใกล้เคียงกันหรือไม่

    • หากรูปแบบไม่สอดคล้อง (เช่น โครงสร้างประโยคต่างกัน) อาจต้องใช้ตรรกะการดึงข้อมูลเฉพาะ เช่น regular expressions (regex)

  3. มีค่าที่หายไปหรือคลุมเครือหรือไม่?

    • บางรายการอาจขาดบางฟิลด์ (เช่น ไม่มีอีเมลหรืออายุ)

    • วางแผนวิธีจัดการ ข้อมูลสูญหาย (missing data) หรือระเบียนที่ไม่สมบูรณ์

  4. จำเป็นต้องทำความสะอาดหรือปรับรูปแบบข้อมูลหรือไม่?

    • ตัวอย่าง: ลบสัญลักษณ์สกุลเงินอย่าง “$”, ทำให้รูปแบบชื่อมาตรฐาน (เช่น “Mr. John Doe” → “John Doe”)

    • แปลงข้อมูลให้อยู่ในรูปแบบพร้อมใช้งาน (เช่น ตัวเลขสำหรับยอดซื้อ, จำนวนเต็มสำหรับอายุ)

ตัวอย่าง

ข้อความดิบ (Raw text):

“ลูกค้า John Doe อายุ 32 ปี ซื้อสินค้าเป็นมูลค่า $120 ติดต่อได้ที่ john.d@example.com

ควรแปลงให้อยู่ในรูปแบบตารางดังนี้:

Name Age Purchase Email
John Doe 32 120 john.d@example.com

แบบฝึกหัด (Practice)

  • “ลูกค้า John Doe อายุ 32 ปี ซื้อสินค้าเป็นมูลค่า $120 ติดต่อได้ที่ john.d@example.com

  • “Jane Smith อายุ 28 ปี ทำการซื้อสินค้าเป็นมูลค่า $250 อีเมลของเธอคือ jane.s@example.com

  • “Bob Lee อายุ 45 ปี ใช้จ่าย $90 สามารถติดต่อเขาได้ที่ bob.lee@example.com

ข้อมูลดิบ: รูปภาพ (Raw Data: Picture)

พิจารณาภาพด้านบน แล้วสร้างตารางข้อมูลเชิงโครงสร้าง (structured table) โดยจัดกลุ่มตัวละครตามคุณลักษณะที่สามารถระบุได้อย่างชัดเจน เราจะเลือกใช้ฟิลด์ (คอลัมน์) อะไรบ้าง? และจะดึงข้อมูลที่สอดคล้องกันของแต่ละตัวละครได้อย่างไร?

💡 คอลัมน์ตัวอย่างที่แนะนำ (นักศึกษาสามารถกำหนดและกรอกเองได้):

Character Name Movie/Series Character Type Gender Species Costume Color Is Human (Yes/No)
  • “ประเภทตัวละคร (Character Type)” อาจเป็น พระเอก (Hero), ตัวร้าย (Villain), ตัวประกอบ (Sidekick) เป็นต้น

  • “สายพันธุ์ (Species)” อาจประกอบด้วย มนุษย์ รถยนต์ สัตว์ หรือสัตว์ประหลาด เป็นต้น

  • “ภาพยนตร์/ซีรีส์ (Movie/Series)” ใช้เพื่อเชื่อมโยงตัวละครกับบริบท เช่น Toy Story, Cars, The Incredibles

คำถามเชิงคิดวิเคราะห์เพิ่มเติม (Additional Critical Thinking Prompts)

  • คุณพบความท้าทายอะไรบ้างในการกำหนดค่าหรือระบุข้อมูลในแต่ละคอลัมน์?

  • มีตัวละครใดบ้างที่ไม่สามารถระบุได้ชัดเจนหรือมีความคลุมเครือหรือไม่?

  • หากต้องเตรียมข้อมูลนี้เพื่อใช้ในการทำ การจัดกลุ่ม (clustering) หรือ การจำแนกประเภท (classification) คุณจะปรับหรือเตรียมข้อมูลอย่างไร?

Sample Structured Data

Character Name Movie/Series Character Type Gender Species Costume Color Is Human
Lightning McQueen Cars Hero Male Car Red No
Mater Cars Sidekick Male Car Brown No
Buzz Lightyear Toy Story Hero Male Toy White/Green No
Woody Toy Story Hero Male Toy Yellow/Brown No
Mr. Incredible The Incredibles Hero Male Human Red/Black Yes
Elastigirl The Incredibles Hero Female Human Red/Black Yes
Mike Wazowski Monsters, Inc. Sidekick Male Monster Green No
Sulley Monsters, Inc. Hero Male Monster Blue/Purple No
Jessie Toy Story Hero Female Toy Red/White No
Jack Sparrow Pirates of the Caribbean Hero Male Human Brown/Black Yes

Raw Data: Hand Writing

การสกัดคุณลักษณะ (Extract Feature)

สำหรับแต่ละ ภาพใน MNIST dataset (หรือภาพระดับเทา 28×28 พิกเซลใด ๆ) จำนวนตัวแปรหรือคุณลักษณะ (features) ที่ได้จะขึ้นอยู่กับวิธีการแทนค่าของภาพนั้น:

Example: number 5

Example: number 5


  • ขนาดของภาพ = 28 × 28 พิกเซล

  • แต่ละพิกเซล = ค่าความเข้มของระดับเทา (grayscale intensity) ระหว่าง 0–255 หรือ 0–1

  • จำนวนตัวแปรทั้งหมด = 784 (หนึ่งตัวแปรต่อหนึ่งพิกเซล)

ข้อผิดพลาดที่พบบ่อยในการสร้างตาราง (Common Mistakes When Creating Tables)

Demon Slayer

Demon Slayer
Male character Female character
220 167
198 156
180 153
179 151
177
176
165
164.5
164
162
160
gender value
male 220
male 198
male 180
male 179
male 177
male 176
male 165
male 164.5
male 164
male 162
male 160
female 167
female 156
female 153
female 151

แบบฝึกหัด (Practice)

วิธีคัดลอกข้อมูลทางการเงินจาก Yahoo Finance ไปยัง Excel (How to Copy Financial Data From Yahoo Finance to Excel)

เรียนการเขียนโปรแกรมเพื่อการวิเคราะห์ข้อมูลทางการเงิน (Learn Programming for Financial Data Analysis)

คุณสามารถดาวน์โหลดข้อมูลทางการเงินจาก Yahoo Finance ได้โดยใช้แพ็กเกจ quantmod ในภาษา R
หรือใช้ไลบรารี yfinance ในภาษา Python
ทั้งสองเครื่องมือนี้มีความสามารถสูงและใช้งานง่าย เหมาะสำหรับการวิเคราะห์อนุกรมเวลา (time-series analysis)
และการสร้างแบบจำลองทางการเงิน (financial modeling)

ตย. Google Chrome (Mac).

ขั้นตอนที่ 1: ไปที่เว็บไซต์ https://finance.yahoo.com/

ขั้นตอนที่ 2: พิมพ์ชื่อสินทรัพย์ที่ต้องการค้นหา (เช่น หุ้น ทองคำ หรือสกุลเงินดิจิทัล)

ขั้นตอนที่ 3: กดปุ่ม Enter หรือคลิกปุ่มค้นหาเพื่อดูข้อมูลของสินทรัพย์นั้น

ขั้นตอนที่ 4: เลือกเมนู Historical Data (ข้อมูลย้อนหลัง)

ขั้นตอนที่ 5: คลิกที่สัญลักษณ์ \(\vee\) เพื่อเปิดตัวเลือกเพิ่มเติม

ขั้นตอนที่ 6: เลือกช่วงเวลา (time range) ที่ต้องการดูข้อมูลย้อนหลัง

ขั้นตอนที่ 7: เปิดเมนู View → Developer → Inspect Elements
เพื่อเปิดเครื่องมือสำหรับนักพัฒนา (Developer Tools) และตรวจสอบโครงสร้างของหน้าเว็บ

ขั้นตอนที่ 8: คลิกที่คอลัมน์ Date (วันที่)

ขั้นตอนที่ 9: ที่แถบด้านขวาของหน้าจอ ให้ค้นหาโค้ด <table class="table">
ซึ่งเป็นส่วนที่เก็บข้อมูลตารางราคาทางการเงิน

ขั้นตอนที่ 7: คลิกขวา (Right-click) ที่บริเวณข้อมูลในหน้าเว็บ แล้วเลือก Inspect

หลังจากเลือก Inspect คุณจะเห็นหน้าต่างลักษณะนี้

หลังจากเลือก Inspect คุณจะเห็นหน้าต่างลักษณะนี้

Step 8

Step 8

ขั้นตอนที่ 8: กด ⌘+F (Command+F) แล้วพิมพ์คำค้นหา <table จากนั้นกด Enter เพื่อค้นหา
> (หากใช้ Windows ให้กด Ctrl+F)

Step 9

Step 9

ขั้นตอนที่ 9: คลิกขวา → เลือก Copy → Copy element

ขั้นตอนที่ 10: คลิกซ้ายที่บริเวณโค้ด แล้วเลือก Copy → Copy element
เพื่อคัดลอกส่วนของตาราง <table> ทั้งหมดที่แสดงข้อมูลทางการเงิน

ขั้นตอนที่ 11: เปิดโปรแกรม Excel แล้วกด ⌘+V (Command+V) เพื่อวางข้อมูลที่คัดลอกมา

(หากใช้ Windows ให้กด Ctrl+V)

Downlad Financial Data from Yahoo Finance using web app.

My web app.

การบ้านครั้งที่ 1 (Homework 1)

กรุณารอประกาศรายละเอียดเพิ่มเติม

การแปลงข้อมูลธุรกรรมให้เป็นข้อมูลเชิงโครงสร้าง (Transaction Data to Structural Data)

ข้อมูลธุรกรรม vs ข้อมูลเชิงโครงสร้าง (Transaction Data vs Structural Data)

ประเภท คำอธิบาย รูปแบบตัวอย่าง
ข้อมูลธุรกรรม (Transaction Data) ข้อมูลดิบที่บันทึกเหตุการณ์หรือรายการแต่ละครั้ง แต่ละแถว = 1 ธุรกรรม
ข้อมูลเชิงโครงสร้าง (Structural Data) ข้อมูลที่ถูกแปลงให้อยู่ในรูปแบบโครงสร้างเพื่อการวิเคราะห์ แถว = หน่วยข้อมูล, คอลัมน์ = ตัวแปร

สมมติว่ามีข้อมูลธุรกรรมดิบจากร้านขายของชำดังนี้:

CustomerID Product Quantity Date
C001 Apple 2 2025-06-01
C001 Banana 1 2025-06-01
C002 Apple 3 2025-06-02
C002 Orange 2 2025-06-02
CustomerID Apple Banana Orange
C001 2 1 0
C002 3 0 2
  • แต่ละแถวแทน ลูกค้าแต่ละราย (customer)

  • แต่ละคอลัมน์แทน สินค้าแต่ละชนิด (product)

  • ค่าในตารางคือ ปริมาณรวมของสินค้าที่ซื้อ (total quantity purchased)

ข้อมูลลักษณะนี้มักเรียกว่า pivot table, cross-tab,
หรือ wide format

เครื่องมือที่สามารถใช้ได้ (Tools You Can Use)

  • ใน Excel: ใช้ PivotTable

  • ใน R: ใช้ฟังก์ชัน pivot_wider() จากแพ็กเกจ tidyr

  • ใน Python (pandas): ใช้ .pivot_table() หรือ .groupby() + .unstack()

Simulation Data


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

🌐 ข้อมูลเครือข่ายคืออะไร? (What is Network Data?)

ข้อมูลเครือข่าย (Network Data) หรือ ข้อมูลแบบกราฟ (Graph Data)
เป็นข้อมูลที่แสดงถึงความสัมพันธ์ (edges) ระหว่างหน่วยหรือสิ่งต่าง ๆ (nodes)

ตัวอย่างการใช้งาน:

  • เครือข่ายสังคมออนไลน์ (ใครติดตามใคร)

  • การเชื่อมโยงระหว่างเว็บไซต์ (Web links)

  • การค้าระหว่างประเทศ (Trade flows)

  • เครือข่ายการอ้างอิงทางวิชาการ (Citation networks)

🧾 Example of Network (Edge List) Data

From To Weight
A B 1
A C 1
B C 1
C A 1
C D 1

This format is called an edge list.

🔄 Convert to Structural (Adjacency Matrix) Format

A B C D
A 0 1 1 0
B 0 0 1 0
C 1 0 0 1
D 0 0 0 0
  • Rows = source nodes (From)

  • Columns = target nodes (To)

  • Values = Weight or 1 if connected

Network Graph Simulation

\(~\)

Structural Data (Adjacency Matrix)