Category Archives: computer

วิทย์ม.ต้น: รู้จัก Simulation (การจำลองสถานการณ์ด้วยคอมพิวเตอร์) เพื่อตอบคำถามที่สนใจ

วันนี้เด็กๆม.ต้นรู้จักการพยายามตอบคำถามที่น่าสนใจแต่หาคำตอบตรงๆไม่เป็น จึงพยายามหาคำตอบด้วย simulation หรือการจำลองสถานการณ์ด้วยคอมพิวเตอร์ครับ

สมมุติว่ามีคนสองคนชื่อ A และ B มาเล่นเกมกัน แต่ละคนจะเลือกหัว (H) หรือก้อย (T) เรียงกันสามตัว เช่น A อาจเลือกก้อยหัวหัว (THH) และ B อาจเลือกหัวหัวหัว (HHH) จากนั้นผู้เล่นก็โยนเหรียญไปเรื่อยๆจนแบบที่เหรียญออกสามครั้งสุดท้ายตรงกับแบบที่ A หรือ B เลือกไว้ ถ้าตรงกับคนไหนคนนั้นก็ชนะ เช่นถ้าโยนเหรียญไปเรื่อยๆแล้วออก HHTHTTTHH จะพบว่าในการโยนแปดครั้งแรกยังไม่ตรงกับ THH หรือ HHH สักที แต่พอโยนครั้งที่ 9 ออก H ทำให้สามครั้งสุดท้ายเป็น THH ซึ่งตรงกับ A เลือกไว้ ในกรณีนี้ A ก็ชนะ

คำถามคือในกรณีเหล่านี้ใครจะมีโอกาสชนะมากกว่ากัน เป็นอัตราส่วนเท่าไร

  1. A เลือก THH, B เลือก HHT
  2. A เลือก HTT, B เลือก HHT

จริงๆเกมนี้เรียกว่า Penney’s Game และสามารถคำนวณด้วยวิธีความน่าจะเป็นได้ แต่ถ้าเราไม่รู้ว่าจะคำนวณอย่างไร เราสามารถจำลองการเล่นเกมนี้หลายๆครั้งแล้วนับจำนวนครั้งที่แต่ละคนชนะก็ได้

หน้าตาฟังก์ชั่นโยนเหรียญไปเรื่อยๆจนมีคนชนะจะเป็นประมาณนี้ครับ:

เราสามารถทดลองเอาคู่แข่งขันมาแข่งซ้ำๆกันหลายๆครั้งเพื่อดูอัตราส่วนการแพ้ชนะได้แบบนี้ครับ:

เราสามารถจับคู่แข่งขันที่เป็นไปได้ทั้งหมดมาแข่งกันแล้วดูอัตราส่วนการแพ้ชนะแบบนี้ก็ได้ครับ:

สามารถดาวน์โหลด Jupyter Notebook ที่มีตัวอย่างโค้ดได้ที่นี่ครับ

วิทย์ม.ต้น: ใช้ Pillow ใน Python รวมภาพเข้าด้วยกัน

วันศุกร์ที่ผ่านมาเด็กๆหัดใช้ Pillow กันต่อครับ (ต่อจากศุกร์ที่แล้ว) คราวนี้โจทย์คือต่อภาพสองภาพเข้าด้วยกันโดยสามารถกำหนดความสูงหรือความกว้างภาพผลลัพธ์ได้ เด็กๆก็ศึกษาวิธีทำจาก https://automatetheboringstuff.com/chapter17/ และ https://pillow.readthedocs.io/en/stable/handbook/index.html และค่อยๆเขียนโปรแกรมไปครับ

หน้าตาของตัวโปรแกรมจะเป็นประมาณนี้ครับ:

สามารถดาวน์โหลด Jupyter Notebook ที่มีตัวอย่างโค้ดทั้งหมดที่นี่นะครับ

วิทย์ม.ต้น: รู้จัก Dictionary ใน Python, รู้จักใช้ pandas ดูดตารางข้อมูลบนเว็บ

วันนี้เด็กๆมัธยมต้นเรียนรู้เรื่อง dictionary ซื่งใช้เก็บข้อมูลแบบเป็น key/value และเราสามารถใช้ key ไปหา value ได้ เด็กๆเข้าไปอ่านและทดลองเขียนโค้ดที่ https://snakify.org/en/lessons/dictionaries_dicts/

จากนั้นเด็กๆก็ได้เห็นตัวอย่างการใช้ pandas ซึ่งเป็นเครื่องมือจัดการข้อมูลต่างๆได้ง่ายๆใน Python โดยวันนี้เด็กๆได้รู้จักใช้ pandas ดูดข้อมูลที่เป็นตารางบนเว็บต่างๆมาใช้งาน ยกตัวอย่างเช่นถ้าจะหาเมืองหลวงของประเทศต่างๆในโลกก็สามารถไปดึงข้อมูลมาจากวิกิพีเดียหน้านี้:

จากหน้า https://en.wikipedia.org/wiki/List_of_national_capitals

จะเห็นว่ามีตารางเมืองหลวงและประเทศต่างๆอยู่ เราสามารถเรียกใช้ pandas เอาข้อมูลในตารางมาแบบนี้

ตัวแปร tables จะเป็นลิสต์ที่เก็บข้อมูลตารางทั้งหลายในหน้า https://en.wikipedia.org/wiki/List_of_national_capitals ที่เราดูดมา เราสามารถดูว่าได้มากี่ตารางและดูเนื้อหาของตารางแต่ละอันด้วยคำสั่งพวก len(tables) และดู tables[0], tables[1], … เพื่อเลือกตารางที่เราต้องการ ในกรณีนี้ตารางรายชื่อเมืองหลวงอยู่ที่ tables[1] เราสามารถเรียกใช้ข้อมูลหรือบันทึกเก็บเป็นไฟล์ไว้ที่เครื่องเราก็ได้ เช่นถ้าเราต้องการบันทึกเป็นไฟล์ของ Excel เราก็สามารถใช้คำสั่ง to_excel( ) แบบนี้ก็ได้:

เราจะได้ไฟล์ capitals.xls ที่มีข้อมูลเมืองหลวงไว้ใช้ได้ เปิดขึ้นมาหน้าตาแบบนี้ครับ:


ผมแนะนำให้เด็กๆไปเรียนรู้เกี่ยวกับ pandas เพิ่มเติมที่สองลิงก์นี้ครับ:

Quick Tip: The easiest way to grab data out of a web page in Python: https://medium.com/…/quick-tip-the-easiest-way-to-grab-data…

Easier data analysis in Python with pandas (video series): https://www.dataschool.io/easier-data-analysis-with-pandas/