ตอบ: วิธีใช้แพ็คเกจ microbenchmark เพื่อวัดเวลาดำเนินการ


คุณสามารถใช้แพ็คเกจ microbenchmark ใน R เพื่อเปรียบเทียบเวลาดำเนินการของนิพจน์ต่างๆ

คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อทำสิ่งนี้:

 library (microbenchmark)

#compare execution time of two different expressions
microbenchmark(
  expression1,
  expression2)
)

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ

ตัวอย่าง: การใช้ microbenchmark() ใน R

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับคะแนนที่ทำได้โดยผู้เล่นในทีมบาสเก็ตบอลต่างๆ:

 #make this example reproducible
set. seed ( 1 )

#create data frame
df <- data. frame (team=rep(c(' A ', ' B '), each= 500 ),
                 points=rnorm( 1000 , mean= 20 ))

#view data frame
head(df)

  team points
1 A 19.37355
2 A 20.18364
3 A 19.16437
4 A 21.59528
5 A 20.32951
6 A 19.17953

ตอนนี้ สมมติว่าเราต้องการคำนวณคะแนนเฉลี่ยที่ผู้เล่นในแต่ละทีมทำได้โดยใช้สองวิธีที่แตกต่างกัน:

  • วิธีที่ 1 : ใช้ Aggregate() จาก Base R
  • วิธีที่ 2 : ใช้ group_by() และ summarise_at() จาก dplyr

เราสามารถใช้ฟังก์ชัน microbenchmark() เพื่อวัดเวลาที่ใช้ในการดำเนินการแต่ละนิพจน์เหล่านี้:

 library (microbenchmark)
library (dplyr)

#time how long it takes to calculate mean value of points by team
microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

Unit: milliseconds
                                                                    express
                         aggregate(df$points, list(df$team), FUN = mean)
 df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
      min lq mean median uq max neval cld
 1.307908 1.524078 1.852167 1.743568 2.093813 4.67408 100 a 
 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928 100 b

ฟังก์ชัน microbenchmark() รันแต่ละนิพจน์ 100 ครั้งและวัดค่าเมตริกต่อไปนี้:

  • min : เวลาขั้นต่ำที่จำเป็นสำหรับการดำเนินการ
  • lq : ควอร์ไทล์ด้านล่าง (เปอร์เซ็นไทล์ที่ 25) ของเวลาที่ต้องใช้เพื่อทำให้เสร็จสมบูรณ์
  • ค่าเฉลี่ย : เวลาเฉลี่ยที่จำเป็นสำหรับการดำเนินการ
  • ค่ามัธยฐาน : เวลาดำเนินการค่ามัธยฐาน
  • uq : ควอไทล์บน (เปอร์เซ็นไทล์ที่ 75) ของเวลาที่ต้องใช้ในการดำเนินการ
  • max : เวลาสูงสุดที่จำเป็นสำหรับการดำเนินการ
  • neval : จำนวนครั้งที่แต่ละนิพจน์ได้รับการประเมิน

โดยทั่วไป เราจะดูเฉพาะเวลาเฉลี่ยหรือค่ามัธยฐานที่ใช้ในการดำเนินการแต่ละนิพจน์เท่านั้น

จากผลลัพธ์เราจะเห็นได้ว่า:

  • ใช้เวลาเฉลี่ย 1,852 มิลลิวินาที ในการคำนวณคะแนนเฉลี่ยของทีมโดยใช้วิธี R-based
  • ใช้เวลาเฉลี่ย 9.946 มิลลิวินาที ในการคำนวณคะแนนเฉลี่ยต่อทีมโดยใช้วิธี dplyr

จากผลลัพธ์เหล่านี้ เราสรุปได้ว่าวิธีฐาน R เร็วกว่ามาก

นอกจากนี้เรายังสามารถใช้ฟังก์ชัน boxplot() เพื่อแสดงภาพการกระจายเวลาที่จำเป็นในการดำเนินการแต่ละนิพจน์:

 library (microbenchmark)
library (dplyr)

#time how long it takes to calculate mean value of points by team
results <- microbenchmark(
  aggregate(df$points, list(df$team), FUN=mean),
  df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean))
)

#create boxplot to visualize results
boxplot(results, names=c(' Base R ', ' dplyr '))

Boxplot ของแพ็คเกจ microbenchmark ให้ R

จากแผนภาพกล่อง เราจะเห็นว่าวิธี dplyr ใช้เวลาโดยเฉลี่ยนานกว่าในการคำนวณค่าคะแนนเฉลี่ยต่อทีม

หมายเหตุ : ในตัวอย่างนี้ เราใช้ฟังก์ชัน microbenchmark() เพื่อเปรียบเทียบเวลาดำเนินการของนิพจน์สองรายการที่แตกต่างกัน แต่คุณสามารถเปรียบเทียบนิพจน์ได้มากเท่าที่คุณต้องการในทางปฏิบัติ

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:

วิธีล้างสภาพแวดล้อมใน R
วิธีล้างแปลงทั้งหมดใน RStudio
วิธีโหลดหลายแพ็คเกจใน R

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *