ใครไม่มี ThaiME: กว่าจะได้วิเคราะห์ “ข้อมูลเปิด” ของรัฐไทย

NESDC เปิดให้ประชาชนทั่วไปสามารถเข้าถึงข้อมูลโครงการและงบประมาณที่ถูกนำเสนอภายใต้พรก.กู้เงินเพื่อเยียวยา COVID-19 คำว่า “เปิด” ก็คือดาวน์โหลดเป็น csvไม่ได้อยู่ แต่ให้นั่งเปิดเว็บไซต์ AJAX ล้ำๆดูทีละหน้าเป็นจำนวน 2,248 หน้ารวมทั้งสิ้น 33,716 โครงการเอาเอง (สถานการณ์ ณ วันที่ 2020–06–12)

ทุกปัญหาแก้ได้ด้วยเทคโนโลยี เราสามารถทำการ scrape ข้อมูล ThaiME เท่าที่มีอยู่ได้ง่ายๆดังต่อไปนี้:

rows=[]
for chunk in tqdm.tqdm_notebook(range(12)):
url = f'http://nscr.nesdb.go.th/wp-admin/admin-ajax.php?action=wp_ajax_ninja_tables_public_action&table_id=11868&target_action=get-all-data&default_sorting=old_first&skip_rows=0&limit_rows=0&chunk_number={chunk}'
with requests.get(url) as r:
content = eval(r.content)
rows+=[i['value'] for i in content]
thaime = pd.DataFrame(rows).iloc[:-3,:]
thaime.columns = ['id','plan_nb','project_name',
'budget','unit','ministry','province','created_date','details_url']
thaime.to_csv('data/thaime_raw.csv',index=False)

วิบากกรรมยังไม่จบสิ้น ข้อมูลทั้งหมด 33,716 แถว (พูดให้ถูกคือ 33,719 แถวแต่สามแถวสุดท้ายดูไม่ใช่โครงการจริง) ถูกจัดเตรียมโดยใช้หลักการ machine unreadable อย่างแท้จริง กล่าวคือวิเคราะห์อะไรด้วยคอมพิวเตอร์ไม่ได้เลย

สะกดผิด, สะกดไม่เหมือนกัน, ตัวเลขเป็นตัวหนังสือ, escape character เรี่ยราด

ก่อนที่เราจะสามารถวิเคราะห์ว่ามีโครงการอะไร-จากหน่วยงานไหน-เป็นเงินเท่าไหร่ เราต้องจัดการชุดข้อมูลให้เรียบร้อยก่อนดังต่อไปนี้

  1. เปลี่ยน budget ให้เป็นตัวเลข มี 4 โครงการที่ไม่มีตัวเลข (รอจัดสรรจากกระทรวง, รอเป้าหมายและงบประมาณจากส่วนกลาง, ฯลฯ)
  2. ทำความสะอาดตัวอักษร \ , nan , - , \n
  3. เปลี่ยนวันที่ให้เป็นสากล เช่น 2020–06–05
  4. ดึง URL ออกจาก html tag

หลายท่านอาจจะคิดว่าเราคิดเล็กคิดน้อยเหลือเกิน แต่สิ่งเหล่านี้คือวิบากกรรมแห่งการวิเคราะห์ข้อมูลโดยแท้ ยกตัวอย่างเช่นการไม่เปลี่ยน budget เป็นตัวเลขส่งผลให้แม้แต่ในเว็บไซต์ของ ThaiME หากคุณอยากรู้ว่าโครงการไหนมีงบประมาณเยอะที่สุดคุณกดเรียงจากมากไปน้อยจะได้แบบนี้

9 ก็ต้องมาก่อน 1 สิ ขอบคุณมาก

ความท้าทายในอีกระดับคือชื่อกระทรวงและหน่วยรับงบประมาณ (ministry และ unit ) หนึ่งชื่อสามารถเขียนได้หลากหลายแบบ เช่น

ตัวอย่าง: ชื่อกระทรวงสะกดหลากหลาย
ตัวอย่าง: ชื่อหน่วยงานยิ่งแล้วใหญ่

แทบเป็นไปไม่ได้เลยที่เราจะวิเคราะห์ว่ากระทรวงหรือหน่วยงานไหนเสนอโครงการเป็นงบประมาณเท่าไหร่หากเราไม่จัดการกับ “ชื่อหลากหลาย” เหล่านี้

เราทำความสะอาดข้อมูลที่ได้มาเท่าที่ทำได้ แต่ก็ยังมีบางอย่างที่ไม่สามารถทำอะไรได้จริงๆคือ จังหวัด (province ) ซึ่งเข้าใจว่าคือพื้นที่โครงการ มีตั้งแต่เป็นชื่อจังหวัดใดจังหวัดหนึ่ง, X จังหวัดภาค Y, ทุกจังหวัด และบางสถานที่ที่มองยังไงก็ไม่น่าใช่จังหวัด

ตัวอย่างข้อมูลใน “จังหวัด”

นี่ถือเป็นปัญหาที่รุนแรงที่สุดของชุดข้อมูลนี้ เห็นได้ว่าแม้แต่ ThaiME เองก็ไม่สามารถแสดงผลงบหรือจำนวนโครงการในรูปแบบแผนที่ได้เนื่องจากความผิดพลาดของการลงข้อมูล

มุกดาหารมีถึง 1,682 แต่กลับไม่สามารถแสดงผลได้

ข้อมูลอีกประเภทหนึ่งที่น่าเสียดายสำหรับชุดข้อมูล ThaiME นี้คือรายละเอียดของแต่ละโครงการที่ถูกเก็บไว้ใน Google Drive พร้อม URL ให้ไปดาวน์โหลดเอาเอง (ไม่แน่ใจว่าผิดข้อตกลงการใช้งานไหม) ทั้งๆที่สามารถใส่เป็นส่วนหนึ่งของข้อมูลที่เครื่องอ่านได้ดังเช่นข้อมูลอื่นๆ

พิมพ์ด้วยคอม-ปริ้นท์ออกมา-แสกนเป็น PDF-แล้วอัพโหลดอีกที

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

  1. กำหนด format ของข้อมูลที่ต้องการให้ชัดเจน เช่น งบประมาณต้องใส่เป็นตัวเลขเท่านั้น
  2. หลีกเลี่ยงการใช้ free text เท่าที่จะทำได้ เช่น ชื่อกระทรวง, หน่วยงาน และจังหวัด ควรให้เลือกจากตัวเลือกที่กำหนดขึ้น (อาจจะเลือกมากกว่าหนึ่งตัวเลือกก็ได้)
  3. หลีกเลี่ยงการเก็บข้อมูลเป็นรูปถ่ายหรือ PDF ควรเก็บข้อมูลทั้งหมดเป็นข้อความหรือตัวเลข นอกจากจะเป็นการทำงานซ้ำซ้อนแล้วยังทำให้เสียข้อมูลอันมีค่าไปอย่างมหาศาล

ข้อมูล ณ วันที 2020–06–12 บ่งบอกว่ามีโครงการถูกนำเสนอมา 33,716 โครงการจาก 38 กระทรวงนับเป็นงบประมาณทั้งหมดประมาณ 8.29 แสนล้านบาท โดยที่กว่า 30,000 โครงการมาจากกระทรวงมหาดไทย

แต่นั่นไม่ได้หมายความว่างบประมาณ 90% จะถูกแบ่งไปให้กระทรวงมหาดไทยแต่อย่างใด จะเห็นได้ว่ามี 3 กระทรวงที่ได้งบมากกว่ากระทรวงอื่นๆอย่างมีนัยยะสำคัญนั่นคือมหาดไทย (28%), สำนักนายกรัฐมนตรี (24%) และเกษตรและสหกรณ์ (20%)

เหตุที่สำนักนายกรัฐมนตรีได้งบประมาณถึง 1.96 แสนล้านบาทนั้นเนื่องจากมี 1 แสนล้านบาทสำหรับ “โครงการพลิกฟื้นธุรกิจ SME ที่เป็น NPL ให้กลับมาดำเนินธุรกิจได้” อันเป็นโครงการที่ได้รับงบประมาณมากที่สุดจากทุกโครงการนั่นเอง

โครงการที่ได้รับงบประมาณมากที่สุด 10 อันดับแรก

โครงการส่วนใหญ่มีงบประมาณอยู่ในช่วง 6–7 หลักโดยมี “โครงการพลิกฟื้นธุรกิจ SMEฯ” เป็นเพียงโครงการเดียวที่แตะหลัก 1 แสนล้าน ส่วนโครงการ 4 หลักโครงการเดียวที่ถูกเสนอมาคือ “โครงการขุดสระเก็บน้ำบ้านหมอแปง หมู่ที่ 4 ขุดดินด้วยเครื่องจักร กว้าง 6 .00 ม. ยาว 6.00 ม. ลึกเฉลี่ย 2.00 ม. หรือปริมาณดินขุดไม่น้อยกว่า 136 ลบ.ม.” ด้วยงบประมาณ 8,700 บาท

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

เรานำชื่อโครงการทั้งหมดกว่าสามหมื่นโครงการมาวิเคราะห์ดูว่าคำไหนปรากฎออกมาเยอะที่สุด ผลลัพธ์ไม่เกินความคาดหมายคือที่เกี่ยวกับ “การก่อสร้าง” และ “ถนน” ซึ่งเป็นโครงการของกระทรวงมหาดไทยแชมป์มากโครงการนั่นเอง

หากมองจากความถี่ของคำด้านบนเราอาจสรุปได้ว่าโครงการ “การก่อสร้าง” และ “ถนน” น่าจะได้รับงบประมาณอย่างล้นหลาม แต่ความเป็นจริงคืออะไร

เราจะเห็นได้ว่าแม้โครงการ “ก่อสร้าง” และ “ถนน” จะนับเป็นจำนวนเกือบครึ่งหนึ่งของโครงการทั้งหมด แต่งบประมาณที่จัดสรรไปเป็นเพียงประมาณเกือบ 10% ของงบประมาณทั้งหมดเท่านั้น

นี่เป็นเพียงจุดเริ่มต้นเท่านั้น คุณยังสามารถหาสิ่งน่าสนใจจากชุดข้อมูลนี้ได้อีกมากมาย เช่น

ท้องฟ้าเท่านั้นคือขีดจำกัด แล้วจะรออะไรอยู่ล่ะ ไปดาวน์โหลด csv ที่ทำความสะอาดมาแล้ว(เท่าที่จะทำได้) ได้ที่นี่เลย

Notes for Nerds

Github: https://github.com/pnphannisa/thaimaimee/

I Wish Cognitive Dissonance Were A Fatal Illness

I Wish Cognitive Dissonance Were A Fatal Illness