Excel หรือ SQL : เลือกใช้อะไรดี? ให้เหมาะสมกับงาน

ถือเป็นหนึ่งในคำถามที่ actuary , data analyze และ data scientist มือใหม่ สงสัยว่า Excel กับ SQL ต่างกันอย่างไร ซึ่งแต่ละตัวจะมีจุดประสงค์และรายละเอียดการนำไปใช้ต่างกันไป แต่ทั้งสองอย่างก็มีจุดประสงค์เหมือนกันคือ

“การจัดระเบียบข้อมูล หรือ Data Organisation”

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

Spreadsheet กับ traditional relational database แบบรวบรัด

เชื่อว่าหลายๆคนเคยจะใช้ spreadsheet application อย่างเช่น Excel หรือ Google Sheet โดยฟีเจอร์หลักๆก็คือ จัดแสดงข้อมูลเป็นรูปแบบของ spreadsheet โดยแบ่งออกเป็น rows และ columns และยังนำชุดข้อมูลไปแสดงเป็น กราฟ หรือ ฮิสโตแกรมได้อีกด้วย

ส่วน SQL เป็นภาษา query ที่เอาไว้ติดต่อกับ Traditional Relational Database ซึ่งสามารถมองเป็น excel spreadsheet หลายๆอัน ที่มีความสัมพันธ์เกี่ยวเนื่องกัน มารวมเป็นฐานข้อมูลอันเดียวกันเพื่อลดความซ้ำซ้อนของข้อมูล แต่ก่อนหน้าที่จะเขียน ภาษา SQL เพื่อ สร้าง, เปลี่ยนแปลง, ลบ, หรือ ดึงข้อมูล จากฐานข้อมูล เราจะต้องกำหนดความสัมพันธ์ของข้อมูลก่อน โดยเราสามารถอธิบายรูปแบบโครงสร้างของฐานข้อมูล ในรูปของ Entity Relationship Diagram หรือ ERD

ยกตัวอย่างเช่น สมมติว่า 1 policy สามารถมี claim จ่ายรายเดือนได้หลายเดือน (one to many relationship) เราสามารถเก็บข้อมูลอยู่ในรูปของ spreadsheet ได้ดังนี้

จากรูปจะสังเกตเห็นได้ว่าข้อมูลมีความซ้ำซ้อนกันใน column ของ accident_date, reported_date และ closed_date ซึ่งสามารถแก้ไขได้ตามหลักของ Traditional Relational Database โดยแยกข้อมูลออกเป็น 2 ตาราง และเพิ่ม คอลัมน์ policy_id เพื่ออ้างอิงไปยัง id ของ Policy Table ดังรูป

ซึ่งเราสามารถสรุปความสัมพันธ์ของตารางให้อยู่ในรูปของ ERD ได้ตามภาพด้านล่าง ซึ่งเป็นมาตรฐานที่สามารถนำไปสื่อสาร กับ IT Professional หรือ Back-end Developer ได้


  • เครื่องหมาย ||—–o< หมายถึง one to many relationship
  • PK ย่อมาจาก Primary Key ซึ่ง key นี้ห้ามมีค่าซ้ำกัน และ ห้ามมีค่าเป็น NULL โดยจุดประสงค์หลักคือห้ามไม่ให้มีการป้อนข้อมูลซ้ำเกิดขึ้น และยังช่วยในการเรียงข้อมูลนั่นเอง
  • FK ย่อมาจาก Foreign Key มีไว้เพื่อเขื่อมความสัมพันธ์ของสองตารางเข้าหากัน เช่น คือ แถวข้อมูลของ Policy Table ที่มี id (PK) =1 สามารถนำไปเชื่อมกันเป็นแถวใหม่กับ แถวข้อมูลของ Monthly_Claim Table ที่มี policy_id (FK) ที่มีค่าเท่ากับ 1 เช่นกัน

แต่ความสัมพันธ์ในโลกนี้ไม่ได้มีแค่ one-to-many เท่านั้น และ ถ้าอยากศึกษาเกี่ยวกับ ERD ให้มากกว่านี้ ลองกดตามลิ้งได้เลยครับ https://www.lucidchart.com/pages/er-diagrams?a=0

SQL กับ Database ปะทะ Excel: เทียบหมัดต่อหมัด

ความเข้าใจง่าย

การเข้ามาของ SQL ส่งผลทำให้เราสามารถเขียน query หรือ คำสั่ง เฉพาะที่เราต้องการจากตารางได้เท่านั้น ยกตัวอย่างเช่น สมมติว่าเรามีฐานข้อมูล: Table Monthly_Claim ในระบบตามที่ได้ยกตัวอย่างไว้ด้านบน เราสามารถเขียน query ง่ายๆดังนี้

SELECT paid_claim
FROM Monthly_Claim
WHERE paid_claim BETWEEN 130 AND 150
ORDER BY paid_claim DESC
LIMIT 10;

โดยผลลัพธ์ที่ได้ สามารถมองเป็น Spreadsheet ใหม่ที่ประกอบไปด้วย claim สูงสุด 10 อันดับแรก ดังนี้

ลองดู code ทีละบรรทัดกันครับ

  • SELECT คือ keyword ในการบอก SQL ว่า ให้เริ่มขอข้อมูลจาก Database
  • paid_claim คือ columns ใน Monthly_Claim table
  • FROM คือ keyword ที่บอก query ให้เข้าไปดูใน Monthly_Claim table
  • WHERE คือ keyword ที่ใช้กรองข้อมูลตามเงื่อนไขที่ระบุไว้ ในที่นี้คือ คัดมาเฉพาะแถวที่ paid_claim มีค่าระหว่าง 130 ถึง 150
  • ORDER BY คือ keyword ที่ใช้จัดเรียงผลลัพธ์ จากมากไปน้อย หรือ น้อย ไปมาก ในที่นี้ keyword DESC หมายถึงจาก มากไปน้อย
  • LIMIT  คือ keyword ที่ใช้จำกัดจำนวนผลลัพธ์ที่แสดงออกมา ในที่นี้คือ จำนวนที่มากที่สุด 10 อันดับแรก แต่ต้องอยู่ระหว่าง 130 ถึง 150

แต่ถ้าหากเราต้องการทำงานแบบเดียวกัน ด้วย Excel เราจะต้องทำตามขั้นตอนเพื่อที่จะได้ข้อมูล worksheet ดังนี้

  1. เปิดตาราง Monthly_Claim table แล้ว copy ข้อมูลลง Excel spread sheet ในรูปแบบของตาราง
  2. เพิ่ม FILTER หรือ IF function ไปยัง paid_claim column โดยคัดกรองตามเงื่อนไขคือ paid_claim ต้องมีค่าอยู่ระหว่าง 130 ถึง 150
  3. ใช้ feature Sort & Filter ของ Excel ในการเรียงข้อมูลจากมากไปหาน้อย
  4. คัดแถวมาแค่ 10 แถวแรก แล้วลบคอลัมน์ที่ไม่ต้องการออก หรือ เขียน code VBA ช่วยแทน

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

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

Performance และ Speed ในการทำงาน

Excel มีข้อจำกัดอยู่ คือ ยิ่งข้อมูลและความซับซ้อนของฟังค์ชั่นมีมากเท่าไหร่ ความช้าในการรันคำสั่งก็จะมากขึ้นตามไปด้วยเช่นกัน

นอกจากนี้ Excel สามารถรันคำสั่ง ได้สูงสุด คือหนึ่งล้าน rows

limitation_excel
Credit: https://support.office.com/en-us/article/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3

แต่ SQL สามารถ รันคำสั่งได้ถึงระดับพันล้าน rows และ ยังทำงานได้เร็วกว่ามากๆ โดยในบางกรณี SQL สามารถรันเสร็จภายในเวลาไม่กี่นาที แต่ EXCEL อาจจะต้องใช้เวลาเกือบชั่วโมงในการรัน

Collaboration: การทำงานกับเพื่อนร่วมทีม

ลองนึกภาพดู เมื่อข้อมูลใน Spreadsheet โตมากขึ้นเรื่อยๆ ขนาดของไฟลล์ Excel ก็จะโตตามไปด้วย บางทีอาจจะหลายสิบ Mb ลองจินตนาการถึงความช้าและความยากในการ upload file และส่งเมลไปยังเพื่อนร่วมงาน ยังไม่รวมไปถึงความยุ่งยากในการจัดการชื่อและ version ของไฟลล์ หลายคนๆคงเคยเจอกับปัญหา ตามภาพ

version_control_excel

อย่างไรก็ตาม หากลองเปลี่ยน จาก Excel ไปใช้ Google Spreadsheets ปัญหานี้คงจะทุเลาลงไปบ้าง

ในขณะที่ SQL เก็บ แค่ query (พูดง่ายๆคือ code หรือ instruction ในการติดต่อกับฐานข้อมูลนั่นเอง) คำสั่งในการทำงานเป็นแค่ Text File เพียงไม่กี่บรรทัด ไม่ได้เก็บข้อมูลบวมๆไว้ใน file เหมือน Excel ทำให้ทุกคนในทีมเข้าถึงฐานข้อมูลอันเดียวกัน ส่งผลให้ทุกคนสามารถรัน code ของตนเองได้โดยไม่กระทบกับงานของคนอื่น ทำให้เราไม่ต้อง save ไฟลล์ไว้หลายๆ เวอร์ชั่นเหมือนกับเวลาเราใช้ Excel

นอกจากนี้ การรู้ SQL ทำให้เราพูดภาษาเดียวกับ IT Professionals ที่ดูแลด้าน Database อีกด้วย ทำให้การประสานงานระหว่างทีมเป็นไปได้อย่างราบรื่น

Learning Curve : ความยากในการเรียนรู้

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

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

  1. Basic SQL Command
  2. SQL JOIN
  3. SQL Aggregate Function
  4. SQL Subqueries
  5. Data cleaning with SQL
  6. SQL Window Function
  7. SQL Performance Tuning

ส่วนเว็บที่ผมใช้ศึกษาบ่อยๆ คือ tutorialspoint.com/sql/ กับ
stackoverflow ครับ

Adoption with Other Tools: การใช้งานจริงกับเครื่องมือต่างๆ

Data visualization : การแสดงผลของข้อมูล

การทำ Data visualization เป็นเรื่องอะไรที่ขนมกรุบมากๆ ใน Excel เนื่องจาก Microsoft ได้เตรียม built-in feature สำหรับด้านนี้โดยเฉพาะ โดยเราสามารถสร้างกราฟได้อย่างรวดเร็ว, มีประสิทธิภาพ และ หลากหลาย ไม่ว่าจะเป็น Line Chart, Bar Chart, Histogram หรือแม้กระทั่ง Time series นอกจากนี้เรายังสามารถ export กราฟที่สร้างไปยัง โปรแกรม ตระกูล Microsoft อย่างอื่น เช่น PowerPoint และ Word

SQL เป็นเพียงภาษาโปรแกรมมิ่ง ไม่เหมือนกับซอฟต์แวร์สำเร็จรูป อย่าง Excel ดังนั้นการทำ Data Visualization จึงมีหลายกระบวณท่ามาก เช่นการใช้ libraries อย่าง Matplotlib (ภาษา Python), D3.js (JavaScript) , Processing.js (JavaScript) ๆ ล ๆ และที่สำคัญเป็น opensource หรือ ฟรีนั่นเองครับ

หนึ่งใน Library ที่ขึ้นชื่อในด้าน Data-Driven จริงๆ คือ D3.js ซึ่งทำให้เราสามารถสร้างสรรค์ Data Visualization ได้อย่างอิสระเสรี และยังสวยงามมาก จนทำให้ กราฟสำเร็จรูปของ Excel ดูกระจอกไปเลย นอกจากนี้ยังมีความยืดหยุ่นสูงมากกก ถึงขนาด มีคนไปนำ D3.js มาคิดค้นและพัฒนากราฟขนิดใหม่มาเต็มไปหมด ไม่ว่าจะเป็น Zoomable Geography Graph, Sequence Sunburst Graph, และอื่นๆอีกมากมาย

ตัวอย่างกราฟจากการใช้ D3js Credit: d3js.org/

แต่ในโลกแห่งความเป็นจริงแล้ว กราฟธรรมดาๆ อย่าง Line chart หรือ Histogram ของ Excel ก็เพียงพอต่อการนำเสนอ insight ของข้อมูลแล้ว ดังนั้นการใช้ D3.js ถือเป็นการ overkill ไปมาก D3.js จะเหมาะสมต่องานก็ต่อเมื่อข้อมูลมีความซับซ้อนสูงและเฉพาะทางจริงๆ นอกจากนี้ Learning curve ของ D3.js ยังสูงปรี๊ดอีกด้วย สำหรับผู้เริ่มต้น อาจจะต้องใช้เวลาหลายเดือนในการศึกษา เพราะนอกจากความรู้เรื่อง Data แล้ว พื้นฐานด้าน ภาษา JavaScript และ Front end Web Developer ยังจำเป็นต่อการเรียนรู้ Library ตัวนี้อีกด้วย

แต่ถ้าเพื่อนๆ สนใจก็ลองศึกษาดูได้นะครับ ที่ https://d3js.org/

Connection with Database: การเชื่อมต่อกับฐานข้อมูล

สำหรับผู้ใช้ Excel การเชื่อมต่อกับฐานข้อมูลที่ง่ายที่สุดคือ Microsoft Access นอกจาก Access จะช่วยในเรื่องของ Database management ซึ่งช่วยให้เราสร้าง Relational Database อย่างง่ายดาย รวมไปถึง การสร้าง SQL query แบบสำเร็จรูปแล้ว เรายังสามารถนำ ผลลัพธ์จาก query นั้นๆไปใช้ต่อใน Excel ได้อีกด้วย แต่ไม่ฟรีนะครับ ซึ่งสามารถซื้อรายปีได้จาก Microsoft 365

Microsoft Access

แต่ถ้าเราใช้ SQL เราจะมีทางเลือกมากกว่าในการเชื่อมต่อกับระบบฐานข้อมูลซระบบใดๆก็ได้ ที่เป็น Traditional Relational Database ไม่ว่าจะเป็น Access, MySQL, PostgreSQL , ๆ ล ๆ

Extended to Machine learning : การเพิ่มฟีเจอร์ใหม่ๆ เช่น Machine Learning

หากผุ้ใช้ Excel ต้องการใช้ฟีเจอร์ อย่าง Machine Learning เราอาจจะต้องเสียเงินซื้อ add-ons ให้ Microsoft นอกจากนี้ Excel ก็ยังมีข้อจำกัดมากมาย อยู่ดี จึงไม่แนะนำให้ใช้ Excel เพื่อการนี้ครับ

SQL ก็ไม่ใช่ภาษาในการทำ Machine Leaning เช่นกัน เพราะภาษาที่นิยมในการทำ Machine Learning คือ ภาษา R กับ Python แต่ SQL ยังคงเป็นพื้นฐานสำคัญในการจัดการข้อมูลอยู่ดี การรู้ SQL ทำให้เราสามารถเล่นกับข้อมูลได้มากขึ้น และยังนำไปสู่ การทำ Machine Learning, Predictive Modeling รวมไปถึง Data Science อีกด้วย

หนึ่งใน Framework ในการทำ Machine learning ที่มาแรงในยุคนี้ นั่นก็คือ TensorFlow ซึ่งมีเจ้าพ่อแห่งวงการเทคโนโลยี อย่าง Google เป็นคนผลักดัน โดยทำให้เราสามารถเขียนได้ทั้งภาษา Python และ JavaScript เลือกได้ตามใจชอบเลยครับ

ในแง่ของ Learning Curve ตัวภาษา Python กับ JavaScript ไม่ค่อยยากหรอกครับ เปิดอ่าน Official Documentation ไม่นานก็พอเขียนได้แล้ว แต่ ตัว TensorFlow นี่สิตัวโหดเลย TT Math จ๋ามากๆ

สรุป

Excel เหมาะกับงานที่เรียบง่าย ไม่ซับซ้อน งานที่ต้องทำคนเดียว หรือ งานขั้นสุดท้ายที่ไม่ต้องส่งให้คนอื่นทำต่อ

ส่วน SQL มีไว้สำหรับงานที่ซับซ้อน Project ระยะยาว มีการเปลี่ยนแปลงบ่อยๆ มีเพื่อนร่วมทีมมากๆ

ในบางครั้งเราก็สามารถใช้ทั้ง SQL และ Excel ได้ เช่น เขียน SQL query ดึงข้อมูลตารางมา แล้วนำมา plot เป็น histogram ด้วย Excel

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

สิ่งสุดท้ายที่อยากจะบอกก็คือ

อย่าเลือกเครื่องมือเพราะคนอื่นบอกว่าดี สิ่งที่คนอื่นบอกว่ามันดี อาจจะไม่ดีที่สุดสำหรับเราก็ได้ เราควรเลือกเครื่องมือที่เราถนัด และ ทำให้งานของเราเสร็จไวและไม่มีข้อผิดพลาด

Related posts