จะหาจุดคอขวดได้อย่างไร?

การเขียน R Code อย่างมีประสิทธิภาพ

Colin Gillespie

Jumping Rivers & Newcastle University

การเขียน R Code อย่างมีประสิทธิภาพ

การโปรไฟล์โค้ด

แนวคิดหลักคือ:

  • รันโค้ด
  • ทุกๆ สองสามมิลลิวินาที บันทึกว่ากำลังประมวลผลส่วนใดอยู่
  • Rprof() มาพร้อมกับ R และทำงานแบบนี้โดยตรง
    • ใช้งานค่อนข้างยุ่งยาก
  • ใช้ profvis แทน
การเขียน R Code อย่างมีประสิทธิภาพ

ชุดข้อมูล IMDB

  • จากแพ็กเกจ ggplot2movies
data(movies, package = "ggplot2movies")
dim(movies)
58788    24
  • Data frame: ประมาณ 60,000 แถว และ 24 คอลัมน์
  • แต่ละแถวแทนภาพยนตร์หนึ่งเรื่อง
การเขียน R Code อย่างมีประสิทธิภาพ

Braveheart

braveheart = movies[7288,]
Year Length Rating
1995 177 8.3

การเขียน R Code อย่างมีประสิทธิภาพ

ตัวอย่าง: Braveheart

# Load data
data(movies,
     package = "ggplot2movies")
braveheart <- movies[7288,]
movies <- movies[movies$Action==1,]

plot(movies$year, movies$rating, xlab = "Year", ylab = "Rating")
# local regression line model <- loess(rating ~ year, data = movies) j <- order(movies$year) lines(movies$year[j], model$fitted[j], col = "forestgreen")
points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue")

การเขียน R Code อย่างมีประสิทธิภาพ

Profvis

  • RStudio รองรับการโปรไฟล์ด้วย profvis ในตัว
    • เลือกโค้ดที่ต้องการโปรไฟล์
    • Profile -> Profile Selected lines

การเขียน R Code อย่างมีประสิทธิภาพ

Command line

library("profvis")

profvis({
data(movies, package = "ggplot2movies") # Load data braveheart <- movies[7288,] movies <- movies[movies$Action == 1,] plot(movies$year, movies$rating, xlab = "Year", ylab="Rating") model <- loess(rating ~ year, data = movies) # loess regression line j <- order(movies$year) lines(movies$year[j], model$fitted[j], col="forestgreen", lwd=2) points(braveheart$year, braveheart$rating, pch = 21, bg = "steelblue", cex = 3)
})

คิดว่าบรรทัดใดจะทำงานช้าที่สุด?

การเขียน R Code อย่างมีประสิทธิภาพ

การเขียน R Code อย่างมีประสิทธิภาพ

การเขียน R Code อย่างมีประสิทธิภาพ

มาฝึกกันเถอะ!

การเขียน R Code อย่างมีประสิทธิภาพ

Preparing Video For Download...