Public Data of Event and Covid-19 in 2020

Pollakrit Lorprasertkul
5 min readMay 17, 2021

--

ในบทความนี้ผมจะมาเล่าถึงการใช้งาน Public Data กับการ Predict จำนวนเงินที่ถูกถอนจากตู้ ATM ในวันถัด ๆ ไป

การ Predict จำนวนเงินที่ถูกถอนจากตู้ ATM นั้นมีหลายปัจจัยมาก ไม่ว่าจะเป็น การกดเงิน ATM รายวัน ก่อนหน้า หรือว่า วันที่ที่ถอนเงินนั้น ๆ ข้อมูลพวกนี้อาจไม่เพียงพอสำหรับการ Predict ให้มีประสิทธิภาพสูงสุดเท่าที่ต้องการ

ดังนั้นผมจึงหา Features ใหม่ ๆ นั่นคือ Public Data เพราะว่า Public Data เป็นข้อมูลทั่ว ๆ ไป ที่มีผลให้กับคนทั่ว ๆ ไป และอาจมีผลจำเป็นกับการ Predict ในครั้งนี้

ซึ่งในที่นี้มีผมได้หาข้อมูลหลัก ๆ อยู่ 2 อย่าง คือ

  1. จำนวนการจัดงานในประเทศไทย ปี 2020
  2. จำนวนคนติด Covid-19 ในประเทศไทย ปี 2020

และการนำ Public Data มาใช้ก็ต้องดึงข้อมูลจาก website ต่าง ๆ ซึ่งก็มีหลายวิธีต่าง ๆ โดยวิธีเริ่มต้นเลย ก็คือการ Copy and Paste วิธีนี้นั้นเป็นวิธีที่ง่ายที่สุด แต่คงจะไม่มีใครต้องการทำการ Copy and Paste ข้อมูลที่มีเป็น ร้อย ๆ พัน ๆ หน้าหรอก ดังนั้นแล้ววิธี Web scraping และ Download ข้อมูลทั่วไป จึงเป็นหนึ่งในวิธีที่ใช้ในการดึงข้อมูลครับ

และหลังจากนี้ผมจะมาเล่าคร่าว ๆ ถึงวิธีการดึง Public Data ก็คือ การทำ Web Scraping กับ Download ข้อมูลครับ

Web Scraping คืออะไร

คือวิธีการในการดึงข้อมูลจากหน้าเว็บเพจหรือเว็บไซต์ โดยใช้การ Coding ต่าง ๆ

โดยในที่นี้จะใช้ภาษา Python และใช้ Library ที่มีชื่อว่า requests และ beautifulsoup

ตัวอย่างจาก https://www.thailandexhibition.com/Event-77/PRAM=2020_0_0_0_0

นำข้อมูลพวก ชื่องาน, สถานที่ และ วันจัดแสดงมาใช้ โดยใช้ Library requests และ beautifulsoup มาใช้ในการ scraping ตามที่บอกไปข้างต้น

อย่างเช่น ตัวอย่างจากภาพข้างต้น

วงกลมสีแดง → ข้อมูลที่เราจะดึงมาครับ

วงกลมสีเขียว → ข้อมูลที่เราจะใช้ Library จาก Beautifulsoup ไปดึงมา เพราะว่าคนเราคงไม่มีเวลามาก ในการไป Copy and Paste ทุกสิ่งทุกอย่างใน website ได้ จึงเกิดวิธีนี้ขึ้นมา

Download ข้อมูล คืออะไร

คือการดึงข้อมูลจากเว็บไซต์ต่าง ๆ ด้วย Data มาให้ Download อยู่ล้ว อย่างเช่น โหลดข้อมูล Covid-19 จากเว็บไซต์มา

ตัวอย่างจาก https://data.go.th/dataset/covid-19-daily

โหลด ไฟล์ CSV ของคนที่ติด Covid-19 ใน ปี 2020

จากข้างต้นทุกคน พอได้รู้วิธีการ Web Scraping กับ Download ข้อมูลคร่าว ๆ แล้วนะครับ

หลังจากนี้ผมจะพาทุกคนไปสู่ขั้นตอนที่ดึงข้อมูลพวกนี้ หรือว่า Public Data กันครับ

นั่นก็คือ การจัดงานในประเทศไทย ปี 2020 กับ คนติด Covid-19 ในประเทศไทย ปี 2020 นั่นเองครับ

การจัดงานในประเทศไทย ปี 2020

เริ่มต้นด้วยการหาการจัดงาน Event ปี 2020 ก่อนเลย

โดยในส่วนนี้จะใช้ Web Scraping จาก website https://www.thailandexhibition.com/Event-77/PRAM=2020_0_0_0_0

ซึ่งเป็น website สำหรับข้อมูล Event ต่าง ๆ ในประเทศไทย ปี 2020

ตัวอย่าง Code ส่วนนึงในการทำ Web Scraping

เริ่มจาก import Libraries ต่าง ๆ

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from tqdm.notebook import tqdm
import requests
from bs4 import BeautifulSoup
url = "https://www.thailandexhibition.com/Event-77/PRAM=2020_0_0_0_0&p=9"
content_covid = requests.get(url).content
content_covid = content_covid.decode('utf-8')
soup = BeautifulSoup(content_covid, 'html.parser')

เริ่มทำการแยก ชื่อ, สถานที่ หรือ วันจัดแสดง ต่าง ๆ

title = soup.find_all('div', class_='text')
title[0].text

OUTPUT : ‘สมโภชพระอาราม ๑๙๒ ปี วัดประยุรวงศาวาสวรวิหาร’

cate = soup.find_all('div', class_='cate')
cate[0].text

OUTPUT : ‘มหกรรม/เทศกาล’

venue = soup.find_all('div', class_='venue')
venue[0].text[1:].split('\n')[0]

OUTPUT : ‘วัดประยุรวงศาวาสวรวิหาร’

provice = soup.find_all('div', class_='provice')
provice[0].text[1:-1]

OUTPUT : ‘กรุงเทพมหานคร’

month = ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม']
year = '2563'
date = soup.find_all('div', class_='date')

def clean_date(date):
date = date.text.replace('งานสิ้นสุดเเล้ว ', '')[1:].split('-')

#ds --> date start, de --> date end
if len(date) == 1: # has 1 date
ds = date[0]
de = date[0]
else: # has 2 date ex 1 - 3 มกราคม
ds = date[0][:-1]
de = date[1][1:]

if max([ds.find(m) for m in month]) == -1: # does not have month
month_index = max([de.find(m) for m in month])
ds += ' ' + de[month_index:]

if ds.find(year) == -1: # does not have year
ds += ' ' + year

ds = ds.replace('2563', '2020').replace('2564', '2021')
de = de.replace('2563', '2020').replace('2564', '2021')

# replace name of month to index ;ex มีนาคม --> 3
for idx, m in enumerate(month):
if ds.find(m) != -1:
ms = ds.find(m)
me = ds.find(m)+len(m)
m_name = ds[ms:me]
ds = ds.replace(m_name, str(idx+1))

if de.find(m) != -1:
ms = de.find(m)
me = de.find(m)+len(m)
m_name = de[ms:me]
de = de.replace(m_name, str(idx+1))

ds = pd.to_datetime(ds, format='%d %m %Y')
de = pd.to_datetime(de, format='%d %m %Y')
return ds, de

clean_date(date[0])

OUTPUT : (Timestamp(‘2020–01–11 00:00:00’), Timestamp(‘2020–01–13 00:00:00’))

df_event['event_venue'][0]
loc = nomina.geocode(df_event['event_venue'][0])
loc.latitude, loc.longitude

OUTPUT : (18.7752002, 100.77161940141895)

หลังจาก Scraping ข้อมูลของ Event ปี 2020 แล้วนั้น เราจะได้ข้อมูลจำพวก ชื่อสถานที่, วันที่จัดแสดง, จังหวัด, Latitude, Longtitude เป็นต้นครับ

และผมก็อยากรู้ว่าในแต่ละวันใน ปี 2020 มีการจัดงาน Event เยอะแค่ไหน ผมจึงลองนำจำนวน Event ที่เกิดขึ้นมาลอง Plot ตามวันที่ดู จะได้ดังนี้

กราฟแสดงจำนวน Event แต่ละวันใน ปี 2020

y-axis = จำนวน Event

x-axis = Datetime

Event in 2020

ซึ่งเห็นได้ว่าช่วงต้นปี 2020 มี Event เกิดขึ้นเยอะ แต่ทำไมตั้งแต่ เดือน 3–4 ขึ้นไป จำนวน Event ถึงน้อยลงล่ะ นั้นเราไปดูข้อมูลต่อไปกันเลย

คนติด Covid-19 ในประเทศไทย ปี 2020

จากข้อมูล Event แล้วเนี่ย มีผลกับ Covid-19 ใน ปี 2020 หรือป่าว ก็ต้องรอดูจาก Data ที่ผมกำลังจะทำให้ดูนั่นเองครับ

โดยในส่วนนี้จะใช้ การ Download ข้อมูล จาก website https://data.go.th/dataset/covid-19-daily

ซึ่งเป็น website สำหรับข้อมูล Covid-19 ต่าง ๆ ในประเทศไทย ปี 2020

Library

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Data from https://data.go.th/dataset/covid-19-daily

df_covid = pd.read_csv('../input/covid-th/pm-07-04-64v1.csv')
df_covid['announce_date'] = pd.to_datetime(df_covid['announce_date'], format='%d/%m/%Y')
df_covid
df_prov = pd.pivot_table(df_covid, values='No.', index='announce_date', columns='province_of_isolation', aggfunc='count')
df_prov = df_prov.fillna(0)
df_prov

กราฟแสดงจำนวน Covid-19 แต่ละวันใน ปี 2020

y-axis = จำนวนคนที่ติด Covid-19

x-axis = Datetime

Covid-19 in 2020

Correlation of Event and Covid-19 in 2020

ในช่วงสถานการณ์ Covid-19 ระบาดแบบนี้ และแน่นอนผู้คนก็ไม่กล้าออกจากบ้านเช่นกัน สิ่งนี้อาจจะบอกเป็นนัย ๆ ว่า พอผู้คนไม่กล้าออกจากบ้านแล้ว ผู้คนไปงาน Event ก็น้อย

ดังนั้นผมจึง Plot กราฟ ระหว่าง Event กับ Covid-19 ดูครับ

กราฟแสดงความสัมพันธ์ระหว่าง Event กับ Covid-19 ในปี 2020

y-axis = Value

x-axis = Datetime

Event & Covid-19 in 2020

เส้นสีส้ม → Covid-19

เส้นสีน้ำเงิน → Event

สังเกตได้ว่าในช่วงที่ Covid-19 เริ่มระบาด งาน Event ต่าง ๆ นั้นจะเริ่มลดลงไปเรื่อย ๆ อย่างเห็นได้ชัดตามกราฟข้างต้น

ดังนั้นแล้วผลจากการระบาดของ Covid-19 ก็มีผลกับการจัดงาน Event ด้วยน่ะสิ

Conclusion

การ Scraping หรือ Download ของ Public Data มา อาจเป็นหนึ่งในข้อมูลสำคัญที่สามารถใช้ในงานต่าง ๆ ได้

ตัวอย่างเช่น Event, Covid-19 อาจส่งผลไปยังการใช้เงินของผู้คนในแต่ละวัน และอาจส่งผลไปยังการกดเงินจากตู้ ATM ของแต่ละผู้คนอีกด้วย

Public Data นั้นสามารถหาได้ง่าย ๆ ตาม website ต่าง ๆ โดยการ Scraping หรือ Download นั่นเองครับ

และผมหวังว่า medium นี้จะเป็นประโยชน์ให้กับคนที่ต้องการนำ Public Data มาใช้ในงานต่าง ๆ ไม่ว่าจะเป็นการ predict หรือ forecast เป็นต้น

--

--