วันศุกร์ที่ 4 มกราคม พ.ศ. 2562

Week 2 GPA DB by CSV


บทความนี้จะมีความต่อเนื่องจาก บทความที่แล้ว (Week 1) โดยบทความนี้จะกล่าวถึง การ Export CSV จาก Google Speadsheet และนำไปเป็นชุดข้อมูล ที่จะใช้ในโปรแกรมคำนวณเกรด ต่อไป

ขั้นตอนการ Export CSV


แล้วเราก็จะได้ไฟล์ CSV จาก Google Spreadsheet มาโดยข้างในไฟล์จะมีข้อมูลลักษณะนี้


Course Id,Course Name,Year,Semester,Credit,Section,Grade,Grade(Score)
010013001,INTRODUCTION TO ENGINEERING,2559,1,1,1,B,3.0
010123102,PROGRAMMING FUNDAMENTALS,2559,1,3,1,A,4.0
010123130,COMPUTER ENGINEERING EXPLORA,2559,1,1,1,A,4.0
040203111,ENGINEERING MATHEMATICS I,2559,1,3,4,B,3.0
040313005,PHYSICS I,2559,1,3,3,B,3.0
040313006,PHYSICS LABORATORY I,2559,1,1,4,A,4.0

เมื่อได้ไฟล์ที่เราต้องการแล้ว ต่อไปจะเป็นการอธิบายการเขียนโปรแกรมคำนวณเกรดและเก็บข้อมูลจาก CSV

โดยโปรแกรมนี้จะเขียนด้วย ภาษา Python (3) และมีการใช้ Libraries ต่างๆดังนี้


วิธีการติดตั้งโปรแกรม

  1. เปิด Terminal หรือ cmd
  2. ตรวจสอบว่าบนเครื่องได้ติดตั้ง pip (Python Package Installer)ไว้หรือยัง
  3. หากยังไม่ได้ติดตั้งให้ทำตามเอกสารนี้ครับ https://pip.pypa.io/en/latest/installing/
  4. หากติดตั้งแล้วให้ใช้คำสั่งที่ Terminal    =>   "pip install gradedb"
  5. ทดสอบว่า Package ได้ถูกติดตั้งอย่างสมบูรณ์   =>  "pip show gradedb"
        เนื่องจากโปรแกรมนี้ไม่มี GUI (Graphic User Interface) และเป็นแบบ Text-base ทำให้ผมเลือกใช้ Library เข้ามาช่วยในการ Interact กับผู้ใช้งาน โดยเลือกใช้ PyInquirer มาเป็นตัวควบคุมการสั่งทำงานเป็นหลัก โดยผมออกแบบให้ทำงานเป็น CLI มากที่สุด ซึ่งจะต้องเรียกใช้งานโปรแกรมผ่านทาง cmd
หรือ terminal เท่านั้น (เป็นข้อจำกัดของ PyInquirer)

วิธีการเริ่มต้นใช้งาน

  1. เปิด Terminal หรือ cmd
  2. ใช้คำสั่ง   "gradedb" หรือ "gradedb filename.csv" ซึ่ง filename.csv ก็คือ ที่อยู่ของไฟล์ CSV ที่เราเตรียมไว้ใช้งาน

และนี่คือหน้าตาของโปรแกรมตอนเริ่มการทำงาน


เมื่อเริ่มต้นการทำงานก็จะเจอกับเมนูให้เลือกการทำงาน โดยจะมีให้เลือก 6 ตัวเลือก ประกอบไปด้วย
  1. Insert  เป็น Mode การเพิ่มวิชาเรียนเข้าสู่ฐานข้อมูล
  2. Update เป็น Mode การแก้ไขฐานข้อมูลที่มีอยู่
  3. Summary เป็นการแสดงฐานข้อมูลปัจจุบัน
  4. Calculate GPA เป็นการคำนวณเกรดเฉลี่ยทั้งหมดหรือในแต่ละเทอม
  5. Save and Close เป็นการ Save ฐานข้อมูลปัจจุบันลงไปที่ไฟล์ CSV และทำการปิดโปรแกรม
  6. Close เป็นการปิดโปรแกรม

อธิบายการออกแบบระบบของโปรแกรม

        ในส่วนระบบของโปรแกรม ตัวชุดของข้อมูลหรือฐานข้อมูล นั้นจะถูกเก็บอยู่ในรูปแบบของ DataFrame ซึ่งมาจาก pandas โดยเริ่มต้น ข้อมูลจะโหลดเข้ามาในโปรแกรม จากไฟล์ CSV เข้ามาเก็บใน memory ซึ่งภายใน DataFrame นั้นจะมีโครงสร้างที่สะดวกและเข้าใจง่ายในการเก็บข้อมูลที่มีลักษณะเป็นตาราง (Table) ทำให้เราสามารถจัดการกับข้อมูลภายใน DataFrame ได้สะดวกขึ้น

อธิบายการทำงานของแต่ละ Mode

Insert Mode
        เมื่อทำการเลือก Mode นี้แล้วนั้นก็จะพบกับคำถามต่อไป ก็คือคำถามเกี่ยวกับรายละเอียดของวิชาที่เราต้องการที่จะเพิ่ม โดยรายละเอียดที่ต้องการก็จะมีดังนี้
  1. Course Id (รหัสวิชา)
  2. Course Name (ชื่อรายวิชา)
  3. Year (ปีการศึกษา)
  4. Semester (ภาคการศึกษา)
  5. Credit (หน่วยกิต)
  6. Section (ตอนเรียน)
  7. Grade (เกรด)


Update Mode
        เมื่อเลือก Update Mode แล้วก็จะคำถามให้ป้อนเลขหรือลำดับของวิชาในฐานข้อมูลที่ต้องการแก้ไขข้อมูล

และเมื่อเราเลือกวิชาที่ต้องการแล้วก็จะมีคำถามต่อไปขึ้นมา โดยจะมีรายละเอียดเช่นเดียวกับตอนอยู่ใน Insert Mode แต่คำตอบจะถูก fill ด้วยข้อมูลที่มีอยู่แล้วในฐานข้อมูล (Default)



Summary Mode
        สำหรับ Mode เป็นแค่การแสดงฐานข้อมูลปัจจุบันขึ้นมาเท่านั้น



Calculate GPA Mode
        เป็น Mode การคำนวณเกรดเฉลี่ยหรือ GPA โดยสามารถคำนวณได้ทั้งแบบสะสมหรือแบบประจำภาค และเมื่อเข้าสู่ Mode นี้ก็จะเจอตัวเลือกว่าต้องการจะคำนวณเกรดของเทอมไหน


        ในส่วนของการคำนวณนั้น เนื่องจากโปรแกรมนี้มีวิธีการเก็บข้อมูลแบบ DataFrame ทำให้เราสามารถนำบางส่วนของข้อมูลทั้งหมด เช่น Column ของหน่วยกิต กับ Column ของเกรด(แต้ม) มาทำการคำนวณได้ โดยสูตรพื้นฐานการคำนวณเกรดเฉลี่ยนั้นก็คือ   
        ผลรวมของผลคูณระหว่างแต้มคะแนนและหน่วยกิต / ผลรวมของหน่วยกิต
โดยเมื่อเลือกเทอมที่ต้องการแล้วก็จะมีตัวเลือกให้เลือก ระหว่าง คำนวณแบบสะสม (Cumulative) หรือคำนวณแบบประจำภาค (Semester)



        หากเป็นการคำนวณเกรดเฉลี่ยแบบสะสม จะเป็นคำนวณที่เริ่มตั้งแต่เทอมแรกจนถึงเทอมที่เลือก เช่นหากต้องการที่จะคำนวณแบบสะสมใน ภาคการศึกษาที่ 2560 ภาคการศึกษาที่ 1 โปรแกรมจะต้องเริ่มหาผลรวมตั้งแต่ ภาคการศึกษาที่ 2559 ภาคการศึกษาที่ 1 จนถึง ภาคการศึกษาที่ 2560 ภาคการศึกษาที่ 1
        แต่ถ้าหากเป็นการคำนวณเกรดเฉลี่ยแบบประจำภาค จะสามารถคำนวณโดยทำการ filter ฐานข้อมูลก่อนเป็นลำดับแรกโดยจะ filter จาก ปีการศึกษา และ ภาคการศึกษาที่ต้องการ


Save and Close
        เป็นการบันทึกฐานข้อมูลที่อยู่ใน Memory ลงไปในไฟล์ CSV เพื่อให้ครั้งต่อไปที่เปิดโปรแกรมก็จะข้อมูลที่เป็นปัจจุบันหลังจากที่ได้แก้ไขไปแล้ว แล้วทำการปิดโปรแกรม

Close
        เป็นการปิดโปรแกรมโดยที่ไม่บันทึกข้อมูลปัจจุบัน

Source Code ของโปรแกรมสามารถดูได้ที่
GitHub
Bitbucket



ไม่มีความคิดเห็น:

แสดงความคิดเห็น