Tag Archives: วิทย์ม.ต้น

วิทย์ม.ต้น: หัดใช้ Pillow ใน Python เพื่อจัดการภาพ

วันศุกร์ที่ผ่านมาผมแนะนำให้เด็กๆรู้จัก Pillow ซึ่งมีความสามารถในการจัดการรูปภาพและใช้ได้ง่ายๆจาก Python ถ้าติดตั้ง Anaconda Python แบบที่เด็กๆติดตั้งก็จะสามารถเรียกใช้ได้เลย ไม่อย่างนั้นต้องไปโหลดที่ https://python-pillow.org

เด็กๆหัดใช้ Pillow ตามหนังสือ Automate the Boring Stuff with Python บทที่ 17 หัดเปิดภาพ และพิมพ์คำสั่งต่างๆตามหนังสือ

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

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

ส่วนที่เอาภาพหลายๆภาพมาหั่นเป็นชิ้นๆแล้วต่อกันให้ถูกต้องเหมาะที่เป็นอนิเมชั่นหน้าตาแบบนี้ครับ:

ตัวอย่างการเรียกใช้ให้จัดการภาพ 6 ภาพ (1.JPG, 2.JPG, 3.JPG, 4.JPG, 5.JPG, 6.JPG) ให้มารวมกันเป็นภาพเดียว (result3.JPG) ทำแบบนี้ครับ:

สามารถโหลด Jupyter notebook ที่มีโปรแกรมเหล่านี้ได้ที่นี่ครับ

วิทย์ม.ต้น: Cognitive Biases สามอย่าง, เข้าใจการทำงานของภาพยนตร์บนกระดาษ

วันนี้เราก็คุยกันเรื่อง cognitive biases สามอย่างที่เด็กๆไปอ่านในหนังสือ The Art of Thinking Clearly ในสัปดาห์ที่ผ่านมาครับ คราวนี้เรื่อง Liking bias, Endowment effect, และ Coincidence ครับ

Liking bias คือเรามักจะตัดสินใจตามคนที่เราชอบ เช่นถ้าเราชอบเซลส์แมนมาขายของเราก็จะซื้อของจากเขาง่ายขึ้น หรือในทางกลับกันถ้าเราไม่ชอบใครเราก็มักคิดว่าข้อเสนอต่างๆของเขาไม่น่าสนใจ เราควรระวังเวลาตัดสินข้อมูลต่างๆว่าจริงไม่จริง มีประโยชน์ไม่มีประโยชน์ ควรทำหรือไม่ควรทำ โดยอย่ามองว่าใครเป็นคนเสนอข้อมูลเหล่านี้ให้เราครับ หรือถ้าเราจะไปโน้มน้าวให้ใครทำอะไรเราควรทำตัวให้เป็นที่รักที่ชอบครับ

Endowment effect คือเรามักจะยึดติดหรือให้ราคาของที่เราเป็นเจ้าของมากกว่าความเป็นจริง เราควรระวังว่าเรามีความยึดติดอย่างนี้และพยายามตัดสินใจให้มีเหตุผลเมื่อต้องซื้อขายแลกเปลี่ยน

Coincidence คือเรามักจะไม่เข้าใจความน่าจะเป็นที่เหตุการณ์ต่างๆจะเกิดขึ้น ทำให้เราคิดว่าบางเหตุการณ์มีความศักดิ์สิทธิ์หรือเป็นปาฏิหารย์ ยกตัวอย่างเช่นเราอาจพบคนถูกเลขท้ายสองตัวถึง 5 ครั้งในปีเดียว เราก็อาจคิดว่าคนนั้นเขามีวิธีเลือกเลขท้ายสองตัวให้มีโอกาสถูกมากกว่าชาวบ้านทั่วไปมาก (เช่นทำนายฝัน ดูทะเบียนรถคนดัง วันเดือนปีเกิดคนดัง ฯลฯ) แต่ถ้ามีคนหนึ่งล้านคนซื้อฉลากกินแบ่งหนึ่งใบทุกงวดเป็นเวลาหนึ่งปี เราสามารถคาดหมายได้ว่าจะมีคนประมาณ 5 คนที่ถูกเลขท้ายสองตัวถึง 5 ครั้งในปีนั้น (คำนวณด้วย Poisson probability distribution) ถ้าเด็กๆมีโอกาสควรอ่านหนังสือ The Improbability Principle: Why Coincidences, Miracles, and Rare Events Happen Every Day โดย David J. Hand ดูนะครับ

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

ผมให้เด็กๆเล่น สังเกต และทดลองเพื่อให้อธิบายว่ามันทำงานอย่างไร เด็กๆก็อธิบายได้ครับ หลักการก็คือใช้แถบดำบนแผ่นใสบังภาพที่เราไม่ต้องการเห็น ให้เห็นเฉพาะภาพที่มองผ่านแถบใสบนแผ่นใสได้ ถ้าเอาภาพหลายๆอันมาแล้วซอยเป็นคอลัมน์เล็กๆแล้วเลือกคอลัมน์ที่เหมาะสมจากภาพแต่ละอันมาเรียงกันเวลาเอาแผ่นดำทาบลงไปเราก็จะเห็นทีละภาพเท่านั้น เมื่อเลื่อนแผ่นใสเราก็จะเห็นทีละภาพติดต่อกันด้วยความเร็ว แล้วสมองเราก็จะเชื่อมโยงภาพทั้งหมดให้เป็นการเคลื่อนไหว

ผมเอาแบบสำหรับพิมพ์บนกระดาษและบนแผ่นใสมาจากวิดีโอนี้ครับ โดยคุณ brusspup:

มีวิธีทำด้วยโปรแกรมวาดภาพแบบนี้ครับ:

วิทย์ม.ต้น: รู้จัก 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/