เกิดปัญหาในเรื่องของ unicode error ซึ่งเจอตอนเปิดไฟล์ csv ด้วยการใช้คำสั่ง open
with open('score.csv', newline='',encoding='utf8')
โดยวิธีการแก้ก็คือการใช้ encoding ='utf8' เพื่อใช้ในการ decode แต่ตอนที่พบปัญหานั้นไม่ได้บันทึกรูปมาให้ดูครับ
วันอังคารที่ 23 มกราคม พ.ศ. 2561
ปัญหาที่พบ(ต่อ)
ในการทำงานได้พบปัญหาเพิ่มเติม ในเรื่องของการ merge cell แล้วทำให้ คอลัมน์ในแต่ละแถวนั้นไม่เท่ากันเลยแก้ปัญหาเลยการย้ายคอลัมน์หน่วยกิตที่ลงทั้งหมด ไปไว้ข้างหน้าแทน แล้วใช้เรื่องของคุณสมบัติ string ในการตัดเอาเฉพาะตัวหลังออกมาก็จะได้เกรด
ปล. จากปัญหาที่ผ่านมาทั้งหมดทำให้รู้ว่าการออกแบบ Database นั้นสำคัญมาก ถ้าออกแบบไม่ดีนั้น การเก็บข้อมูลไม่เป็นระเบียบจะก่อเกิดปัญหาภายในอนาคตได้
ปัญหาที่พบ
ในไฟล์ CSV ตัวล่าสุดที่ได้ทำการแก้ไขนั้น มีปัญหาในเรื่องของการจับข้อมูลในแต่คอลัมน์ จึงได้ลองแก้ไขตัวไฟล์ CSV ให้มีคอมลัมน์ที่น้อยลง โดยจะให้เหลือเพียง
1. ปีการศึกษา
2. หน่วยกิต
3. เกรดที่ได้
4.หน่วยกิตทั้งหมด
1. ปีการศึกษา
2. หน่วยกิต
3. เกรดที่ได้
4.หน่วยกิตทั้งหมด
ซึ่งทำให้มีความสะดวกต่อการนำค่าแต่ละตัวไปคำนวณเกรดต่อไปได้ แต่จะไม่สามารถแสดงชื่อของวิชานั้นได้
Export to .csv file
ในสัปดาห์การเรียนในสัปดาห์ที่ 2 นั้น อ.SPN ได้ให้ทดลอง export CSV format หรือ ก็คือให้ดาวน์โหลดตัวข้อมูลเกรดที่ได้ทำใน spreadsheet ครั้งที่แล้วให้มาเป็นไฟล์ CSV เพื่อที่จะนำไปใช้ในการเขียนโปรแกรม Python เพื่อทำการคำนวณเกรด
โดยหลังจากที่ได้ทดลองดาวน์โหลดมาแล้วผลที่ได้ก็คือ ไฟล์ csv ดังภาพ
ไฟล์ csv ดังกล่าวนั้นไม่เหมาะแกการจะนำไปใช้ในการเก็บข้อมูลคำนวณเกรด เพราะมีคอลัมน์บางคอลัมน์ที่ไม่จำเป็น ผมเลยทำการแก้ spread sheet และ เอาเฉพาะข้อมูลที่จำเป็นมาเท่านั้นได้แก่
1. ภาคการเรียน
2. ชื่อวิชา
3. หน่วยกิต
4. ตอนเรียน
5. เกรด(ABC)
6. เกรด(ตัวเลข)
7. หน่วยกิตที่ลง
โดยหลังจากแก้เสร็จได้ทำการ export ผลที่ได้คือ
วันอังคารที่ 16 มกราคม พ.ศ. 2561
Score and Grade
จากสไลด์ของอาจารย์ SPN ได้กำหนดไว้ว่า ให้นศ.ทุกคนลองใช้ spreadsheet เพื่อทำการคำนวณ GPA ของนศ. แต่ละคนออกมา
โดยอาจารย์ SPN ได้กำหนดให้ลองใช้ spreadsheet ของตัว Google
โดยผมได้จัดทำ spreadsheet และทำตามที่อาจารย์ SPN ได้กำหนดไว้ โดยใช้วิธีในการทำแบบพื้นฐาน ไม่ได้ซับซ้อนอะไร
ในตัวงานนั้นจะเป็น spreadsheet ซึ่งจะมีส่วนประกอบเป็นตารางมีคอลัมน์ มีแถว ในการอธิบายนั้นผมจะขออธิบายตามคอลัมน์ต่างๆ ซึ่งจะเป็นการเก็บข้อมูลหลายๆข้อมูลของแต่ละวิชา
ในส่วนของคะแนน และ รายชื่อวิชาต่างๆนั้นนำมาจากเว็บทะเบียนของมหาลัยเพื่อใช้ในการอ้างอิง เพื่อตรวจสอบความถูกต้องของ เกรด และ คะแนน
Column(หลัก)
1. ปีการศึกษา
2. รายชื่อวิชา
3. หน่วยกิตกับตอนเรียน
4. เกรด
ในส่วนนี้จะมีการแปลงเกรดจากที่เป็นตัวอักษรภาษาอังกฤษมาเป็นตัวเลข โดยใช้เงื่อนไข if ของ excel ดังนี้
=IF(E2="A",4,IF(E2="B+",3.5,IF(E2="B",3,IF(E2="C+",2.5,IF(E2="C",2,IF(E2="D+",1.5,IF(E2="D",1,0)))))))
ถ้าหากช่อง E2(คอลัมน์เกรดที่เป็นตัวอักษร) ตรงกับเงื่อนไขใดก็จะแปลงเป็นตัวเลขแล้วใส่ในช่อง F2(คอลัมน์เกรดที่แปลงเป็นตัวเลข)
คอลัมน์เกรด*หน่วยกิต ไว้สำหรับใช้ในการคำนวณเกรดโดยจะมีสูตรการคิดเกรดเฉลี่ยนรวมก็คือ นำเอาเกรด*หน่วยกิตของแต่ละวิชาแล้วจับมาหาผมรวม แล้วหารด้วยหน่วยกิตทั้งหมด
เกรดเฉลี่ย = ผลรวมทุกวิชาของ(หน่วยกิตของวิชา*เกรดที่ได้)/หน่วยกิตทั้งหมด
5. หน่วยกิตทั้งหมด
หน่วยกิตที่ลงทั้งหมดในปีการศึกษานั้นบวกกัน
6. เกรดเฉลี่ยประจำเทอมและสะสม
คิดได้จากสูตรในข้อที่ 4. หรือ ก็คือนำหน่วยกิตแต่ละวิชามาคูณกับเกรดที่ได้และจับหาผลรวมของทุกๆวิชา และหารด้วยหน่วยกิตทั้งหมดที่ลงจะได้ เกรดเฉลี่ยประจำเทอม ส่วนเกรดเฉลี่ยสะสมจะเอาทุกเกรดที่มีอยู่มารวมกันแล้วหารด้วยจำปีการศึกษาทั้งหมด
ผลลัพธ์
ซึ่งหากนำไปเทียบกับที่ทางมหาลัยเป็นคนคิดนั้นผลก็คือตรงตามที่ได้ทดลองทำเอง
ลิงค์ตัว spreadsheet (เฉพาะคนที่มี email.kmutnb.ac.th)
https://docs.google.com/spreadsheets/d/1VFGInmjTyW_7J7lmtUqRIx4mPTrOZqFtrummn2UrhL4/edit?usp=sharing
Database System
หลังจากโพสต์นี้เป็นต้นไปจะเป็นโพสต์ที่เกี่ยวข้องกับวิชา Database System ประจำปีการศึกษา 2/2560
วันเสาร์ที่ 8 กรกฎาคม พ.ศ. 2560
Functional Test
ในการ test แบบ functional test จะขออธิบายไล่ถ้าได้ test อะไรบ้าง จะไม่ได้อธิบายเป็น commit ต้องขออภัยด้วย เพราะว่าตอนทดลองทำ test ได้ทำแล้วก็แก้ แล้วก็ทำต่อเลยไม่ได้ทำการ commit
เป็น method เรียกใช้ตัวเองในการกำหนด browser ที่จะใช้ในการ test ในกรณีนี้จะเป็น firefox และจะมีการเรียกใช้ method create_test_date() เพื่อใช้ในการสร้างข้อมูลเพื่อใช้ในการ test
เหตุผลที่จะต้องมีการสร้างข้อมูลก่อนเทสนั้นก็เพราะว่า web app ตัวนี้จะเป็น web app ที่ใช้ในการสุ่ม รายชื่ออาหารซึ่งเป็นข้อมูลใน Database ซึ่งมันจะต้องมีข้อมูลเพื่อใช้ในการสุ่ม แต่ว่าในการ test นั้นเราจะใช้ Database จำลองซึ่งจะไม่มีข้อมูล และ สามารถใส่ข้อมูลจากการ test ได้ โดยไม่ไปกระทบกับตัวข้อมูล ของ Database ที่ใช้งานอยู่จริงๆ
Method tearDown จะเป็น method เรียกใช้ตัวเอง เพื่อใช้ในการปิด browser หลังจากที่ได้ทำการ test เสร็จแล้ว
Method create_test_data() จะทำการสร้างข้อมูลลงไปใน Database จำลองเพื่อใช้ในการทดลองสุ่มอาหาร ซึ่งจะใส่ไว้แค่ตัวเดียว เพื่อที่จะดูว่ามีการแสดงผลที่ถูกต้องหรือไม่
ในการ test จะ test ตาม user story ที่ได้เขียนเอาไว้ โดย ตอนแรกจะทำการค้นหา title ของ web page ก่อน หลังจากนั้น ก็จะทำการกด ปุ่มโดยค้นหา element โดยใช้ id ว่า button_box โดยจะถูกกำหนดไว้ตอนเขียน web app หลังจากนั้นจะใช้คำสั่ง click() เพื่อทำการคลิกปุ่มแล้วก็จะ check หา id ที่เป็น choice หรือ ก็คือ เหล่าตัวเลือกหมวดอาหาร
พอค้นหาเจอแล้วก็จะใช้คำสั่ง click เช่นเดิม แล้วก็จะหา id submit ซึ่งจะเป็นปุ่มกด submit นั้นเอง แต่วิธีกดจะไม่เหมือนเดิมเพราะจะใช้การ send_keys(Keys.ENTER) หรือ ก็คือสั่งให้กด Enter นั้นเอง ก็จะไปหน้าผลลัพธ์ แล้วก็ จะค้างไว้ 5 วินาทีเพื่อดูผล แล้วหน้าต่างจะปิดลง แล้วขึ้น Finish the test! ไว้ที่หน้าต่าง terminal
เป็น method เรียกใช้ตัวเองในการกำหนด browser ที่จะใช้ในการ test ในกรณีนี้จะเป็น firefox และจะมีการเรียกใช้ method create_test_date() เพื่อใช้ในการสร้างข้อมูลเพื่อใช้ในการ test
เหตุผลที่จะต้องมีการสร้างข้อมูลก่อนเทสนั้นก็เพราะว่า web app ตัวนี้จะเป็น web app ที่ใช้ในการสุ่ม รายชื่ออาหารซึ่งเป็นข้อมูลใน Database ซึ่งมันจะต้องมีข้อมูลเพื่อใช้ในการสุ่ม แต่ว่าในการ test นั้นเราจะใช้ Database จำลองซึ่งจะไม่มีข้อมูล และ สามารถใส่ข้อมูลจากการ test ได้ โดยไม่ไปกระทบกับตัวข้อมูล ของ Database ที่ใช้งานอยู่จริงๆ
Method tearDown จะเป็น method เรียกใช้ตัวเอง เพื่อใช้ในการปิด browser หลังจากที่ได้ทำการ test เสร็จแล้ว
Method create_test_data() จะทำการสร้างข้อมูลลงไปใน Database จำลองเพื่อใช้ในการทดลองสุ่มอาหาร ซึ่งจะใส่ไว้แค่ตัวเดียว เพื่อที่จะดูว่ามีการแสดงผลที่ถูกต้องหรือไม่
ในการ test จะ test ตาม user story ที่ได้เขียนเอาไว้ โดย ตอนแรกจะทำการค้นหา title ของ web page ก่อน หลังจากนั้น ก็จะทำการกด ปุ่มโดยค้นหา element โดยใช้ id ว่า button_box โดยจะถูกกำหนดไว้ตอนเขียน web app หลังจากนั้นจะใช้คำสั่ง click() เพื่อทำการคลิกปุ่มแล้วก็จะ check หา id ที่เป็น choice หรือ ก็คือ เหล่าตัวเลือกหมวดอาหาร
พอค้นหาเจอแล้วก็จะใช้คำสั่ง click เช่นเดิม แล้วก็จะหา id submit ซึ่งจะเป็นปุ่มกด submit นั้นเอง แต่วิธีกดจะไม่เหมือนเดิมเพราะจะใช้การ send_keys(Keys.ENTER) หรือ ก็คือสั่งให้กด Enter นั้นเอง ก็จะไปหน้าผลลัพธ์ แล้วก็ จะค้างไว้ 5 วินาทีเพื่อดูผล แล้วหน้าต่างจะปิดลง แล้วขึ้น Finish the test! ไว้ที่หน้าต่าง terminal
สมัครสมาชิก:
บทความ (Atom)