15 พฤษภาคม 2560

Published พฤษภาคม 15, 2560 by with 0 comment

ทำนายจำนวนประชากรของไทยด้วย Scikit-learn ใน Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปสร้าง Machine learning ทำนายจำนวนประชากรของไทยด้วย Scikit-learn ในภาษา Python กันครับ

หมายเหตุ !

การทำนายในบทความนี้ เป็นเพียงตัวอย่างที่ผู้เขียนหยิบยกขึ้นมาเพื่อให้เข้าใจการสร้าง Machine learning ด้วย Scikit-learn ใน Python เท่านั้น ซึ่งไม่มีความแม่นยำเท่าไร (ไม่มีการรับประกัน % ความถูกต้องในการทำนาย) เนื่องจากการทำนายจำนวนประชากรต้องมีรายละเอียดปลีกย่อยเข้ามาช่วยคำนวณด้วยมากกว่านี้ แต่ในบทความนี้หยิบยกเพียงข้อมูลจำนวนประชากรมาใช้ในการเขียนบทความนี้

ในบทความนี้เราจะไปสร้าง machine learning ทำนายจำนวนประชากรของไทย แบบง่าย ๆ กันครับ

จากบทความก่อน ๆ Machine Learning ด้วย Scikit-learn ผมพาผู้อ่านใช้ Iris dataset สร้าง Machine learning ด้วย Scikit-learn ใน Python แบบง่าย ๆ แต่ถ้าหากต้องการนำ dataset ที่สร้างเองมาใช้ใน Scikit-learn ต้องทำอย่างไร เราไปลองสร้าง Machine learning จาก dataset ของตัวเองกันครับ

สร้าง dataset ข้อมูลประชากร


เข้าไปที่ http://countrymeters.info/en/Thailand จะเจอ

จะเห็นได้ว่า ข้อมูลมีตั้งแต่ปี ค.ศ.1951 - ค.ศ.2017 โดยข้อมูลจะถูกนับในเดือนมกราคมของปีนั้น
ทำการคัดลอกช่อง Population มา แล้วจับใส่ list ในโค้ด Python

ดูโค้ดได้ที่ https://gist.github.com/wannaphong/2269f8d9a032ab8cd9836890045c0343
มีทั้งหมด 67 บรรทัด

นำเข้า dataset เข้ามาใช้ใน Scikit-learn


เนื่องจากข้อมูลเรียงเป็นปี ในการเอาไปใช้ใน Scikit-learn เราต้องแปลงข้อมูลโดยจัดเรียงตามเวลาต้องใช้ pandas กับ numpy เข้ามาช่วยด้วย และใช้ matplotlib ในการนำเสนอข้อมูลในรูปกราฟ
คำสั่งควรรู้เกี่ยวกับ pandas
pandas.date_range(เวลา,periods=จำนวน,freq=ความถี่)เป็นคำสั่งสำหรับสร้างช่วงเวลาจะได้ไม่ต้องมาไล่พิมพ์ข้อมูลเวลาวันเดือนปี - อ่านเพิ่มเติม http://pandas.pydata.org/pandas-docs/stable/generated/pandas.date_range.html
pandas.DataFrame() ใช้สร้างข้อมูลแต่ละช่วงเวลา - อ่านเพิ่มเติม http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html


ดูโค้ดได้ที่ https://gist.github.com/wannaphong/f4c3ba45981188ed2f4ff9ace749aef3
จำนวนประชากรของไทยตั้งแต่ปี 1951 - ปี 2017 จำนวนประชากรของไทยตั้งแต่ปี 1951 - ปี 2017

เลือก Algorithms ที่ใช้งาน


จาก
ข้อมูลประชากรที่เราเลือก มีข้อมูลมากกว่า 50 ขึ้นไป ไม่ต้องการทำนาย category แต่เราต้องการทำนาย quantity และข้อมูลเราน้อยกว่า 100K และข้อมูลเราสำคัญพอ ๆ กัน  ไม่ใช่ few features should be important สุดท้ายจึงมาตกที่ LinearRegression
from sklearn.linear_model import LinearRegression
model = LinearRegression()

ลงมือทำการทำนายข้อมูลประชากรด้วย Scikit-learn ในภาษา Python

X = data[['date_ordinal']]
y =np.asarray(data['value'])
model.fit(X, y) # ทำการวิเคราะห์

แล้วทำการทำนาย ลองทำนายจำนวนประชากรปี ค.ศ.2018
# ทำนายแบบปีเดียว
time2 = pd.date_range('2018', periods=1)
x= time2.tolist()
x=x[0].toordinal()
print(model.predict(x))

ผลลัพธ์ [ 74384505.71644115]
ทำนายว่าในปี ค.ศ.2018 จำนวนประชากรของไทยจะมีจำนวน 74,384,506 คน

ทำนายแบบหลายปีโดยนำเสนอบนกราฟ

ดูโค้ดได้ที่ https://gist.github.com/wannaphong/f74625ec7e02a0c7ff57169ae7e80d7b
ผลลัพธ์


จากการทำนายแบบไม่ละเอียด จะพบว่าในปี ค.ศ.2028 จำนวนประชากรของไทยน่าจะใกล้ 80 ล้านคน

โค้ดฉบับเต็ม

หากไม่ขึ้น กดดูโค้ดฉบับเต็มได้ที่ https://gist.github.com/wannaphong/e265b8d01e4ed7fe1e3aa6481adeb1a6
ลองนำความรู้ที่ได้ไปประยุกต์กันดูนะครับ

สอน Python

ติดตามบทตวามต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

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

แสดงความคิดเห็นได้ครับ :)