Monday, January 22, 2018

การดึงข้อมูลจาก CSV แล้วนำไปใช้งาน (Week 2)

การดึงข้อมูลจาก CSV
หลังจากที่เราได้ลองใช้ Spreadsheet เพื่อนำมาคำนวณเกรดแล้ว ปัญหาที่เราพบปัญหาในการใช้งาน Spreadsheet คือ ถ้าหากเราไม่ต้องการเห็นเกรดที่เป็นตัวเลข แต่ต้องการเห็นเกรดที่เป็นตัวอักษรเท่านั้น แต่ Spreadsheet นั้นไม่สามารถทำได้ เพราะต้องนำตัวเลขมาคำนวณเลยต้องสร้าง row เพื่อใส่ตัวเลขมาคำนวณ
ดังนั้น เราจึงแก้ปัญหานี้ด้วยการนำไฟล์ CSV มาใช้

ไฟล์ CSV
ไฟล์ CSV คือ ไฟล์ที่มีการจัดรูปแบบโดยซึ่งคั่นข้อมูลด้วยจุลภาค (,)



ซึ่งวิธีที่จะได้ไฟล์ CSV นั้น มีขั้นตอน ดังนี้
1. ไปที่ Spreadsheet จากนั้นเข้าไปที่ ไฟล์ ->  ดาวน์โหลดเป็น -> ค่าที่คั่นด้วยเครื่องหมายจุลภาค (.csv, แผ่นงานปัจจุบัน) จากนั้นบันทึกลงในตัวเครื่องของเรา

ภาพวิธีการดาวน์โหลดไฟล์ CSV


หลังจากที่ได้ไฟล์ CSV มาแล้ว ก็นำมาจัดการเพื่อดึงข้อมูลออกมา แล้วมาคำนวณโดยใช้ใช้งานด้วยวิธีการเขียนโปรแกรม ซึ่งในที่นี่เราจะใช้ภาษา Python ซึ่งได้จัดทำไว้แล้วใน Github



หลังจากนั้นให้ทำโค้ดใน Github มาใช้งานผ่าน Command Line แล้วได้ตามนี้


ซึ่งใน Command Line จะแสดงชื่อวิชา หน่วยกิต เกรด ภาคการเรียน GPA และ GPA สะสม เป็นต้น

สรุป
1. ไฟล์ CSV คือ ไฟลฺ์ข้อมูลที่คั่นด้วย ","
2. เราสามารถดาวน์โหลดไฟล์ CSV ได้จาก Google Spreadsheet ได้
3. เราสามารถใช้ไลบราลี่ csv เพื่ออ่านข้อมูลในไฟลฺ์ CSV
4. เราสามารถใช้ไลบราลี่ sqlite เพื่อจัดการกับ Database ที่เป็น CSV ได้

ปัญหาที่พบ
ทางเทคนิค
1. กลัวว่าเมื่อกลับมาดูโค้ดใหม่แล้วจะ งงกับโค้ดตัวเอง ซึ่งแก้ปัญหาโดยการเขียน Comment และแยกการทำงานเป็น Method
2. กลัวว่าโค้ดเราทำที่อยู่ในเครื่องจะหายไป ซึ่งแก้ไขโดยการลงโค้ดใน Github
อื่นๆ
1. เนื่องจากติดกิจกรรม Comday เลยไม่มีเวลาที่จะทำงาน ซึ่งแก้ปัญหาโดยการ พอถึงวันเสาร์-อาทิตย์ก็รีบเร่งทำงานทันที

ลิ้งก์ที่เกี่ยวข้อง

Thursday, January 11, 2018

เริ่มต้นกับ Database ด้วย Spreadsheet และ GPA (Week1)

ทำความรู้จัก Database
ก่อนที่เราจะเข้าเรื่องอยากแรกที่เราต้องทำความเข้าใจกับ Database ก่อน
Database คือ แหล่งเก็บข้อมูลที่เราสนใจมัน โดยโครงสร้างด้านในมีลักษณะ ดังนี้

ภาพที่ 1 โครงสร้างภายใน database


โดยภายในจะประกอบด้วย
1. Database management system (DBMS) ซึ่งเป็นโปรแกรมที่สร้างหรือจัดการ Database
2. Meta-Data ซึ่งทำหน้าที่ระบุตัวตนของ Database
3. Application program ซึ่งเข้าถึง database ด้วยทำสั่ง query ซึ่งทำให้ดึงข้อมูลมาใช้งานได้
ซึ่งภายใน database นั้นจะเก็บข้อมูลในรูปแบบของตาราง ตามภาพดังกล่าว

รูปแบบการเก็บข้อมูลของ database



โจทย์
จงเก็บเกรดของท่านลงใน Spreadsheet แล้วคำนวณ GPA ออกมาโดยใช้ Spreadsheet ของ Google ที่เก็บใน email.kmutnb.ac.th ของเรา

สิ่งที่ต้องเรียนรู้
จากโจทย์ที่กำหนดให้สิ่งแรกที่สนใจ คือ ตารางเกรดในเว็บไซต์ของมหาวิทยาลัย (http://klogic.kmutnb.ac.th:8080/kris/grade.jsp) แล้วดูว่ามีส่วนประกอบอะไรบ้าง ซึ่งดูได้จากตัวอย่างภาพด้านล่าง
ภาพที่ 2 ตัวอย่างตารางเกรดที่อยู่ในเว็บไซต์ของมหาวิทยาลัย

จากภาพส่วนประกอบมี
1. ชื่อวิชา
2. หน่วยกิตของแต่ละวิชา
3. ตอนเรียน
4. เกรดที่เราได้
5. คะแนนเฉลี่ยประจำภาคนั้นๆ และคะแนนเฉลี่ยสะสมในทุกๆ ภาคการเรียน
6. หน่วยกิตที่ลงประจำภาคนั้นๆ และหน่วยกิตที่ลงสะสมในทุกๆ ภาคการเรียน
7. หน่วยกิตที่ได้ประจำภาคนั้นๆ และหน่วยกิตที่ได้สะสมในทุกๆ ภาคการเรียน ซึ่งแต่ต่างจากหน่วยกิตที่ลงตรงที่หากเราติด F จะไม่นำมารวมด้วย เช่น เราลงเรียนทั้งหมด 19 หน่วยกิต แต่ติด F วิชา 3 หน่วยกิต 3 วิชา หน่วยกิตที่ลงจะมีค่า 19 หน่วย แต่หน่วยกิตที่ได้จะมีค่า 10 หน่วย
8. แต้มระดับคะแนน คือ คะแนนที่เกิดจากนำหน่วยกิตคูณกับเกรดที่ได้ของแต่ละวิชาแล้วนำมารวมกันทั้งหมด
9. สถานภาพ คือ สถานะของนักศึกษา

หลังจากที่เราศึกษาตารางเกรดแล้ว จึงเกิดปัญหาในหัวว่า "เกรดนั้นคำนวณอย่างไร" และ "เราจะคำนวณเกรดใน Spreadsheet ได้อย่างไร"

เกรดนั้นคำนวณอย่างไร
เกรดนั้นจะมี 2 แบบ คือ GPA หรือเกรดเฉลี่ยต่อเทอม และ GPAX หรือเกรดเฉลี่ยสะสม
1. GPA สามารถคำนวณได้โดย
หาแต้มระดับคะแนนที่หาได้จากนำหน่วยกิตมาคูณกับเกรดที่เราได้

แต้มระดับคะแนน = หน่วยกิต x เกรด

เช่น จากภาพที่ 2 ตารางในวิชา 010123102 PROGRAMMING FUNDAMENTALS จะมีหน่วยกิต 3 หน่วย และได้เกรด A ซึ่งหากเทียบเป็นตัวเลข คือ 4 แล้วนำมาคูณกัน


แต้มระดับคะแนน = 3 x 4 = 12 แต้ม

จากนั้นนำแต้มระดับคะแนนของทุกวิชามารวมกันทั้งหมด จากนั้นนำ "หน่วยกิตที่ลง" ทุกวิชามารวม แล้วนำแต้มระดับคะแนนหารกับหน่วยกิต แล้วเอาทศนิยม 2 ตำแหน่งแบบปัดลง (หากได้ GPA 3.89999 ก็นับ 3.89) จึงได้ GPA ออกมา

GPA = แต้มระดับคะแนน / หน่วยกิต

โดยจากภาพที่ 2 หากนำแต้มระดับคะแนนทุกวิชามารวมกันจะได้ทั้งหมด 68.5 คะแนน แล้วนำ "หน่วยกิตที่ลง" ทุกวิชามารวมซึ่งได้ 18 หน่วย แล้วมาคำนวณ จึงได้ GPA เท่ากับ 3.8

GPA = 68.5 / 18 = 3.8

2. GPAX สามารถคำนวณได้โดย
นำแต้มระดับทุกภาคการเรียนมารวมกัน แล้วนำหน่วยกิตทุกภาคการเรียนมาคำนวณ จากนั้นเอาแต้มระดับทุกภาคการเรียนหารกับหน่วยกิตทุกภาคการเรียนซึ่งจะได้ GPAX ออกมา

GPAX = แต้มระดับทุกภาคการเรียน / หน่วยกิตทุกภาคการเรียน

เช่น หากภาคการเรียนที่ 1 ได้แต้มระดับทุกภาคการเรียน 68.5 หน่วยกิตรวม 18 และภาคการเรียนที่ 2 ได้แต้มระดับทุกภาคการเรียน 67 หน่วยกิตรวม 18 หากนำคำนวณ

GPAX = (68.5 + 67) / (18 + 18) = 3.76




หลังจากที่เรารู้วิธีการคิดเกรด ปัญหาต่อไปที่พบเจอคือ เราจะเก็บข้อมูลเกรดของเราอย่างไร ซึ่งในที่นี่เราเลือก Spreadsheet ในการเก็บข้อมูล
Spreadsheet
Spreadsheet คือ โปรแกรมที่ลักษณะเป็นตารางซึ่งสามารถเก็บข้อมูลได้ แล้วนอกจากนี้ยังนำค่าในตารางสามารถคำนวณได้โดยใช้สูตรและฟังก์ชัน
ดังนั้นขั้นตอนการคำนวณ GPA มีดังนี้
1. เก็บข้อมูลเกรดที่เราได้


2. ให้แปลงเกรดที่เป็นตัวอักษรให้กลายเป็นค่า โดยใช้หลักเกณฑ์ ดังนี้
A = 4
B+ = 3.5
B = 3
C+ = 2.5
C = 2
D+ = 1.5
D = 1
F = 0
ซึ่งให้ทำการเพิ่มแทรกคอลัมน์เป็นตารางเก็บเกรดที่เป็นค่า ซึ่งช่องที่สร้างให้ใส่ฟังก์ชัน 

"=IFS(C7="A",4, C7="B+",3.5, C7="B",3, C7="C+",2.5, C7="C",2, C7="D+",1.5, C7="D",1, TRUE,0)"

โดย C7 คือ ช่องที่เก็บค่าเกรดในวิชานั้นแบบตัวอักษร โดยสูตรหมายความจะแปลงตัวอักษรเกรดให้กลายเป็นค่าให้ถูกต้อง เช่น ในวิชา PHYSICS I นั้นได้ A แล้วสูตรจะเปลี่ยน A ให้เป็น 4


3. หาแต้มระดับคะแนน โดยใช้สูตร

"=SUMPRODUCT(B13:B20,D13:D20)"

โดย B13:B20 คือ ตารางของหน่วยกิต และ D13:D20 คือ ตารางของเกรด ซึ่งสูตรนี้ หมายถึง นำค่าหน่วยกิตกับเกรดที่ในแต่ละวิชามาคูณกันแล้วมารวมกันทุกวิชา



4. หาหน่วยกิตที่ลง (ประจำภาค)

"=SUM(B23:B29)

โดย B23:B29 คือ ตารางของหน่วยกิตแต่ละวิชา สูตรนี้หมายถึง รวมหน่วยกิตทุกช่อง

5. หาหน่วยกิตที่ลง (สะสม)

"=SUM(G14,G23)

โดย G14 คือ หน่วยกิตสะสมเดิม และ G23 คือ หน่วยกิตประจำภาค สูตรนี้หมายถึง รวมหน่วยกิตทุกช่อง

6. หาหน่วยกิตที่ได้

"=SUMIF(D23:D29, ">0", B23:B29)

โดย D23:D29 คือ ตารางเกรด และ B23:B29 คือ ตารางหน่วยกิตแต่ละวิชา สูตรนี้หมายถึง หากมีเกรดใดที่ไม่เป็น ซึ่งค่ามากกว่า 0 ก็ให้บวกรวมหน่วยกิตวิชา แต่ถ้าไม่ก็ไม่ต้องบวกหน่วยกิตวิชานั้น

7. หา GPA และ GPAX

"=FLOOR(I24/G24, 0.01)"

โดยให้ I24 คือ แต้มระดับคะแนน และ G24 คือ หน่วยกิตที่ลง ซึ่งสูตรนี้ คือ นำแต้มระดับคะแนนมาหารกับหน่วยกิตที่ลง เพื่อให้ได้ GPA ซึ่งใช้แต้มระดับคะแนนภาคเรียน / หน่วยกิตที่ลงในภาคเรียน และ GPAX ซึ่งใช้แต้มระดับคะแนนสะสม / หน่วยกิตที่ลงสะสม แล้วปัดทศนิยมลง 2 ตำแหน่ง


ข้อสรุป
1. Database คือ แหล่งเก็บข้อมูลที่เราสนใจมัน ซึ่งเก็บอยู่ในรูปของตาราง
2. ชื่อวิชา, หน่วยกิตของแต่ละวิชา, ตอนเรียน, เกรดที่เราได้, คะแนนเฉลี่ยประจำภาค, หน่วยกิตที่ลงประจำภาค, หน่วยกิตที่ได้ประจำภาคม, แต้มระดับคะแนน และสถานภาพ
3. Spreadsheet คือ โปรแกรมที่ลักษณะเป็นตารางซึ่งสามารถเก็บข้อมูลได้เหมือนกับ Database แล้วนอกจากนี้ยังนำค่าในตารางสามารถคำนวณได้โดยใช้สูตรและฟังก์ชัน
4. GPA = ผลรวมของการคูณระหว่างหน่วยกิตแต่ละวิชาและเกรดหารด้วยผลรวมหน่วยกิตที่ลง ส่วน GPAX = แต้มระดับคะแนนทุกภาคการเรียนหารด้วยผลรวมหน่วยกิตที่ลงทุกภาคการเรียน

ปัญหาที่พบ
ทางเทคนิค
1. ไม่รู้วิธีการคำนวณ GPA ซึ่งแก้ไขด้วยการค้นหาใน Google
2. จำ email ของ Blog สมัยเรียน Programming Fundamental ไม่ได้ ซึ่งแก้โดยการใช้ email อื่นแล้วสมัคร Blog ใหม่

ลิ้งก์ที่เกี่ยวข้อง
ตารางเกรดในเว็บไซต์ของมหาวิทยาลัย : http://klogic.kmutnb.ac.th:8080/kris/grade.jsp
วิธีคำนวณเกรดของมหาวิทยาลัย : 

SQL injection (Week 16)

SQL Injection ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่...