นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 971
ความเห็น: 2

ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: เรื่องเล่าจาก research club - ๔ [C]

เรื่องเล่าจาก research club ตอนที่ ๔: pyramid.plot จาก package plotrix ถึงกับอืดเมื่อนำมาใช้กับประชากรขนาดใหญ่

มาดูกันนะครับว่าขั้นตอนไหนที่ทำให้เมื่อใช้ฟังก์ชัน pyramid.plot() จาก package plotrix แล้วใช้เวลาค่อนข้างนานเมื่อข้อมูลประชากรที่นำมาสร้างปิรามิดประชากรมีขนาดใหญ่

 

จากข้อมูลที่ใช้เป็นข้อมูลประชากรของประเทศไทยปี ๒๕๕๕ ซึ่งมีประมาณ ๖๔ ล้านคน เมื่อ pyramid.plot() เจอกับข้อมูลนี้เข้าถึงกับอืดเป็นหอยทากไปเลยครับ เมื่อเทียบกับการมร้างปิรามิดประชากรด้วยฟังก์ชัน pyramid() ของ epicalc เมื่อใช้ข้อมูลเดียวกัน

 

หลังจากที่คิดอยู่นานว่าอะไรเป็นสาเหตุที่ทำให้ฟังก์ชัน pyramid.plot() ทำงานช้ามาก และได้ปิรามิดออกมาไม่ได้ตามที่ต้องการ

 

ก็ไปหาเจอว่ามีคนแนะนำให้ลอง debug ฟังก์ชันดู อาจจะเจอว่า step ไหนของฟังก์ชันที่ทำให้การทำงานของฟังก์ชันช้าลงไปเมื่อเจอกับข้อมูลขนาดใหญ่

 

ผมลองใช้ฟังก์ชัน pyramid.plot() กับข้อมูลที่มีประชากรทั้งหมดประมาณ ๒๐๐ คน พบว่าทำงานได้รวดเร็วไม่แพ้ฟังก์ชัน pyramid() ของ epicalc

 

ผมมีวิดีโอตอน debug ฟังก์ชันทั้ง pyramid.plot() และ pyramid() ให้ดูกันครับ

 

debug ก็คือการทำให้ "แมลง" หมดไป เพราะแมลงชอบมากัด แทะ ให้สิ่งของเสียหาย

 

ส่วนใหญ่แล้ว debug จะใช้กับเรื่องการเขียนโปรแกรมคอมพิวเตอร์ครับ โปรแกมที่มี bug หมายถึงโปรแกรมที่มีข้อบกพร่อง ซึ่งอาจจะทำให้เครื่องคอมพิวเตอร์เกิดอาการแฮงค์ค้าง หรือไม่ให้ผลลัพธ์ตามที่ต้องการ เมื่อเจอกับเงื่อนไขหนึ่ง หรือ ...

 

ดังนั้นก็เลยต้องทำการกำจัด bug เหล่านี้ออกไป

 

ใน R ใช้ฟังก์ชัน debug() ครับ

ขั้นตอนก็คือแจ้ง R ก่อนว่าต่อไปนี้จะ debug ฟังก์ชันอะไร แล้วตามด้วยบรรทัดคำสั่งของฟังก์ชันนั้น ๆ

 

เช่นหากเราต้องการ debug ฟังก์ชัน pyramid.plot() ขั้นตอนก็จะเป็น

 

> debug(pyramid.plot)
> pyramid.plot(thpop55$male, thpop55$female, labels=thpop55$agegroup, unit="Freq", top.labels=c("Male", "Age group", "Female"))

 

R ก็จะไล่ step การทำงานของฟังก์ชันทีละ step ให้เรา โดยเมื่อทำงานเสร็จในแต่ละ step ของการทำงานจะรอให้ผู้ใช้กด enter เพื่อทำงานใน step ถัดไป

 

จุดประสงค์ของเราตอนนี้เราต้องการหาว่าทำไมฟังก์ชัน pyramid.plot() ทำงานช้าเมื่อเจอข้อมูลขนาดใหญ่ เราก็ดูว่ามี step ไหนของการทำงานที่ช้าบ้าง ก็น่าจะเป็น step การทำงานนั้นที่ทำให้ฟังก์ชันนั้นทำงานช้า

 

มาดูวิดีโอกันนะครับ

 

> debug(pyramid.plot)
> pyramid.plot(thpop55$male, thpop55$female, labels=thpop55$agegroup, unit="Freq", top.labels=c("Male", "Age group", "Female"))

 

 

 

เมื่อเทียบกับการทำงานของ pyarmid() จาก epicalc

 

> debug(pyramid)
> pyramid(inputTable=poptable1, col.gender=c("red","purple"), percent="each")

 

 

 

เราค่อยมาดูกันว่า ที่ช้ามันตรง step ไหนในบันทึกหน้านะครับ

 

step ที่ช้านั้นเป็นการทำงานอะไร

 

อิอิอิ

 

เราเอง

 

เพลง: Take Me To Your Heart
ศิลปิน: MLTR & Shin Hye-sung

 

 

หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 04 กรกฎาคม 2557 11:40 แก้ไข: 28 เมษายน 2563 17:29 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 ServiceMan, Ico24 คนธรรมดา, และ 3 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

เพลงนี้ เป็นเพลงที่ใช้ตอนหัดภาษาอังกฤษครับ ชอบๆ

 

เอิ้ก เอิ้ก

 

"ใจสั่งมา"

สมัยหนึ่งเพลงนี้ดังมากครับ

ยิ่งเปิด volume เยอะ ก็ยิ่งดังครับ

อิอิอิ

เราเอง

คุณต้องทำการเข้าระบบก่อนแสดงความเห็น