ค้นหาบริษัทที่น่าสนใจ ด้วยข้อมูลตลาดหลักทรัพย์บน BigQuery

หลังจากที่เราทำความรู้จักกับ Data Engineering Services กันไปแล้ว วันนี้ผมจะลงรายละเอียดให้พอเห็นภาพครับ ว่าหากเรามีข้อมูลอยู่ เราจะทำอะไรกับมันได้บ้าง โดยครั้งนี้จะเป็นการทดลองกับข้อมูลที่ public อยู่บนหน้าเวบของตลาดหลักทรัพย์แห่งประเทศไทย ซึ่งมีการเผยแพร่ข้อมูลของบริษัทที่จดทะเบียนในตลาด SET และ mai บนหน้าเวบ www.set.or.th และมีข้อมูลรายบริษัทแจกแจงเอาไว้ให้ผู้ใช้ข้อมูลสามารถเข้าไปค้นหาบริษัทที่น่าสนใจได้

ทดลองกับข้อมูลตลาดหลักทรัพย์

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

ตัวอย่างตารางงบการเงิน/ผลประกอบการ

จุดประสงค์ของการทดลองนี้คือ ต้องการสร้างระบบที่ช่วยให้สามารถวิเคราะห์ข้อมูลงบการเงิน/ผลประกอบการของบริษัทจดทะเบียนได้สะดวก โดยต้องมีการ update ข้อมูลให้ถูกต้องเสมอ

เพราะข้อมูลไม่พร้อมใช้งาน จึงต้องทำ ETL

ณ วันที่เขียน blog นี้ (4 มี.ค. 61) มีข้อมูลบริษัทจำนวน 755 บริษัท ซึ่งเท่ากับข้อมูลตาราง งบการเงิน/ผลประกอบการ จำนวน 755 ตาราง ในแต่ละตาราง จะมีการ update ข้อมูลทุกวัน (ในช่อง ราคาล่าสุด(บาท) และ มูลค่าหลักทรัพย์ตามราคาตลาด) ส่วนช่องอื่นๆ จะมีการ update ข้อมูลรายไตรมาส ซึ่งแต่ละบริษัทจะรอบการ update ไม่ตรงกัน ดังนั้น เราจำเป็นจะต้อง update ข้อมูลรายวันในระบบที่สร้างขึ้นมา

เราจะเริ่มจากการแปลงข้อมูลตารางของแต่ละบริษัท มารวมกันเป็นตารางเดียวกัน คือจาก 755 ตาราง มารวมกันเป็นตารางเดียว เพื่อให้สามารถนำมาคำนวณหรือเปรียบกันได้สะดวก การรวมตารางจาก 755 ตารางให้มาลงที่ตารางเดียวกัน จำเป็นจะต้องมีการออกแบบตารางกันใหม่ (schema design) เพื่อให้รองรับการเก็บและเรียกใช้ข้อมูลของทั้ง 755 บริษัท ลงในตารางเดียว กระบวนการตรงนี้ก็คือการทำ ETL (Extract, Transform, Load) ใน data pipeline

ข้อดีของ BigQuery

ตารางรวมที่เราได้มานั้น จะใช้เก็บลง BigQuery เนื่องด้วยเหตุผลหลายๆ อย่างประกอบกัน ดังนี้

  • BigQuery ถูกออกแบบมาให้เหมาะกับการเก็บข้อมูลเพื่อ analytic โดยเฉพาะข้อมูลปริมาณมากๆ (แม้ว่าข้อมูลในการทดลองนี้จะไม่มาก แต่ก็ยังสะดวกอยู่ดี)
  • BigQuery เป็น service แบบ No-Ops หมายความว่า ผู้ใช้ไม่ต้องคอยบริหารจัดการเรื่องทรัพยากรใดๆ เช่นการสร้าง server, การติดตั้งระบบฐานข้อมูล, การดูแลความปลอดภัยจากช่องโหว่ ฯลฯ
  • BigQuery มี free quota ให้ใช้งาน คือให้พื้นที่เก็บข้อมูล 10 GB และปริมาณข้อมูลที่ประมวลผลจำนวน 1 TB ต่อเดือน โดยไม่มีค่าใช้จ่าย

BigQuery คิดค่าเก็บข้อมูลในราคาถูก จึงไม่ต้องกังวลเรื่องข้อมูลซ้ำซ้อน

ส่วนของการแปลงตาราง ผมตั้ง script ที่จะ trigger วันละครั้ง แต่ละครั้งที่ run จะได้ตารางใหญ่ (ตารางที่รวมข้อมูลของท้ง 755 บริษัทลงในตารางเดียว) ออกมา วันละตาราง โดยจะเป็นการเก็บข้อมูลใหม่ทั้งหมดทุกครั้ง นั่นหมายความว่า ใน BigQuery จะมีข้อมูลซ้ำกันเต็มไปหมด (เนื่องจากส่วนที่ update มีอยู่นิดเดียว) ที่ผมเก็บข้อมูลในลักษณะนี้ เนื่องจาก script ที่ผมใช้ หากจะตรวจสอบเฉพาะส่วนที่มีค่าเปลี่ยนแปลง และดึงเฉพาะค่านั้นออกมา ทั้ง script และวิธีการเก็บและใช้ข้อมูลบน BigQuery จะมีความซับซ้อนเพิ่มขึ้น

ส่วนของการแปลงตาราง ผมใช้ Apps Script ที่ตั้ง trigger ให้รันวันละครั้ง

แต่หากเราลดความซับซ้อนลง ด้วยการเก็บข้อมูลซ้ำๆ กัน แยกตารางตามวันเอาไว้ โดย 1 ตาราง ใช้พื้นที่ประมาณ 600 KB ด้วย free quota 10 GB ผมจะสามารถเก็บข้อมูลได้ 17,000 ตาราง หรือประมาณ 47 ปี (ตารางละ 1 วัน) หากเกินจาก free quota ราคาค่าเก็บบน BigQuery ก็อยู่ที่ $0.02/GB/เดือน คำนวณคร่าวๆ คือจ่ายประมาณปีละไม่เกิน 10 บาท เก็บข้อมูลส่วนเกินได้ต่อไปอีก 4 ปีกว่าๆ ผมจึงไม่กังวลกับเรื่องพื้นมากนัก

ตารางแสดงค่าใช้จ่ายของ BigQuery (ฟรีที่เก็บ 10 GB และฟรีปริมาณข้อมูลที่ query 1 TB)

สร้าง view เพื่อความสะดวกในการ query ตารางล่าสุด

หลังจากที่เราเก็บข้อมูลลง BigQuery เรียบร้อย เราก็เริ่มมาวิเคราะห์ข้อมูลกัน แต่การที่เรามีข้อมูลหลายๆ ตาราง การจะต้องมาระบุว่าจะ query ข้อมูลจากตารางไหนทุกครั้ง จึงไม่ค่อยสะดวกนัก วิธีที่ผมใช้คือการสร้าง view ขึ้นมา โดย view ตัวนี้จะดึงข้อมูลมาจากตารางล่าสุดเสมอ ทำให้เราสามารถ query ข้อมูลล่าสุดจาก view เดิมได้เลย

ตารางใน BigQuery ที่จะเพิ่มขึ้นมาวันละตาราง จึงต้องสร้าง view เพื่อให้ query ข้อมูลล่าสุดได้โดยสะดวก

เริ่มต้น query ข้อมูลตลาดหลักทรัพย์บน BigQuery


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

เรามาเริ่มจากการดูผลรวมของ มูลค่าหลักทรัพย์ตามราคาตลาด ของทุกบริษัทรวมกัน เทียบกันในแต่ละปี จะได้ตัวเลขดังนี้


จะเห็นว่า มูลค่าหลักทรัพย์ตามราคาตลาด รวมทุกบริษัท ในปี 2014 อยู่ที่ 63,000 ล้านบาท และเพิ่มขึ้นเป็น 77,000 ล้านบาทในปี 2015 และลงมาทรงตัวอยู่ที่ระดับ 67,000 ล้านบาท และเพิ่มขึ้นเป็นเกือบ 80,000 ล้านบาทในต้นปีนี้

ต่อมา เรามาสำรวจ 10 บริษัทแรก ที่มี มูลค่าหลักทรัพย์ตามราคาตลาด สูงสุดในปีนี้กันครับ ว่ามีบริษัทอะไรบ้าง


นอกจากตัวอย่างทั้ง 2 query นี้แล้ว เรายังสามารถสำรวจ และวิเคราะห์ข้อมูลในมุมต่างๆ ที่เราสนใจจาก BigQuery ได้ เพียงแค่เขียน query ขึ้นมา โดยไม่ต้องสนใจเรื่องการดูแลรักษาระบบฐานข้อมูลใดๆ การใช้งานขึ้นอยู่กับไอเดีย และมุมมองที่เรามี เพื่อจะหา insight จากข้อมูลและนำมาประกอบการตัดสินใจให้เกิดประโยชน์

ถ้าใครมีไอเดีย อยากให้ผมลอง query ข้อมูลของ SET ในมุมอื่นๆ ดู ก็เสนอเข้ามาได้คับ (เช่น อยากหาบริษัทที่มี P/BV ต่ำสุด เป็นต้น) ส่วนใครที่มีข้อมูลขององค์กร และอยากเอามาวิเคราะห์เพื่อสร้างประโยชน์จากข้อมูลที่มี ก็สามารถติดต่อทีม Data Engineering ได้คับ ที่ google@tangerine.co.th

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเรียกใช้งาน Google Apps Script

ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

ออกแบบระบบให้คุยข้าม module กันได้ ด้วย Pub/Sub