ในภาวะที่อากาศเปลี่ยนแปลงบ่อย วันหนึ่งมี 3 ฤดูก็เป็นได้ เช้าหนาว บ่ายร้อน เย็นฝนตก กลางคืนตกหนักกว่าเดิม จนตอนเช้า อ้าวเห้ย!! ไม่เหมือนที่คุยกันไว้นี่หว่า!! น้ำท่วมซะงั้น ซึ่งในหลายๆปีที่ผ่านมาก็ได้เกิดเหตุการณ์เช่นนี้บ่อยครั้ง ทั้งในประเทศและต่างประเทศ หน่วยงานหลายหน่วยงานก็ได้มีการแจ้งเตือนปริมาณน้ำฝนที่จะตกในแต่ละพื้นที่ มีการแจ้งเตือนให้ป้องกัน ให้หลีกเลี่ยงเส้นทางน้ำท่วมต่างๆ แต่ในบางครั้งเราก็ไม่ทันได้ทราบข่าวได้ติดตาม ฝนตกลงมาหนัก น้ำก็ท่วมละสิ (ถ้าไม่เรียกน้ำท่วมก็ เรียก น้ำรอการระบาย ก็ได้นะ 555+ ก็รอระบายออกจริงๆ หนิ )
ถ้าเราสามารถคาดการณ์ปริมาณน้ำที่จะท่วมได้ละ มันจะดีมั้ย ก็เรามีข้อมูลของปริมาณน้ำ และ ปริมาณน้ำฝน จากกรมอุตินิยมวิทยาบ้านเรานี่เอง แต่ไม่ใช่ว่าเรารู้ ข้อมูลเหล่านี้จะบอกได้เลยว่า วันนี้ฝนจะตกหนัก วันนี้น้ำจะท่วม เราต้องมีเครื่องมือเข้ามาช่วย นั้นคือ นั่นคือ นั่นคือ (ยัง ยัง จะเล่นอีก 555+) R แล้ว R คืออะไร ติดตั้งยังได้ มาเริ่มกันเลยดีกว่า
R คืออะไร?
R เป็นภาษาทางโปรแกรมเมอร์ ทาง Data Scientist หลายคนที่เรียนมาในสาย statistic หรือ mathematic อาจเคยได้เรียน ได้ยิน ได้ลองจับมาวิเคราะห์ข้อมูลกันบ้าง R นั่นมีประโยชน์มาในการวิเคราะห์ข้อมูล ทำการพยากรณ์ และอื่นๆ อีกหลายอย่างที่เกี่ยวข้องกับเหล่าข้อมูลปริมาณเยอะๆ ที่มองด้วยตาก็ตาลายกันไปข้างหนึ่ง
R พยากรณ์ (มาอย่างกับหมอดูพยากรณ์) ได้อย่างไร?
เราก็จะใช้วิธีการทางสถิติ มาใช้เพื่อหารูปแบบพยากรณ์ของเรา ซึ่งจะต้องใช้ค่าของตัวแปรต่างๆที่มีความเกี่ยวข้องกัน (อ่านแล้วยัง งง มาดูตัวอย่างกันก่อน) เช่น เราต้องการหาราคาของบ้าน ตัวแปรที่จะส่งผลต่อราคาของบ้าน ได้แก่ ขนาด จำนวนห้อง ระยะทางใกล้/ไกลจากตัวเมือง ฯลฯ เป็นต้น
เมื่อเรารู้ตัวแปรเหล่านี้ก็สามารถนำมาหารูปแบบหรือโมเดลที่เหมาะสมในค่าของข้อมูลที่เราต้องการได้
เริ่มติดตั้ง R ละกัน
- เริ่มแรกดาวน์โหลด และติดตั้ง https://www.rstudio.com/ ซึ่งเป็นเครื่องมือในการเขียนพร้อมรันกราฟ หรือใครจะใช้ command line โค้ดพร้อมรันเลยก็ได้ (ซึ่งในตัวอย่างต่อไปเราจะรันโดยใช้ command line นี่แหละ)
- โหลดตัวย่างข้อมูลกันก่อน https://raw.githubusercontent.com/davidsalgado/BlogSamples/master/FirstPredictiveModelWithR/RentalFeatures.txt ข้อมูลตัวอย่างนี้จะแสดงข้อมูลเป็นรายปี
มาเริ่มเขียนพยาการณ์กันเลย เอ้ย!! พยากรณ์ เอ้ย!! ถูกแล้ว
ทดสอบ R ใน command line สักหน่อย
โอเคผ่าน มาเริ่มเขียนโค้ดได้
#ทำการอ่านข้อมูลจากไฟล์ตัวอย่าง RentalFeatures.txt ลงตัวแปร mydata
>mydata = read.table(“~/RentalFeatures.txt”, header=TRUE)
#ทำการกำหนดให้คอลัมน์แรกชื่อ Year
> colnames(mydata)[1] <- “Year”
# ปริ้นข้อมูลมาดูซักหน่อย
> head(mydata)
#สร้าง field ชื่อ FHoliday, FSnow และ FWeekDay
> mydata$FHoliday = factor(mydata$Holiday)
> mydata$FSnow = factor(mydata$Snow)
> mydata$FWeekDay = factor(mydata$WeekDay)
#สร้างตัวแปร train_data โดยเลือกปีที่ น้อยกว่า 2015
> train_data = mydata[mydata$Year < 2015,]
#สร้างตัวแปร test_data โดยเลือกปีที่ 2015
> test_data = mydata[mydata$Year == 2015,]
#สร้างตัวแปร test_counts โดยมาจากคอลัมน์ RentalCount ของ test_data
> test_counts <- test_data$RentalCount
รันโค้ดจากตัวอย่าง
ก่อนที่จะทำโมเดลพยากรณ์ มาลอง plot กราฟดู กันก่อน
> plot(mydata$Snow, mydata$RentalCount)
> plot(factor(mydata$Snow), mydata$RentalCount)
> plot(factor(mydata$WeekDay), mydata$RentalCount)
> plot(ISOdate(mydata$Year, mydata$Month, mydata$Day), mydata$RentalCount)
อาจงง ว่า ทำไมกราฟแต่ละกราฟออกมาเป็นรูปแบบที่ไม่เหมือนกันนั้นก็ขึ้นอยู่กับ ประเภทของข้อมูลซึ่งกราฟที่ถูกจัดเป็นกลุ่มๆ ก็จะใช้ คำสั่ง factor เพื่อแยกข้อมูลแต่ละแถวเป็นกลุ่ม
ทีนี้และทีนี้และก็ทีนี้ (จะเยอะไปไหน 555+)
สร้างโมเดลจากค่าตัวแปรที่เรามี let GO!!!
# lm (linear regression algorithm) เพื่อสร้างโมเดลจาก ค่าตัวแปรต่างๆที่เรามีอยู่
> model=lm(RentalCount ~ Month + Day + FWeekDay + FSnow + FHoliday, train_data,)
# predict ฟังก์ชันที่ใช้สำหรับ พยากรณ์ ซึ่งสามารถเลือกใช้ได้จาก R
> p = predict(model, test_data)
# สร้างโมเดลแล้วก็ปริ้นกราฟมาดูได้เลย
> plot(p – test_counts)
เห็นกราฟที่ปริ้นมา งง รึเปล่า? กราฟทำการ plot ตามค่าพยากรณ์ ที่ได้จาก โมเดลของฟังก์ชัน lm ซึ่งอาจดูยากได้ซักหน่อยแต่เดี๋ยวเราจะมา ใช้ predict แสดงค่าพยากรณ์แต่ละวันออกมา
อีกฟังก์ชันหนึ่งในการสร้างโมเดลพยากรณ์ rpath มาลองดูกัน
# เพิ่ม lib rpath มาก่อนเลย
> library(rpart)
# สร้างโมเดลจาก ฟังก์ชัน rpath
> model=rpart(RentalCount ~ Month + Day + FWeekDay + FSnow + FHoliday, train_data,)
# ลองปริ้นกราฟมาดูกัน
> p = predict(model, test_data)
> plot(p – test_counts)
จากกราฟทั้ง 2 ที่ใช้ฟังก์ชันการสร้างโมเดล lm และ rpath จะเห็นว่าทั้ง คู่สามารถพยากรณ์ออกมาได้ใกล้เคียงกัน แต่จะ lm จะค่อยมีการกระจายของมูลที่มากกว่า rpath แล้วแต่ว่าเราจะเลือกใช้ฟังก์ชันไหนในการสร้างโมเดล
ทีนี้ก็หลังจากดูกราฟแล้วลองมาปริ้นเป็นค่าตามวันที่เราต้องการเลยดีกว่า
ใช้โมเดลจาก lm
> predict(model, data.frame(Month = 1, Day = 1, FWeekDay = factor(7), FSnow = factor(1), FHoliday = factor(0)))
#หาค่าพยากรณ์วันที่ 7 ของสัปดาห์ นั่นคือวันอาทิตย์
ได้ค่า 475.4587
ใช้โมเดลจาก rpath
> predict(model, data.frame(Month = 1, Day = 1, FWeekDay = factor(7), FSnow = factor(1), FHoliday = factor(0)))
ได้ค่า 645.7059
จากทั้งหมดนี้เราก็สามารถ ทำโมเดลการพยากรณ์ค่าต่างๆ ที่เราต้องการจากข้อมูลย้อนหลังได้โดยอาจมีการเปลี่ยนแปลงค่าข้อมูล ตามแต่เราสนในได้เลย จะทำการพยากรณ์ น้ำท่วม ฝนตก แดดออกก็ได้ (แดดออกนี่ไม่น่าใช่ 555+ เผื่อข้อมูลหลายๆ แบบ)
สำหรับบล็อกนี้ก็มีการอธิบายเพียงเท่านี้ เจอกันในบล็อกต่อๆไป 😀
. . . . . . . . . . .
หากว่าคุณกำลังสนใจการสร้างโมเดลพยากรณ์ หรือทำงานอื่นๆ ที่เกี่ยวกับ Big Data, ทีม บานาน่าโคดดิ้ง ของเรา มีทีมงานผู้เชี่ยวชาญที่จะช่วยให้งานของคุณสำเร็จได้อย่างสมบูรณ์ สามารถดูรายอะเอียดได้ที่ BananaCoding.com/big-data