สร้างสมการ Linear Regression จากข้อมูลโรคระบาด Covid อย่างง่ายๆ
วันนี้มาทำความรู้จัก SciPy (อ่านว่า ไซ-พาย) เป็น library ที่ใช้ใน python สำหรับการคำนวณทางวิทยาศาสตร์ ซึ่งมีฟังก์ชันหลากหลายไม่ว่าจะเป็น linear algebra, calculus หรือ optimization โดยวันนี้จะขอนำเสนอ Simple Regression Model โดยใช้ SciPy โดยเราจะใช้ข้อมูลรายวันของ Covid-19 จากhttps://covid19.th-stat.com/ ของกรมควบคุมโรค
จากเหตุผลการระบาดรอบที่ 3 เริ่มต้นจากการพบ Cluster ใหม่ ในสถานบันเทิง ต้นเดือนเมษายน 2564 ทำให้กรมควบคุมโรค เริ่มเผยแพร่ข้อมูลในรูปแบบ API-Json แต่
เนื่องด้วย โครงสร้างของไฟล์ Json ที่ได้จากการอ่านค่าจะ web site รายวัน ในกรณีของ เมนูที่สองคือ ข้อมูลสรุปตามช่วงเวลา จะมีลักษณะ Nested Json กล่าวคือ มีโครงการของ List อยู่ใน List ของ Data อีกชั้น ดังรูป
[หมายเหตุ เปิด ด้วย Firefox browser]
เนื่องด้วยข้อมูลรายวัน ถูกซ้อนอยู่ใน list เดียวกัน ในขั้นต้น เราต้อง อ่านเข้ามาใน Data Frame ก่อน จะได้ ตารางที่มีแถวเดียว แต่ยาว 494 คอลัมน์ ในวันที่ 15 พฤษภาคม 2564 [เริ่มเก็บข้อมูลตั้งแต่ 01/01/2020']
จากนั้นทำการ normalize เพื่อแยกคอลัมน์ ออกจากกัน จะได้คอมลัมน์ ดังต่อไปนี้
‘Date’, ‘NewConfirmed’, ‘NewRecovered’, ‘NewHospitalized’, ‘NewDeaths’,’Confirmed’, ‘Recovered’, ‘Hospitalized’, ‘Deaths’ สิ่งที่เราอยากได้คือ คอลัมน์ชื่อ ‘NewDeaths’ หรือ จำนวนคนการเสียชีวิตประจำวันนั้นๆ เพื่อนำไปวิเคราะห์และสร้างกราฟแนวโน้ม ซึ่งในอนาคต อาจจะใช้ Trend analysis มาช่วย หากข้อมูลมากพอ
[หมายเหตุ เริ่มเก็บข้อมูล รอบ 3 ตั้งแต่วันที่ 1 มกราคม 2564 ]
จะเห็นได้ว่า เราสร้าง ตารางเปล่าๆ เพื่อรอ วนลูป รับข้อมูลรายวันไว้แล้ว ในกรณีนี้เอาแค่ 10 วัน สังเกต df.size-10 ซึ่ง เสร็จจากนี้ เราจะได้ ตาราง Death_table จำนวน สิบวัน ในกรณีนี้ ที่ใช้ Seaborn จะสวยกว่า
ด้วยเหตุที่ ลักษณะข้อมูล เป็นค่าต่อเนื่อง บนแกนเวลา จึงเหมาะสมกับ
การวิเคราะห์การถดถอยอย่างง่าย (Simple Regression Analysis) เป็นการศึกษาความ สัมพันธ์ระหว่างตัวแปร 2 ตัว ที่มีความสัมพันธ์กันในลักษณะเชิงเส้น (Linear) โดยมีสมการถดถอยก็คือ Y = a + bX
จากรูป เริ่มจาก ทำการ แปลง แต่ละ คอลัมน์ ให้เป็น ตัวเลข เพื่อให้สามารถ นำมาวิเคราะห์ ได้ จากนั้น ใช้ scipy library เพื่อสร้าง สมาการ และ กราฟ
สรุปผลการทดลอง
จากสมาการ y=1653.18+58.24(x) มีค่า R Square =0.628 ซึ่ง ไม่สูงพอที่จะใช้ในการทำนาย อาจจะเป็นเพราะว่าจำนวนข้อมูล น้อยเกินไป แต่พอจะเห็นได้ชัดเจนว่า แนวโน้มสูงขึ้นต่อเนื่อง ในช่วง 10 วันนี้
สามารถ ดาวน์โหลด Source Code ได้ที่ https://bit.ly/3xUDg9Q